From b5a63b29313463d1c2fd1b5678a2d6b2bb8a7044 Mon Sep 17 00:00:00 2001
From: jiaosong <jiaosong6760@dingtalk.com>
Date: 星期五, 18 八月 2023 19:33:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/src/main/java/doumeemes/service/ext/impl/NoticesExtServiceImpl.java              |   24 ++-
 server/src/main/java/doumeemes/service/business/impl/WTransferServiceImpl.java          |   16 ++
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordExtServiceImpl.java      |    5 
 server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java                |   34 +++++
 server/src/main/resources/mappers/PlansExtMapper.xml                                    |    4 
 server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java                |    2 
 server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java          |    2 
 server/src/main/java/doumeemes/service/ext/WorkorderExtService.java                     |    2 
 server/src/main/resources/mappers/MaterialDistributeExtMapper.xml                       |    3 
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |   55 +++++++-
 server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java            |  145 ++++++++++++++++++++++++
 server/src/main/java/doumeemes/dao/ext/vo/MaterialDistributeExtListVO.java              |    4 
 server/src/main/resources/mappers/WOutboundExtMapper.xml                                |    6 +
 server/src/main/java/doumeemes/dao/ext/dto/QueryWorkorderExtDTO.java                    |    6 
 14 files changed, 273 insertions(+), 35 deletions(-)

diff --git a/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java b/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
index b3a6d8a..d91263c 100644
--- a/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
@@ -91,7 +91,7 @@
     public ApiResponse comfirmDoneStandard(@RequestBody AutoWorkReportDTO autoWorkReportDTO) {
         Workorder workorder =workorderRecordStandardService.comfirmDoneNew(autoWorkReportDTO,true);
         //鍙戦�佹秷鎭槦鍒楀鐞嗗垎浜搷浣�
-        workorderExtService.statisticNum(workorder);
+        workorderExtService.statisticNumAsync(workorder);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/QueryWorkorderExtDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/QueryWorkorderExtDTO.java
index 4265963..07d3eb8 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/QueryWorkorderExtDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/QueryWorkorderExtDTO.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -91,10 +93,10 @@
     private Integer proGroupId;
 
     @ApiModelProperty(value = "鍚堟牸鏁伴噺", example = "1")
-    private Integer qualifiedNum;
+    private BigDecimal qualifiedNum;
 
     @ApiModelProperty(value = "涓嶅悎鏍兼暟閲�", example = "1")
-    private Integer unqualifiedNum;
+    private BigDecimal unqualifiedNum;
 
     @ApiModelProperty(value = "妫�楠屼汉鍛樼紪鐮�", example = "1")
     private Integer checkUserId;
diff --git a/server/src/main/java/doumeemes/dao/ext/vo/MaterialDistributeExtListVO.java b/server/src/main/java/doumeemes/dao/ext/vo/MaterialDistributeExtListVO.java
index 472f306..21d9c27 100644
--- a/server/src/main/java/doumeemes/dao/ext/vo/MaterialDistributeExtListVO.java
+++ b/server/src/main/java/doumeemes/dao/ext/vo/MaterialDistributeExtListVO.java
@@ -139,4 +139,8 @@
     @ApiModelProperty(value = "鍒嗙被灏忕被id")
     private Integer cmodel3Id;
 
+    @ApiModelProperty(value = "鏄惁鏈塨om锛�0=鏃狅紱1=鏈�")
+    private Integer hasBom;
+
+
 }
diff --git a/server/src/main/java/doumeemes/service/business/impl/WTransferServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/WTransferServiceImpl.java
index 7c6e23d..011621d 100644
--- a/server/src/main/java/doumeemes/service/business/impl/WTransferServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/WTransferServiceImpl.java
@@ -469,6 +469,7 @@
             throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "鏈煡璇㈠埌杞簱鍗曠被鍨嬩俊鎭��"+wTransfer.getType()+"銆�");
         }
 
