From 1f4e7d0f73a73e7350cf5a1df279d5f30904c5d5 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 06 十二月 2023 08:41:32 +0800
Subject: [PATCH] bug

---
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |  673 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 583 insertions(+), 90 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 a6082f3..3b866da 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -16,9 +16,9 @@
 import doumeemes.core.utils.redis.RedisUtil;
 import doumeemes.dao.business.BackOrderDetailMapper;
 import doumeemes.dao.business.BackorderMapper;
-import doumeemes.dao.business.dto.CreateMaterialDTO;
-import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
-import doumeemes.dao.business.dto.MaterialListDTO;
+import doumeemes.dao.business.SalaryParamMapper;
+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;
@@ -26,6 +26,7 @@
 import doumeemes.dao.ext.dto.*;
 import doumeemes.dao.ext.vo.*;
 import doumeemes.dao.system.model.SystemDictData;
+import doumeemes.service.business.UnqualifiedRecordService;
 import doumeemes.service.business.WOutboundService;
 import doumeemes.service.ext.*;
 import doumeemes.service.system.SystemDictDataService;
@@ -79,6 +80,19 @@
     private WOutboundRecordExtMapper wOutboundRecordExtMapper;
     @Autowired
     private MaterialExtMapper materialExtMapper;
+    @Autowired
+    private SalaryParamMapper salaryParamMapper;
+    @Autowired
+    private PlansExtMapper plansExtMapper;
+    @Autowired
+    private DeviceExtMapper deviceExtMapper;
+    @Autowired
+    private UnqualifiedRecordMapper unqualifiedRecordMapper;
+    @Autowired
+    private CompanyUserExtMapper companyUserExtMapper;
+
+    @Autowired
+    private UnqualifiedRecordService unqualifiedRecordService;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -177,6 +191,7 @@
         }
         if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.create)
                 && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.material)
+                && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.producing)
                 && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.check)
                 && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -184,6 +199,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();
@@ -203,6 +226,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;
     }
 
@@ -258,15 +302,15 @@
         wrModel.setMaterialId(wStock.getMaterialId());
         wrModel.setDepartId(mp.getDepartId());
         wrModel.setCreateTime(DateUtil.getCurrentDate());
-        wrModel.setCreateUser(user.getId());
+        wrModel.setCreateUser(mp.getCreateUser());
         wrModel.setMaterialBatch(mp.getBatch());
         wrModel.setType(Constants.WORKORDER_RECORD_TYPE.materail);
         wrModel.setFactoryId(mp.getFactoryId());
-        wrModel.setProcedureId(mp.getProcedureId());
-        wrModel.setBatch(mp.getBatch());
-        wrModel.setUnitId(mp.getUnitId());
+        wrModel.setProcedureId(wStock.getProcedureId());
+        wrModel.setBatch(wStock.getBatch());
+        wrModel.setUnitId(wStock.getUnitId());
         wrModel.setPlanId(mp.getPlanId());
-        //TODO 鐩墠浣跨敤宸ヨ涓婚敭瀛樺偍璐т綅涓婚敭
+        //鐩墠浣跨敤宸ヨ涓婚敭瀛樺偍璐т綅涓婚敭
         wrModel.setAppliancesId(wStock.getId());
         wrModel.setMaterialDonetype(wStock.getQualityType());
         wrModel.setMaterialProcedureId(wStock.getProcedureId());
@@ -277,7 +321,6 @@
     }
 
     private void updateOrderInfo(LoginUserInfo user, Workorder mp,int status) {
-
         List<WorkorderHistory> whList = new ArrayList<>();
         //宸ュ崟鍘嗗彶鏁版嵁
         Workorder order = new Workorder();
@@ -295,7 +338,7 @@
             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){
+        }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)){
@@ -324,7 +367,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(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒");
@@ -352,7 +395,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(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -389,9 +432,6 @@
             dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList);
         }
 
-        if(1==1){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"123");
-        }
 
         //濡傛灉鏈夋病bom閰嶇疆,妫�鏌ヤ骇鍑猴紙鍖呭惈妫�楠岀殑涓嶈壇鍜屾姤搴熷搧锛夊拰鎶曟枡鏁伴噺鏄惁鐩哥瓑鍖归厤锛屼笉涓�鑷存彁绀洪敊璇�
         if(bdparam==null){
@@ -461,6 +501,186 @@
         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(), "瀵逛笉璧凤紝璇ヨ褰曚笉瀛樺湪锛�");
