Browse Source

通联定时器增加处理配件销售逻辑

FengChaoYu 8 months ago
parent
commit
af55cf7f6b

+ 27 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/material/WebsitPartsSalesBean.java

@@ -0,0 +1,27 @@
+package com.gree.mall.miniapp.bean.material;
+
+import com.gree.mall.miniapp.plus.entity.WebsitPartsSales;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class WebsitPartsSalesBean extends WebsitPartsSales {
+
+    @ApiModelProperty(value = "订单配件信息", required = true)
+    private List<WebsitPartsSalesItemBean> itemList;
+
+//    @ApiModelProperty(value = "支付记录列表", required = true)
+//    private List<WebsitSalesPayOrder> payList;
+//
+//    @ApiModelProperty(value = "支付记录列表", required = true)
+//    private List<WebsitSalesPayOrder> allPayList;
+//
+//    @ApiModelProperty(value = "订单明细使用信息", required = true)
+//    private List<OldRefundManageRecordBean> oldRefundManageRecordBeanList;
+}

+ 12 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/material/WebsitPartsSalesItemBean.java

@@ -0,0 +1,12 @@
+package com.gree.mall.miniapp.bean.material;
+
+import com.gree.mall.miniapp.plus.entity.WebsitPartsSalesItem;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class WebsitPartsSalesItemBean extends WebsitPartsSalesItem {
+}

+ 24 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/material/PartsOrderStatusEnum.java

@@ -0,0 +1,24 @@
+package com.gree.mall.miniapp.enums.material;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.miniapp.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+public enum PartsOrderStatusEnum implements BaseEnum {
+    SAVE("SAVE","保存"),
+    SUBMIT("SUBMIT","提交"),
+    PAYED("PAYED","已支付"),
+    END("END","已完成"),
+    CANCEL("CANCEL","已取消"),
+    EXCEPTION("EXCEPTION","订单异常"),;
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+}

+ 22 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/material/PartsPayFlagEnum.java

@@ -0,0 +1,22 @@
+package com.gree.mall.miniapp.enums.material;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.miniapp.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+public enum PartsPayFlagEnum implements BaseEnum {
+    NOT("NOT","未支付"),
+    PAY_NOT_TAKE("PAY_NOT_TAKE","已付未提货"),
+    PAY_TAKE("PAY_TAKE","已付提货"),
+    PAY_NOT_STOCK("PAY_NOT_STOCK","已付缺货");
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+}

+ 85 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/AllInPayLogic.java

@@ -1,18 +1,31 @@
 package com.gree.mall.miniapp.logic.common;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
 import com.gree.mall.miniapp.constant.SybConstants;
+import com.gree.mall.miniapp.enums.IsYesNoEnum;
+import com.gree.mall.miniapp.enums.PayOrderTypeEnum;
+import com.gree.mall.miniapp.enums.material.PartsOrderStatusEnum;
+import com.gree.mall.miniapp.enums.material.PartsPayFlagEnum;
 import com.gree.mall.miniapp.exception.RemoteServiceException;
+import com.gree.mall.miniapp.logic.material.parts.WebsitPartsSalesOrderLogic;
+import com.gree.mall.miniapp.plus.entity.WebsitPartsSales;
+import com.gree.mall.miniapp.plus.entity.WebsitSales;
 import com.gree.mall.miniapp.plus.entity.WebsitSalesPayOrder;
+import com.gree.mall.miniapp.plus.service.WebsitPartsSalesService;
+import com.gree.mall.miniapp.plus.service.WebsitSalesService;
 import com.gree.mall.miniapp.utils.ArithUtils;
