|
@@ -0,0 +1,110 @@
|
|
|
|
+package com.zanxiang.sdk.service.Impl;
|
|
|
|
+
|
|
|
|
+import com.alipay.easysdk.kernel.util.Signer;
|
|
|
|
+import com.zanxiang.common.enums.CpStatusEnum;
|
|
|
|
+import com.zanxiang.common.enums.ResEnum;
|
|
|
|
+import com.zanxiang.mybatis.entity.LogPayCp;
|
|
|
|
+import com.zanxiang.mybatis.entity.Order;
|
|
|
|
+import com.zanxiang.sdk.common.util.HttpUtil;
|
|
|
|
+import com.zanxiang.sdk.common.util.MD5Util;
|
|
|
|
+import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
|
|
|
|
+import com.zanxiang.sdk.service.LogPayCpService;
|
|
|
|
+import com.zanxiang.sdk.service.PerformOrderService;
|
|
|
|
+import com.zanxiang.sdk.service.PlatformOrderService;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.Locale;
|
|
|
|
+import java.util.TreeMap;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 订单履约逻辑
|
|
|
|
+ *
|
|
|
|
+ * @author xufeng
|
|
|
|
+ * @date 2022/6/27 11:17
|
|
|
|
+ */
|
|
|
|
+@Component
|
|
|
|
+@Slf4j
|
|
|
|
+@Service
|
|
|
|
+@Transactional
|
|
|
|
+public class PerformOrderServiceImpl implements PerformOrderService {
|
|
|
|
+ protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private PlatformOrderService platformOrderService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private LogPayCpService logPayCpService;
|
|
|
|
+
|
|
|
|
+ public Boolean pushCp(String orderId) {
|
|
|
|
+ PlatformOrderDTO info = platformOrderService.info(orderId);
|
|
|
|
+ if (info == null) {
|
|
|
|
+ logger.error("orderId:{} 订单不存在", orderId);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ if (info.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ //todo 待完善
|
|
|
|
+ String app_key = "111";
|
|
|
|
+ String cpPaybackUrl = "https://baidu.com";
|
|
|
|
+
|
|
|
|
+ HashMap<String, String> map = new HashMap<>();
|
|
|
|
+ map.put("app_id", info.getGameId());
|
|
|
|
+ map.put("cp_order_id", info.getCpOrderId());
|
|
|
|
+ map.put("mem_id", info.getMgUserId());
|
|
|
|
+ map.put("order_status", String.valueOf(info.getStatus()));
|
|
|
|
+ map.put("pay_time", String.valueOf(info.getPayTime()));
|
|
|
|
+ map.put("product_id", info.getProductId());
|
|
|
|
+ map.put("product_price", String.valueOf(info.getAmount()));
|
|
|
|
+ map.put("ext", info.getExt());
|
|
|
|
+ map.put("app_key", app_key);
|
|
|
|
+ TreeMap<String, String> keySort = new TreeMap<>(map);
|
|
|
|
+ //拼接字符串
|
|
|
|
+ String param = Signer.getSignCheckContent(keySort);
|
|
|
|
+ //拼接app_key
|
|
|
|
+ param += "&app_key=" + app_key;
|
|
|
|
+ //生成sign
|
|
|
|
+ String sign = MD5Util.MD5Encode(param, "UTF-8");
|
|
|
|
+ map.remove("app_key");
|
|
|
|
+ map.put("sign", sign);
|
|
|
|
+ //拼接sign请求
|
|
|
|
+ param += "&sign=" + sign;
|
|
|
|
+ try {
|
|
|
|
+ Integer i = info.getCpNotifyCnt() + 1;
|
|
|
|
+ String s = HttpUtil.postData(cpPaybackUrl, param);
|
|
|
|
+ Boolean pushSuccess = false;
|
|
|
|
+ if (s.trim().toLowerCase(Locale.ROOT).equals(ResEnum.SUCCESS.getMsg())) {
|
|
|
|
+ pushSuccess = true;
|
|
|
|
+ //更新订单状态
|
|
|
|
+ Order order = new Order();
|
|
|
|
+ order.setId(orderId);
|
|
|
|
+ order.setCpNotifyCnt(i);
|
|
|
|
+ order.setLastCpNotifyTime(new Date());
|
|
|
|
+ order.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
|
|
|
|
+ platformOrderService.updateById(order);
|
|
|
|
+ }
|
|
|
|
+ LogPayCp logPayCp = new LogPayCp();
|
|
|
|
+ logPayCp.setOrderId(orderId);
|
|
|
|
+ logPayCp.setCpOrderId(info.getCpOrderId());
|
|
|
|
+ logPayCp.setStatus(info.getStatus());
|
|
|
|
+ logPayCp.setCpStatus(pushSuccess ? CpStatusEnum.SUCCESS.getCode() : CpStatusEnum.FAILLE.getCode());
|
|
|
|
+ logPayCp.setCpPaybackUrl(cpPaybackUrl);
|
|
|
|
+ logPayCp.setParams(param);
|
|
|
|
+ logPayCp.setExt(info.getExt());
|
|
|
|
+ logPayCp.setNotifyCnt(i);
|
|
|
|
+ logPayCpService.save(logPayCp);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ logger.error("订单:{} 通知cp方失败 e:{}", orderId, e);
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+}
|