From 70a0df1acc71a0ae4731fde6d595979d15a9ec94 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 14 八月 2023 18:43:08 +0800
Subject: [PATCH] 111

---
 server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java          |    3 
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |   82 +++++++++++++++
 server/src/main/java/doumeemes/service/ext/PlansExtService.java                         |    8 +
 server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java           |   29 +++++
 server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java                  |   27 +++++
 server/src/main/java/doumeemes/dao/business/model/SalaryParam.java                      |    4 
 server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java                |   67 +++++++++++++
 server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java                  |   24 ++++
 8 files changed, 235 insertions(+), 9 deletions(-)

diff --git a/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java b/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
new file mode 100644
index 0000000..1277da9
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
@@ -0,0 +1,27 @@
+package doumeemes.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/8/14 18:35
+ */
+@Data
+public class AutoWorkReportDTO {
+
+
+    @ApiModelProperty(value = "宸ュ簭璁″垝涓婚敭")
+    private Integer plansId;
+
+    @ApiModelProperty(value = "鎶曟枡璁板綍")
+    private List<MaterialListDTO> recordList ;
+
+    @ApiModelProperty(value = "浜у嚭璁板綍")
+    private CreateWorkorderRecordDTO createWorkorderRecordDTO;
+
+}
diff --git a/server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java b/server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java
new file mode 100644
index 0000000..dfb0a01
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java
@@ -0,0 +1,29 @@
+package doumeemes.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2022/05/12 10:18
+ */
+@Data
+public class CreateWorkorderRecordDTO {
+
+
+    @ApiModelProperty(value = "宸ュ崟涓婚敭")
+    private Integer workorderId;
+
+    @ApiModelProperty(value = "鍚堟牸鏁伴噺")
+    private BigDecimal qualifiedNum;
+
+    @ApiModelProperty(value = "涓嶅悎鏍兼暟閲�")
+    private BigDecimal unQualifiedNum;
+
+    @ApiModelProperty(value = "鎶ュ伐鏃堕暱锛堢锛�"  )
+    private Integer duration;
+
+
+}
diff --git a/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java b/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
index 956d71e..19f8762 100644
--- a/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
+++ b/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
@@ -11,6 +11,8 @@
 
 import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -77,7 +79,7 @@
 
     @ApiModelProperty(value = "鏍囧噯鏁伴噺")
     @ExcelColumn(name="鏍囧噯鏁伴噺")
-    private Integer num;
+    private BigDecimal num;
 
     @ApiModelProperty(value = "鏍囧噯鏃堕暱锛堢锛�")
     @ExcelColumn(name="鏍囧噯鏃堕暱锛堢锛�")
diff --git a/server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java b/server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java
index 7b1be66..3f9f3b8 100644
--- a/server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java
+++ b/server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java
@@ -129,11 +129,11 @@
 
     @ApiModelProperty(value = "妫�楠屽悎鏍兼暟閲�", example = "1")
     @ExcelColumn(name="妫�楠屽悎鏍兼暟閲�")
-    private Integer qualifiedNum;
+    private BigDecimal qualifiedNum;
 
     @ApiModelProperty(value = "妫�楠屼笉鍚堟牸鏁伴噺", example = "1")
     @ExcelColumn(name="妫�楠屼笉鍚堟牸鏁伴噺")
-    private Integer unqualifiedNum;
+    private BigDecimal unqualifiedNum;
 
     @ApiModelProperty(value = "妫�楠屾棩鏈�")
     @ExcelColumn(name="妫�楠屾棩鏈�")
@@ -167,6 +167,24 @@
     @ApiModelProperty(value = "鍏宠仈绁ㄦ嵁绫诲瀷 0宸ュ崟 1绡瓙鏇存崲鍗曡褰�"  )
     private Integer relobjType;
 
-    //MATERIAL_DONETYPE,MATERIAL_PROCEDURE_ID,RELOBJ_ID銆丷ELOBJ_TYPE
+    @ApiModelProperty(value = "鎶ュ伐鏃堕暱锛堢锛�"  )
+    private Integer duration;
 