+        }
+        Plans plans = plansExtMapper.selectById(mp.getPlanId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝宸ュ簭璁″垝璁板綍涓嶅瓨鍦紒");
+        }
+        //鏌ヨ宸ュ簭璁″垝涓� 鎵�鏈夊伐鍗曞凡鎶ュ伐鏁伴噺
+        QueryWorkorderExtDTO dto = new QueryWorkorderExtDTO();
+        dto.setPlanId(mp.getPlanId());
+        dto.setDeleted(Constants.ZERO);
+        dto.setStatus(Constants.WORKORDER_STATUS.baogong);
+        List<WorkorderExtListVO> workorderList = workorderExtMapper.selectList(dto);
+        Integer plansQualifiedNum = 0 , plansUnQualifiedNum = 0;
+        plansQualifiedNum = workorderList.stream().map( workorderExtListVO -> workorderExtListVO.getQualifiedNum()).reduce(Constants.ZERO, Integer::sum);
+        plansUnQualifiedNum = workorderList.stream().map( workorderExtListVO -> workorderExtListVO.getUnqualifiedNum()).reduce(Constants.ZERO, Integer::sum);
+        if((BigDecimal.valueOf(plansQualifiedNum).add(BigDecimal.valueOf(plansUnQualifiedNum).add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())
+                .add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum()))).compareTo(BigDecimal.valueOf(plans.getNum()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎶ュ伐鏁伴噺瓒呭嚭宸ュ簭璁″垝鎬绘暟锛�");
+        }
+        Workorder param = new Workorder();
+
+        param.setPlanId(mp.getPlanId());
+        param.setId(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId());
+        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<>();
+        //澶勭悊浜у嚭鏁版嵁
+        WorkorderRecord workorderRecord = this.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user,null);
+        //鏌ヨ鎶曟枡鍜屾姤宸ヨ褰曞垪琛�
+        List<WorkorderRecordExtListVO>  allRecordList = workorderRecordExtMapper.selectAllList(getQueryRecordParam(param));
+        if(Objects.isNull(allRecordList)||allRecordList.size()==Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈡姇鏂欏拰鎶ュ伐璁板綍!");
+        }
+        //妫�鏌ユ暟鎹俊鎭�
+//        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(), "瀵逛笉璧凤紝璇ュ伐鍗曟姇鏂欏拰浜у嚭鏁伴噺涓嶄竴鑷达紝璇风‘璁ゅ悗閲嶈瘯锛�");
+            }
+        }
+        //鏇存柊宸ュ崟鐘舵�佷负宸叉姤宸�
+        mp.setUnqualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().intValue());
+        mp.setQualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().intValue());
+        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();
         mParam.setWorkorderId(param.getId());
