Browse Source

no message

FengChaoYu 1 year ago
parent
commit
9b9f999b15

+ 8 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/material/parts/OldRefundManageBean.java

@@ -20,6 +20,14 @@ import java.util.List;
         , "submitTime", "examineBy", "examineTime", "refundedBy", "refundedTime", "settlement"}, allowGetters = true)
 public class OldRefundManageBean {
 
+    @ApiModelProperty(value = "商户编号", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "商户编号不能空")
+    private String companyWechatId;
+
+    @ApiModelProperty(value = "商户名称", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "商户名称不能空")
+    private String companyWechatName;
+
     @ApiModelProperty("申请单号")
     @Null(groups = ValidGroup.Add.class, message = "申请单号必须为空")
     @NotNull(groups = ValidGroup.Edit.class, message = "申请单号不能为空")

+ 67 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/material/parts/SalesCustomerPartsBean.java

@@ -0,0 +1,67 @@
+package com.gree.mall.miniapp.bean.material.parts;
+
+import com.gree.mall.miniapp.bean.inf.ValidGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@Data
+@ApiModel
+public class SalesCustomerPartsBean {
+
+    @ApiModelProperty(value = "商户编号", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "商户编号不能空")
+    private String companyWechatId;
+
+    @ApiModelProperty(value = "商户名称", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "商户名称不能空")
+    private String companyWechatName;
+
+    @ApiModelProperty(value = "维修标识 INNER=保内 OUTSIDE=保外", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "维修标识不能空")
+    private String repairFlag;
+
+    @ApiModelProperty(value = "接收网点编号", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "接收网点编号不能空")
+    private String receiveWebsitId;
+
+    @ApiModelProperty("接收配件网点编号")
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "接收配件网点编号不能空")
+    private String receivePartsWebsitId;
+
+    @ApiModelProperty(value = "师傅身份证", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "师傅身份证不能空")
+    private String identity;
+
+    @ApiModelProperty(value = "师傅编号", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "师傅编号不能空")
+    private String workerId;
+
+    @ApiModelProperty(value = "师傅名称", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "师傅名称不能空")
+    private String workerName;
+
+    @ApiModelProperty(value = "工单编号", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "工单编号不能空")
+    private String workOrderNo;
+
+    @ApiModelProperty(value = "用户名称", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "用户名称不能空")
+    private String customerName;
+
+    @ApiModelProperty(value = "用户电话", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "用户电话不能空")
+    private String customerTel;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("明细")
+    @NotEmpty(groups = { ValidGroup.Add.class,ValidGroup.Edit.class }, message = "明细不能空")
+    private List<SalesCustomerPartsItemBean> items;
+
+}

+ 58 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/material/parts/SalesCustomerPartsItemBean.java

@@ -0,0 +1,58 @@
+package com.gree.mall.miniapp.bean.material.parts;
+
+import com.gree.mall.miniapp.bean.inf.ValidGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+public class SalesCustomerPartsItemBean {
+
+    @ApiModelProperty(value = "新配件编码", required = true)
+    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "新配件编码不能空")
+    private String partsNumber;
+
+    @ApiModelProperty(value = "数量", required = true)
+    @NotNull(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "数量不能空")
+    private BigDecimal qty;
+
+    @ApiModelProperty("旧配件编号")
+    private String oldPartsNumber;
+
+    @ApiModelProperty("旧配件名称")
+    private String oldPartsName;
+
+//    @ApiModelProperty(value = "维修记录编号")
+//    private String repairRecordNumber;
+//
+//    @ApiModelProperty(value = "机器条形码", required = true)
+//    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "机器条形码不能空")
+//    private String machineBarcode;
+
+//    @ApiModelProperty(value = "修复时间", required = true)
+//    @NotNull(groups = {ValidGroup.Add.class, ValidGroup.Edit.class}, message = "修复时间不能空")
+//    private Date repairTime;
+
+//    @ApiModelProperty("旧压缩机编号")
+//    private String oldCompressNumber;
+//
+//    @ApiModelProperty("新压缩机编号")
+//    private String newCompressNumber;
+//
+//    @ApiModelProperty("配件条码")
+//    private String partsBarcode;
+//
+//    @ApiModelProperty("安装日期")
+//    private Date installTime;
+//
+//    @ApiModelProperty("自编码")
+//    private String customNo;
+
+//    @ApiModelProperty("备注")
+//    private String remark;
+}

