嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-service/src/main/java/com/hai/config/PayloService.java

201 lines
7.1 KiB

package com.hai.config;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.utils.DateUtil;
import com.hai.common.utils.HttpsUtils;
import com.hai.common.utils.MD5Util;
import com.hai.enum_type.TripartiteReqLogReqType;
import com.hai.enum_type.TripartiteReqLogType;
import com.hai.service.BsTripartiteReqLogService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
/**
* 延长壳牌(四川)石油公司 paylo系统
* @className: PayloService
* @author: HuRui
* @date: 2022/12/7
**/
@Component
public class PayloService {
private static final String partnerId = CommonSysConst.getSysConfig().getPayloPartnerId();
private static final String ShellPlatMerchantKey = CommonSysConst.getSysConfig().getPayloShellPlatMerchantKey();
@Resource
private BsTripartiteReqLogService reqLogService;
/**
* 查询全量加油站
* @param pageNum 当前页码
* @param pageSize 每页数据量。最大值50
* @return
*/
public JSONObject ycShellPageQueryAllStation(Integer pageNum, Integer pageSize) throws Exception {
Map<String, Object> param = new HashMap<>();
param.put("pageNo", pageNum);
param.put("pageSize", pageSize);
return request(System.currentTimeMillis()+"","ycShellPageQueryAllStation", param);
}
/**
* 查询单个油站全量信息
* @param stationCode 油站编码
* @return
*/
public JSONObject ycShellStationQueryDetail(String stationCode) {
try {
Map<String, Object> param = new HashMap<>();
param.put("stationCode", stationCode);
return request(System.currentTimeMillis()+"","ycShellStationQueryDetail", param);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 【同步】油站付款
* @param orderNo 订单号
* @param stationCode 油站编码
* @param finishTime 完成时间
* @param oilPrice 加油金额
* @param oilCode 油品编码
* @param oilGun 油枪
* @param settlementAmount 支付金额
* @param channelFavourAmount 优惠金额
* @return
*/
public JSONObject syncYcShellPaymentNotify(String orderNo,
String stationCode,
Date finishTime,
BigDecimal oilPrice,
String oilCode,
String oilGun,
BigDecimal settlementAmount,
BigDecimal channelFavourAmount) {
try {
Map<String, Object> param = new HashMap<>();
param.put("stationCode", stationCode);
param.put("orderType", "OIL");
param.put("finishTime", DateUtil.date2String(finishTime, "yyyy-MM-dd HH:mm:ss"));
param.put("channelFavourAmount", channelFavourAmount);
Map<String, Object> tradeOilOrder = new HashMap<>();
tradeOilOrder.put("amount", oilPrice);
tradeOilOrder.put("code", oilCode);
tradeOilOrder.put("oilGun", oilGun);
tradeOilOrder.put("channelSettlementAmount", settlementAmount);
param.put("tradeOilOrder", JSONObject.toJSONString(tradeOilOrder));
return request(orderNo, "syncYcShellPaymentNotify", param);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 【同步】油站退款
* @param finishTime 业务完成时间
* @param tradeNo 交易流水号
* @return
*/
public JSONObject syncYcShellRefundNotify(Date finishTime,String tradeNo) throws Exception {
Map<String, Object> param = new HashMap<>();
param.put("finishTime", DateUtil.date2String(finishTime, "yyyy-MM-dd HH:mm:ss"));
param.put("tradeNo", tradeNo);
// 请求接口
return request(System.currentTimeMillis()+"" ,"syncYcShellRefundNotify", param);
}
/**
* 接口请求
* @param map
* @return
* @throws Exception
*/
private JSONObject request(String logSerialNo, String service, Map<String,Object> map) throws Exception {
Map<String, Object> param = new HashMap<>();
param.put("merchantOrderNo", logSerialNo);
param.put("partnerId", partnerId);
param.put("service", service);
param.put("version", "1.0.0");
param.put("signType", "MD5");
for (Map.Entry<String, Object> entry : map.entrySet()) {
param.put(entry.getKey(), entry.getValue());
}
param.put("sign", MD5Util.encode(generateSignature(param, ShellPlatMerchantKey).getBytes()).toLowerCase());
// 请求接口
JSONObject object = HttpsUtils.doPost(CommonSysConst.getSysConfig().getShellGroupUrl(), param);
reqLogService.insert(
TripartiteReqLogType.type2,
logSerialNo,
TripartiteReqLogReqType.type1,
CommonSysConst.getSysConfig().getShellGroupUrl(),
this.generateParam(param),
object.toString()
);
if (object == null || !object.getString("status").equals("SUCCESS")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, object == null?"请求失败":object.getString("message"));
}
return object;
}
/**
* 生成签名
* @param data 数据
* @param key 秘钥app_secret
* @return 加密结果
*/
public static String generateSignature(final Map<String, Object> data, String key) {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (data.get(k) != null) {
if (StringUtils.isBlank(sb.toString())) {
sb.append(k).append("=").append(data.get(k));
} else {
sb.append("&").append(k).append("=").append(data.get(k));
}
}
}
sb.append(key);
return sb.toString();
}
/**
* 生成参数
* @param data 数据
* @return 加密结果
*/
public static String generateParam(final Map<String, Object> data) {
Set<String> keySet = data.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (data.get(k) != null) {
if (StringUtils.isBlank(sb.toString())) {
sb.append(k).append("=").append(data.get(k));
} else {
sb.append("&").append(k).append("=").append(data.get(k));
}
}
}
return sb.toString();
}
}