+
         sendOutNotice(companyUser.getId(),wTransfer.getId(),wTransfer.getCode(),notices_type_transfer,Constants.getNoticeUrl(loginUserInfo.getCompany(),Constants.DINGDING_NOTICE_URL.out));
 
         //璁板綍鎿嶄綔璁板綍
@@ -480,6 +481,7 @@
 
 
     public void sendOutNotice(Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
+
         //鍙戦�侀�氱煡
         Notices notices = new Notices();
         notices.setCompanyUserId(userId);
@@ -487,10 +489,13 @@
         notices.setContent("銆�"+billCode+"銆�"+ notices_type_transfer.getContent().replace("{optType}","鍑哄簱"));
         notices.setTitle(notices_type_transfer.getTitle());
         notices.setObjId(billId);
-        notices.setUrl(url.replace("{id}",billId.toString()));
+        if(!Objects.isNull(url)){
+            notices.setUrl(url.replace("{id}",billId.toString()));
+        }
         noticesExtService.sendNotice(notices);
     }
     public void sendOutNotice(LoginUserInfo user,Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
+
         //鍙戦�侀�氱煡
         Notices notices = new Notices();
         notices.setCompanyUserId(userId);
@@ -498,11 +503,14 @@
         notices.setContent("銆�"+billCode+"銆�"+ notices_type_transfer.getContent().replace("{optType}","鍑哄簱"));
         notices.setTitle(notices_type_transfer.getTitle());
         notices.setObjId(billId);
-        notices.setUrl(url.replace("{id}",billId.toString()));
+        if(!Objects.isNull(url)){
+            notices.setUrl(url.replace("{id}",billId.toString()));
+        }
         noticesExtService.sendNoticeNologin(notices,user);
     }
 
     public void sendInNotice(Integer userId ,Integer billId , String billCode ,Constants.Notices_Type_Transfer notices_type_transfer,String url){
+
         //鍙戦�侀�氱煡
         Notices notices = new Notices();
         notices.setCompanyUserId(userId);
@@ -510,7 +518,9 @@
         notices.setContent("銆�"+billCode+"銆�"+ notices_type_transfer.getContent().replace("{optType}","鍏ュ簱"));
         notices.setTitle(notices_type_transfer.getTitle());
         notices.setObjId(billId);
-        notices.setUrl(url.replace("{id}",billId.toString()));
+        if(!Objects.isNull(url)){
+            notices.setUrl(url.replace("{id}",billId.toString()));
+        }
         noticesExtService.sendNotice(notices);
     }
 
diff --git a/server/src/main/java/doumeemes/service/ext/WorkorderExtService.java b/server/src/main/java/doumeemes/service/ext/WorkorderExtService.java
index 8d8b7e2..d2bef2e 100644
--- a/server/src/main/java/doumeemes/service/ext/WorkorderExtService.java
+++ b/server/src/main/java/doumeemes/service/ext/WorkorderExtService.java
@@ -54,4 +54,6 @@
     ApiResponse<Integer> dataToWtWO(String deviceIds,String inIds,LoginUserInfo userInfo);
 
     void statisticNum(Workorder model);
+
+    void statisticNumAsync(Workorder param);
 }
diff --git a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
index da60a55..13fd35d 100644
--- a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
+++ b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
@@ -35,7 +35,7 @@
 
     WorkorderRecord dealWorkorderRecord(DealWorkorderRecordDTO dealWorkorderRecordDTO, LoginUserInfo loginUserInfo);
 
-    WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo);
+    WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo,Integer userId);
 
     List<WorkorderRecord> getWorkorderRecordList(Integer workorderId);
 
diff --git a/server/src/main/java/doumeemes/service/ext/impl/NoticesExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/NoticesExtServiceImpl.java
index 64df427..360d9a1 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/NoticesExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/NoticesExtServiceImpl.java
@@ -89,17 +89,19 @@
         model.setCreateUser(user.getId());
         CompanyExtListVO company = user.getCompany();
         model.setDdStatus(Constants.ZERO);