+ 279 - 9
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/parts/OldRefundManageLogic.java

@@ -1,30 +1,40 @@
 package com.gree.mall.miniapp.logic.material.parts;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.gree.mall.miniapp.bean.material.parts.OldRefundManageBean;
-import com.gree.mall.miniapp.bean.material.parts.OldRefundManageItemBean;
-import com.gree.mall.miniapp.bean.material.parts.OldRefundManageRecordBean;
+import com.gree.mall.miniapp.bean.inf.ValidGroup;
+import com.gree.mall.miniapp.bean.material.parts.*;
+import com.gree.mall.miniapp.bean.material.stock.WorkerStockDTO;
 import com.gree.mall.miniapp.bean.user.CurrentCompanyWechat;
 import com.gree.mall.miniapp.commonmapper.MaterialMapper;
+import com.gree.mall.miniapp.enums.PayTypeEnum;
 import com.gree.mall.miniapp.enums.base.BaseEnum;
 import com.gree.mall.miniapp.enums.material.*;
 import com.gree.mall.miniapp.exception.RemoteServiceException;
 import com.gree.mall.miniapp.logic.common.CommonLogic;
-import com.gree.mall.miniapp.plus.entity.WebsitPartsOldRefundManage;
-import com.gree.mall.miniapp.plus.entity.WebsitPartsOldRefundManageItem;
-import com.gree.mall.miniapp.plus.entity.WebsitPartsOldRefundManageRecord;
-import com.gree.mall.miniapp.plus.service.WebsitPartsOldRefundManageItemService;
-import com.gree.mall.miniapp.plus.service.WebsitPartsOldRefundManageRecordService;
-import com.gree.mall.miniapp.plus.service.WebsitPartsOldRefundManageService;
+import com.gree.mall.miniapp.logic.material.stock.MaterialGoodsStockLogic;
+import com.gree.mall.miniapp.plus.entity.*;
+import com.gree.mall.miniapp.plus.service.*;
+import com.gree.mall.miniapp.utils.ValidateUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.validation.ValidationException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -40,6 +50,14 @@ public class OldRefundManageLogic {
     WebsitPartsOldRefundManageItemService websitPartsOldRefundManageItemService;
     @Resource
     WebsitPartsOldRefundManageRecordService websitPartsOldRefundManageRecordService;
+    @Resource
+    AdminWebsitService adminWebsitService;
+    @Resource
+    WorkerStockService workerStockService;
+    @Resource
+    WebsitGoodsService websitGoodsService;
+    @Resource
+    MaterialGoodsStockLogic materialGoodsStockLogic;
 
     public IPage<OldRefundManageBean> appList(String applyNo, String repairFlag, String flag, String identity, String partsNumber, Integer pageNo, Integer pageSize) {
         CurrentCompanyWechat wechat = commonLogic.getCurrentCompanyWechat();
@@ -102,4 +120,256 @@ public class OldRefundManageLogic {
         oldRefundManageBean.setOldRefundManageItemBeanList(oldRefundManageItemBeanList);
         return oldRefundManageBean;
     }
+
+    @Transactional
+    public String add(SalesCustomerPartsBean bean) {
+        try {
+            ValidateUtil.validate(bean, ValidGroup.Add.class);
+            for (SalesCustomerPartsItemBean itemBean : bean.getItems()) {
+                try {
+                    ValidateUtil.validate(itemBean, ValidGroup.Add.class);
+                } catch (ValidationException e) {
+                    throw new RemoteServiceException("明细出错原因:" + e.getMessage());
+                }
+            }
+            // 查询接收网点
+            AdminWebsit websit = adminWebsitService.lambdaQuery()
+                    .eq(AdminWebsit::getCompanyWechatId, bean.getCompanyWechatId())
+                    .eq(AdminWebsit::getWebsitId, bean.getReceiveWebsitId())
+                    .eq(AdminWebsit::getPartsWebsitId, bean.getReceivePartsWebsitId())
+                    .one();
+            if (Objects.isNull(websit)) {
+                throw new RemoteServiceException("接收网点不存在");
+            }
+
+            // 查询师傅在接收网点的新件库存
+            List<WorkerStock> workerStockList = workerStockService.lambdaQuery()
+                    .eq(WorkerStock::getCompanyWechatId, bean.getCompanyWechatId())
+                    .eq(WorkerStock::getIdentity, bean.getIdentity())
+                    .eq(WorkerStock::getWebsitId, bean.getReceiveWebsitId())
+                    .eq(WorkerStock::getPartsWebsitId, bean.getReceivePartsWebsitId())
+                    .in(WorkerStock::getGoodsId, bean.getItems().stream()
+                            .map(SalesCustomerPartsItemBean::getPartsNumber)
+                            .collect(Collectors.toList()))
+                    .list();
+            if (CollectionUtil.isEmpty(workerStockList)) {
+                throw new RemoteServiceException("在“" + websit.getName() + "”未找到新件配件库存");
+            }
+
+            // 查询配件资料
+            List<WebsitGoods> partsList = websitGoodsService.lambdaQuery()
+                    .eq(WebsitGoods::getCompanyWechatId, bean.getCompanyWechatId())
+                    .in(WebsitGoods::getGoodsCode, bean.getItems().stream()
+                            .map(SalesCustomerPartsItemBean::getPartsNumber)
+                            .collect(Collectors.toList()))
+                    .list();
+
+            // 检查明细归还的数量必须大于0并且少于等于库存数量
+            Map<String, WorkerStock> workerStockMap = workerStockList.stream()
+                    .collect(Collectors.toMap(WorkerStock::getGoodsId, Function.identity()));
+            Map<String, WebsitGoods> partsMap = partsList.stream()
+                    .collect(Collectors.toMap(WebsitGoods::getGoodsCode, Function.identity()));
+
+            OldRefundManageBean oldRefundManageBean = this.convertBean(bean, websit, partsMap);
+
+            for (OldRefundManageItemBean itemBean : oldRefundManageBean.getOldRefundManageItemBeanList()) {
+                WorkerStock workerStock = workerStockMap.get(itemBean.getNewPartsNumber());
+                if (Objects.isNull(workerStock)) {
+                    throw new RemoteServiceException("“" + itemBean.getNewPartsName() + "”新配件未找到库存记录");
+                }
+                if (itemBean.getQty().compareTo(workerStock.getQty()) > 0) {
+                    throw new RemoteServiceException("“" + workerStock.getGoodsName() + "”使用新件数量不能大于库存数量");
+                }
+                if (itemBean.getQty().compareTo(BigDecimal.ZERO) < 1) {
+                    throw new RemoteServiceException("“" + workerStock.getGoodsName() + "”使用新件数量必须大于0");
+                }
+                workerStockMap.get(itemBean.getNewPartsNumber()).setQty(workerStock.getQty().subtract(itemBean.getQty()));
+            }
+
+            String sheetId = commonLogic.generateMaterialNo(bean.getCompanyWechatId(), "JH", PartsRefTypeEnum.OLD_REFUND.getKey(), 13);
+            oldRefundManageBean.setApplyNo(sheetId);
+
+            // 保存主表和明细
+            WebsitPartsOldRefundManage partsOldRefundManage = new WebsitPartsOldRefundManage();
+            BeanUtils.copyProperties(oldRefundManageBean, partsOldRefundManage);
+            List<WebsitPartsOldRefundManageItem> partsOldRefundManageItems = new ArrayList<>();
+            for (OldRefundManageItemBean itemBean : oldRefundManageBean.getOldRefundManageItemBeanList()) {
+                WebsitPartsOldRefundManageItem partsOldRefundManageItem = new WebsitPartsOldRefundManageItem();
+                itemBean.setId(IdWorker.getIdStr());
+                itemBean.setApplyNo(sheetId);
+                BeanUtils.copyProperties(itemBean, partsOldRefundManageItem);
+                partsOldRefundManageItems.add(partsOldRefundManageItem);
+            }
+            partsOldRefundManage.setCreateBy(partsOldRefundManage.getWorkerName())
+                    .setUpdateBy(partsOldRefundManage.getWorkerName())
+                    .insert();
+
+            // 刷新创建人和更新人
+            websitPartsOldRefundManageService.lambdaUpdate()
+                    .set(WebsitPartsOldRefundManage::getCreateBy, partsOldRefundManage.getWorkerName())
+                    .set(WebsitPartsOldRefundManage::getUpdateBy, partsOldRefundManage.getWorkerName())
+                    .eq(WebsitPartsOldRefundManage::getApplyNo, sheetId)
+                    .update();
+
+            websitPartsOldRefundManageItemService.saveBatch(partsOldRefundManageItems);
+
+            // 减去师傅新件库存 增加旧件库存
+            String refType = PartsRepairFlagEnum.INNER.getKey().equals(partsOldRefundManage.getRepairFlag()) ?
+                    PartsRefTypeEnum.OLD_REFUND.getRemark() :
+                    PartsRefTypeEnum.OUTSIDE_TO_SALES.getRemark();
+            List<WorkerStockDTO> workerStockDTOList = this.createWorkerStockDTO(partsOldRefundManage, partsOldRefundManageItems,
+                    refType, PartsAttrEnum.NEW.getKey(), PartsAttrEnum.OLD.getKey());
+            materialGoodsStockLogic.handleWorkerStock(workerStockDTOList);
+
+            return sheetId;
+        } catch (Exception e) {
+            WorkerSalesCustomerInfo info = new WorkerSalesCustomerInfo();
+            info.setErr(e.getMessage())
+                    .setSalesCustomerJson(JSONUtil.toJsonStr(bean))
+                    .setIdentity(bean.getIdentity())
+                    .setCompanyWechatId(bean.getCompanyWechatId())
+                    .insert();
+        }
+        return null;
+    }
+
+    private List<WorkerStockDTO> createWorkerStockDTO(WebsitPartsOldRefundManage partsOldRefundManage,
+                                                      List<WebsitPartsOldRefundManageItem> partsOldRefundManageItems,
+                                                      String refType, String partsAttr1,
+                                                      String partsAttr2) {
+        List<WorkerStockDTO> workerStockDTOList = new ArrayList<>();
+        if (StringUtils.isNotBlank(partsAttr1)) {
+            for (WebsitPartsOldRefundManageItem refundManageItem : partsOldRefundManageItems) {
+                WorkerStockDTO workerStockDTO = new WorkerStockDTO();
+                workerStockDTO.setCompanyWechatId(partsOldRefundManage.getCompanyWechatId());
+                workerStockDTO.setCompanyWechatName(partsOldRefundManage.getCompanyWechatName());
+                workerStockDTO.setIdentity(partsOldRefundManage.getIdentity());
+                workerStockDTO.setWorkerId(partsOldRefundManage.getWorkerId());
+                workerStockDTO.setWorkerName(partsOldRefundManage.getWorkerName());
+                workerStockDTO.setWebsitId(partsOldRefundManage.getReceiveWebsitId());
+                workerStockDTO.setWebsitName(partsOldRefundManage.getReceiveWebsitName());
+                workerStockDTO.setPartsWebsitId(partsOldRefundManage.getReceivePartsWebsitId());
+                workerStockDTO.setSdate(DateUtil.date());
+                workerStockDTO.setGoodsId(refundManageItem.getNewPartsNumber());
+                workerStockDTO.setGoodsName(refundManageItem.getNewPartsName());
+                workerStockDTO.setMaterialGroupName(refundManageItem.getNewMaterialGroupName());
+                workerStockDTO.setGoodsStockUnit(refundManageItem.getNewUnitName());
+                workerStockDTO.setPrice(BigDecimal.ZERO);
+                workerStockDTO.setRef(partsOldRefundManage.getApplyNo());
+                workerStockDTO.setRefType(refType);
+                workerStockDTO.setPartsAttr(partsAttr1);
+                workerStockDTO.setChangeQty(refundManageItem.getQty());
+                workerStockDTO.setDirectFlag(DirectFlagEnum.SUB.getKey());
+                workerStockDTO.setRemark(refundManageItem.getRemark());
+                workerStockDTO.setOperateBy(partsOldRefundManage.getWorkerName());
+                workerStockDTO.setOperateTime(DateUtil.date());
+
+                workerStockDTOList.add(workerStockDTO);
+            }
+        }
+        if (StringUtils.isNotBlank(partsAttr2)) {
+            for (WebsitPartsOldRefundManageItem refundManageItem : partsOldRefundManageItems) {
+                WorkerStockDTO workerStockDTO = new WorkerStockDTO();
+                workerStockDTO.setCompanyWechatId(partsOldRefundManage.getCompanyWechatId());
+                workerStockDTO.setCompanyWechatName(partsOldRefundManage.getCompanyWechatName());
+                workerStockDTO.setIdentity(partsOldRefundManage.getIdentity());
+                workerStockDTO.setWorkerId(partsOldRefundManage.getWorkerId());
+                workerStockDTO.setWorkerName(partsOldRefundManage.getWorkerName());
+                workerStockDTO.setWebsitId(partsOldRefundManage.getReceiveWebsitId());
+                workerStockDTO.setWebsitName(partsOldRefundManage.getReceiveWebsitName());
+                workerStockDTO.setPartsWebsitId(partsOldRefundManage.getReceivePartsWebsitId());
+                workerStockDTO.setSdate(DateUtil.date());
+                workerStockDTO.setGoodsId(refundManageItem.getNewPartsNumber());
+                workerStockDTO.setGoodsName(refundManageItem.getNewPartsName());
+                workerStockDTO.setMaterialGroupName(refundManageItem.getNewMaterialGroupName());
+                workerStockDTO.setGoodsStockUnit(refundManageItem.getNewUnitName());
+                workerStockDTO.setPrice(BigDecimal.ZERO);
+                workerStockDTO.setRef(partsOldRefundManage.getApplyNo());
+                workerStockDTO.setRefType(refType);
+                workerStockDTO.setPartsAttr(partsAttr2);
+                workerStockDTO.setChangeQty(refundManageItem.getQty());
+                workerStockDTO.setDirectFlag(DirectFlagEnum.ADD.getKey());
+                workerStockDTO.setRemark(refundManageItem.getRemark());
+                workerStockDTO.setOperateBy(partsOldRefundManage.getWorkerName());
+                workerStockDTO.setOperateTime(DateUtil.date());
+
+                workerStockDTOList.add(workerStockDTO);
+            }
+        }
+        return workerStockDTOList;
+    }
+
+    private OldRefundManageBean convertBean(SalesCustomerPartsBean bean, AdminWebsit websit, Map<String, WebsitGoods> partsMap) {
+        CurrentCompanyWechat wechat = commonLogic.getCurrentCompanyWechat();
+        OldRefundManageBean oldRefundManageBean = new OldRefundManageBean();
+        BeanUtils.copyProperties(bean, oldRefundManageBean);
+        if (PartsRepairFlagEnum.INNER.getKey().equals(bean.getRepairFlag())) {
+            oldRefundManageBean.setApplyType(PartsRefundApplyTypeEnum.OLD.getKey());
+        } else {
+            oldRefundManageBean.setApplyType(PartsRefundApplyTypeEnum.NOT.getKey());
+        }
+        oldRefundManageBean.setReceiveWebsitName(websit.getName());
+        oldRefundManageBean.setWebsitAddress(websit.getAddress());
+        oldRefundManageBean.setCreateBy(wechat.getUser().getNickName());
+        oldRefundManageBean.setCreateTime(DateUtil.date());
+        oldRefundManageBean.setUpdateBy(wechat.getUser().getNickName());
+        oldRefundManageBean.setUpdateTime(DateUtil.date());
+        oldRefundManageBean.setFlag(PartsOrderFlagEnum.SAVE.toString());
+
+        List<OldRefundManageItemBean> oldRefundManageItemBeanList = new ArrayList<>();
+        for (SalesCustomerPartsItemBean itemBean : bean.getItems()) {
+            OldRefundManageItemBean oldRefundManageItemBean = new OldRefundManageItemBean();
+            BeanUtils.copyProperties(itemBean, oldRefundManageItemBean);
+            WebsitGoods parts = partsMap.get(itemBean.getPartsNumber());
+            if (Objects.isNull(parts)) {
+                throw new RemoteServiceException("“" + itemBean.getPartsNumber() + "”配件编码未找到资料记录");
+            }
+            oldRefundManageItemBean.setOldPartsNumber(itemBean.getOldPartsNumber());
+            oldRefundManageItemBean.setOldPartsName(itemBean.getOldPartsName());
+            oldRefundManageItemBean.setNewPartsNumber(parts.getGoodsCode());
+            oldRefundManageItemBean.setNewPartsName(parts.getGoodsName());
+            oldRefundManageItemBean.setNewMaterialGroupName(parts.getMaterialGroupName());
+            oldRefundManageItemBean.setNewGoodsStockUnit(parts.getGoodsStockUnit());
+            oldRefundManageItemBeanList.add(oldRefundManageItemBean);
+        }
+        oldRefundManageBean.setOldRefundManageItemBeanList(oldRefundManageItemBeanList);
+        return oldRefundManageBean;
+    }
+
+    @Transactional
+    public void websitSalesHandle(String applyNo) throws Exception {
+        final WebsitPartsOldRefundManage manage = websitPartsOldRefundManageService.getById(applyNo);
+        if (Objects.isNull(manage)) {
+            return;
+        }
+        final List<WebsitPartsOldRefundManageItem> items = websitPartsOldRefundManageItemService.lambdaQuery()
+                .eq(WebsitPartsOldRefundManageItem::getApplyNo, applyNo)
+                .list();
+        String refType = PartsRepairFlagEnum.INNER.getKey().equals(manage.getRepairFlag()) ?
+                PartsRefTypeEnum.OLD_REFUND.getRemark() :
+                PartsRefTypeEnum.OUTSIDE_TO_SALES.getRemark();
+        // 查找销售单并处理
+        List<PartsRefundRecordDTO> partsRefundRecordDTOList = materialGoodsStockLogic.handleOldRefundWebsitSales(manage.getReceiveWebsitId(),
+                manage.getReceivePartsWebsitId(), manage.getIdentity(), manage, items, refType);
+        List<WebsitPartsOldRefundManageRecord> partsOldRefundManageRecordList = new ArrayList<>();
+        BigDecimal refundAmount = BigDecimal.ZERO;
+        for (PartsRefundRecordDTO partsRefundRecordDTO : partsRefundRecordDTOList) {
+            WebsitPartsOldRefundManageRecord refundManageRecord = new WebsitPartsOldRefundManageRecord();
+            BeanUtils.copyProperties(partsRefundRecordDTO, refundManageRecord);
+            if (refundManageRecord.getRefundAmountMode().equals(PayTypeEnum.CASH.getKey())) {
+                refundManageRecord.setRefundState(PartsRefundStateEnum.OK.toString());
+            }
+            refundAmount = refundAmount.add(refundManageRecord.getRefundAmount());
+            partsOldRefundManageRecordList.add(refundManageRecord);
+        }
+
+        // 更新旧件返还主表退款金额
+        websitPartsOldRefundManageService.lambdaUpdate()
+                .set(WebsitPartsOldRefundManage::getRefundAmount, refundAmount)
+                .eq(WebsitPartsOldRefundManage::getApplyNo, applyNo)
+                .update();
+
+        // 保存旧件返还销售明细记录
+        websitPartsOldRefundManageRecordService.saveBatch(partsOldRefundManageRecordList);
+    }
 }

+ 28 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/stock/MaterialGoodsStockLogic.java

@@ -520,4 +520,32 @@ public class MaterialGoodsStockLogic {
         }
     }
 
