Przeglądaj źródła

网点配件记账

FengChaoYu 7 miesięcy temu
rodzic
commit
795e2d5710

+ 2 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/PayTypeEnum.java

@@ -10,7 +10,8 @@ public enum PayTypeEnum implements BaseEnum {
     ALLINPAY("ALLINPAY","通联支付"),
     TRANSFER("TRANSFER","转账支付"),
     STORE("STORE","到店支付"),
-    LINE("LINE","线下支付");
+    LINE("LINE","线下支付"),
+    CREDIT("CREDIT","记账"),;
 
     PayTypeEnum(String key, String remark) {
         this.key=key;this.remark = remark;

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

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.gree.mall.miniapp.bean.material.parts.OldRefundManageRecordBean;
 import com.gree.mall.miniapp.bean.material.parts.PartsSalesOrderBean;
 import com.gree.mall.miniapp.bean.material.parts.PartsSalesOrderItemBean;
@@ -63,6 +64,8 @@ public class WebsitPartsSalesOrderLogic {
     MaterialMapper materialMapper;
     @Resource
     WebsitSalesPayOrderService websitSalesPayOrderService;
+    @Resource
+    WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public void handlePaySuccessMethod(WebsitSalesPayOrder order) throws Exception {
         // 更新配件销售单状态为已支付
@@ -622,17 +625,43 @@ public class WebsitPartsSalesOrderLogic {
     private void updateSalesItem(PartsSalesOrderBean partsSalesOrderBean) {
         if(CollectionUtil.isNotEmpty(partsSalesOrderBean.getItemList())) {
             List<WebsitPartsSalesItem> itemList = new ArrayList<>();
+            List<WebsitPartsWorkerCreditRecord> recordList = new ArrayList<>();
             for(PartsSalesOrderItemBean itemBean : partsSalesOrderBean.getItemList()) {
                 itemBean.setPushFlag(partsSalesOrderBean.getPushFlag());
                 itemBean.setExamineTime(partsSalesOrderBean.getExamineTime());
                 if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CASH.getKey())) {
                     itemBean.setRefundAmountMode(PayTypeEnum.CASH.getKey());
+                } else if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CREDIT.getKey())) {
+                    itemBean.setRefundAmountMode(PayTypeEnum.CREDIT.getKey());
+
+                    recordList.add(new WebsitPartsWorkerCreditRecord()
+                            .setId("PC" + IdWorker.getIdStr())
+                            .setCompanyWechatId(partsSalesOrderBean.getCompanyWechatId())
+                            .setCompanyWechatName(partsSalesOrderBean.getCompanyWechatName())
+                            .setWebsitId(partsSalesOrderBean.getWebsitId())
+                            .setWebsitName(partsSalesOrderBean.getWebsitName())
+                            .setMobile(partsSalesOrderBean.getMobile())
+                            .setSalesId(partsSalesOrderBean.getId())
+                            .setSalesItemId(itemBean.getId())
+                            .setPartsNumber(itemBean.getPartsNumber())
+                            .setPartsName(itemBean.getPartsName())
+                            .setSalesPrice(itemBean.getSalesPrice())
+                            .setMarketPrice(itemBean.getMarketPrice())
+                            .setSecondPrice(itemBean.getSecondPrice())
+                            .setQty(itemBean.getQty())
+                            .setTotalAmount(itemBean.getTotalAmount())
+                            .setCreditStatus(Boolean.FALSE)
+                            .setRecAmountMode(itemBean.getRefundAmountMode())
+                    );
                 } else {
                     itemBean.setRefundAmountMode(PayTypeEnum.WECHAT.getKey());
                 }
                 itemList.add(itemBean);
             }
             websitPartsSalesItemService.saveOrUpdateBatch(itemList);
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                websitPartsWorkerCreditRecordService.saveBatch(recordList);
+            }
         }
     }
 }

+ 25 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsSalesOrderLogic.java

