Browse Source

no message

FengChaoYu 7 months ago
parent
commit
92163e85aa

+ 1 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/PayOrderLogic.java

@@ -476,7 +476,7 @@ public class PayOrderLogic {
         }
 
         //插入使用记录
-        this.addNormRecord(workerOrder,workerOrderItems);
+        this.addNormRecord(workerOrder, workerOrderItems);
 
        // this.addSettlementWorker(workerOrder,workerOrderItems);
 

+ 229 - 4
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/stock/WorkerStockLogic.java

@@ -6,22 +6,25 @@ import cn.hutool.core.date.DateUtil;
 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.manager.bean.SalesCustomerPartsBean;
+import com.gree.mall.manager.bean.SalesCustomerPartsItemBean;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.listvo.material.WorkerStockAccPVO;
 import com.gree.mall.manager.bean.listvo.material.WorkerStockAccVO;
 import com.gree.mall.manager.bean.listvo.material.WorkerStockPVO;
 import com.gree.mall.manager.bean.listvo.material.WorkerStockVO;
 import com.gree.mall.manager.bean.material.stock.WorkerStockDTO;
+import com.gree.mall.manager.bean.material.worker.OldRefundManageBean;
+import com.gree.mall.manager.bean.material.worker.OldRefundManageItemBean;
 import com.gree.mall.manager.commonmapper.CommonMapper;
-import com.gree.mall.manager.enums.material.DirectFlagEnum;
-import com.gree.mall.manager.enums.material.PartsAttrEnum;
-import com.gree.mall.manager.enums.material.WebsitGoodsTypeEnum;
-import com.gree.mall.manager.enums.material.WorkerStockFlagEnum;
+import com.gree.mall.manager.enums.material.*;
 import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.inf.ValidGroup;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.*;
 import com.gree.mall.manager.plus.service.*;
 import com.gree.mall.manager.utils.CommonUtils;
+import com.gree.mall.manager.utils.ValidateUtil;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.util.FieldUtils;
 import lombok.RequiredArgsConstructor;
@@ -31,10 +34,13 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+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;
 
 @Slf4j