+    /**
+     * 处理网点销售单明细数量 旧件
+     * @param manage
+     * @param items
+     * @param refType
+     */
+    public List<PartsRefundRecordDTO> handleOldRefundWebsitSales(String receiveWebsitId, String receivePartsWebsitId,
+                                                                 String identity, WebsitPartsOldRefundManage manage,
+                                                                 List<WebsitPartsOldRefundManageItem> items, String refType)
+            throws Exception {
+        List<SalesItemRecordDTO> salesItemRecordDTOList = new ArrayList<>();
+        for (WebsitPartsOldRefundManageItem partsOldRefundManageItem : items) {
+            SalesItemRecordDTO salesItemRecordDTO = new SalesItemRecordDTO();
+            salesItemRecordDTO.setItemId(partsOldRefundManageItem.getId());
+            salesItemRecordDTO.setApplyNo(partsOldRefundManageItem.getApplyNo());
+            salesItemRecordDTO.setPartsNumber(partsOldRefundManageItem.getNewPartsNumber());
+            salesItemRecordDTO.setPartsName(partsOldRefundManageItem.getNewPartsName());
+            salesItemRecordDTO.setQty(partsOldRefundManageItem.getQty());
+            salesItemRecordDTO.setRepairFlag(manage.getRepairFlag());
+            salesItemRecordDTO.setWorkOrderNo(manage.getWorkOrderNo());
+            salesItemRecordDTO.setPgId(manage.getPgId());
+            salesItemRecordDTO.setCustomerName(manage.getCustomerName());
+            salesItemRecordDTO.setCustomerTel(manage.getCustomerTel());
+            salesItemRecordDTO.setIsBackup(partsOldRefundManageItem.getIsBackup());
+            salesItemRecordDTOList.add(salesItemRecordDTO);
+        }
+        return this.handleShopSales(receiveWebsitId, receivePartsWebsitId, identity, salesItemRecordDTOList, refType);
+    }
 }