@@ -61,6 +61,7 @@ public class WebsitPartsSalesOrderLogic {
     private final AdminWebsitPayConfigService adminWebsitPayConfigService;
     private final AllInPayLogic allInPayLogic;
     private final MaterialGoodsStockLogic materialGoodsStockLogic;
+    private final WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public IPage<WebsitPartsSalesVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -696,6 +697,7 @@ public class WebsitPartsSalesOrderLogic {
     private void updateSalesItem(WebsitPartsSalesBean partsSalesOrderBean) {
         if(CollectionUtil.isNotEmpty(partsSalesOrderBean.getItemList())) {
             List<WebsitPartsSalesItem> itemList = new ArrayList<>();
+            List<WebsitPartsWorkerCreditRecord> recordList = new ArrayList<>();
             for(WebsitPartsSalesItemBean itemBean : partsSalesOrderBean.getItemList()) {
                 itemBean.setPushFlag(partsSalesOrderBean.getPushFlag());
                 itemBean.setExamineTime(partsSalesOrderBean.getExamineTime());
@@ -703,12 +705,35 @@ public class WebsitPartsSalesOrderLogic {
                     itemBean.setRefundAmountMode(PayTypeEnum.CASH.getKey());
                 } else if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CREDIT.getKey())) {
                     itemBean.setRefundAmountMode(PayTypeEnum.CREDIT.getKey());
+
+                    recordList.add(new WebsitPartsWorkerCreditRecord()
+                            .setId("PC" + IdWorker.getIdStr())
+                            .setCompanyWechatId(partsSalesOrderBean.getCompanyWechatId())
+                            .setCompanyWechatName(partsSalesOrderBean.getCompanyWechatName())
+                            .setWebsitId(partsSalesOrderBean.getWebsitId())
+                            .setWebsitName(partsSalesOrderBean.getWebsitName())
+                            .setMobile(partsSalesOrderBean.getMobile())
+                            .setSalesId(partsSalesOrderBean.getId())
+                            .setSalesItemId(itemBean.getId())
+                            .setPartsNumber(itemBean.getPartsNumber())
+                            .setPartsName(itemBean.getPartsName())
+                            .setSalesPrice(itemBean.getSalesPrice())
+                            .setMarketPrice(itemBean.getMarketPrice())
+                            .setSecondPrice(itemBean.getSecondPrice())
+                            .setQty(itemBean.getQty())
+                            .setTotalAmount(itemBean.getTotalAmount())
+                            .setCreditStatus(Boolean.FALSE)
+                            .setRecAmountMode(itemBean.getRefundAmountMode())
+                    );
                 } else {
                     itemBean.setRefundAmountMode(PayTypeEnum.WECHAT.getKey());
                 }
                 itemList.add(itemBean);
             }
             websitPartsSalesItemService.saveOrUpdateBatch(itemList);
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                websitPartsWorkerCreditRecordService.saveBatch(recordList);
+            }
         }
     }
 

+ 27 - 7
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/worker/NewRefundManageLogic.java

@@ -33,10 +33,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -51,6 +50,7 @@ public class NewRefundManageLogic {
     private final MaterialGoodsStockLogic materialGoodsStockLogic;
     private final WebsitPartsRefundRecordService websitPartsRefundRecordService;
     private final StorageService storageService;
+    private final WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public IPage<NewRefundManageVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -95,7 +95,7 @@ public class NewRefundManageLogic {
         if (flag.equals(PartsOrderFlagEnum.AGREE.toString())) {
             // 通过
 //            this.insertPartsMessageTip(partsNewRefundManage, curDate);
-        }else if (flag.equals(PartsOrderFlagEnum.REJECT.toString())) {
+        } else if (flag.equals(PartsOrderFlagEnum.REJECT.toString())) {
             // 驳回
             List<WebsitPartsNewRefundManageItem> partsNewRefundManageItems = websitPartsNewRefundManageItemService.lambdaQuery()
                     .eq(WebsitPartsNewRefundManageItem::getApplyNo, partsNewRefundManage.getApplyNo())
@@ -141,13 +141,33 @@ public class NewRefundManageLogic {
         List<WebsitStockDTO> shopStockDTOList = this.createWebsitStockDTO(partsNewRefundManage, partsNewRefundManageItems);
         materialGoodsStockLogic.handleWebsitStock(shopStockDTOList);
 
-        //TODO 插入退款记录
+        // 插入退款记录
         List<WebsitPartsNewRefundManageRecord> partsNewRefundManageRecords = websitPartsNewRefundManageRecordService.lambdaQuery()
                 .eq(WebsitPartsNewRefundManageRecord::getApplyNo, partsNewRefundManage.getApplyNo())
                 .list();
         List<WebsitPartsRefundRecord> partsRefundRecordList = this.createRefundRecord(partsNewRefundManage, partsNewRefundManageRecords);
-        if(CollectionUtil.isNotEmpty(partsRefundRecordList))
+        if (CollectionUtil.isNotEmpty(partsRefundRecordList)) {
             websitPartsRefundRecordService.saveBatch(partsRefundRecordList);
+
+            // 查询是否有记账记录
+            List<WebsitPartsWorkerCreditRecord> recordList = websitPartsWorkerCreditRecordService.lambdaQuery()
+                    .eq(WebsitPartsWorkerCreditRecord::getCompanyWechatId, partsNewRefundManage.getCompanyWechatId())
+                    .eq(WebsitPartsWorkerCreditRecord::getSalesId, partsNewRefundManage.getSalesId())
+                    .in(WebsitPartsWorkerCreditRecord::getSalesItemId, partsNewRefundManageRecords.stream()
+                            .map(WebsitPartsNewRefundManageRecord::getSalesItemId)
+                            .collect(Collectors.toList()))
+                    .list();
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                Map<String, WebsitPartsNewRefundManageRecord> recordMap = partsNewRefundManageRecords.stream()
+                        .collect(Collectors.toMap(WebsitPartsNewRefundManageRecord::getSalesItemId, Function.identity()));
+                for (WebsitPartsWorkerCreditRecord creditRecord : recordList) {
+                    WebsitPartsNewRefundManageRecord record = recordMap.get(creditRecord.getSalesItemId());
+                    creditRecord.setQty(creditRecord.getQty().subtract(record.getQty()));
+                    creditRecord.setTotalAmount(creditRecord.getQty().multiply(creditRecord.getSalesPrice()));
+                }
+                websitPartsWorkerCreditRecordService.saveOrUpdateBatch(recordList);
+            }
+        }
     }
 
     private List<WebsitPartsRefundRecord> createRefundRecord(WebsitPartsNewRefundManage partsNewRefundManage, List<WebsitPartsNewRefundManageRecord> partsNewRefundManageRecords) {