-        model.setUrl(model.getUrl().replace("{dbid}",model.getId()));
-        if(StringUtils.isNotBlank(cu.getDdUserid())){
-            try {
-                String token = companyExtService.getDingdingToken(company.getId());
-                JSONObject json = JSONObject.parseObject(company.getDingdingInfo());
-                Long agentId = Long.parseLong(json.getString("agentid"));
-                String taskId =  DingDingUtil.sendActionCardNotice(token,agentId,cu.getDdUserid(),model.getUrl(),model.getTitle(),model.getContent());
-                model.setDdParam(taskId);
-                model.setDdStatus(Constants.ONE);
-            }catch (Exception e){
-                e.printStackTrace();
+        if(StringUtils.isNotBlank(model.getUrl())){
+            model.setUrl(model.getUrl().replace("{dbid}",model.getId()));
+            if(StringUtils.isNotBlank(cu.getDdUserid())){
+                try {
+                    String token = companyExtService.getDingdingToken(company.getId());
+                    JSONObject json = JSONObject.parseObject(company.getDingdingInfo());
+                    Long agentId = Long.parseLong(json.getString("agentid"));
+                    String taskId =  DingDingUtil.sendActionCardNotice(token,agentId,cu.getDdUserid(),model.getUrl(),model.getTitle(),model.getContent());
+                    model.setDdParam(taskId);
+                    model.setDdStatus(Constants.ONE);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
             }
         }
         //鎻掑叆鏁版嵁
diff --git a/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
index 64c293b..ac7265f 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -668,9 +668,9 @@
         order.setQrcodeId(barcodeParamExtService.getByType(user.getCompany().getId(),mp.getDepartId(),Constants.BARCODEPARAM_TYPE.workorder));
         order.setProUserList(param.getProUserList());
         order.setProGroupId(param.getProGroupId());
-        //鏌ヨ鐢熶骇鐝粍鍜屼汉鍛樻槸鍚﹀悎娉�
-        checkUserAndGroup(order,mp,user);
         workorderExtMapper.insert(order);
+        //鏌ヨ鐢熶骇鐝粍鍜屼汉鍛樻槸鍚﹀悎娉�
+        checkUserAndGroupNew(order,mp,user);
         //宸ュ崟鍘嗗彶鏁版嵁
         whList.add(WorkorderExtServiceImpl.initHistoryByModel(order,user.getId(),Constants.WORKORDER_HISTORY_STATUS.create));
         workorderHistoryExtMapper.insertBatch(whList);
@@ -681,6 +681,34 @@
             workorderUserExtMapper.insert(wu);
         }
         return order;
+    }
+
+
+    private void checkUserAndGroupNew(Workorder param, PlansExtListVO  model,LoginUserInfo user) throws BusinessException{
+        QueryDeviceExtDTO ud = new QueryDeviceExtDTO();
+        ud.setDeleted(Constants.ZERO);
+        ud.setId(param.getProGroupId());
+        ud.setRootDepartId(user.getRootDepartment().getId());
+        //鏌ヨ鐢ㄦ埛璁惧鍏宠仈鍏崇郴
+        DeviceExtListVO d = deviceExtMapper.selectByModel( ud );
+        if(d == null){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鐢熶骇璁惧淇℃伅涓嶆纭紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+        }
+
+        List<WorkorderUser> userList = new ArrayList<>();
+        for(Integer userId : param.getProUserList()){
+            WorkorderUser u = new WorkorderUser();
+            u.setProUserId(userId);
+            u.setPlanId(model.getId());
+            u.setCreateUser(user.getId());
+            u.setDeleted(Constants.ZERO);
+            u.setCreateTime(DateUtil.getCurrentDate());
+            u.setRootDepartId(model.getRootDepartId());
+            u.setDepartId(model.getDepartId());
+            userList.add(u);
+        }
+        param.setWorkorderUserList(userList);
+
     }
 
     private void checkUserAndGroup(Workorder param, PlansExtListVO  model,LoginUserInfo user) throws BusinessException{
@@ -1638,7 +1666,7 @@
         }
         //宸ュ崟浜у嚭璁板綍
         autoWorkReportDTO.getCreateWorkorderRecordDTO().setWorkorderId(workorder.getId());
-        WorkorderRecord workorderRecord = workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
+        WorkorderRecord workorderRecord = workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user,autoWorkReportDTO.getProUserList().get(Constants.ZERO));
         //宸ュ崟鎶ュ伐
         workorderRecordStandardService.comfirmDone(workorder,false);
         //鏇存柊宸ュ崟鐘舵��
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
index 9954f48..78cc8f8 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
@@ -807,12 +807,14 @@
                 }
                 if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.create)
                 ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.material)