@@ -511,6 +731,11 @@
             List<WOutbound> outboundList = new ArrayList<>();
             //濡傛灉闇�瑕佹姇鏂欑殑鐗╂枡闆嗗悎锛屽湪搴撳瓨涓鎵炬姇鏂欐潵婧�
             for(WStock model : materialList){
+                List<WStock> useList = allList.stream().filter(wStock -> Constants.equalsInteger(model.getMaterialId(),wStock.getMaterialId())).collect(Collectors.toList());
+                BigDecimal wStockNum = useList.stream().map(s -> s.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                if(wStockNum.compareTo(Constants.formatBigdecimal(model.getNum()))<Constants.ZERO){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鐢熶骇鐗╂枡涓嶈冻锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+                }
                 for(WStock ts : allList){
                     if(Constants.equalsInteger(model.getMaterialId(),ts.getMaterialId())){
                         //杩橀渶瑕佹姇鏂欐暟閲�
@@ -527,6 +752,10 @@
                             //濡傛灉宸茬粡婊¤冻鍓╀綑闇�姹傞噺
                             isfull =true;
                         }
+
+                        //娣诲姞鎶曟枡璁板綍
+                        workorderRecordExtMapper.insert(getWorkrecordModel(user,ts,mp,actNum));
+
                         //鏇存柊宸茬粡鎶曟枡鏁伴噺
                         model.setTNum(Constants.formatBigdecimal(model.getTNum()).add(actNum));
                         WOutbound outbound = getFromOutboundList(ts.getWarehouseId(),outboundList);
@@ -634,6 +863,7 @@
             for (BomDetailExtListVO i :bomDetailList) {
                 //鏌ヨ鏄惁鎶曟枡
                 if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>()
+                                .eq("WORKORDER_ID",mp.getId())
                         .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){
                     throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鏈姇鏂橞OM鐗╂枡锛屾棤娉曡繘琛屾姤宸�");
                 }
@@ -756,6 +986,126 @@
 
 
 
+//    private void dealAppliancePro(Workorder mp
+//            , LoginUserInfo user
+//            , List<WorkorderRecordExtListVO> allRecordList
+//            , List<Appliances> updateApplianceList
+//            , List<Appliances> updateApplianceProList
+//            ,   List<WOutboundDetail> outboundDetailList
+//            ,   List<WStock> stockList) {
+//        WOutbound outbound = new WOutbound();
+//        outbound.setDeleted(Constants.ZERO);
+//        outbound.setCreateTime(DateUtil.getCurrentDate());
+//        outbound.setDealDate(outbound.getCreateTime());
+//        outbound.setValidDate(outbound.getCreateTime());
+//        outbound.setCreateUser(user.getId());
+//        outbound.setRootDepartId(mp.getRootDepartId());
+//        outbound.setDepartId(mp.getDepartId());
+//        outbound.setStatus(Constants.WOUTBOUND_STATUS.dealed);
+//        outbound.setType(Constants.WOUTBOUND_TYPE.in);
+//        //2022骞�7鏈�1鏃�14:42:41 鍔犲叆鍗曟嵁绫诲埆
+//        outbound.setBillType(Constants.WOUTBOUND_BILLTYPE.workerOrderIn);
+//        outbound.setCode(wOutboundService.getNextInCode(user.getCompany().getId()));
+//        outbound.setOrigin(Constants.ONE);
+//        outbound.setOriginType(Constants.WOUTBOUND_ORIGIN_TYPE.produce);
+//        outbound.setOriginCode(mp.getCode());
+//        outbound.setOriginId(mp.getId());
+//        outbound.setPlanDate(DateUtil.getCurrentDate());
+//        outbound.setProcedureId(mp.getProcedureId());
+//        outbound.setUserId(user.getId());
+//        outbound.setWarehouseId(mp.getFinishWarehouseId());
+//        wOutboundService.create(outbound);
+//
+//        List<WOutboundDetail> detailList = new ArrayList<>();
+//        List<WOutboundRecord> recordList = new ArrayList<>();
+//        for(WorkorderRecordExtListVO tModel :allRecordList){
+//            if(Constants.equalsInteger(tModel.getType(),Constants.WORKORDER_RECORD_TYPE.produce)){
+//                if(tModel.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+//                    continue;
+//                }
+//                //濡傛灉鏄骇鍑�
+//                mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
+//
+//                //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
+//                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
+//                if(detail!=null){
+//                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
+//                }else{
+//                    detail = new WOutboundDetail();
+//                    detail.setDeleted(Constants.ZERO);
+//                    detail.setCreateTime(DateUtil.getCurrentDate());
+//                    detail.setCreateUser(user.getId());
+//                    detail.setOutboundId(outbound.getId());
+//                    detail.setRootDepartId(outbound.getRootDepartId());
+//                    detail.setWarehouseId(outbound.getWarehouseId());
+//                    detail.setLocationId(mp.getFinishWarehouseLocationId());
+//                    detail.setNum(tModel.getNum());
+//                    detail.setStatus(Constants.ONE);
+//                    detail.setDoneNum(tModel.getNum());
+//                    detail.setDoneDate(new Date());
+//                    detail.setUnitId(tModel.getUnitId());
+//                    detail.setBatch(tModel.getMaterialBatch());
+//                    detail.setProcedureId(tModel.getProcedureId());
+//                    detail.setMaterialId(tModel.getMaterialId());
+//                    detail.setQualityType(tModel.getDoneType());
+//                    detail.setWOutboundRecordInList(new ArrayList<>());
+//                    detailList.add(detail);
+//                }
+//
+//                WOutboundRecord record = new WOutboundRecord();
+//                record.setDeleted(Constants.ZERO);
+//                record.setCreateTime(DateUtil.getCurrentDate());
+//                record.setCreateUser(user.getId());
+//                record.setAppliancesId(tModel.getAppliancesId());
+//                record.setBatch(detail.getBatch());
+//                record.setRootDepartId(mp.getRootDepartId());
+//                record.setNum(tModel.getNum());
+//                record.setOutboundId(detail.getOutboundId());
+//                record.setUnitId(detail.getUnitId());
+//                record.setWarehouseId(detail.getWarehouseId());
+//                record.setMaterialId(detail.getMaterialId());
+//                record.setProcedureId(detail.getProcedureId());
+//                record.setLocationId(detail.getLocationId());
+//                record.setQualityType(detail.getQualityType());
+//                detail.getWOutboundRecordInList().add(record);
+//
+//                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
+//                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
+//                if(stock!=null){
+//                    //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
+//                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
+//                }else{
+//                    stock = new WStock();
+//                    stock.setMaterialId(detail.getMaterialId());
+//                    stock.setBatch(detail.getBatch());
+//                    stock.setWarehouseId(outbound.getWarehouseId());
+//                    stock.setLocationId(mp.getFinishWarehouseLocationId());
+//                    stock.setUnitId(detail.getUnitId());
+//                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
+//                    stock.setProcedureId(tModel.getProcedureId());
+//                    stock.setQualityType(tModel.getDoneType());
+//                    //寰呮洿鏂板簱瀛樹俊鎭�
+//                    stockList.add(stock);
+//                }
+//            }
+//        }
+//        for(WOutboundDetail detail : detailList){
+//            wOutboundDetailExtMapper.insert(detail);
+//            //璁板綍搴撳瓨鍙樺姩璁板綍
+//            wStockRecordExtService.saveRecord(Constants.ONE,detail.getId(),user);
+//            if(detail.getWOutboundRecordInList()!=null){
+//                for(WOutboundRecord r : detail.getWOutboundRecordInList()){
+//                    r.setDetailId(detail.getId());
+//                    wOutboundRecordExtMapper.insert(r);
+//                }
+//            }
+//        }
+//        if(Constants.formatIntegerNum(mp.getHasProduceNum()) >Constants.formatIntegerNum(mp.getPlanNum())){
+//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
+//        }
+//    }
+
+
     private void dealAppliancePro(Workorder mp
             , LoginUserInfo user
             , List<WorkorderRecordExtListVO> allRecordList
@@ -795,78 +1145,10 @@
                 }
                 //濡傛灉鏄骇鍑�
                 mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
-                if(tModel.getDoneType() == null){
-                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ヨ鍣ㄥ叿銆�"+tModel.getAmodel().getCode()+"銆戜骇鍑鸿川閲忓睘鎬т负绌猴紝鏃犳硶鎶ュ伐锛�");
-                }
-                if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){
-                    //濡傛灉涓嶈壇锛岀疮璁″伐鍗曠殑涓嶈壇浜у嚭
-                    mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
-                }else{
-                    //濡傛灉鏄悎鏍硷紝绱宸ュ崟鐨勫悎鏍兼暟閲�
-                    mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
-                }
-
-                //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
-                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
-                if(detail!=null){
-                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
-                }else{
-                    detail = new WOutboundDetail();
-                    detail.setDeleted(Constants.ZERO);
-                    detail.setCreateTime(DateUtil.getCurrentDate());
-                    detail.setCreateUser(user.getId());
-                    detail.setOutboundId(outbound.getId());
-                    detail.setRootDepartId(outbound.getRootDepartId());
-                    detail.setWarehouseId(outbound.getWarehouseId());
-                    detail.setLocationId(mp.getFinishWarehouseLocationId());
-                    detail.setNum(tModel.getNum());
-                    detail.setStatus(Constants.ONE);
-                    detail.setDoneNum(tModel.getNum());
-                    detail.setDoneDate(new Date());
-                    detail.setUnitId(tModel.getUnitId());
-                    detail.setBatch(tModel.getMaterialBatch());
-                    detail.setProcedureId(tModel.getProcedureId());
-                    detail.setMaterialId(tModel.getMaterialId());
-                    detail.setQualityType(tModel.getDoneType());
-                    detail.setWOutboundRecordInList(new ArrayList<>());
-                    detailList.add(detail);
-                }
-
-                WOutboundRecord record = new WOutboundRecord();
-                record.setDeleted(Constants.ZERO);
-                record.setCreateTime(DateUtil.getCurrentDate());
-                record.setCreateUser(user.getId());
-                record.setAppliancesId(tModel.getAppliancesId());
-                record.setBatch(detail.getBatch());
-                record.setRootDepartId(mp.getRootDepartId());
-                record.setNum(tModel.getNum());
-                record.setOutboundId(detail.getOutboundId());
-                record.setUnitId(detail.getUnitId());
-                record.setWarehouseId(detail.getWarehouseId());
-                record.setMaterialId(detail.getMaterialId());
-                record.setProcedureId(detail.getProcedureId());
-                record.setLocationId(detail.getLocationId());
-                record.setQualityType(detail.getQualityType());
-                detail.getWOutboundRecordInList().add(record);
-
-                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
-                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
-                if(stock!=null){
-                    //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
-                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
-                }else{
-                    stock = new WStock();
-                    stock.setMaterialId(detail.getMaterialId());
-                    stock.setBatch(detail.getBatch());
-                    stock.setWarehouseId(outbound.getWarehouseId());
-                    stock.setLocationId(mp.getFinishWarehouseLocationId());
-                    stock.setUnitId(detail.getUnitId());
-                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
-                    stock.setProcedureId(tModel.getProcedureId());
-                    stock.setQualityType(tModel.getDoneType());
-                    //寰呮洿鏂板簱瀛樹俊鎭�
-                    stockList.add(stock);
-                }
+                //浜у嚭鍚堟牸
+                this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList);
+               //浜у嚭涓嶈壇
+                this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList);
             }
         }
         for(WOutboundDetail detail : detailList){
@@ -884,6 +1166,71 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
         }
     }