+    @ApiModelProperty(value = "宸ヨ祫鍗曚环锛堝垎)"  )
+    private BigDecimal salaryPrice;
+
+    @ApiModelProperty(value = "鏍囧噯鏁伴噺"  )
+    private BigDecimal salaryNum;
+
+    @ApiModelProperty(value = "鏍囧噯鏃堕暱锛堢锛�"  )
+    private Integer salaryTimes;
+
+    @ApiModelProperty(value = "涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�"  )
+    private Integer salaryUnqualified;
+
+    @ApiModelProperty(value = "璁′环鏂瑰紡 0璁′欢 1璁℃椂"  )
+    private Integer salaryType;
+
+    @ApiModelProperty(value = "宸ヨ祫缁撴灉锛堝垎锛�"  )
+    private BigDecimal salary;
 }
diff --git a/server/src/main/java/doumeemes/service/ext/PlansExtService.java b/server/src/main/java/doumeemes/service/ext/PlansExtService.java
index 596d0cf..856f5ff 100644
--- a/server/src/main/java/doumeemes/service/ext/PlansExtService.java
+++ b/server/src/main/java/doumeemes/service/ext/PlansExtService.java
@@ -5,6 +5,7 @@
 import doumeemes.core.model.LoginUserInfo;
 import doumeemes.core.model.PageData;
 import doumeemes.core.model.PageWrap;
+import doumeemes.dao.business.dto.AutoWorkReportDTO;
 import doumeemes.dao.business.model.Plans;
 import doumeemes.dao.business.model.Workorder;
 import doumeemes.dao.ext.vo.PlansExtListCountVO;
@@ -76,4 +77,11 @@
     void pauseByIdForStandard(Plans model,LoginUserInfo userInfo);
     void regainByIdForStandard(Plans model, LoginUserInfo userInfo);
     List<PlansExtListVO> getListByWorkPlan(Integer workPlanId);
+
+    /**
+     * 涓�閿姤宸�
+     * @param user
+     * @param autoWorkReportDTO
+     */
+    void autoWorkReport(LoginUserInfo user, AutoWorkReportDTO autoWorkReportDTO);
 }
diff --git a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
index 0a55846..f3ffd3a 100644
--- a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
+++ b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
@@ -4,6 +4,7 @@
 import doumeemes.core.model.PageData;
 import doumeemes.core.model.PageWrap;
 import doumeemes.dao.business.dto.CreateMaterialDTO;
+import doumeemes.dao.business.dto.CreateWorkorderRecordDTO;
 import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
 import doumeemes.dao.business.model.Workorder;
 import doumeemes.dao.business.model.WorkorderRecord;
@@ -30,6 +31,8 @@
 
     WorkorderRecord dealWorkorderRecord(DealWorkorderRecordDTO dealWorkorderRecordDTO, LoginUserInfo loginUserInfo);
 
+    WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo);
+
     List<WorkorderRecord> getWorkorderRecordList(Integer workorderId);
 
     PageData<WStockExtListVO> choiceStockPageForWorkorder(PageWrap<QueryWStockDto> pageWrap, LoginUserInfo userInfo);
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 0c69384..e6ac936 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -16,11 +16,13 @@
 import doumeemes.core.utils.excel.EasyExcelUtil;
 import doumeemes.core.utils.redis.RedisUtil;
 import doumeemes.dao.business.PlansMapper;
+import doumeemes.dao.business.dto.*;
 import doumeemes.dao.business.model.*;
 import doumeemes.dao.ext.*;
 import doumeemes.dao.ext.dto.*;
 import doumeemes.dao.ext.vo.*;
 import doumeemes.service.ext.*;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.BeanUtils;
@@ -35,6 +37,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 鐢熶骇璁″垝Service瀹炵幇
@@ -84,6 +87,8 @@
     private MaterialDistributeExtMapper materialDistributeExtMapper;
     @Autowired
     private WStockExtService  wStockExtService;
