Bladeren bron

添加任务时 工序节点与用户绑定 功能实现

yzc 1 jaar geleden
bovenliggende
commit
a80bb42ca2

+ 3 - 3
code/src/test/java/MesDataSource.java

@@ -4,9 +4,9 @@ public class MesDataSource {
 
     public static void main(String[] args) {
         GeneratorApplication.builder()
-                .url("jdbc:mysql://36.134.91.96:17330/bytesailing_mes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
-                .username("fjhx2012mysql")
-                .password("3PN-Mzn#vnP&q6d")
+                .url("jdbc:mysql://121.37.194.75:30102/bytesailing_mes?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("root")
+                .password("5fWD*oa^nso@kmKa")
                 .port(9989)
                 .module("hx-mes")
                 .parent("com.fjhx.mes")

+ 10 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDto.java

@@ -1,9 +1,13 @@
 package com.fjhx.mes.entity.production.dto;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.fjhx.mes.entity.production.po.ProductionTask;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 生产任务新增编辑入参实体
  *
@@ -14,4 +18,10 @@ import lombok.Setter;
 @Setter
 public class ProductionTaskDto extends ProductionTask {
 
+
+    /**
+     * 任务工序与用户绑定 key工序id val用户id列表
+     */
+    private String taskProcessesUser;
+
 }

+ 6 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionPlanVo.java

@@ -1,6 +1,7 @@
 package com.fjhx.mes.entity.production.vo;
 
 import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -26,4 +27,9 @@ public class ProductionPlanVo extends ProductionPlan {
     /**待排程数量*/
     private BigDecimal remainingQuantity;
 
+    /**
+     * 工序列表
+     */
+    List<WorkOrderProductionProcesses> productionProcessesList;
+
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionProcessesService.java

@@ -1,6 +1,8 @@
 package com.fjhx.mes.service.production;
 
 import com.fjhx.mes.entity.production.po.ProductionProcesses;
+import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mes.entity.production.vo.ProductionProcessesVo;
@@ -9,6 +11,8 @@ import com.fjhx.mes.entity.production.dto.ProductionProcessesDto;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -45,4 +49,5 @@ public interface ProductionProcessesService extends BaseService<ProductionProces
      */
     void delete(Long id);
 
+    List<ProductionProcesses> getBaseProductionProcessesList(WorkOrder workOrder);
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionPlanServiceImpl.java

@@ -7,6 +7,7 @@ import com.fjhx.mes.entity.production.po.ProductionPlan;
 import com.fjhx.mes.entity.production.po.ProductionTask;
 import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
 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.ProductionPlanMapper;
 import com.fjhx.mes.service.production.ProductionPlanService;
@@ -129,6 +130,10 @@ public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper,
         //赋值负责人名字
         UserUtil.assignmentNickName(productionTaskVos, ProductionTask::getPersonLiableId, ProductionTaskVo::setPersonLiableName);
         result.setProductionTaskList(productionTaskVos);
+
+        //获取工序列表
+        result.setProductionProcessesList(workOrderService.getProductionProcessesList(workOrder));
+
         return result;
     }
 

+ 39 - 2
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionProcessesServiceImpl.java

@@ -8,17 +8,26 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.file.entity.ObsFile;
 import com.fjhx.file.service.FileInfoService;
 import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
 import com.fjhx.mes.entity.production.dto.ProductionProcessesDto;
 import com.fjhx.mes.entity.production.dto.ProductionProcessesSelectDto;
 import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.production.vo.ProductionProcessesVo;
+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.mapper.production.ProductionProcessesMapper;
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.production.ProductionProcessesService;
+import com.fjhx.mes.service.technology.TechnologyService;
+import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -33,7 +42,14 @@ import java.util.List;
 public class ProductionProcessesServiceImpl extends ServiceImpl<ProductionProcessesMapper, ProductionProcesses> implements ProductionProcessesService {
 
     @Autowired
-    FileInfoService fileInfoService;
+    private FileInfoService fileInfoService;
+    @Autowired
+    private WorkOrderProductionProcessesService workOrderProductionProcessesService;
+    @Autowired
+    private ApplicableProductsService applicableProductsService;
+    @Autowired
+    private TechnologyService technologyService;
+
 
     @Override
     public Page<ProductionProcessesVo> getPage(ProductionProcessesSelectDto dto) {
@@ -55,7 +71,7 @@ public class ProductionProcessesServiceImpl extends ServiceImpl<ProductionProces
     @Override
     public void add(ProductionProcessesDto productionProcessesDto) {
         List<ObsFile> fileList = productionProcessesDto.getFileList();
-        if(ObjectUtil.isNotEmpty(fileList)){
+        if (ObjectUtil.isNotEmpty(fileList)) {
             ObsFile obsFile = productionProcessesDto.getFileList().get(0);
             productionProcessesDto.setFileName(obsFile.getFileName());
         }
@@ -79,4 +95,25 @@ public class ProductionProcessesServiceImpl extends ServiceImpl<ProductionProces
         ObsFileUtil.removeFile(id);
     }
 
+    /**
+     * 根据工单详细获取基本工序
+     */
+    @Override
+    public List<ProductionProcesses> getBaseProductionProcessesList(WorkOrder workOrder){
+        ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
+        if (ObjectUtil.isEmpty(applicableProducts)) {
+            throw new ServiceException("未找到适用于该产品的工艺信息");
+        }
+        Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+        if (ObjectUtil.isEmpty(technology)) {
+            throw new ServiceException("工艺信息不存在");
+        }
+        String processRoute = technology.getProcessRoute();
+        if (ObjectUtil.isEmpty(processRoute)) {
+            throw new ServiceException("工艺线路为空");
+        }
+        String[] split = processRoute.split(",");
+        return this.list(q -> q.in(ProductionProcesses::getId, split));
+    }
+
 }

+ 31 - 6
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -2,11 +2,13 @@ package com.fjhx.mes.service.production.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
@@ -86,6 +88,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private ProductionProcessesService productionProcessesService;
     @Autowired
     private ProductionTaskDetailRecordService productionTaskDetailRecordService;
+    @Autowired
+    private ProductionTaskProcessesDetailService productionTaskProcessesDetailService;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -160,7 +164,7 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
         } else {
             //查询BOM信息
-            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion,1));
+            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
             if (ObjectUtil.isEmpty(bomInfo)) {
                 throw new ServiceException("查询不到产品的BOM信息");
             }
@@ -235,8 +239,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             }
             productionProcessesId = workOrderProductionProcesses.get(0).getId();
             //赋值下一工序id
-            if(workOrderProductionProcesses.size()>1){
-                nextProductionProcessesId =  workOrderProductionProcesses.get(1).getId();
+            if (workOrderProductionProcesses.size() > 1) {
+                nextProductionProcessesId = workOrderProductionProcesses.get(1).getId();
             }
         } else {
             ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
@@ -254,8 +258,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             String[] split = processRoute.split(",");
             productionProcessesId = Long.valueOf(split[0]);
             //赋值下一工序id
-            if(split.length>1){
-                nextProductionProcessesId =  Long.valueOf(split[1]);
+            if (split.length > 1) {
+                nextProductionProcessesId = Long.valueOf(split[1]);
             }
         }
         //创建任务明细
@@ -282,6 +286,27 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
         }
         productionTaskDetailService.saveBatch(productionTaskDetailList);
         productionTaskDetailRecordService.saveBatch(productionTaskDetailRecordList);
+
+        //添加任务对每一个工序的用户绑定
+        List<ProductionTaskProcessesDetail> productionTaskProcessesDetailList = new ArrayList<>();
+        Map<Long,List<Long>> taskProcessesUserMap = JSONObject.parseObject(productionTaskDto.getTaskProcessesUser(),Map.class);
+        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
+        for (WorkOrderProductionProcesses workOrderProductionProcesses : productionProcessesList) {
+            Long processesId = workOrderProductionProcesses.getId();
+            List<Long> userIds = taskProcessesUserMap.get(processesId);
+            if(ObjectUtil.isEmpty(userIds)){
+                throw new ServiceException(String.format("工序 %s 未配置用户",workOrderProductionProcesses.getName()));
+            }
+            for (Long userId : userIds) {
+                ProductionTaskProcessesDetail productionTaskProcessesDetail = new ProductionTaskProcessesDetail();
+                productionTaskProcessesDetail.setProductionTaskId(productionTaskDto.getId());
+                productionTaskProcessesDetail.setProductionProcessesId(processesId);
+                productionTaskProcessesDetail.setUserId(userId);
+                productionTaskProcessesDetailList.add(productionTaskProcessesDetail);
+            }
+        }
+        productionTaskProcessesDetailService.saveBatch(productionTaskProcessesDetailList);
+        throw new ServiceException("111111111111");
     }
 
     @Override
@@ -335,7 +360,7 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             productionTaskDetail.setCumulativeTime(formattedResult);
 
             //判断是否完工
-            if(productionTaskDetail.getFinishStatus()==1){
+            if (productionTaskDetail.getFinishStatus() == 1) {
                 productionTaskDetail.setProductionProcessesName("已完成");
             }
         }

+ 3 - 0
hx-mes/src/main/java/com/fjhx/mes/service/work/WorkOrderService.java

@@ -1,6 +1,7 @@
 package com.fjhx.mes.service.work;
 
 import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.mes.entity.work.vo.WorkOrderVo;
@@ -52,4 +53,6 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
 
 
     Page<WorkOrderVo> getPageByJxst(WorkOrderSelectDto dto);
+
+    List<WorkOrderProductionProcesses> getProductionProcessesList(WorkOrder workOrder);
 }

+ 15 - 14
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderProductionProcessesServiceImpl.java

@@ -59,20 +59,21 @@ public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrd
                 .orderByAsc(WorkOrderProductionProcesses::getSort));
         //如果定制工序信息为空就获取基础工艺工序信息
         if (ObjectUtil.isEmpty(workOrderProductionProcessesList)) {
-            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
-            if (ObjectUtil.isEmpty(applicableProducts)) {
-                throw new ServiceException("未找到适用于该产品的工艺信息");
-            }
-            Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
-            if (ObjectUtil.isEmpty(technology)) {
-                throw new ServiceException("工艺信息不存在");
-            }
-            String processRoute = technology.getProcessRoute();
-            if (ObjectUtil.isEmpty(processRoute)) {
-                throw new ServiceException("工艺线路为空");
-            }
-            String[] split = processRoute.split(",");
-            List<ProductionProcesses> productionProcesses = productionProcessesService.list(q -> q.in(ProductionProcesses::getId, split));
+            List<ProductionProcesses> productionProcesses = productionProcessesService.getBaseProductionProcessesList(workOrder);
+//            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
+//            if (ObjectUtil.isEmpty(applicableProducts)) {
+//                throw new ServiceException("未找到适用于该产品的工艺信息");
+//            }
+//            Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+//            if (ObjectUtil.isEmpty(technology)) {
+//                throw new ServiceException("工艺信息不存在");
+//            }
+//            String processRoute = technology.getProcessRoute();
+//            if (ObjectUtil.isEmpty(processRoute)) {
+//                throw new ServiceException("工艺线路为空");
+//            }
+//            String[] split = processRoute.split(",");
+//            List<ProductionProcesses> productionProcesses = productionProcessesService.list(q -> q.in(ProductionProcesses::getId, split));
             List<WorkOrderProductionProcessesVo> workOrderProductionProcessesList0 = BeanUtil.copyToList(productionProcesses, WorkOrderProductionProcessesVo.class);
             int i = 0;
             for (WorkOrderProductionProcessesVo workOrderProductionProcesses : workOrderProductionProcessesList0) {

+ 30 - 0
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -11,18 +11,22 @@ import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.bom.po.BomDetail;
 import com.fjhx.mes.entity.bom.po.BomInfo;
 import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.production.po.ProductionTask;
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import com.fjhx.mes.entity.work.dto.WorkOrderDto;
 import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
 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.work.WorkOrderMapper;
 import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
 import com.fjhx.mes.service.production.ProductionPlanService;
+import com.fjhx.mes.service.production.ProductionProcessesService;
 import com.fjhx.mes.service.production.ProductionTaskDetailService;
 import com.fjhx.mes.service.production.ProductionTaskService;
+import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.mes.utils.code.CodeEnum;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
@@ -75,6 +79,10 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     private ProductionTaskService productionTaskService;
     @Autowired
     private ProductionTaskDetailService productionTaskDetailService;
+    @Autowired
+    private ProductionProcessesService productionProcessesService;
+    @Autowired
+    private WorkOrderProductionProcessesService workOrderProductionProcessesService;
 
     @Override
     public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
@@ -277,4 +285,26 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         return page;
     }
 
+
+    /**
+     * 根据工单类型获取工序
+     */
+    @Override
+    public List<WorkOrderProductionProcesses> getProductionProcessesList(WorkOrder workOrder) {
+        if (Objects.equals(workOrder.getIsCustomized(), "1")) {
+            //获取定制工序列表
+            return workOrderProductionProcessesService.list(q -> q.eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId()));
+        } else {
+            //获取基础工序列表
+            List<ProductionProcesses> baseProductionProcessesList = productionProcessesService.getBaseProductionProcessesList(workOrder);
+            List<WorkOrderProductionProcesses> workOrderProductionProcesses = BeanUtil.copyToList(baseProductionProcessesList, WorkOrderProductionProcesses.class);
+            int i = 0;
+            for (WorkOrderProductionProcesses workOrderProductionProcess : workOrderProductionProcesses) {
+                workOrderProductionProcess.setSort(i);
+                i++;
+            }
+            return workOrderProductionProcesses;
+        }
+    }
+
 }