修改thirdparty中停车平台代码位置

This commit is contained in:
Guoqs
2025-02-10 14:26:32 +08:00
parent 679cca6b98
commit 5e66ca653d
10 changed files with 33 additions and 34 deletions

View File

@@ -0,0 +1,48 @@
package com.jsowell.thirdparty.parking.common;
import lombok.Data;
/**
* 路通云停道闸系统 通用参数
*
* @author Lemon
* @Date 2023/8/21 9:26
*/
@Data
public class LTYTCommonParams {
/**
* 应用标识 Y
* 一个 AppId 对应唯一的 SecretKey,用来生成签名信息
*/
private String appId;
/**
* 放行标志 Y
* 登入获取
*/
private String token;
/**
* 请求时间 Y
* 格式YYYYMMDDHHMMSS
*/
private String accTime;
/**
* 版本 Y
* 例1.0
*/
private String version;
/**
* 请求条件 N
* 查询条件
*/
private String data;
/**
* 城市编码 N
* 用于标记来源的城市平台
*/
private String cityCode;
}

View File

@@ -0,0 +1,22 @@
package com.jsowell.thirdparty.parking.common;
import lombok.Data;
/**
* 路通云停
*
* @author Lemon
* @Date 2023/8/21 9:52
*/
@Data
public class LTYTCommonResult {
/**
* 错误编码
*/
private String code;
/**
* 错误描述
*/
private String msg;
}

View File

@@ -0,0 +1,29 @@
package com.jsowell.thirdparty.parking.service;
import com.jsowell.pile.dto.lutongyunting.BindCouponDTO;
import com.jsowell.pile.dto.lutongyunting.GetTokenDTO;
import java.io.UnsupportedEncodingException;
/**
* 路通云停 Service
*
* @author Lemon
* @Date 2023/8/23 11:07
*/
public interface LTYTService {
/**
* 获取平台令牌
* @param dto
* @return
*/
String getToken(GetTokenDTO dto);
/**
* 给指定车辆绑定优惠券
* @param dto
* @return
*/
String bindCoupon(BindCouponDTO dto) throws UnsupportedEncodingException;
}

View File

@@ -0,0 +1,19 @@
package com.jsowell.thirdparty.parking.service;
import com.jsowell.pile.dto.ruanjie.UseCouponDTO;
/**
* 软杰Service
*
* @author Lemon
* @Date 2023/9/22 8:41
*/
public interface RJService {
/**
* 软杰--使用优惠券
* @param dto
* @return
*/
public String useCoupon(UseCouponDTO dto);
}

View File

@@ -0,0 +1,188 @@
package com.jsowell.thirdparty.parking.service.impl;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.sign.MD5Util;
import com.jsowell.pile.domain.CarCouponRecord;
import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.dto.lutongyunting.BindCouponDTO;
import com.jsowell.pile.dto.lutongyunting.GetTokenDTO;
import com.jsowell.pile.service.CarCouponRecordService;
import com.jsowell.thirdparty.parking.service.LTYTService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* TODO
*
* @author Lemon
* @Date 2023/8/23 11:19
*/
@Service
public class LTYTServiceImpl implements LTYTService {
@Autowired
private RedisCache redisCache;
@Autowired
private CarCouponRecordService carCouponRecordService;
// private static final String APP_ID = "I2qa3hdr116100dc"; // I2qa3hdr116100dc I2qa3jfnd96f267c
// private static final String SECRET_KEY = "2qa3hdr13754a8e"; // 2qa3hdr13754a8e 2qa3jfndb37926d
private static final String BASE_URL = "https://entry-openapi.sn6.co/api/";
private static final Logger log = LoggerFactory.getLogger(LTYTServiceImpl.class);
/**
* 路通云停系统获取令牌
* @param dto
* @return
*/
@Override
public String getToken(GetTokenDTO dto) {
// 检查缓存中是否有token
String key = CacheConstants.LTYT_TOKEN_BY_APPID + dto.getAppId();
String token = redisCache.getCacheObject(key);
if (StringUtils.isNotBlank(token)) {
return token;
}
// String appId = "I2qa3hdr116100dc";
String accTime = DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMSS);
String url = BASE_URL + "getApiToken";
// 封装参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("appId", dto.getAppId());
jsonObject.put("accTime", accTime);
jsonObject.put("version", "1.0");
// 获取sign签名
String sign = getSign(jsonObject, dto.getSecretKey());
jsonObject.put("sign", sign);
// 发送请求
String result = HttpUtil.post(url, JSON.toJSONString(jsonObject));
log.info("路通云停系统获取令牌 result:{}", result);
JSONObject resultJson = JSONObject.parseObject(result);
Integer code = resultJson.getInteger("code");
if (code == 200) {
token = resultJson.getJSONObject("data").getString("token");
Integer expiredTime = resultJson.getJSONObject("data").getInteger("expiry");
// 存入缓存
redisCache.setCacheObject(key, token, expiredTime, TimeUnit.HOURS);
return redisCache.getCacheObject(key);
}else {
return null;
}
}
/**
* 给指定车辆绑定优惠券
* @param dto
* @return
*/
@Override
public String bindCoupon(BindCouponDTO dto) throws UnsupportedEncodingException {
OrderBasicInfo orderBasicInfo = dto.getOrderBasicInfo();
// 获取令牌
GetTokenDTO tokenDTO = new GetTokenDTO();
tokenDTO.setAppId(dto.getAppId());
tokenDTO.setSecretKey(dto.getSecretKey());
String token = getToken(tokenDTO);
if (StringUtils.isBlank(token)) {
throw new BusinessException("", "路通云停系统 给指定车辆绑定优惠券 方法获取令牌失败");
}
String url = BASE_URL + "bindCoupon";
JSONObject jsonObject = new JSONObject();
// 公共参数
jsonObject.put("appId", dto.getAppId());
jsonObject.put("token", token);
jsonObject.put("accTime", DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMSS));
jsonObject.put("version", "1.0");
// 业务参数
jsonObject.put("merchantId", dto.getMerchantId());
jsonObject.put("couponId", dto.getCouponId());
jsonObject.put("plateNumber", dto.getPlateNumber());
jsonObject.put("plateColor", dto.getPlateColor());
String encodeData = URLEncoder.encode(JSON.toJSONString(jsonObject), "UTF-8");
jsonObject.put("data", encodeData);
// 发送请求
String result = HttpUtil.post(url, JSON.toJSONString(jsonObject));
log.info("给指定车辆绑定优惠券 params:{}, result:{}", JSON.toJSONString(jsonObject), result);
JSONObject resultJson = JSONObject.parseObject(result);
String msg = resultJson.getString("msg");
// 将下发优惠券信息存入表
CarCouponRecord carCouponRecord = new CarCouponRecord();
carCouponRecord.setOrderCode(orderBasicInfo.getOrderCode());
carCouponRecord.setReturnCode(String.valueOf(resultJson.get("code")));
carCouponRecord.setReturnMsg(msg);
carCouponRecord.setPlateNumber(dto.getPlateNumber());
carCouponRecord.setStationId(Long.parseLong(orderBasicInfo.getStationId()));
carCouponRecordService.insertCarCouponRecord(carCouponRecord);
return msg;
}
public static void main(String[] args) throws UnsupportedEncodingException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("merchantId", "merchantId");
jsonObject.put("couponId", "couponId");
jsonObject.put("plateNumber", "plateNumber");
jsonObject.put("plateColor", 2);
String encodeData = URLEncoder.encode(JSON.toJSONString(jsonObject), "UTF-8");
System.out.println(encodeData);
// String accTime = DateUtils.dateTimeNow(DateUtils.YYYYMMDDHHMMSS);
// Map<String, Object> map = new LinkedMap<>();
// map.put("appId", "appId");
// map.put("accTime", accTime);
// map.put("version", "version");
// System.out.println(map);
// // 排序
// TreeMap<String, Object> params = new TreeMap<String, Object>(map);
//
// StringBuilder sb = new StringBuilder();
// for (String key : params.keySet()) {
// sb.append(key).append("=").append(params.get(key)).append("&");
// }
// sb.deleteCharAt(sb.length() - 1);
//
// String dataStr = sb + "secretKey";
// String sign = MD5Util.MD5Encode(dataStr).toLowerCase(Locale.ROOT);
// System.out.println(sign);
}
private static String getSign(JSONObject jsonObject, String secretKey) {
// String secretKey = "";
TreeMap<String, Object> params = new TreeMap<>(jsonObject);
StringBuilder sb = new StringBuilder();
for (String key : params.keySet()) {
sb.append(key).append("=").append(params.get(key)).append("&");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(secretKey);
return MD5Util.MD5Encode(sb.toString()).toLowerCase(Locale.ROOT);
}
}