+    @Autowired
+    private WorkorderRecordStandardService workorderRecordStandardService;
 
     @Override
     public  PlansExtListVO findById(Integer id){
@@ -565,7 +570,7 @@
         distributeDone(user, param,param.getPlanNum());
     }
 
-    private void distributeDone(LoginUserInfo user,  Workorder param,int thisPlanNum) {
+    private Workorder distributeDone(LoginUserInfo user,  Workorder param,int thisPlanNum) {
         if(param.getPlanId()== null
                 ||param.getPlanDate() == null
                 || param.getProGroupId()==null
@@ -648,7 +653,7 @@
             //鐢熶骇浜哄憳璁板綍
             workorderUserExtMapper.insert(wu);
         }
-
+        return order;
     }
 
     private void checkUserAndGroup(Workorder param, PlansExtListVO  model,LoginUserInfo user) throws BusinessException{
@@ -1545,4 +1550,62 @@
 
     }
 
+
+    /**
+     * 涓�閿姤宸�
+     * @param user
+     */
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    @Override
+    public void autoWorkReport(LoginUserInfo user, AutoWorkReportDTO autoWorkReportDTO){
+        //鏌ヨ宸ュ伐搴忚鍒掔姸鎬�
+        Plans plans = plansExtMapper.selectById(autoWorkReportDTO.getPlansId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌宸ュ簭璁″垝鏁版嵁");
+        }
+        if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸ュ簭璁″垝宸叉祦杞紝鏃犳硶鎿嶄綔");
+        }
+        if(Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙傛暟閿欒锛氫骇鍑烘暟鎹�");
+        }
+        //鏌ヨ宸ュ簭璁″垝宸插垎閰嶆暟閲�
+        List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()));
+        //鏈浜у嚭鏁伴噺
+        BigDecimal num = autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum());
+        if(num.compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙傛暟閿欒锛氫骇鍑烘暟鎹�");
+        }
+        //宸ュ崟宸插垎閰嶆暟閲�
+        Integer produceNum = workorderList.stream().map(s -> s.getPlanNum()).reduce(Constants.ZERO, Integer::sum);
+        Integer surplusNum = plans.getNum() - produceNum;
+        if(num.compareTo(BigDecimal.valueOf(surplusNum))>0){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙傛暟閿欒锛氳秴鍑哄伐鍗曞墿浣欏彲鍒嗛厤鏁伴噺");
+        }
+        Workorder param = new Workorder();
+        param.setPlanId(autoWorkReportDTO.getPlansId());
+        param.setPlanDate(new Date());
+        List<Integer> proUserList = new ArrayList<Integer>();
+        //TODO
+        proUserList.add(user.getId());
+        param.setProUserList(proUserList);
+        param.setPlanNum(plans.getNum());
+        //鐢熸垚宸ュ崟淇℃伅
+        Workorder workorder = this.distributeDone(user,param,plans.getNum());
+        //宸ュ崟鎶曟枡璁板綍
+        CreateMaterialDTO createMaterialDTO = new CreateMaterialDTO();
+        if(!Objects.isNull(autoWorkReportDTO.getRecordList())&&autoWorkReportDTO.getRecordList().size()>Constants.ZERO){
+            createMaterialDTO.setId(workorder.getId());
+            createMaterialDTO.setRecordList(autoWorkReportDTO.getRecordList());
+            workorderRecordStandardService.createMaterialStandard(createMaterialDTO);
+        }
+        //宸ュ崟浜у嚭璁板綍
+        workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
+        //宸ュ崟鎶ュ伐
+        workorderRecordStandardService.comfirmDone(workorder);
+
+
+    }
+
+
 }
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 f649584..8ec0cff 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -16,7 +16,9 @@
 import doumeemes.core.utils.redis.RedisUtil;
 import doumeemes.dao.business.BackOrderDetailMapper;
 import doumeemes.dao.business.BackorderMapper;
+import doumeemes.dao.business.SalaryParamMapper;
 import doumeemes.dao.business.dto.CreateMaterialDTO;