+
+
+    public void createOutDetail(LoginUserInfo user,WOutbound outbound,Workorder mp,WorkorderRecordExtListVO tModel,Integer doneType
+            ,List<WOutboundDetail> detailList,List<WStock> stockList ){
+        //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
+        WOutboundDetail detail =  new WOutboundDetail();
+        detail.setDeleted(Constants.ZERO);
+        detail.setCreateTime(DateUtil.getCurrentDate());
+        detail.setCreateUser(user.getId());
+        detail.setOutboundId(outbound.getId());
+        detail.setRootDepartId(outbound.getRootDepartId());
+        detail.setWarehouseId(outbound.getWarehouseId());
+        detail.setLocationId(mp.getFinishWarehouseLocationId());
+        detail.setNum(BigDecimal.valueOf(doneType.equals(Constants.ZERO)?tModel.getQualifiedNum():tModel.getUnqualifiedNum()));
+        if(detail.getNum().compareTo(BigDecimal.ZERO)==Constants.ZERO){
+            return;
+        }
+        detail.setStatus(Constants.ONE);
+        detail.setDoneNum(detail.getNum());
+        detail.setDoneDate(new Date());
+        detail.setUnitId(tModel.getUnitId());
+        detail.setBatch(tModel.getMaterialBatch());
+        detail.setProcedureId(tModel.getProcedureId());
+        detail.setMaterialId(tModel.getMaterialId());
+        detail.setQualityType(doneType);
+        detail.setWOutboundRecordInList(new ArrayList<>());
+        detailList.add(detail);
+
+        WOutboundRecord record = new WOutboundRecord();
+        record.setDeleted(Constants.ZERO);
+        record.setCreateTime(DateUtil.getCurrentDate());
+        record.setCreateUser(user.getId());
+        record.setAppliancesId(tModel.getAppliancesId());
+        record.setBatch(detail.getBatch());
+        record.setRootDepartId(mp.getRootDepartId());
+        record.setNum(detail.getNum());
+        record.setOutboundId(detail.getOutboundId());
+        record.setUnitId(detail.getUnitId());
+        record.setWarehouseId(detail.getWarehouseId());
+        record.setMaterialId(detail.getMaterialId());
+        record.setProcedureId(detail.getProcedureId());
+        record.setLocationId(detail.getLocationId());
+        record.setQualityType(detail.getQualityType());
+        detail.getWOutboundRecordInList().add(record);
+
+        WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
+                tModel.getProcedureId(),doneType,stockList);
+        if(stock!=null){
+            //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
+            stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(detail.getNum())));
+        }else{
+            stock = new WStock();
+            stock.setMaterialId(detail.getMaterialId());
+            stock.setBatch(detail.getBatch());
+            stock.setWarehouseId(outbound.getWarehouseId());
+            stock.setLocationId(mp.getFinishWarehouseLocationId());
+            stock.setUnitId(detail.getUnitId());
+            stock.setNum(Constants.formatBigdecimal(detail.getNum()));
+            stock.setProcedureId(tModel.getProcedureId());
+            stock.setQualityType(doneType);
+            //寰呮洿鏂板簱瀛樹俊鎭�
+            stockList.add(stock);
+        }
+    }
+
 
     private WStock initMaterialNum(Integer materialId, BigDecimal num) {
         WStock s = new WStock();
@@ -979,15 +1326,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)
@@ -1058,6 +1405,15 @@
     public List<WorkorderRecord> getWorkorderRecordList(Integer workorderId) {
         List<WorkorderRecord>  workorderRecordList = workorderRecordExtMapper.selectList(
                 new QueryWrapper<WorkorderRecord>().eq("WORKORDER_ID",workorderId).eq("TYPE",Constants.ONE).eq("DELETED",Constants.ZERO).orderByAsc(" DONE_TYPE "));
+        if(!Objects.isNull(workorderRecordList)&workorderRecordList.size()>Constants.ZERO){
+            for (WorkorderRecord workorderRecord:workorderRecordList) {
+                //鏌ヨ涓嶈壇浜у嚭璁板綍璇︽儏 浜у嚭 涓� 涓嶈壇 鎵嶅瓨鍦ㄨ鏁版嵁
+                if(workorderRecord.getType().equals(Constants.ONE)&&workorderRecord.getUnqualifiedNum().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+                    List<UnqualifiedRecord> unqualifiedRecordList = unqualifiedRecordService.findJoinList(workorderRecord.getId());
+                    workorderRecord.setUnqualifiedRecordList(unqualifiedRecordList);
+                }
+            }
+        }
         return  workorderRecordList;
     }
 