View File

@@ -0,0 +1,78 @@
package com.jsowell.thirdparty.parking.service.impl;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.jsowell.common.util.sign.MD5Util;
import com.jsowell.pile.dto.ruanjie.UseCouponDTO;
import com.jsowell.thirdparty.parking.service.impl.LTYTServiceImpl;
import com.jsowell.thirdparty.parking.service.RJService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.Locale;
import java.util.TreeMap;
/**
* 软杰停车道闸系统Service
*
* @author Lemon
* @Date 2023/9/22 8:46
*/
@Service
public class RJServiceImpl implements RJService {
private static final Logger log = LoggerFactory.getLogger(LTYTServiceImpl.class);
private static final String BASE_URL = "https://redpay.ruanjiesh.com/ThirdAPI";
private static final String SECRET_KEY = "ced9ar3ingZ";
private static final String FCUST_NO = "390099";
/**
* 软杰--使用优惠券
* @param dto
* @return
*/
@Override
public String useCoupon(UseCouponDTO dto) {
String url = BASE_URL + "/api/Coupon/UseCoupon";
JSONObject jsonObject = new JSONObject();
jsonObject.put("fCustID", 0);
jsonObject.put("fCustNo", FCUST_NO);
jsonObject.put("fBusID", 0);
jsonObject.put("fInTime", 0);
jsonObject.put("fPlateCode", dto.getFPlateCode());
jsonObject.put("fCouponType", dto.getFCouponType());
jsonObject.put("fCouponValue", dto.getFCouponValue());
jsonObject.put("fCouponCode", dto.getFCouponCode());
jsonObject.put("fStatus", "1"); // 1-有效
// 获取sign
String sign = getSign(jsonObject, SECRET_KEY);
jsonObject.put("sign", sign);
// 发送post请求
log.info("软杰--使用优惠券 params:{}, url:{}", JSON.toJSONString(jsonObject), url);
String result = HttpUtil.post(url, JSON.toJSONString(jsonObject));
log.info("软杰--使用优惠券 result:{}", result);
JSONObject resultJson = JSONObject.parseObject(result);
return resultJson.getString("return_msg");
}
private static String getSign(JSONObject jsonObject, String secretKey) {
// String secretKey = "";
TreeMap<String, Object> params = new TreeMap<>(jsonObject);
StringBuilder sb = new StringBuilder();
for (String key : params.keySet()) {
sb.append(key).append("=").append(params.get(key)).append("&");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("&key=").append(secretKey);
return MD5Util.MD5Encode(sb.toString()).toLowerCase(Locale.ROOT);
}
}