Эх сурвалжийг харах

生产进度 工序列表错误问题处理

yzc 1 жил өмнө
parent
commit
a8373a5adf

+ 10 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailVo.java

@@ -102,4 +102,14 @@ public class ProductionTaskDetailVo extends ProductionTaskDetail {
      * 产品备注
      */
     private String productRemark;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 工单是否定制
+     */
+    private String isCustomized;
 }

+ 95 - 35
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -3,7 +3,6 @@ package com.fjhx.mes.service.production.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,16 +11,20 @@ import com.fjhx.common.utils.Assert;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
 import com.fjhx.mes.entity.production.po.*;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailRecordVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.fjhx.mes.entity.technology.po.Technology;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.fjhx.mes.entity.work.vo.WorkOrderVo;
 import com.fjhx.mes.mapper.production.ProductionTaskDetailMapper;
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.production.*;
+import com.fjhx.mes.service.technology.TechnologyService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.socket.core.PushTypeEnum;
@@ -75,6 +78,10 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     private ProductionProcessesService productionProcessesService;
     @Autowired
     private ProductionTaskProcessesDetailService productionTaskProcessesDetailService;
+    @Autowired
+    private ApplicableProductsService applicableProductsService;
+    @Autowired
+    private TechnologyService technologyService;
 
     @Override
     public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
@@ -170,7 +177,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     public synchronized void circulation(ProductionTaskDetailDto dto) {
         ProductionTaskDetail productionTaskDetail = this.getById(dto.getId());
 
-        if(Objects.equals(productionTaskDetail.getCirculationStatus(),1)){
+        if (Objects.equals(productionTaskDetail.getCirculationStatus(), 1)) {
             throw new ServiceException("该任务已被提交,请重试或刷新!");
         }
 
@@ -220,7 +227,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         productionTaskDetailRecordService.save(productionTaskDetailRecord);
 
         //保存附件
-        ObsFileUtil.saveFile(dto.getFileList(),productionTaskDetailRecord.getId());
+        ObsFileUtil.saveFile(dto.getFileList(), productionTaskDetailRecord.getId());
 
         //推送消息给下一工序的用户有单可以抢了
         Long nextProductionProcessesId = productionTaskDetail.getNextProductionProcessesId();
@@ -242,7 +249,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
             throw new ServiceException("未查询到任务明细信息");
         }
 
-        if(Objects.equals(productionTaskDetail.getFinishStatus(),1)){
+        if (Objects.equals(productionTaskDetail.getFinishStatus(), 1)) {
             throw new ServiceException("该任务已完工入库,请重试或刷新!");
         }
 
@@ -262,7 +269,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         productionTaskDetailRecordService.save(productionTaskDetailRecord);
 
         //保存附件
-        ObsFileUtil.saveFile(productionTaskDetailDto.getFileList(),productionTaskDetailRecord.getId());
+        ObsFileUtil.saveFile(productionTaskDetailDto.getFileList(), productionTaskDetailRecord.getId());
 
         StockWait stockWait = new StockWait();
         stockWait.setType(1);//入库
@@ -350,7 +357,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
             WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
             if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
                 //默认赋值空 如果有下一节点赋值下一节点id
-                if ((i - 1) >=0) {
+                if ((i - 1) >= 0) {
                     WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i - 1);
                     productionTaskDetail.setPreviousProcessesId(nextProductionProcesses.getId());
                     break;
@@ -383,13 +390,13 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
      * 获取当前用户某一工序还在进行中的任务数
      */
     @Override
-    public Long haveTaskCount(ProductionTaskDetailDto dto){
+    public Long haveTaskCount(ProductionTaskDetailDto dto) {
         //获取负责人为当前用户 工序为某一工序 未在流转(进行中) 未完成 的任务计数
-        return this.count(q->q
-                .eq(ProductionTaskDetail::getPersonLiableId,SecurityUtils.getUserId())
-                .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()),ProductionTaskDetail::getProductionProcessesId,dto.getProductionProcessesId())
-                .eq(ProductionTaskDetail::getCirculationStatus,0)
-                .eq(ProductionTaskDetail::getFinishStatus,0)
+        return this.count(q -> q
+                .eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId())
+                .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()), ProductionTaskDetail::getProductionProcessesId, dto.getProductionProcessesId())
+                .eq(ProductionTaskDetail::getCirculationStatus, 0)
+                .eq(ProductionTaskDetail::getFinishStatus, 0)
         );
     }
 