+import com.gree.mall.miniapp.utils.DateUtils;
 import com.gree.mall.miniapp.utils.HttpUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -28,7 +41,12 @@ public class AllInPayLogic {
 
     @Resource
     CommonLogic commonLogic;
-
+    @Resource
+    WebsitSalesService websitSalesService;
+    @Resource
+    WebsitPartsSalesService websitPartsSalesService;
+    @Resource
+    WebsitPartsSalesOrderLogic websitPartsSalesOrderLogic;
 
     /**
      * 通联支付
@@ -170,4 +188,70 @@ public class AllInPayLogic {
 //        log.error("通联交易关闭接口执行失败: {}", resMap);
 //        throw new RemoteServiceException("通联交易关闭接口执行失败:" + resMap.get("message"));
 //    }
+
+    @Transactional
+    public void queryAllinpayOrder(WebsitSalesPayOrder order) throws ParseException {
+        Map<String, String> resMap = this.serviceQueryOrder(order);
+        String fintime = resMap.get("fintime"); // 交易完成时间
+        String chnltrxid = resMap.get("chnltrxid"); // 渠道流水号
+        String acct = resMap.get("acct"); // 支付平台用户标识
+        String trxstatus = resMap.get("trxstatus"); // 交易状态
+        String errmsg = resMap.get("errmsg"); // 原因
+
+        switch(trxstatus.trim()) {
+            case "0000":
+                // 支付成功
+                if (order.getOrderId().contains("X") && order.getOrderType().equals(PayOrderTypeEnum.S.getKey())) {
+                    websitSalesService.lambdaUpdate()
+                            .set(WebsitSales::getPayFlag, IsYesNoEnum.YES.getKey())
+                            .set(WebsitSales::getFlag, "PAY_NOT_TAKE")
+                            .set(WebsitSales::getPayTime, DateUtils.parseDate2(fintime))
+                            .set(WebsitSales::getPayNo, chnltrxid)
+                            .eq(WebsitSales::getSalesId, order.getOrderId())
+                            .update();
+                } else if (order.getOrderId().contains("PJ") && order.getOrderType().equals(PayOrderTypeEnum.S.getKey())) {
+                    try {
+                        log.info("执行配件库存处理方法");
+                        websitPartsSalesOrderLogic.handlePaySuccessMethod(order);
+                    } catch (RemoteServiceException rse) {
+                        websitPartsSalesService.lambdaUpdate()
+                                .set(WebsitPartsSales::getPayFlag, PartsPayFlagEnum.PAY_NOT_STOCK.getKey())
+                                .set(WebsitPartsSales::getStatus, PartsOrderStatusEnum.EXCEPTION.getKey())
+                                .set(WebsitPartsSales::getPayTime, DateUtils.parseDate2(fintime))
+                                .set(WebsitPartsSales::getTransactionId, chnltrxid)
+                                .set(WebsitPartsSales::getOpenid, acct)
+                                .set(WebsitPartsSales::getErr, rse.getMessage())
+                                .eq(WebsitPartsSales::getId, order.getOrderId())
+                                .update();
+                        log.info("配件销售单库存处理异常,更新订单:" + rse.getMessage());
+                    } catch (Exception e) {
+                        log.info("配件销售单库存处理异常:" + e.getMessage());
+                    }
+                }
+
+                order.setPayFlag(IsYesNoEnum.YES.getKey())
+                        .setPayTime(DateUtils.parseDate2(fintime))
+                        .setTransactionId(chnltrxid)
+                        .setOpenid(acct)
+                        .setLastStatus(trxstatus)
+                        .setLastMsg(errmsg)
+                        .updateById();
+                break;
+            case "2000":
+                // 交易处理中
+                int count = order.getRunCount() + 1;
+                order.setRunCount(count)
+                        .setRunTime(DateUtil.offsetSecond(DateUtil.date(), count * 5))
+                        .setLastStatus(trxstatus)
+                        .setLastMsg(errmsg)
+                        .updateById();
+                break;
+            default:
+                log.info("未定义交易状态:" + trxstatus);
+                order.setRunCount(50)
+                        .setLastStatus(trxstatus)
+                        .setLastMsg(errmsg)
+                        .updateById();
+        }
+    }
 }

+ 0 - 47
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/WebsitSalesLogic.java

@@ -24,7 +24,6 @@ import com.gree.mall.miniapp.logic.common.CommonLogic;
 import com.gree.mall.miniapp.logic.common.outside.WechatLogic;
 import com.gree.mall.miniapp.plus.entity.*;
 import com.gree.mall.miniapp.plus.service.*;
-import com.gree.mall.miniapp.utils.DateUtils;
 import com.gree.mall.miniapp.utils.IpUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -36,7 +35,6 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.text.ParseException;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -505,51 +503,6 @@ public class WebsitSalesLogic {
         return salesId;
     }
 
-    @Transactional
-    public void queryAllinpayOrder(WebsitSalesPayOrder order) throws ParseException {
-        Map<String, String> resMap = allInPayLogic.serviceQueryOrder(order);
-        String fintime = resMap.get("fintime"); // 交易完成时间
-        String chnltrxid = resMap.get("chnltrxid"); // 渠道流水号
-        String acct = resMap.get("acct"); // 支付平台用户标识
-        String trxstatus = resMap.get("trxstatus"); // 交易状态
-        String errmsg = resMap.get("errmsg"); // 原因
-
-        switch(trxstatus.trim()) {
-            case "0000":
-                // 支付成功
-                websitSalesService.lambdaUpdate()
-                        .set(WebsitSales::getPayFlag, IsYesNoEnum.YES.getKey())
-                        .set(WebsitSales::getFlag, "PAY_NOT_TAKE")
-                        .set(WebsitSales::getPayTime, DateUtils.parseDate2(fintime))
-                        .set(WebsitSales::getPayNo, chnltrxid)
-                        .eq(WebsitSales::getSalesId, order.getOrderId())
-                        .update();
-                order.setPayFlag(IsYesNoEnum.YES.getKey())
-                        .setPayTime(DateUtils.parseDate2(fintime))
-                        .setTransactionId(chnltrxid)
-                        .setOpenid(acct)
-                        .setLastStatus(trxstatus)
-                        .setLastMsg(errmsg)
-                        .updateById();
-                break;
-            case "2000":
-                // 交易处理中
-                int count = order.getRunCount() + 1;
-                order.setRunCount(count)
-                        .setRunTime(DateUtil.offsetSecond(DateUtil.date(), count * 5))
-                        .setLastStatus(trxstatus)
-                        .setLastMsg(errmsg)
-                        .updateById();
-                break;
-            default:
-                log.info("未定义交易状态:" + trxstatus);
-                order.setRunCount(50)
-                        .setLastStatus(trxstatus)
-                        .setLastMsg(errmsg)
-                        .updateById();
-        }
-    }
-
     public List<AdminWebsitPayConfig> getPayConfig(String websitId, String goodsType, HttpServletRequest request) {
         CurrentCompanyWechat wechat = commonLogic.getCurrentCompanyWechat(request);
         return adminWebsitPayConfigService.lambdaQuery()

+ 63 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/parts/WebsitPartsSalesOrderLogic.java

@@ -0,0 +1,63 @@
+package com.gree.mall.miniapp.logic.material.parts;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.gree.mall.miniapp.bean.material.WebsitPartsSalesBean;
+import com.gree.mall.miniapp.bean.material.WebsitPartsSalesItemBean;
+import com.gree.mall.miniapp.enums.material.PartsOrderStatusEnum;
+import com.gree.mall.miniapp.enums.material.PartsPayFlagEnum;
+import com.gree.mall.miniapp.plus.entity.WebsitPartsSales;
+import com.gree.mall.miniapp.plus.entity.WebsitPartsSalesItem;
+import com.gree.mall.miniapp.plus.entity.WebsitSalesPayOrder;
+import com.gree.mall.miniapp.plus.service.WebsitPartsSalesItemService;
+import com.gree.mall.miniapp.plus.service.WebsitPartsSalesService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+@Slf4j
+public class WebsitPartsSalesOrderLogic {
+
+    @Resource
+    WebsitPartsSalesService websitPartsSalesService;
+    @Resource
+    WebsitPartsSalesItemService websitPartsSalesItemService;
+
+    public void handlePaySuccessMethod(WebsitSalesPayOrder order) {
+        // 更新配件销售单状态为已支付
+        WebsitPartsSales partsSalesOrder = websitPartsSalesService.lambdaQuery()
+                .eq(WebsitPartsSales::getId, order.getOrderId())
+                .one();
+
+        log.info("配件销售单状态:" + partsSalesOrder.getStatus());
+        if (PartsOrderStatusEnum.SUBMIT.getKey().equals(partsSalesOrder.getStatus())) {
+            // 销售单状态是提交状态执行
+            partsSalesOrder.setPayType(order.getPayType())
+                    .setPayFlag(PartsPayFlagEnum.PAY_NOT_TAKE.getKey())
+                    .setStatus(PartsOrderStatusEnum.PAYED.getKey())
+                    .setPayTime(order.getPayTime())
+                    .setTransactionId(order.getTransactionId())
+                    .setOpenid(order.getOpenid());
+
+
+            List<WebsitPartsSalesItem> partsSalesOrderItems = websitPartsSalesItemService.lambdaQuery()
+                    .eq(WebsitPartsSalesItem::getSalesId, order.getOrderId())
+                    .list();
+
+            if (!partsSalesOrder.getIsApply()) {
+                WebsitPartsSalesBean partsSalesOrderBean = new WebsitPartsSalesBean();
+                BeanUtils.copyProperties(partsSalesOrder, partsSalesOrderBean);
+                List<WebsitPartsSalesItemBean> partsSalesOrderItemBeanList = BeanUtil.copyToList(partsSalesOrderItems, WebsitPartsSalesItemBean.class);
+
+                partsSalesOrderBean.setItemList(partsSalesOrderItemBeanList);
+// TODO 补充逻辑
+//                this.handleForwardShopAndWorkerStock(partsSalesOrderBean);
+            }
+
+            partsSalesOrder.updateById();
+        }
+    }
+}

+ 3 - 3
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/schedule/AllinpaySchedule.java

@@ -6,7 +6,7 @@ import com.gree.mall.miniapp.constant.Constant;
 import com.gree.mall.miniapp.enums.IsYesNoEnum;
 import com.gree.mall.miniapp.enums.PayTypeEnum;
 import com.gree.mall.miniapp.exception.RemoteServiceException;
-import com.gree.mall.miniapp.logic.material.WebsitSalesLogic;
+import com.gree.mall.miniapp.logic.common.AllInPayLogic;
 import com.gree.mall.miniapp.plus.entity.WebsitSalesPayOrder;
 import com.gree.mall.miniapp.plus.service.WebsitSalesPayOrderService;
 import lombok.extern.slf4j.Slf4j;
@@ -29,7 +29,7 @@ public class AllinpaySchedule {
     @Resource
     WebsitSalesPayOrderService websitSalesPayOrderService;
     @Resource
-    WebsitSalesLogic websitSalesLogic;
+    AllInPayLogic allInPayLogic;
     @Resource
     RedisLockRegistry redisLockRegistry;
 
@@ -48,7 +48,7 @@ public class AllinpaySchedule {
                 Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.QUERY_ALLINPAY_ORDER + order.getOrderId());
                 try {
                     if (obtain.tryLock(5, TimeUnit.SECONDS)) {
-                        websitSalesLogic.queryAllinpayOrder(order);
+                        allInPayLogic.queryAllinpayOrder(order);
                     }
                 } catch (RemoteServiceException e) {
                     log.error("serviceQueryOrder() 查询通联订单出错:" + e.getMessage());

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/worker/PartsRefundRecordDTO.java → mall-server-api/src/main/java/com/gree/mall/manager/bean/material/worker/PartsRefundRecordDTO.java

@@ -1,4 +1,4 @@
-package com.gree.mall.manager.logic.material.worker;
+package com.gree.mall.manager.bean.material.worker;
 
 import cn.hutool.core.date.DateUtil;
 import com.gree.mall.manager.enums.material.PartsRefTypeEnum;

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/worker/SalesItemRecordDTO.java → mall-server-api/src/main/java/com/gree/mall/manager/bean/material/worker/SalesItemRecordDTO.java

@@ -1,4 +1,4 @@
-package com.gree.mall.manager.logic.material.worker;
+package com.gree.mall.manager.bean.material.worker;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WorkerOldRefundManageLogic.java

@@ -22,7 +22,7 @@ import com.gree.mall.manager.enums.material.*;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.logic.material.worker.OldRefundManageInnerLogic;
-import com.gree.mall.manager.logic.material.worker.PartsRefundRecordDTO;
+import com.gree.mall.manager.bean.material.worker.PartsRefundRecordDTO;
 import com.gree.mall.manager.plus.entity.*;
 import com.gree.mall.manager.plus.service.*;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/schedule/NewPartsChangeSalesTask.java → mall-server-api/src/main/java/com/gree/mall/manager/schedule/NewPartsChangeSalesSchedule.java

@@ -35,7 +35,7 @@ import java.util.stream.Collectors;
 
 @Component
 @Slf4j
-public class NewPartsChangeSalesTask {
+public class NewPartsChangeSalesSchedule {
 
     @Value("${spring.profiles.active}")
     private String profiles;