From e2f5e981002e85fdde8cc03a8d9826db66021b08 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 16 八月 2023 10:46:50 +0800
Subject: [PATCH] 修復bug

---
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |  184 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 176 insertions(+), 8 deletions(-)

diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
index 8ae95e2..ffb5760 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -16,7 +16,9 @@
 import doumeemes.core.utils.redis.RedisUtil;
 import doumeemes.dao.business.BackOrderDetailMapper;
 import doumeemes.dao.business.BackorderMapper;
+import doumeemes.dao.business.SalaryParamMapper;
 import doumeemes.dao.business.dto.CreateMaterialDTO;
+import doumeemes.dao.business.dto.CreateWorkorderRecordDTO;
 import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
 import doumeemes.dao.business.dto.MaterialListDTO;
 import doumeemes.dao.business.model.*;
@@ -79,6 +81,12 @@
     private WOutboundRecordExtMapper wOutboundRecordExtMapper;
     @Autowired
     private MaterialExtMapper materialExtMapper;
+    @Autowired
+    private SalaryParamMapper salaryParamMapper;
+    @Autowired
+    private PlansExtMapper plansExtMapper;
+    @Autowired
+    private DeviceExtMapper deviceExtMapper;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -142,9 +150,10 @@
                 recordList.add(getWorkrecordModel(user,wStock,mp,materialListDTO.getNum()));
             }
         }
+
         //鎵归噺鎻掑叆鎶曟枡璁板綍
         workorderRecordExtMapper.insertBatch(recordList);
-        //鍗曟坊鍔犲巻鍙茶褰曪紙涓嶆洿鏂扮姸鎬侊級
+        //鍗曟坊鍔犲巻鍙茶褰曪紙鍒ゆ柇鏇存柊涓虹敓浜т腑锛�
         updateOrderInfo(user,mp,Constants.WORKORDER_HISTORY_STATUS.material);
         return param.getId();
     }
@@ -183,6 +192,14 @@
         return mp;
     }
 
+    private void getPlansAndValid(LoginUserInfo user, Plans mp)  throws  BusinessException{
+        if(mp== null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ヨ褰曚笉瀛樺湪锛�");
+        }
+        if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒");
+        }
+    }
 
     private QueryBomDetailExtDTO initBomParam(LoginUserInfo user, Workorder mp)  throws BusinessException{
         QueryBomExtDTO bb = new QueryBomExtDTO();
@@ -202,6 +219,27 @@
         bom.setBomId(versionBom.getBomVersionId());
 //        bom.setProcedureId(mp.getProcedureId());
         bom.setWorkorderId(mp.getId());
+        return bom;
+    }
+
+    private QueryBomDetailExtDTO initBomParamForPlans(LoginUserInfo user, Plans plans)  throws BusinessException{
+        QueryBomExtDTO bb = new QueryBomExtDTO();
+        bb.setDepartId(plans.getDepartId());
+        bb.setDeleted(Constants.ZERO);
+        bb.setRootDepartId(user.getRootDepartment().getId());
+        bb.setMaterialId(plans.getMaterialId());
+        bb.setProcedureId(plans.getProcedureId());
+        BomExtListVO versionBom = bomExtMapper.selectByModel( bb);
+        if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){
+            return  null;
+            // throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠墿鏂橞OM淇℃伅閰嶇疆鏈夎锛岃鑱旂郴绠$悊鍛橈紒");
+        }
+        plans.setBomModel(versionBom);
+        QueryBomDetailExtDTO  bom = new QueryBomDetailExtDTO();
+        bom.setDeleted(Constants.ZERO);
+        bom.setBomId(versionBom.getBomVersionId());
+//        bom.setProcedureId(mp.getProcedureId());
+        bom.setPlansId(plans.getId());
         return bom;
     }
 
@@ -276,7 +314,6 @@
     }
 
     private void updateOrderInfo(LoginUserInfo user, Workorder mp,int status) {
-
         List<WorkorderHistory> whList = new ArrayList<>();
         //宸ュ崟鍘嗗彶鏁版嵁
         Workorder order = new Workorder();
@@ -294,6 +331,13 @@
             order.setStatus(Constants.WORKORDER_STATUS.material);
         }else if(status ==Constants.WORKORDER_HISTORY_STATUS.done){
             order.setStatus(Constants.WORKORDER_STATUS.done);
+        }else if(status ==Constants.WORKORDER_HISTORY_STATUS.material ||status ==Constants.WORKORDER_HISTORY_STATUS.produce){
+            //鎶曟枡鎿嶄綔
+            if(Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.create)
+                    ||Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.material)){
+                //濡傛灉鏄凡鍒涘缓鎴栬�呭凡澶囨枡鐘舵�佺殑宸ュ崟锛屼慨鏀瑰叾鐘舵�佷负銆愮敓浜т腑銆�
+                order.setStatus(Constants.WORKORDER_STATUS.producing);
+            }
         }
         workorderExtMapper.updateById(order);
         workorderHistoryExtMapper.insertBatch(whList);