@@ -54,6 +60,8 @@ public class WorkerStockLogic {
     private final WorkerStockBakService workerStockBakService;
     private final WorkerStockAccBakService workerStockAccBakService;
     private final WebsitUserService websitUserService;
+    private final WebsitPartsOldRefundManageService websitPartsOldRefundManageService;
+    private final WebsitPartsOldRefundManageItemService websitPartsOldRefundManageItemService;
 
     /**
      * 师傅辅材库存列表
@@ -360,4 +368,221 @@ public class WorkerStockLogic {
             workerStockAccBakService.saveBatch(workerStockAccBakList);
         }
     }
+
+    @Transactional
+    public String oldRefundManageSyncAdd(SalesCustomerPartsBean bean) throws Exception {
+        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);
+        // workOrderNo与pgId是同值
+        partsOldRefundManage.setPgId(oldRefundManageBean.getWorkOrderNo());
+
+        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);
+            partsOldRefundManageItem.setNewUnitName(itemBean.getNewGoodsStockUnit());
+            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;
+    }
+
+    private OldRefundManageBean convertBean(SalesCustomerPartsBean bean, AdminWebsit websit, Map<String, WebsitGoods> partsMap) {
+        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(bean.getWorkerName());
+        oldRefundManageBean.setCreateTime(DateUtil.date());
+        oldRefundManageBean.setUpdateBy(bean.getWorkerName());
+        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;
+    }
+
+    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.setGoodsType(WebsitGoodsTypeEnum.P.toString());
+                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.setWorkerOrderNo(partsOldRefundManage.getWorkOrderNo());
+                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.setGoodsType(WebsitGoodsTypeEnum.P.toString());
+                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.setWorkerOrderNo(partsOldRefundManage.getWorkOrderNo());
+                workerStockDTO.setOperateBy(partsOldRefundManage.getWorkerName());
+                workerStockDTO.setOperateTime(DateUtil.date());
+
+                workerStockDTOList.add(workerStockDTO);
+            }
+        }
+        return workerStockDTOList;
+    }
+
+    @Transactional
+    public void fucaiHandleWorkerStock(List<WorkerStockDTO> workerStockDTOS) throws Exception {
+        materialGoodsStockLogic.handleWorkerStock(workerStockDTOS);
+    }
 }

+ 104 - 18
mall-server-api/src/main/java/com/gree/mall/manager/logic/websit/SettlementOrderLogic.java

@@ -17,8 +17,6 @@ import com.gree.mall.manager.bean.SalesCustomerPartsItemBean;
 import com.gree.mall.manager.bean.WorkerNormStockBean;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.material.stock.WorkerStockDTO;
-import com.gree.mall.manager.bean.material.worker.OldRefundManageBean;
-import com.gree.mall.manager.bean.material.worker.OldRefundManageItemBean;
 import com.gree.mall.manager.bean.websit.SettlementOrderDetail;
 import com.gree.mall.manager.bean.websit.SettlementOrderLogicVO;
 import com.gree.mall.manager.bean.websit.WorkerSettlementLineVO;
@@ -26,36 +24,28 @@ import com.gree.mall.manager.bean.websit.WorkerSettlementVO;
 import com.gree.mall.manager.commonmapper.MaterialGoodsStockCMapper;
 import com.gree.mall.manager.commonmapper.MaterialMapper;
 import com.gree.mall.manager.commonmapper.WebsitSalesRetCMapper;
-import com.gree.mall.manager.constant.Constant;
 import com.gree.mall.manager.enums.*;
-import com.gree.mall.manager.enums.material.*;
+import com.gree.mall.manager.enums.material.NormTypeEnum;
+import com.gree.mall.manager.enums.material.PartsAttrEnum;
+import com.gree.mall.manager.enums.material.WebsitGoodsTypeEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
-import com.gree.mall.manager.inf.ValidGroup;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.logic.common.WechatLogic;
+import com.gree.mall.manager.logic.material.stock.WorkerStockLogic;
 import com.gree.mall.manager.plus.entity.*;
 import com.gree.mall.manager.plus.service.*;
 import com.gree.mall.manager.utils.StringUtil;
-import com.gree.mall.manager.utils.ValidateUtil;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.util.FieldUtils;
 import lombok.extern.log4j.Log4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.integration.redis.util.RedisLockRegistry;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionSynchronization;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import springfox.documentation.annotations.ApiIgnore;
 
-import javax.validation.ValidationException;
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
@@ -134,6 +124,9 @@ public class SettlementOrderLogic {
     @Autowired
     WebsitPartsOldRefundManageItemService websitPartsOldRefundManageItemService;
 
+    @Autowired
+    WorkerStockLogic workerStockLogic;
+
 
     public IPage<SettlementOrderLogicVO> pageV2(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -425,7 +418,7 @@ public class SettlementOrderLogic {
                 this.addSettlementManaulWorker(workerOrder, workerOrderItems);
             }
             //todo 辅材扣除
-/*
+
 
 
 
@@ -527,7 +520,7 @@ public class SettlementOrderLogic {
                     if (CollectionUtil.isNotEmpty(salesCustomerPartsBeans)) {
                         // 开始处理库存
                         for (SalesCustomerPartsBean salesCustomerPartsBean : salesCustomerPartsBeans) {
-                            this.add(salesCustomerPartsBean);
+                            workerStockLogic.oldRefundManageSyncAdd(salesCustomerPartsBean);
                         }
 
                     }
@@ -547,14 +540,14 @@ public class SettlementOrderLogic {
 
                     if (CollectionUtil.isNotEmpty(workerStockDTOS)) {
                         // 开始处理库存
-                        this.handleWorkerStock(workerStockDTOS);
+                        workerStockLogic.fucaiHandleWorkerStock(workerStockDTOS);
                     }
                 }
             } catch (Exception e) {
                 log.error(workerOrder.getOrderId() + " 师傅辅材扣库存失败: ", e);
                 throw new RemoteServiceException("师傅辅材扣库存失败,没有库存");
             }
-*/
+
 
 
             //插入结算数据
@@ -566,6 +559,99 @@ public class SettlementOrderLogic {
 
     }
 
+    private void makeSubStockData(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems, List<WorkerStockDTO> workerStockDTOS) {
+        Map<String, WorkerNormStockBean> workerStockMap = new HashMap<>();
+        for (WorkerOrderItem item : workerOrderItems) {
+            WebsitNormCharge websitNormCharge = websitNormChargeService.getById(item.getGoodsId());
+            if (websitNormCharge.getNormType().equals(NormTypeEnum.M.getKey())) {
+                // 获取当前关联师傅库存记录
+                List<WorkerNormStockBean> stockBeanList = materialMapper.queryWorkerStockQty(item.getGoodsId(), workerOrder.getIdentity());
+                if (CollectionUtil.isNotEmpty(stockBeanList)) {
+                    BigDecimal totalNum = item.getNum();
+                    for (WorkerNormStockBean stockBean : stockBeanList) {
+                        // 当前订单收费标准扣总数量
+                        BigDecimal useTotalQty = totalNum.multiply(stockBean.getQty());
+                        if (!workerStockMap.containsKey(stockBean.getWorkerGoodsId() + item.getGoodsAmount())) {
+                            WorkerNormStockBean bean = new WorkerNormStockBean();
+                            BeanUtils.copyProperties(stockBean, bean);
+                            bean.setRealQty(BigDecimal.ZERO);
+                            workerStockMap.put(bean.getWorkerGoodsId() + item.getGoodsAmount(), bean);
+                        }
+                        WorkerNormStockBean stock = workerStockMap.get(stockBean.getWorkerGoodsId() + item.getGoodsAmount());
+                        stock.setRealQty(stock.getRealQty().add(useTotalQty));
+                        stock.setNormPrice(item.getGoodsAmount());
+
+                        // 7、收费标准如果和辅材没有对应关系,不判断库存;从总部同步下来订单,如果师傅的库存不足,不限制支付;(允许负库存)
+//                        if (!stockBean.getIsSmall() && stock.getRealQty().compareTo(stockBean.getStockQty()) > 0) {
+//                            throw new RemoteServiceException("收费标准关联的 " + stockBean.getGoodsName() + "库存数量"
+//                                    + stock.getStockQty() + ", 需扣" + stock.getRealQty() + ", 库存数量不够扣减");
+//                        }
+                    }
+                }
+            }
+        }
+
+        for (Map.Entry<String, WorkerNormStockBean> entry : workerStockMap.entrySet()) {
+            final WorkerNormStockBean bean = entry.getValue();
+            // 库存减少
+            WorkerStockDTO workerStockDTO = new WorkerStockDTO();
+            workerStockDTO.setCompanyWechatId(workerOrder.getCompanyWechatId());
+            workerStockDTO.setCompanyWechatName(workerOrder.getCompanyWechatName());
+            workerStockDTO.setIdentity(workerOrder.getIdentity());
+            workerStockDTO.setWorkerId(workerOrder.getWorkerId());
+            workerStockDTO.setWorkerName(workerOrder.getWorkerName());
+            workerStockDTO.setWebsitId(workerOrder.getWebsitId());
+            workerStockDTO.setWebsitName(workerOrder.getWebsitName());
+            workerStockDTO.setSdate(workerOrder.getCreateTime());
+            workerStockDTO.setWorkerWebsitId(workerOrder.getWebsitId());
+            workerStockDTO.setWorkerWebsitName(workerOrder.getWebsitName());
+            workerStockDTO.setGoodsId(bean.getWorkerGoodsId());
+            workerStockDTO.setGoodsName(bean.getGoodsName());
+            workerStockDTO.setGoodsType(WebsitGoodsTypeEnum.M.toString());
+            workerStockDTO.setPrice(bean.getNormPrice());
+            workerStockDTO.setGoodsStockUnit(bean.getSalesUnit());
+            workerStockDTO.setRef(workerOrder.getOrderId());
+            workerStockDTO.setRefType("辅材销售");
+            workerStockDTO.setPartsAttr(PartsAttrEnum.NEW.toString());
+            workerStockDTO.setChangeQty(bean.getRealQty());
+            workerStockDTO.setDirectFlag("SUB");
+            workerStockDTO.setFlag("USED");
+            workerStockDTO.setObj("客户");
+            workerStockDTO.setWorkerOrderNo(workerOrder.getWorkerOrderId());
+            workerStockDTO.setRemark(workerOrder.getRemark());
+            workerStockDTO.setOperateBy(workerOrder.getWorkerName());
+            workerStockDTO.setOperateTime(DateUtil.date());
+
+            workerStockDTOS.add(workerStockDTO);
+        }
+    }
+
+    private void addNormRecord(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems) {
+        List<WebsitNormRecord> websitNormRecords = new ArrayList<>();
+        for (WorkerOrderItem workerOrderItem : workerOrderItems) {
+            WebsitNormRecord websitNormRecord = new WebsitNormRecord();
+            websitNormRecord.setCompanyWechatId(workerOrder.getCompanyWechatId());
+            websitNormRecord.setCompanyWechatName(workerOrder.getCompanyWechatName());
+            websitNormRecord.setGoodsType(workerOrder.getGoodsType());
+            websitNormRecord.setWorkerId(workerOrder.getWorkerId());
+            websitNormRecord.setWorkerName(workerOrder.getWorkerName());
+            websitNormRecord.setOrderId(workerOrder.getWorkerOrderId());
+            websitNormRecord.setRefOrder(workerOrder.getOrderId());
+            websitNormRecord.setWebsitId(workerOrder.getWebsitId());
+            websitNormRecord.setWebsitName(workerOrder.getWebsitName());
+            websitNormRecord.setUseTime(new Date());
+            websitNormRecord.setCreateTime(new Date());
+            websitNormRecord.setGoodsName(workerOrderItem.getGoodsName());
+            websitNormRecord.setGoodsCode(workerOrderItem.getGoodsCode());
+            websitNormRecord.setNormAmount(workerOrderItem.getNormAmount());
+            websitNormRecord.setUnit(workerOrderItem.getUnit());
+            websitNormRecord.setUseQty(Convert.toBigDecimal(workerOrderItem.getNum()));
+            websitNormRecords.add(websitNormRecord);
+        }
+
+        websitNormRecordService.saveBatch(websitNormRecords);
+    }
+
 
     private void addSettlementOrder(WorkerOrder workerOrder, List<WorkerOrderItem> workerOrderItems) {
         AdminCompanyWechat adminCompanyWechat = adminCompanyWechatService.getById(workerOrder.getCompanyWechatId());