+import doumeemes.dao.business.dto.CreateWorkorderRecordDTO;
 import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
 import doumeemes.dao.business.dto.MaterialListDTO;
 import doumeemes.dao.business.model.*;
@@ -79,6 +81,8 @@
     private WOutboundRecordExtMapper wOutboundRecordExtMapper;
     @Autowired
     private MaterialExtMapper materialExtMapper;
+    @Autowired
+    private SalaryParamMapper salaryParamMapper;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -981,15 +985,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)
@@ -1108,4 +1112,76 @@
     }
 
 
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo){
+        Workorder workorder  = workorderExtMapper.selectById(createWorkorderRecordDTO.getWorkorderId());
+        if(Objects.isNull(workorder)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌璇ュ伐鍗曚俊鎭紒");
+        }
+        if(Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
+                ||Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
+                ||Objects.isNull(createWorkorderRecordDTO.getWorkorderId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        BigDecimal num = createWorkorderRecordDTO.getQualifiedNum().add(createWorkorderRecordDTO.getUnQualifiedNum());
+        WorkorderRecord workorderRecord = new WorkorderRecord();
+        //鏌ヨ宸ュ崟涓嬫槸鍚﹀瓨鍦ㄥ搴旇褰�
+        workorderRecord = workorderRecordExtMapper.selectOne(new QueryWrapper<WorkorderRecord>()
+                .eq("WORKORDER_ID",createWorkorderRecordDTO.getWorkorderId())
+                .eq("TYPE",Constants.ONE)
+                .eq("DELETED",Constants.ZERO)
+                .last(" limit 1  ")
+        );
+        if(!Objects.isNull(workorderRecord)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑璇ョ被浜у嚭璁板綍宸插瓨鍦紒");
+        }
+        if(num.compareTo(BigDecimal.valueOf(workorder.getPlanNum()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
+        }
+        //鏁版嵁瀛樺偍
+        workorderRecord = new WorkorderRecord();
+        workorderRecord.setDeleted(Constants.ZERO);
+        workorderRecord.setCreateUser(loginUserInfo.getId());
+        workorderRecord.setCreateTime(new Date());
+        workorderRecord.setNum(num);
+        workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
+        workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId());
+        workorderRecord.setPlanId(workorder.getPlanId());
+        workorderRecord.setWorkorderId(createWorkorderRecordDTO.getWorkorderId());
+        workorderRecord.setBatch(workorder.getBatch());
+        workorderRecord.setFactoryId(workorder.getFactoryId());
+        workorderRecord.setProcedureId(workorder.getProcedureId());
+        workorderRecord.setProDate(new Date());
+        workorderRecord.setType(Constants.ONE);
+        workorderRecord.setMaterialId(workorder.getMaterialId());
+        workorderRecord.setUnitId(workorder.getUnitId());
+        workorderRecord.setMaterialBatch(workorder.getBatch());
+        workorderRecord.setUnqualifiedNum(createWorkorderRecordDTO.getUnQualifiedNum());
+        workorderRecord.setQualifiedNum(createWorkorderRecordDTO.getQualifiedNum());
+        //璁$畻宸ヨ祫淇℃伅
+        SalaryParam salaryParam = salaryParamMapper.selectOne(new QueryWrapper<SalaryParam>().eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",workorderRecord.getMaterialId())
+                .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).last(" limit 1  "));
+        if(Objects.isNull(salaryParam)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃伐璧勭哗鏁堥厤缃紒");
+        }
+        workorderRecord.setSalaryPrice(salaryParam.getSalary());
+        workorderRecord.setSalaryType(salaryParam.getType());
+        workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
+
+        //璁′欢宸ヨ祫
+        if(salaryParam.getType().equals(Constants.ZERO)){
+            workorderRecord.setSalaryNum(salaryParam.getNum());
+            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum()));
+        }else{
+            workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
+            workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
+        }
+
+        workorderRecordExtMapper.insert(workorderRecord);
+        return workorderRecord;
+    }
+
 }

--
Gitblit v1.9.3