@@ -1105,5 +1461,142 @@
         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 ,Integer userId){
+        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);
+        if(!Objects.isNull(userId)){
+            CompanyUser companyUser = new CompanyUser();
+            companyUser.setUserId(userId);
+            companyUser.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+            companyUser =     companyUserExtMapper.selectOne(new QueryWrapper<>(companyUser).last("limit 1"));
+            if(Objects.isNull(companyUser)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌鐢熶骇浜哄憳瀵瑰簲浼佷笟鐢ㄦ埛淇℃伅锛�");
+            }
+            workorderRecord.setCreateUser(userId);
+            workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+            workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId());
+        }else{
+            workorderRecord.setCreateUser(loginUserInfo.getId());
+            workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+            workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId());
+        }
+        workorderRecord.setCreateTime(new Date());
+        workorderRecord.setNum(num);
+        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()).eq("TYPE",createWorkorderRecordDTO.getType()).last(" limit 1  "));
+        if(!Objects.isNull(salaryParam)){
+            workorderRecord.setSalaryPrice(salaryParam.getSalary());
+            workorderRecord.setSalaryType(salaryParam.getType());
+            workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
+            workorderRecord.setSalaryTimes(salaryParam.getTimes());
+            //璁′欢宸ヨ祫
+            if(salaryParam.getType().equals(Constants.ZERO)){
+                workorderRecord.setSalaryNum(salaryParam.getNum());
+                workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
+                workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum()));
+            }else{
+                if(!Objects.isNull(createWorkorderRecordDTO.getDuration())&&Constants.formatIntegerNum(createWorkorderRecordDTO.getDuration())>Constants.ZERO){
+                    workorderRecord.setSalaryNum(salaryParam.getNum());
+                    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);
+        workorderRecordExtMapper.insert(workorderRecord);
+        return workorderRecord;
+    }
+    
+    
+    
 
 }

--
Gitblit v1.9.3