From 533fd0d843792fc886771993a0d45b4e5876011c Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 17 八月 2023 15:02:32 +0800
Subject: [PATCH] 111

---
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |  208 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 184 insertions(+), 24 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 596283d..1e0a085 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -17,10 +17,8 @@
 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.UnqualifiedRecordMapper;
+import doumeemes.dao.business.dto.*;
 import doumeemes.dao.business.model.*;
 import doumeemes.dao.ext.*;
 import doumeemes.dao.ext.bean.EndCheckApBean;
@@ -87,6 +85,8 @@
     private PlansExtMapper plansExtMapper;
     @Autowired
     private DeviceExtMapper deviceExtMapper;
+    @Autowired
+    private UnqualifiedRecordMapper unqualifiedRecordMapper;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -360,7 +360,7 @@
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
-    public  Integer comfirmDone(Workorder param){
+    public  Integer comfirmDone(Workorder param,Boolean needCheck){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒");
@@ -388,7 +388,7 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒");
         }
         //濡傛灉闇�瑕佸畬宸ユ鎵嶈兘妫�楠�
-        if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)){
+        if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){
             //鍙湁宸插畬宸ョ姸鎬佹墠鑳界‘璁ゆ姤宸�
             if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -493,6 +493,167 @@
 //        }
         return param.getId();
     }