+ 97 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/schedule/WorkerOldPartsHandlerSchedule.java

@@ -0,0 +1,97 @@
+package com.gree.mall.miniapp.schedule;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import com.gree.mall.miniapp.bean.material.parts.SalesCustomerPartsBean;
+import com.gree.mall.miniapp.constant.Constant;
+import com.gree.mall.miniapp.enums.IsEnum;
+import com.gree.mall.miniapp.logic.material.parts.OldRefundManageLogic;
+import com.gree.mall.miniapp.plus.entity.WebsitPartsOldRefundManage;
+import com.gree.mall.miniapp.plus.entity.WorkerSalesCustomerInfo;
+import com.gree.mall.miniapp.plus.service.WebsitPartsOldRefundManageService;
+import com.gree.mall.miniapp.plus.service.WorkerSalesCustomerInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Component
+@Slf4j
+@ConditionalOnProperty(name = "schedule.enable", havingValue = "true", matchIfMissing = true)
+public class WorkerOldPartsHandlerSchedule {
+
+    @Resource
+    WorkerSalesCustomerInfoService workerSalesCustomerInfoService;
+    @Resource
+    OldRefundManageLogic oldRefundManageLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+    @Resource
+    WebsitPartsOldRefundManageService websitPartsOldRefundManageService;
+
+    //上一次执行完后5秒再扫表
+    @Scheduled(initialDelay = 5000, fixedDelay = 5000)
+    private void infoTask() {
+        List<WorkerSalesCustomerInfo> infoList = workerSalesCustomerInfoService.lambdaQuery()
+                .eq(WorkerSalesCustomerInfo::getIsExec, IsEnum.N.getValue())
+                .isNull(WorkerSalesCustomerInfo::getExecTime)
+                .orderByAsc(WorkerSalesCustomerInfo::getCreateTime)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(infoList)) {
+            for (WorkerSalesCustomerInfo info : infoList) {
+                Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + info.getId());
+                try {
+                    if (obtain.tryLock(5, TimeUnit.SECONDS)) {
+                        final SalesCustomerPartsBean bean = JSONUtil.toBean(info.getSalesCustomerJson(), SalesCustomerPartsBean.class);
+                        final String applyNo = oldRefundManageLogic.add(bean);
+                        if (StringUtils.isNotBlank(applyNo)) {
+                            info.setIsExec(true)
+                                    .setExecTime(DateUtil.date())
+                                    .updateById();
+                        }
+                    }
+                } catch (Exception e) {
+                    log.error("旧件返还处理师傅配件库存出错: " + info.getId(), e);
+                } finally {
+                    obtain.unlock();
+                }
+            }
+        }
+    }
+
+
+    //上一次执行完后5秒再扫表
+    @Scheduled(initialDelay = 5000, fixedDelay = 5000)
+    private void oldRefundTask() {
+        List<WebsitPartsOldRefundManage> manageList = websitPartsOldRefundManageService.lambdaQuery()
+                .select(WebsitPartsOldRefundManage::getApplyNo)
+                .isNull(WebsitPartsOldRefundManage::getSettlementState)
+                .orderByAsc(WebsitPartsOldRefundManage::getCreateTime)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(manageList)) {
+            for (WebsitPartsOldRefundManage manage : manageList) {
+                Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + manage.getApplyNo());
+                try {
+                    if (obtain.tryLock(5, TimeUnit.SECONDS)) {
+                        oldRefundManageLogic.websitSalesHandle(manage.getApplyNo());
+                    }
+                } catch (Exception e) {
+                    log.error("旧件返还处理配件销售单出错: " + manage.getApplyNo(), e);
+                } finally {
+                    obtain.unlock();
+                }
+            }
+        }
+    }
+
+}