@@ -381,9 +425,6 @@
             dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList);
         }
 
-        if(1==1){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"123");
-        }
 
         //濡傛灉鏈夋病bom閰嶇疆,妫�鏌ヤ骇鍑猴紙鍖呭惈妫�楠岀殑涓嶈壇鍜屾姤搴熷搧锛夊拰鎶曟枡鏁伴噺鏄惁鐩哥瓑鍖归厤锛屼笉涓�鑷存彁绀洪敊璇�
         if(bdparam==null){
@@ -504,6 +545,7 @@
             //濡傛灉闇�瑕佹姇鏂欑殑鐗╂枡闆嗗悎锛屽湪搴撳瓨涓鎵炬姇鏂欐潵婧�
             for(WStock model : materialList){
                 for(WStock ts : allList){
+
                     if(Constants.equalsInteger(model.getMaterialId(),ts.getMaterialId())){
                         //杩橀渶瑕佹姇鏂欐暟閲�
                         BigDecimal actNum = Constants.formatBigdecimal(model.getNum()).subtract(Constants.formatBigdecimal(model.getTNum()));
@@ -519,6 +561,10 @@
                             //濡傛灉宸茬粡婊¤冻鍓╀綑闇�姹傞噺
                             isfull =true;
                         }
+
+                        //娣诲姞鎶曟枡璁板綍
+                        workorderRecordExtMapper.insert(getWorkrecordModel(user,ts,mp,actNum));
+
                         //鏇存柊宸茬粡鎶曟枡鏁伴噺
                         model.setTNum(Constants.formatBigdecimal(model.getTNum()).add(actNum));
                         WOutbound outbound = getFromOutboundList(ts.getWarehouseId(),outboundList);
@@ -971,15 +1017,15 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曚俊鎭紒");
         }
         if(Objects.isNull(dealWorkorderRecordDTO.getDownType())
-            ||Objects.isNull(dealWorkorderRecordDTO.getWorkorderId())
-            ||Objects.isNull(dealWorkorderRecordDTO.getNum())
+                ||Objects.isNull(dealWorkorderRecordDTO.getWorkorderId())
+                ||Objects.isNull(dealWorkorderRecordDTO.getNum())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         WorkorderRecord workorderRecord = new WorkorderRecord();
         if(Objects.isNull(dealWorkorderRecordDTO.getRecordId())){
             //鏌ヨ宸ュ崟涓嬫槸鍚﹀瓨鍦ㄥ搴旇褰�
-             workorderRecord = workorderRecordExtMapper.selectOne(new QueryWrapper<WorkorderRecord>()
+            workorderRecord = workorderRecordExtMapper.selectOne(new QueryWrapper<WorkorderRecord>()
                     .eq("WORKORDER_ID",dealWorkorderRecordDTO.getWorkorderId())
                     .eq("DONE_TYPE",dealWorkorderRecordDTO.getDownType())
                     .eq("TYPE",Constants.ONE)
@@ -1097,5 +1143,127 @@
         return PageData.from(new PageInfo<>(result));
     }
 
+    @Override
+    public PageData<WStockExtListVO> choiceStockPageForPlans(PageWrap<QueryWStockDto> pageWrap,LoginUserInfo userInfo) {
+        Plans plans =plansExtMapper.selectById(pageWrap.getModel().getPlansId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌宸ュ簭璁″垝淇℃伅锛�");
+        }
+        Device device = deviceExtMapper.selectById(pageWrap.getModel().getDeviceId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌璁惧淇℃伅锛�");
+        }
+        //鏌ヨ骞堕獙璇佸伐鍗曚俊鎭�
+        this.getPlansAndValid(userInfo,plans);
+        //鏌ヨ鍏ㄩ儴bom缁勬垚鏁版嵁锛屽鏋滄湁BOM閰嶇疆锛屾寜鐓OM缁勬垚杩涜鎶曟枡锛屽鏋滄病鏈塀OM閰嶇疆锛屽垯鎶曟枡鐗╂枡涓哄緟鐢熶骇搴撲綅鐨勭墿鏂欐湰韬�
+        QueryBomDetailExtDTO bdparam = initBomParamForPlans(userInfo,plans);
+        List<BomDetailExtListVO> bomDetailList = null;
+        if(bdparam!=null){
+            bomDetailList = bomDetailExtMapper.selectList(bdparam);
+            List<Integer> materialDistributeId = bomDetailList.stream().map(BomDetailExtListVO::getMaterialId).collect(Collectors.toList());
+            pageWrap.getModel().setMaterialDistributeId(materialDistributeId);
+        }else{
+            //鏌ヨ鐗╂枡BOM淇℃伅
+            Bom bom = bomExtMapper.selectOne(new QueryWrapper<Bom>().eq("MATERIAL_ID",plans.getMaterialId()).eq("DELETED",Constants.ZERO).last(" limit 1 "));
+            if(Objects.isNull(bom)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌BOM淇℃伅锛�");
+            }
+            RouteProcedure currentRouteProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>()
+                    .eq("ROUTE_ID",bom.getRouteId())
+                    .eq("PROCEDURE_ID",plans.getProcedureId())
+                    .last(" limit 1 ")
+            );
+            if(currentRouteProcedure!=null){
+                RouteProcedure routeProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>()
+                        .eq("ROUTE_ID",currentRouteProcedure.getRouteId()).apply(" SORTNUM <  " + currentRouteProcedure.getSortnum() ).eq("STATUS",Constants.ONE).orderByDesc(" SORTNUM ").last(" limit 1  ")
+                );
+                if(Objects.isNull(routeProcedure)){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌鐢熶骇鐗╂枡涓婁竴姝ュ伐搴忎俊鎭紒");
+                }
+                pageWrap.getModel().setProcedureId(routeProcedure.getProcedureId());
+                pageWrap.getModel().setMaterialId(plans.getMaterialId());
+            }
+        }
+        pageWrap.getModel().setLocationId(device.getProduceWarehouseLocationId());
+        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
+        List<WStockExtListVO> result = wStockExtMapper.choiceStockList(pageWrap.getModel());
+        return PageData.from(new PageInfo<>(result));
+    }
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo){
+        Workorder workorder  = workorderExtMapper.selectById(createWorkorderRecordDTO.getWorkorderId());
+        if(Objects.isNull(workorder)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌璇ュ伐鍗曚俊鎭紒");
+        }
+        if(Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
+                ||Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
+                ||Objects.isNull(createWorkorderRecordDTO.getWorkorderId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        BigDecimal num = createWorkorderRecordDTO.getQualifiedNum().add(createWorkorderRecordDTO.getUnQualifiedNum());
+        WorkorderRecord workorderRecord = new WorkorderRecord();
+        //鏌ヨ宸ュ崟涓嬫槸鍚﹀瓨鍦ㄥ搴旇褰�
+        workorderRecord = workorderRecordExtMapper.selectOne(new QueryWrapper<WorkorderRecord>()
+                .eq("WORKORDER_ID",createWorkorderRecordDTO.getWorkorderId())
+                .eq("TYPE",Constants.ONE)
+                .eq("DELETED",Constants.ZERO)
+                .last(" limit 1  ")
+        );
+        if(!Objects.isNull(workorderRecord)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑璇ョ被浜у嚭璁板綍宸插瓨鍦紒");
+        }
+        if(num.compareTo(BigDecimal.valueOf(workorder.getPlanNum()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
+        }
+        //鏁版嵁瀛樺偍
+        workorderRecord = new WorkorderRecord();
+        workorderRecord.setDeleted(Constants.ZERO);
+        workorderRecord.setCreateUser(loginUserInfo.getId());
+        workorderRecord.setCreateTime(new Date());
+        workorderRecord.setNum(num);
+        workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+        workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId());
+        workorderRecord.setPlanId(workorder.getPlanId());
+        workorderRecord.setWorkorderId(createWorkorderRecordDTO.getWorkorderId());
+        workorderRecord.setBatch(workorder.getBatch());
+        workorderRecord.setFactoryId(workorder.getFactoryId());
+        workorderRecord.setProcedureId(workorder.getProcedureId());
+        workorderRecord.setProDate(new Date());
+        workorderRecord.setType(Constants.ONE);
+        workorderRecord.setMaterialId(workorder.getMaterialId());
+        workorderRecord.setUnitId(workorder.getUnitId());
+        workorderRecord.setMaterialBatch(workorder.getBatch());
+        workorderRecord.setUnqualifiedNum(createWorkorderRecordDTO.getUnQualifiedNum());
+        workorderRecord.setQualifiedNum(createWorkorderRecordDTO.getQualifiedNum());
+        //璁$畻宸ヨ祫淇℃伅
+        SalaryParam salaryParam = salaryParamMapper.selectOne(new QueryWrapper<SalaryParam>().eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",workorderRecord.getMaterialId())
+                .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).last(" limit 1  "));
+        if(Objects.isNull(salaryParam)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃伐璧勭哗鏁堥厤缃紒");
+        }
+        workorderRecord.setSalaryPrice(salaryParam.getSalary());
+        workorderRecord.setSalaryType(salaryParam.getType());
+        workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
+
+        //璁′欢宸ヨ祫
+        if(salaryParam.getType().equals(Constants.ZERO)){
+            workorderRecord.setSalaryNum(salaryParam.getNum());
+            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum()));
+        }else{
+            workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
+            workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
+        }
+
+        //鎻掑叆宸ュ崟鎿嶄綔璁板綍锛屽苟涓斿垽鏂槸鍚︽洿鏀逛负宸ュ崟鐨勭姸鎬併�愮敓浜т腑銆�
+        updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce);
+        workorderRecordExtMapper.insert(workorderRecord);
+        return workorderRecord;
+    }
+    
+    
+    
 
 }

--
Gitblit v1.9.3