+
+
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    @Override
+    public  Workorder comfirmDoneNew(AutoWorkReportDTO autoWorkReportDTO, Boolean needCheck){
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒");
+        }
+        if(Objects.isNull(autoWorkReportDTO)
+                || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())
+                || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO
+                || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()== null ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇锋寜瑕佹眰濉啓鍜岄�夋嫨鎻愪氦鏁版嵁锛�");
+        }
+        Workorder mp = new Workorder();
+        mp.setDeleted(Constants.ZERO);
+        mp.setId(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId());
+        mp.setRootDepartId(user.getRootDepartment().getId());
+        mp = workorderExtMapper.selectOne(mp);
+        if(mp== null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ヨ褰曚笉瀛樺湪锛�");
+        }
+
+        Workorder param = new Workorder();
+
+        param.setPlanId(mp.getPlanId());
+        if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒");
+        }
+        //濡傛灉闇�瑕佸畬宸ユ鎵嶈兘妫�楠�
+        if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){
+            //鍙湁宸插畬宸ョ姸鎬佹墠鑳界‘璁ゆ姤宸�
+            if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
+            }
+        }
+        //鍑哄叆搴撴槑缁嗚褰曢泦鍚�
+        List<WOutboundDetail> outboundDetailList = new ArrayList<>();
+        //寰呮洿鏂板伐瑁呴泦鍚堟姇鏂�
+        List<Appliances> updateApplianceList = new ArrayList<>();
+        //寰呮洿鏂板伐瑁呴泦鍚堜骇鍑�
+        List<Appliances> updateApplianceProList = new ArrayList<>();
+        //寰呮洿鏂板簱瀛橀泦鍚�
+        List<WStock> stockList = new ArrayList<>();
+        //鏌ヨ鎶曟枡鍜屾姤宸ヨ褰曞垪琛�
+        List<WorkorderRecordExtListVO>  allRecordList = workorderRecordExtMapper.selectAllList(getQueryRecordParam(param));
+        if(Objects.isNull(allRecordList)||allRecordList.size()==Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈡姇鏂欏拰鎶ュ伐璁板綍!");
+        }
+        //澶勭悊浜у嚭鏁版嵁
+        WorkorderRecord workorderRecord = this.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
+        //妫�鏌ユ暟鎹俊鎭�
+//        caculateCheckRecord(user, mp,allRecordList);
+        QueryBomDetailExtDTO bdparam = initBomParam(user,mp);
+        if(mp.getBomModel()!=null&&Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.pull)){
+            //濡傛灉鏄媺寮忔姇鏂欙紝绯荤粺鏍规嵁BOM鑷姩鎵e噺搴撳瓨
+            dealApplianceMateialPull(mp,user,bdparam,updateApplianceList, stockList);
+        }
+        if(allRecordList!=null && allRecordList.size()>0){
+            if(mp.getBomModel()==null||Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.push)){
+                //濡傛灉鏄帹寮忔姇鏂欙紝璧版甯哥敓浜ф墜鍔ㄦ姇鏂�
+                dealApplianceMateial(mp,user,bdparam,allRecordList,updateApplianceList, outboundDetailList,stockList);
+            }
+            //澶勭悊浜у嚭鏁版嵁
+            dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList);
+        }
+
+        //濡傛灉鏈夋病bom閰嶇疆,妫�鏌ヤ骇鍑猴紙鍖呭惈妫�楠岀殑涓嶈壇鍜屾姤搴熷搧锛夊拰鎶曟枡鏁伴噺鏄惁鐩哥瓑鍖归厤锛屼笉涓�鑷存彁绀洪敊璇�
+        if(bdparam==null){
+            //鎶曟枡鏁伴噺 鍜� 浜у嚭鏁伴噺涓嶇浉绛�
+            if(Constants.formatBigdecimal(mp.getHasMaterialNum()).intValue() != Constants.formatIntegerNum(mp.getHasProduceNum())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曟姇鏂欏拰浜у嚭鏁伴噺涓嶄竴鑷达紝璇风‘璁ゅ悗閲嶈瘯锛�");
+            }
+        }
+        //鏇存柊宸ュ崟鐘舵�佷负宸叉姤宸�
+        updateOrderInfo(user,mp,Constants.WORKORDER_HISTORY_STATUS.baogong);
+
+        //鎵归噺鎻掑叆鍑哄叆搴撴槑缁嗚褰�
+        if(outboundDetailList!=null && outboundDetailList.size()>0){
+            wOutboundDetailExtMapper.insertBatch(outboundDetailList);
+        }
+        if(stockList != null && stockList.size()>0){
+            for(WStock s : stockList){
+                WStock s1 = new WStock();
+                s1.setLocationId(s.getLocationId());
+                s1.setWarehouseId(s.getWarehouseId());
+                s1.setDeleted(Constants.ZERO);
+                s1.setMaterialId(s.getMaterialId());
+                s1.setQualityType(s.getQualityType());
+                s1.setProcedureId(s.getProcedureId());
+                if(StringUtils.isBlank(s.getBatch() )){
+                    s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).isNull("batch").last(" limit 1"));
+                }else{
+                    s1.setBatch(s.getBatch());
+                    s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).last(" limit 1"));
+                }
+                if(s1 ==null){
+                    //濡傛灉搴撳瓨璁板綍涓嶅瓨鍦紝鎻掑叆鏁版嵁
+                    s.setDeleted(Constants.ZERO);
+                    s.setCreateTime(DateUtil.getCurrentDate());
+                    s.setCreateUser(user.getId());
+                    s.setRootDepartId(mp.getRootDepartId());
+                    if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){
+                        //濡傛灉搴撳瓨涓嶈冻
+                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝浠撳簱浣欐枡涓嶈冻锛岃鑱旂郴浠撳簱绠$悊鍛橈紒");
+                    }
+                    wStockExtMapper.insert(s);
+                }else{
+                    //濡傛灉搴撳瓨璁板綍瀛樺湪锛屽垯鏇存柊搴撳瓨閲�
+                    s.setId(s1.getId());
+                    s.setUpdateTime(DateUtil.getCurrentDate());
+                    s.setUpdateUser(user.getId());
+                    s.setNum(Constants.formatBigdecimal(s1.getNum()).add(Constants.formatBigdecimal(s.getNum())));
+                    if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){
+                        //濡傛灉搴撳瓨涓嶈冻
+                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝浠撳簱浣欐枡涓嶈冻锛岃鑱旂郴浠撳簱绠$悊鍛�!锛�");
+                    }
+                    wStockExtMapper.updateById(s);
+                }
+
+            }
+        }
+
+        //瀛樺偍鎶ュ伐涓嶈壇椤规暟鎹�
+        if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+            if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+            }
+        }else{
+            List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList();
+            BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+            }
+            for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) {
+                if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO
+                        ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+                }
+                UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord();
+                unqualifiedRecord.setDeleted(Constants.ZERO);
+                unqualifiedRecord.setCreateUser(user.getId());
+                unqualifiedRecord.setCreateTime(new Date());
+                unqualifiedRecord.setRootDepartId(mp.getRootDepartId());
+                unqualifiedRecord.setDepartId(mp.getDepartId());
+                unqualifiedRecord.setWorkorderId(mp.getId());
+                unqualifiedRecord.setRecordId(workorderRecord.getId());
+                unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId());
+                unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum());
+                unqualifiedRecordMapper.insert(unqualifiedRecord);
+            }
+        }
+
+        return param;
+    }
+
+
 
     private QueryWorkorderRecordExtDTO getQueryRecordParam(Workorder param) {
         QueryWorkorderRecordExtDTO mParam = new QueryWorkorderRecordExtDTO();
@@ -1006,7 +1167,7 @@
         record.setAppliancesId(tModel.getAppliancesId());
         record.setBatch(detail.getBatch());
         record.setRootDepartId(mp.getRootDepartId());
-        record.setNum(tModel.getNum());
+        record.setNum(detail.getNum());
         record.setOutboundId(detail.getOutboundId());
         record.setUnitId(detail.getUnitId());
         record.setWarehouseId(detail.getWarehouseId());
@@ -1017,10 +1178,10 @@
         detail.getWOutboundRecordInList().add(record);
 
         WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
-                tModel.getProcedureId(),tModel.getDoneType(),stockList);
+                tModel.getProcedureId(),doneType,stockList);
         if(stock!=null){
             //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
-            stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
+            stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(detail.getNum())));
         }else{
             stock = new WStock();
             stock.setMaterialId(detail.getMaterialId());
@@ -1028,9 +1189,9 @@
             stock.setWarehouseId(outbound.getWarehouseId());
             stock.setLocationId(mp.getFinishWarehouseLocationId());
             stock.setUnitId(detail.getUnitId());
-            stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
+            stock.setNum(Constants.formatBigdecimal(detail.getNum()));
             stock.setProcedureId(tModel.getProcedureId());
-            stock.setQualityType(tModel.getDoneType());
+            stock.setQualityType(doneType);
             //寰呮洿鏂板簱瀛樹俊鎭�
             stockList.add(stock);
         }
@@ -1355,19 +1516,18 @@
         //璁$畻宸ヨ祫淇℃伅
         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.ONE?num:createWorkorderRecordDTO.getQualifiedNum()));
-        }else{
-            workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
-            workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
+        if(!Objects.isNull(salaryParam)){
+            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.ONE?num:createWorkorderRecordDTO.getQualifiedNum()));
+            }else{
+                workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
+                workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600),BigDecimal.ROUND_HALF_UP));
+            }
         }
         //鎻掑叆宸ュ崟鎿嶄綔璁板綍锛屽苟涓斿垽鏂槸鍚︽洿鏀逛负宸ュ崟鐨勭姸鎬併�愮敓浜т腑銆�
         updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce);

--
Gitblit v1.9.3