+                ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                 ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.check)
                 ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.done)){
                     //缁熻宸插垎閰嶆湭鎶ュ伐鏁伴噺
                     distributeNoDoneNum += Constants.formatIntegerNum(order.getPlanNum());
                 }
                 if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.baogong)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                         || Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.instock)){
                    doneNum += Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
                    int tNum =Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
@@ -855,7 +857,7 @@
             if(!Objects.isNull(plan.getWorkPlansId())){
                 //鏇存柊涓昏鍗曟暟鎹俊鎭�
                if(plansMapper.selectCount(new QueryWrapper<Plans>()
-                        .in("STATUS",0,1,4,5)
+                        .eq("STATUS",Constants.PLAN_STATUS.done)
                         .eq("DELETED",Constants.ZERO)
                         .ne("id",p.getId())
                         .eq("WORK_PLANS_ID",plan.getWorkPlansId()))<=Constants.ZERO){
@@ -892,6 +894,147 @@
 
     }
 
+
+
+    @Override
+    @Async
+    public void statisticNumAsync(Workorder param){
+        if(param.getPlanId()== null){
+            if(param.getId()== null){
+                return;
+            }
+            Workorder wModel = new Workorder();
+            wModel.setDeleted(Constants.ZERO);
+            wModel.setId(param.getId());
+            wModel = workorderExtMapper.selectOne(wModel);
+            if(wModel== null){
+                return;
+            }
+            param.setPlanId(wModel.getPlanId());
+        }
+        Plans plan = plansExtMapper.selectById(param.getPlanId());
+        if(plan == null){
+            return;
+        }
+        JSONObject json = new JSONObject();
+        QueryWorkorderExtDTO qw = new QueryWorkorderExtDTO();
+        qw.setPlanId(param.getPlanId());
+        qw.setDeleted(Constants.ZERO);
+        //鏌ヨ鍏ㄩ儴宸ュ崟鏁版嵁
+        List<WorkorderExtListVO> orderList = workorderExtMapper.selectList(qw);
+        //宸插畬宸ユ暟閲�
+        int doneNum=0;
+        //宸插垎閰嶆暟閲�
+        //宸叉姤宸ュ伐鍗曪紙鍖呮嫭宸ュ崟鐘舵�侊細宸叉姤宸ャ�佸凡鍏ュ簱锛夌殑瀹屽伐鏁伴噺锛堝寘鎷細鍚堟牸銆佷笉鑹�佹姤搴燂級
+        //+鏈姤宸ュ伐鍗曪紙鍖呮嫭宸ュ崟鐘舵�侊細宸插垱寤恒�佸凡澶囨枡銆佸凡妫�楠屻�佸凡瀹屽伐锛夌殑宸插垎閰嶆暟閲�
+        int distributNum=0;
+        //宸插垎閰嶆湭鎶ュ伐鏁伴噺=鏈姤宸ュ伐鍗曪紙宸ュ崟鐘舵�侊細宸插垱寤恒�佸凡澶囨枡銆佸凡妫�楠屻�佸凡瀹屽伐锛夌殑璁″垝鐢熶骇鏁伴噺涔嬪拰锛�
+        int distributeNoDoneNum=0;
+        //鍚堟牸鏁伴噺=宸叉姤宸ュ伐鍗曪紙宸ュ崟鐘舵�侊細宸叉姤宸ャ�佸凡鍏ュ簱锛変骇鍑轰负鍚堟牸鐨勬暟閲忎箣鍜岋紱
+        int qulifiedNum=0;
+        //涓嶈壇鏁伴噺=宸叉姤宸ュ伐鍗曪紙宸ュ崟鐘舵�侊細宸叉姤宸ャ�佸凡鍏ュ簱锛変骇鍑轰负涓嶈壇鐨勬暟閲忎箣鍜岋紱
+        int unqulifiedNum =0;
+        int allOrderNum =0;
+        if(orderList!=null && orderList.size()>0){
+            QueryWorkorderRecordExtDTO rw = new QueryWorkorderRecordExtDTO();
+            rw.setPlanId(param.getPlanId());
+            rw.setDeleted(Constants.ZERO);
+            //鏌ヨ鍏ㄩ儴宸ュ崟浜у嚭鍜屾姇鏂欐暟鎹�
+            List<WorkorderRecordExtListVO> allRecordList = workorderRecordExtMapper.selectListNew(rw);
+            for(WorkorderExtListVO order : orderList){
+                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.cancel)){
+                    //鍙栨秷鐨勫伐鍗曚笉绱鏁伴噺
+                    continue;
+                }
+                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.create)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.material)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.check)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.done)){
+                    //缁熻宸插垎閰嶆湭鎶ュ伐鏁伴噺
+                    distributeNoDoneNum += Constants.formatIntegerNum(order.getPlanNum());
+                }
+                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.baogong)
+                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
+                        || Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.instock)){
+                    doneNum += Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
+                    int tNum =Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
+                    distributNum += tNum;
+                    allOrderNum += tNum;
+                }else {
+                    distributNum += Constants.formatIntegerNum(order.getPlanNum());
+                }
+
+                List<WorkorderRecordExtListVO> rList = getRecordListById(order.getId(),allRecordList);
+                if(rList!=null){
+                    for(WorkorderRecordExtListVO item : rList){
+                        if(Constants.equalsInteger(item.getType(),Constants.WORKORDER_RECORD_TYPE.produce)
+                                && item.getOmodel()!=null
+                                && (Constants.equalsInteger(item.getOmodel().getStatus() ,Constants.WORKORDER_STATUS.baogong)
+                                ||Constants.equalsInteger(item.getOmodel().getStatus() ,Constants.WORKORDER_STATUS.instock))){
+                            //濡傛灉鏄悎鏍间骇鍑猴紝绱鏁伴噺
+                            qulifiedNum += Constants.formatBigdecimal(BigDecimal.valueOf(item.getQualifiedNum())).intValue();
+                            //濡傛灉鏄笉鑹骇鍑猴紝绱鏁伴噺
+                            unqulifiedNum += Constants.formatBigdecimal(BigDecimal.valueOf(item.getUnqualifiedNum())).intValue();
+                        }
+                    }
+                }
+            }
+        }
+        json.put(Constants.STATISTIC.distributeNoDone,distributeNoDoneNum);
+        json.put(Constants.STATISTIC.done,doneNum);
+        json.put(Constants.STATISTIC.distribute,distributNum);
+        json.put(Constants.STATISTIC.qulified,qulifiedNum);
+        json.put(Constants.STATISTIC.unqulified,unqulifiedNum);
+
+        UpdateWrapper updateWrapper = new UpdateWrapper();
+        Plans p = new Plans();
+        p.setId(param.getPlanId());
+        p.setStatisticInfo(json.toJSONString());
+        p.setUpdateTime(DateUtil.getCurrentDate());
+        if( Constants.formatIntegerNum(plan.getNum())  <= allOrderNum){
+            //濡傛灉婊¤冻璁″垝宸插畬宸ワ紝鏇存柊璁″垝鐘舵��
+            p.setStatus(Constants.PLAN_STATUS.done);
+            if(!Objects.isNull(plan.getWorkPlansId())){
+                //鏇存柊涓昏鍗曟暟鎹俊鎭�
+                if(plansMapper.selectCount(new QueryWrapper<Plans>()
+                        .eq("STATUS",Constants.PLAN_STATUS.done)
+                        .eq("DELETED",Constants.ZERO)
+                        .ne("id",p.getId())
+                        .eq("WORK_PLANS_ID",plan.getWorkPlansId()))<=Constants.ZERO){
+                    WorkPlans  workPlans = workPlansExtMapper.selectById(plan.getWorkPlansId());
+                    if(!Objects.isNull(workPlans)){
+                        workPlans.setStatus(Constants.WORKPLANHISTORY_TYPE.done);
+                        workPlans.setUpdateTime(new Date());
+                        workPlansExtMapper.updateById(workPlans);
+                        planHistoryExtMapper.insert(initPlanHistoryByModel(workPlans,null,Constants.WORKPLANHISTORY_TYPE.done));
+                    }
+                };
+            }
+            //
+            plan.getWorkPlansId();
+
+            updateWrapper.set("STATUS",p.getStatus());
+            if(Constants.equalsInteger(plan.getStatus(),Constants.PLAN_STATUS.distribute)){
+                //濡傛灉宸插垎閰�
+                planHistoryExtMapper.insertBatch(Arrays.asList(PlansExtServiceImpl.initHistoryByModel(plan,null,Constants.PLANHISTORY_TYPE.done)));
+            }
+//          planHistoryService.create(PlansExtServiceImpl.initHistoryByModel(plan,null,Constants.PLANHISTORY_TYPE.done));
+        }
+        //鏇存柊缁熻淇℃伅
+//        plansExtMapper.updateById(p);
+        updateWrapper.eq("ID",param.getPlanId());
+        updateWrapper.set("STATISTIC_INFO",json.toJSONString());
+        updateWrapper.set("UPDATE_TIME",DateUtil.getCurrentDate());
+        plansExtMapper.update(null,updateWrapper);
+//        Workorder order = new Workorder();
+//        order.setUpdateTime(DateUtil.getCurrentDate());
+//        //宸插叧闂�
+//        order.setId(param.getId());
+//        workorderExtMapper.updateById(order);
+
+    }
+
     /**
      * 妫�娴嬫暟鎹湁鏁堟��
      * @param param
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordExtServiceImpl.java
index 35e8513..4858697 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordExtServiceImpl.java
@@ -495,6 +495,7 @@
         }
         if(!Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.create)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.material)
+                && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.producing)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.check)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.done)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -532,6 +533,7 @@
         }
         if(!Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.create)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.material)
+                && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.producing)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.check)
                 && !Constants.equalsInteger(model.getWorkorderStatus(),Constants.WORKORDER_STATUS.done)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -835,9 +837,11 @@
                 if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){
                     //濡傛灉涓嶈壇锛岀疮璁″伐鍗曠殑涓嶈壇浜у嚭
                     mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
+//                    mp.setUnqualifiedNum(mp.getUnqualifiedNum().add(tModel.getNum()));
                 }else{
                     //濡傛灉鏄悎鏍硷紝绱宸ュ崟鐨勫悎鏍兼暟閲�
                     mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
+//                    mp.setUnqualifiedNum(mp.getQualifiedNum().add(tModel.getNum()));
                 }
                 //妫�鏌ョ绛愭槸鍚﹁浣滀负浜у嚭绡瓙锛屽鏋滄槸锛屽垯闇�瑕佸垽鏂绡瓙鏄惁鎶曟枡浣欓涓�0
                 Appliances curUpdateModel = getApplianceFromList(tModel.getAppliancesId(),updateApplianceList);
@@ -1582,6 +1586,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(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
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 78f12c7..f408243 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -87,6 +87,8 @@
     private DeviceExtMapper deviceExtMapper;
     @Autowired
     private UnqualifiedRecordMapper unqualifiedRecordMapper;
+    @Autowired
+    private CompanyUserExtMapper companyUserExtMapper;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -185,6 +187,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(), "瀵逛笉璧凤紝璇ュ伐鍗曠姸鎬佸凡娴佽浆锛屼笉鑳借繘琛岃鎿嶄綔锛�");
@@ -300,7 +303,7 @@
         wrModel.setType(Constants.WORKORDER_RECORD_TYPE.materail);
         wrModel.setFactoryId(mp.getFactoryId());
         wrModel.setProcedureId(mp.getProcedureId());
-        wrModel.setBatch(mp.getBatch());
+        wrModel.setBatch(wStock.getBatch());
         wrModel.setUnitId(mp.getUnitId());
         wrModel.setPlanId(mp.getPlanId());
         //TODO 鐩墠浣跨敤宸ヨ涓婚敭瀛樺偍璐т綅涓婚敭
@@ -519,10 +522,27 @@
         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(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒");
         }
@@ -541,13 +561,13 @@
         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(),"鏈煡璇㈡姇鏂欏拰鎶ュ伐璁板綍!");
         }
-        //澶勭悊浜у嚭鏁版嵁
-        WorkorderRecord workorderRecord = this.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
         //妫�鏌ユ暟鎹俊鎭�
 //        caculateCheckRecord(user, mp,allRecordList);
         QueryBomDetailExtDTO bdparam = initBomParam(user,mp);
@@ -572,6 +592,8 @@
             }
         }
         //鏇存柊宸ュ崟鐘舵�佷负宸叉姤宸�
+        mp.setUnqualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().intValue());
+        mp.setQualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().intValue());
         updateOrderInfo(user,mp,Constants.WORKORDER_HISTORY_STATUS.baogong);
 
         //鎵归噺鎻掑叆鍑哄叆搴撴槑缁嗚褰�
@@ -1120,7 +1142,7 @@
                 //濡傛灉鏄骇鍑�
                 mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
                 //浜у嚭鍚堟牸
-               this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList);
+                this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList);
                //浜у嚭涓嶈壇
                 this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList);
             }
@@ -1154,6 +1176,9 @@
         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());
@@ -1472,7 +1497,7 @@
 
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo){
+    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(), "瀵逛笉璧凤紝鏈煡璇㈠埌璇ュ伐鍗曚俊鎭紒");
@@ -1501,11 +1526,21 @@
         //鏁版嵁瀛樺偍
         workorderRecord = new WorkorderRecord();
         workorderRecord.setDeleted(Constants.ZERO);
-        workorderRecord.setCreateUser(loginUserInfo.getId());
+        if(!Objects.isNull(userId)){
+            CompanyUser companyUser = companyUserExtMapper.selectById(userId);
+            if(Objects.isNull(companyUser)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌鐢熶骇浜哄憳瀵瑰簲浼佷笟鐢ㄦ埛淇℃伅锛�");
+            }
+            workorderRecord.setCreateUser(companyUser.getUserId());
+            workorderRecord.setRootDepartId(companyUser.getRootDepartId());
+            workorderRecord.setDepartId(companyUser.getComDepartId());
+        }else{
+            workorderRecord.setCreateUser(loginUserInfo.getId());
+            workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+            workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().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());
@@ -1521,7 +1556,7 @@
         //璁$畻宸ヨ祫淇℃伅
         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)){
+        if(!Objects.isNull(salaryParam)&&!Objects.isNull(createWorkorderRecordDTO.getDuration())){
             workorderRecord.setSalaryPrice(salaryParam.getSalary());
             workorderRecord.setSalaryType(salaryParam.getType());
             workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
diff --git a/server/src/main/resources/mappers/MaterialDistributeExtMapper.xml b/server/src/main/resources/mappers/MaterialDistributeExtMapper.xml
index 31c73ce..58d867a 100644
--- a/server/src/main/resources/mappers/MaterialDistributeExtMapper.xml
+++ b/server/src/main/resources/mappers/MaterialDistributeExtMapper.xml
@@ -717,7 +717,8 @@
     mmodel.UNION_NAME as MMODEL_UNION_NAME,
     mmodel.code as MMODEL_CODE,
     umodel.name as UMODEL_NAME,
-    umodel.ATTRIBUTE_DATA as UMODEL_ATTRIBUTE_DATA
+    umodel.ATTRIBUTE_DATA as UMODEL_ATTRIBUTE_DATA,
+    (select count(1) from bom b where a.id = b.MATERIAL_ID   and b.`STATUS` = 1 and b.DELETED = 0 ) as hasBom
     FROM `material_distribute` `a`
 
     LEFT JOIN `material` `mmodel` ON a.MATERIAL_ID=mmodel.ID
diff --git a/server/src/main/resources/mappers/PlansExtMapper.xml b/server/src/main/resources/mappers/PlansExtMapper.xml
index df7ce24..f2dd8e4 100644
--- a/server/src/main/resources/mappers/PlansExtMapper.xml
+++ b/server/src/main/resources/mappers/PlansExtMapper.xml
@@ -389,13 +389,13 @@
       `usermodel`.`SYSTEMID` AS USERMODEL_SYSTEMID,
       `usermodel`.`INVALID_TIME` AS USERMODEL_INVALID_TIME,
       `usermodel`.`TYPE` AS USERMODEL_TYPE
-    , ifnull((  SELECT sum( b.PLAN_NUM ) FROM  workorder b  WHERE b.deleted = 0  AND b.PLAN_ID = a.id  and b.status !=6),0) AS workorderDistributNum ,
+    , ifnull((  SELECT sum(  b.UNQUALIFIED_NUM + QUALIFIED_NUM ) FROM  workorder b  WHERE b.deleted = 0  AND b.PLAN_ID = a.id  and b.status  = 4 ),0) AS workorderDistributNum ,
     `mmodel`.name as materialName , `mmodel`.code as materialCode ,`fmodel`.name as factoryName , `pmodel`.name as produceName ,
       concat(`usermodel`.realname,' ',`usermodel`.mobile) as planUserName , `umodel`.name as unitName ,
       w.PLAN_CODE as workPlanCode , w.SALESORDER as salesOrder ,
       w.START_DATE as workPlanStartDate  , w.PLAN_DATE as workPlanEndDate,
       w.`PLAN_DATE` as workPlanPlanDate,
-      ifnull((select  sum(worder.PLAN_NUM) from workorder worder where worder.PLAN_ID = a.id and worder.STATUS not in (7,8)  ),0) as produceNum
+      ifnull((select  sum(worder.UNQUALIFIED_NUM + worder.QUALIFIED_NUM ) from workorder worder where worder.PLAN_ID = a.id and worder.STATUS = 4  ),0) as produceNum
     FROM `plans` `a`
     LEFT JOIN `department` `dmodel` ON a.DEPART_ID=dmodel.ID
     LEFT JOIN `material_distribute` `mdmodel` ON a.MATERIAL_ID=mdmodel.ID
diff --git a/server/src/main/resources/mappers/WOutboundExtMapper.xml b/server/src/main/resources/mappers/WOutboundExtMapper.xml
index 8abffc5..f7b115d 100644
--- a/server/src/main/resources/mappers/WOutboundExtMapper.xml
+++ b/server/src/main/resources/mappers/WOutboundExtMapper.xml
@@ -561,6 +561,12 @@
       <if test="endDate != null and endDate != '' ">
         AND CONCAT(#{endDate},' 23:59:59') >= `w`.`VALID_DATE`
       </if>
+      <if test="rootDepartId != null">
+        AND `w`.`ROOT_DEPART_ID` = #{rootDepartId}
+      </if>
+      <if test="departId != null">
+        AND `w`.`DEPART_ID` = #{departId}
+      </if>
     </where>
     group by SUBSTR(w.VALID_DATE,1,10) , m.`CODE`  ,m.`NAME`  , wd.BATCH   , p.`NAME`   , wd.QUALITY_TYPE    , wh.`NAME`  , w.`CODE` ,u.`NAME` ,w.CREATE_TIME , w.ORIGIN_TYPE,w.ORIGIN_CODE, w.type , w.BILL_TYPE
     order by w.VALID_DATE desc, w.CREATE_TIME desc

--
Gitblit v1.9.3