+ 4 - 1
mall-server-api/src/main/java/com/gree/mall/manager/bean/PayDetail.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+
 @Accessors(chain = true)
 @ApiModel
 @Data
@@ -23,6 +25,7 @@ public class PayDetail {
     private Boolean isPay = true;
     @ApiModelProperty("扫码支付的url")
     private String codeUrl;
-
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal payAmount;
 
 }

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

@@ -108,8 +108,8 @@ public class WebsitPartsSalesOrderController {
         return ResponseHelper.success(websitPartsSalesOrderLogic.generateCode(id, payConfigId));
     }
 
-    @GetMapping("/query/pay/status")
     @ApiOperation(value = "查询二维码支付状态")
+    @GetMapping("/query/pay/status")
     public ResponseHelper<WebsitSalesPayOrder> queryPayStatus(
             @ApiParam(value = "网点编号",required = true) @RequestParam String websitId,
             @ApiParam(value = "单据号",required = true) @RequestParam String id,

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

@@ -116,6 +116,9 @@ public class WebsitPartsSalesOrderLogic {
         }
         partsSalesOrderBean.setWebsitName(websit.getName());
         partsSalesOrderBean.setPartsWebsitId(websit.getPartsWebsitId());
+        if (StringUtils.isBlank(partsSalesOrderBean.getDeliveryUnit())) {
+            partsSalesOrderBean.setDeliveryUnit(websit.getName());
+        }
 
         if (StringUtils.isBlank(partsSalesOrderBean.getStorageId())) {
             final Storage storage = storageService.lambdaQuery()
@@ -528,6 +531,7 @@ public class WebsitPartsSalesOrderLogic {
         PayDetail payDetail = new PayDetail();
         payDetail.setCodeUrl(resMap.get("payinfo"));
         payDetail.setId(payOrder.getId());
+        payDetail.setPayAmount(sales.getTotalAmount());
         log.info("通联支付payDetail:{}", JSONObject.toJSONString(payDetail));
         return payDetail;
     }