@@ -398,9 +405,9 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
      */
     @Override
     @DSTransactional
-    public void revokeTask(ProductionTaskDetailDto dto){
+    public void revokeTask(ProductionTaskDetailDto dto) {
         ProductionTaskDetail productionTaskDetail = getById(dto.getId());
-        Assert.notEmpty(productionTaskDetail,"查询不到该任务信息");
+        Assert.notEmpty(productionTaskDetail, "查询不到该任务信息");
 
         //修改流转状态
         productionTaskDetail.setCirculationStatus(1);
@@ -417,7 +424,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
      * 生产进度
      */
     @Override
-    public Page<ProductionTaskDetailVo> taskProgressPage(ProductionTaskDetailSelectDto dto){
+    public Page<ProductionTaskDetailVo> taskProgressPage(ProductionTaskDetailSelectDto dto) {
         IWrapper<ProductionTaskDetail> wrapper = IWrapper.getWrapper();
         wrapper.keyword(dto.getKeyword(),
                 new SqlField("t1.contractCode"),
@@ -426,37 +433,90 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
                 new SqlField("t1.productionTaskCode"),
                 new SqlField("t1.productCode"),
                 new SqlField("t1.productName"),
-                new SqlField("t1",ProductionTaskDetail::getProductSn),
+                new SqlField("t1", ProductionTaskDetail::getProductSn),
                 new SqlField("t1.due_date"),
                 new SqlField("t1.productionProcessesName"),
                 new SqlField("t1.personLiableName"),
-                new SqlField("t1",ProductionTaskDetail::getFinishTime)
+                new SqlField("t1", ProductionTaskDetail::getFinishTime)
         );
         //高级检索
-        wrapper.like("t1.contractCode",dto.getContractCode());
-        wrapper.like("t1.workOrderCode",dto.getWorkOrderCode());
-        wrapper.like("t1.productionPlanCode",dto.getProductionPlanCode());
-        wrapper.like("t1.productionTaskCode",dto.getProductionTaskCode());
-        wrapper.like("t1.productCode",dto.getProductCode());
-        wrapper.like("t1.productName",dto.getProductName());
-        wrapper.like("t1",ProductionTaskDetail::getProductSn,dto.getProductSn());
-        wrapper.eq("t1.due_date",dto.getDueDate());
-        wrapper.like("t1.productionProcessesName",dto.getProductionProcessesName());
-        wrapper.like("t1.personLiableName",dto.getPersonLiableName());
-        wrapper.eq("t1",ProductionTaskDetail::getFinishStatus,dto.getGetFinishStatus());
+        wrapper.like("t1.contractCode", dto.getContractCode());
+        wrapper.like("t1.workOrderCode", dto.getWorkOrderCode());
+        wrapper.like("t1.productionPlanCode", dto.getProductionPlanCode());
+        wrapper.like("t1.productionTaskCode", dto.getProductionTaskCode());
+        wrapper.like("t1.productCode", dto.getProductCode());
+        wrapper.like("t1.productName", dto.getProductName());
+        wrapper.like("t1", ProductionTaskDetail::getProductSn, dto.getProductSn());
+        wrapper.eq("t1.due_date", dto.getDueDate());
+        wrapper.like("t1.productionProcessesName", dto.getProductionProcessesName());
+        wrapper.like("t1.personLiableName", dto.getPersonLiableName());
+        wrapper.eq("t1", ProductionTaskDetail::getFinishStatus, dto.getGetFinishStatus());
 //        wrapper.eq("t1",ProductionTaskDetail::getFinishTime,dto.getGetFinishTime());
 
         //完成时间包含时分秒需要将时间特殊处理
-        if(ObjectUtil.isNotEmpty(dto.getGetFinishTime())) {
+        if (ObjectUtil.isNotEmpty(dto.getGetFinishTime())) {
             Date beginTime = DateUtil.beginOfDay(DateUtil.parse(dto.getGetFinishTime()));
             Date endTime = DateUtil.endOfDay(DateUtil.parse(dto.getGetFinishTime()));
             wrapper.between("t1", ProductionTaskDetail::getFinishTime, beginTime, endTime);
         }
 
 
-        wrapper.orderByDesc("t1",ProductionTaskDetail::getId);
+        wrapper.orderByDesc("t1", ProductionTaskDetail::getId);
+
+        Page<ProductionTaskDetailVo> page = baseMapper.taskProgressPage(dto.getPage(), wrapper);
+
+        //处理工序
+        Map<Long, Long> applicableProductsMap = new HashMap<>();
+        Map<Long, String> technologyMap = new HashMap<>();
+        Map<Long, String> productionProcessesMap = new HashMap<>();
+
+
+        List<ProductionTaskDetailVo> records = page.getRecords();
+        List<Long> productIds = records.stream().map(ProductionTaskDetail::getProductId).distinct().collect(Collectors.toList());
+        List<ApplicableProducts> applicableProducts = applicableProductsService.list(q -> q.in(ApplicableProducts::getProductId, productIds));
+        if (ObjectUtil.isNotEmpty(applicableProducts)) {
+             applicableProductsMap = applicableProducts.stream().collect(Collectors.toMap(ApplicableProducts::getProductId,ApplicableProducts::getTechnologyId));
+
+            List<Long> technologyIds = applicableProducts.stream().map(ApplicableProducts::getTechnologyId).collect(Collectors.toList());
+            List<Technology> technologys = technologyService.list(q -> q.in(Technology::getId, technologyIds));
+            if (ObjectUtil.isNotEmpty(technologys)) {
+                technologyMap = technologys.stream().collect(Collectors.toMap(Technology::getId,Technology::getProcessRoute));
+
+                List<Long> ppIds = new ArrayList<>();
+                for (Technology technology : technologys) {
+                    String processRoute = technology.getProcessRoute();
+                    String[] split = processRoute.split(",");
+                    for (String s : split) {
+                        ppIds.add(Long.parseLong(s));
+                    }
+                }
+                if(ObjectUtil.isNotEmpty(ppIds)) {
+                    productionProcessesMap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName, q -> q.in(ProductionProcesses::getId, ppIds));
+                }
+            }
+        }
+
+
+        for (ProductionTaskDetailVo record : records) {
+            //赋值非定制工序列表
+            if("0".equals(record.getIsCustomized())){
+                Long technologyId = applicableProductsMap.getOrDefault(record.getProductId(), -1L);
+                String processRoute = technologyMap.getOrDefault(technologyId, "");
+                String[] split = processRoute.split(",");
+                List<String> arr = new ArrayList<>();
+                for (String s : split) {
+                    if(ObjectUtil.isEmpty(s)){
+                        continue;
+                    }
+                    String ppName = productionProcessesMap.getOrDefault(Long.parseLong(s),"");
+                    arr.add(ppName);
+                }
+
+                String collect = arr.stream().collect(Collectors.joining("->"));
+                record.setProductionProcessesNames(collect);
+            }
+        }
 
-        Page<ProductionTaskDetailVo> page = baseMapper.taskProgressPage(dto.getPage(),wrapper);
         return page;
     }
 
@@ -466,7 +526,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     public ProductionTaskDetailVo detail(Long id) {
         ProductionTaskDetailVo productionTaskDetailVo = baseMapper.getDetail(IWrapper.<ProductionTaskDetail>getWrapper()
-                .eq("ptd",ProductionTaskDetail::getId,id)
+                .eq("ptd", ProductionTaskDetail::getId, id)
         );
 //        ProductionTaskDetail productionTaskDetail = this.getById(id);
         ProductionTask productionTask = productionTaskService.getById(productionTaskDetailVo.getProductionTaskId());
@@ -478,12 +538,12 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
                 productionTaskDetailVo.getNextProductionProcessesId()
         );
 
-        Map<Long,String> productionProcessesMap;
-        if (Objects.equals(workOrder.getIsCustomized(),1)){
+        Map<Long, String> productionProcessesMap;
+        if (Objects.equals(workOrder.getIsCustomized(), 1)) {
             //定制
             productionProcessesMap = workOrderProductionProcessesService.mapKV(WorkOrderProductionProcesses::getId,
                     WorkOrderProductionProcesses::getName, q -> q.in(WorkOrderProductionProcesses::getId, processesIds));
-        }else {
+        } else {
             //非定制
             productionProcessesMap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName,
                     q -> q.in(ProductionProcesses::getId, processesIds));

+ 4 - 1
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml

@@ -87,7 +87,10 @@
                         ) AS productionProcessesName,
                     su.nick_name AS personLiableName,
                     ptd.finish_status,
-                    ptd.finish_time
+                    ptd.finish_time,
+                    wo.id AS workOrderId,
+                    ptd.product_id,
+                    wo.is_customized
                 FROM
                     production_task_detail ptd
                         LEFT JOIN production_task pt ON ptd.production_task_id = pt.id