소스 검색

工单BOM调整 功能修改

yzc 1 년 전
부모
커밋
e09d49275e

+ 24 - 24
hx-admin/src/main/resources/application-dev.yml

@@ -5,10 +5,10 @@ spring:
       strict: true
       primary: base
       datasource:
-        victoriatourist:
-          url: jdbc:mysql://121.37.194.75:30102/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
+#        victoriatourist:
+#          url: jdbc:mysql://121.37.194.75:30102/bytesailing_victoriatourist?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
         common:
           url: jdbc:mysql://121.37.194.75:30102/bytesailing_common?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
           username: root
@@ -37,10 +37,10 @@ spring:
           url: jdbc:mysql://121.37.194.75:30102/bytesailing_base?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
           username: root
           password: 5fWD*oa^nso@kmKa
-        iot:
-          url: jdbc:mysql://121.37.194.75:30102/bytesailing_iot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
+#        iot:
+#          url: jdbc:mysql://121.37.194.75:30102/bytesailing_iot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
         customer:
           url: jdbc:mysql://121.37.194.75:30102/bytesailing_customer?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
           username: root
@@ -57,22 +57,22 @@ spring:
           url: jdbc:mysql://121.37.194.75:30102/bytesailing_sale?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
           username: root
           password: 5fWD*oa^nso@kmKa
-        mail:
-          url: jdbc:mysql://121.37.194.75:30102/bytesailing_mail?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
-        kd100:
-          url: jdbc:mysql://121.37.194.75:30102/bytesailing_kd100?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
-        ehsd:
-          url: jdbc:mysql://121.37.194.75:30102/bytesailing_ehsd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
-        data:
-          url: jdbc:mysql://121.37.194.75:30102/yf_new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: 5fWD*oa^nso@kmKa
+#        mail:
+#          url: jdbc:mysql://121.37.194.75:30102/bytesailing_mail?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
+#        kd100:
+#          url: jdbc:mysql://121.37.194.75:30102/bytesailing_kd100?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
+#        ehsd:
+#          url: jdbc:mysql://121.37.194.75:30102/bytesailing_ehsd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
+#        data:
+#          url: jdbc:mysql://121.37.194.75:30102/yf_new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: 5fWD*oa^nso@kmKa
         jxst:
           url: jdbc:mysql://121.37.194.75:30102/bytesailing_jxst?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai
           username: root

+ 8 - 0
hx-jxst/src/main/java/com/fjhx/jxst/flow/SalesContractFlow.java

@@ -1,5 +1,6 @@
 package com.fjhx.jxst.flow;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.fjhx.common.constant.SourceConstant;
@@ -21,6 +22,7 @@ import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 
 @Component
 public class SalesContractFlow extends FlowDelegate {
@@ -68,6 +70,12 @@ public class SalesContractFlow extends FlowDelegate {
             workOrder.setProductionQuantity(workOrder.getQuantity());
             workOrder.setContractDetailsId(salesContractDetails.getId());
 
+            //如果非定制 不需要调整定制BOM和定制工艺 默认设置为已调整
+            if(Objects.equals(salesContractDetails.getIsCustomized(),"0")){
+                workOrder.setTechnologyStatus(1);
+                workOrder.setBomStatus(1);
+            }
+
             //非定制工单查询库存如果存在库存需要人工干预是否需要生产
             BigDecimal availableStockQuantity = stockService.getAvailableStockQuantity(salesContractDetails.getProductId());
             if ("0".equals(salesContractDetails.getIsCustomized()) && availableStockQuantity.compareTo(BigDecimal.ZERO) > 0) {

+ 9 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/work/WorkOrderController.java

@@ -2,6 +2,7 @@ package com.fjhx.mes.controller.work;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.mes.entity.work.dto.WorkOrderBomDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -95,4 +96,12 @@ public class WorkOrderController {
         workOrderService.research(dto);
     }
 
+    /**
+     * 修改BOM
+     */
+    @PostMapping("/editBom")
+    public void editBom(@RequestBody WorkOrderBomDto dto){
+        workOrderService.editBom(dto);
+    }
+
 }

+ 8 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/dto/WorkOrderBomDto.java

@@ -26,4 +26,12 @@ public class WorkOrderBomDto extends WorkOrderBom {
      */
     private Integer bomStatus;
 
+    /**
+     * 研发BOM调整状态
+     */
+    private Integer researchBomStatus;
+    /**
+     * 电工(电控)BOM调整状态
+     */
+    private Integer electricianBomStatus;
 }

+ 9 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/po/WorkOrder.java

@@ -92,4 +92,13 @@ public class WorkOrder extends BasePo {
      */
     private Integer researchStatus;
 
+    /**
+     * 研发BOM调整状态
+     */
+    private Integer researchBomStatus;
+    /**
+     * 电工(电控)BOM调整状态
+     */
+    private Integer electricianBomStatus;
+
 }

+ 7 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/po/WorkOrderBom.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.entity.work.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.math.BigDecimal;
@@ -45,4 +46,10 @@ public class WorkOrderBom extends BasePo {
      */
     private Integer type;
 
+    /**
+     * BOMId 普通BOM的字段
+     */
+    @TableField(exist = false)
+    private Long bomInfoId;
+
 }

+ 1 - 4
hx-mes/src/main/java/com/fjhx/mes/service/bom/impl/BomInfoServiceImpl.java

@@ -166,10 +166,7 @@ public class BomInfoServiceImpl extends ServiceImpl<BomInfoMapper, BomInfo> impl
     public void edit(BomInfoDto bomInfoDto) {
         Long bomInfoId = bomInfoDto.getId();
         if (ObjectUtil.isEmpty(bomInfoId)) {
-//            throw new ServiceException("bomId不能为空");
-            //如果没传id就是新建
-            add(bomInfoDto);
-            return;
+            throw new ServiceException("bomId不能为空");
         }
 
         bomInfoDto.setCurrentVersion(null);

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

@@ -1,7 +1,7 @@
 package com.fjhx.mes.service.work;
 
-import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.fjhx.mes.entity.bom.po.BomDetail;
+import com.fjhx.mes.entity.work.dto.WorkOrderBomDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.ruoyi.common.core.service.BaseService;
@@ -56,12 +56,7 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
     /**
      * 检查定制工单BOM 工艺配置状态 如果配置完成则发送消息
      */
-    void checkCustomizedInfo(Long workOrderId);
-
-    /**
-     * 给下发生产计划的人发消息
-     */
-    void sendPlanInfo();
+    void checkWorkOrderStatus(Long workOrderId);
 
     /**
      * 下发需要人工干预的工单
@@ -82,4 +77,9 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
 //     * 冻结工单BOM
 //     */
 //    void freezeMaterial(WorkOrder workOrder);
+
+    /**
+     * 修改BOM
+     */
+    void editBom(WorkOrderBomDto workOrderBomDto);
 }

+ 4 - 4
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderBomServiceImpl.java

@@ -66,9 +66,9 @@ public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, Wor
                 throw new ServiceException("查询不到产品基本BOM明细信息");
             }
             workOrderBomList = BeanUtil.copyToList(bomDetailList, WorkOrderBom.class);
-            for (WorkOrderBom workOrderBomVo : workOrderBomList) {
-                workOrderBomVo.setId(null);//清空id
-            }
+//            for (WorkOrderBom workOrderBomVo : workOrderBomList) {
+//                workOrderBomVo.setId(null);//清空id
+//            }
         }
         List<WorkOrderBomVo> workOrderBomVos = BeanUtil.copyToList(workOrderBomList, WorkOrderBomVo.class);
         //赋值产品明细
@@ -103,7 +103,7 @@ public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, Wor
         this.saveOrUpdateBatch(workOrderBomList);
 
         //检查定制工单是否配置BOM、工艺 配置完成发消息
-        workOrderService.checkCustomizedInfo(workOrderBomDto.getWorkOrderId());
+        workOrderService.checkWorkOrderStatus(workOrderBomDto.getWorkOrderId());
     }
 
 }

+ 1 - 3
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderProductionProcessesServiceImpl.java

@@ -6,9 +6,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.file.entity.ObsFile;
 import com.fjhx.file.utils.ObsFileUtil;
-import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
 import com.fjhx.mes.entity.production.po.ProductionProcesses;
-import com.fjhx.mes.entity.technology.po.Technology;
 import com.fjhx.mes.entity.work.dto.WorkOrderProductionProcessesDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
@@ -104,7 +102,7 @@ public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrd
         this.editLinked(workOrderProductionProcessesList1, WorkOrderProductionProcesses::getWorkOrderId, dto.getWorkOrderId());
 
         //检查定制工单是否配置BOM、工艺 配置完成发消息
-        workOrderService.checkCustomizedInfo(dto.getWorkOrderId());
+        workOrderService.checkWorkOrderStatus(dto.getWorkOrderId());
 
         //增加附件(绑定到工单上,附件类型为1)
         ObsFileUtil.editFile(dto.getFileList(),dto.getWorkOrderId(),1);

+ 88 - 43
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -17,12 +17,14 @@ import com.fjhx.customer.service.customer.CustomerService;
 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.bom.dto.BomInfoDto;
 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.WorkOrderBomDto;
 import com.fjhx.mes.entity.work.dto.WorkOrderDto;
 import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
@@ -48,8 +50,6 @@ import com.fjhx.wms.service.stock.StockService;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.ruoyi.common.core.domain.BasePo;
-import com.ruoyi.common.core.domain.entity.SysRole;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -120,33 +120,21 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         wrapper.eq("wo", WorkOrder::getSource, dto.getSource());
 
 
+        //创建计划时工单要满足以下条件才能下工单
         if (ObjectUtil.isNotEmpty(dto.getIsHandle())) {
-            SysUser user = SecurityUtils.getLoginUser().getUser();
-
-
-            List<SysRole> sysRoleList = user.getRoles();
-            List<String> roleKeys = sysRoleList.stream().map(SysRole::getRoleKey).collect(Collectors.toList());
-            //研发
-            if (roleKeys.contains("dev")) {
-                wrapper.eq("wo", WorkOrder::getResearchStatus, dto.getIsHandle());
-            }
-            //制图
-            if (roleKeys.contains("design")) {
-                wrapper.and(q -> q
-                        .eq("wo", WorkOrder::getBomStatus, dto.getIsHandle())
-                        .eq("wo", WorkOrder::getTechnologyStatus, dto.getIsHandle())
-                );
-            }
-            //研发,制图
-            if (roleKeys.contains("dev") && roleKeys.contains("design")) {
-                wrapper.and(q -> q
-                        .eq("wo", WorkOrder::getResearchStatus, dto.getIsHandle())
-                        .or().and(q1 -> q1
-                                .eq("wo", WorkOrder::getBomStatus, dto.getIsHandle())
-                                .eq("wo", WorkOrder::getTechnologyStatus, dto.getIsHandle())
-                        )
-                );
-            }
+            //研发已上传附件
+            wrapper.eq("wo",WorkOrder::getResearchStatus,1);
+            //研发已调整BOM
+            wrapper.eq("wo",WorkOrder::getResearchBomStatus,1);
+            //电工(电控)已调整BOM
+            wrapper.eq("wo",WorkOrder::getElectricianBomStatus,1);
+            //制图已经调整定制工序[定制工单]
+            wrapper.eq("wo",WorkOrder::getTechnologyStatus,1);
+            //制图已经调整定制BOM[定制工单]
+            wrapper.eq("wo",WorkOrder::getBomStatus,1);
+            //制图已下发生产(生产数量不为空)
+            wrapper.isNotNull("wo.production_quantity");
+            wrapper.ne("wo.production_quantity","");
         }
 
         //过滤待排程(待创建计划的工单)
@@ -311,24 +299,31 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
      * 检查定制工单BOM 工艺配置状态 如果配置完成则发送消息
      */
     @Override
-    public void checkCustomizedInfo(Long workOrderId) {
-        WorkOrder workOrder1 = this.getById(workOrderId);
-        if (Objects.equals(workOrder1.getBomStatus(), 1) && Objects.equals(workOrder1.getTechnologyStatus(), 1)) {
+    public void checkWorkOrderStatus(Long workOrderId) {
+        WorkOrder workOrder = this.getById(workOrderId);
+
+        //研发上传附件
+        boolean status = Objects.equals(workOrder.getResearchStatus(), 1);
+        //研发调整BOM
+        status = status && Objects.equals(workOrder.getResearchBomStatus(), 1);
+        //电工调整BOM
+        status = status && Objects.equals(workOrder.getElectricianBomStatus(), 1);
+        //制图调整定制工艺
+        status = status && Objects.equals(workOrder.getTechnologyStatus(), 1);
+        //制图调整定制BOM
+        status = status && Objects.equals(workOrder.getBomStatus(), 1);
+        //制图已经下发工单
+        status = status && ObjectUtil.isNotEmpty(workOrder.getProductionQuantity());
+        if (status) {
             //推送消息给生产计划下发的负责人
-            sendPlanInfo();
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            List<Long> userIds = userService.getUserIdsByRoleKey("design");
+            DynamicDataSourceContextHolder.poll();
+            WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的工单待下发!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
         }
     }
 
-    /**
-     * 给下发生产计划的人发消息
-     */
-    @Override
-    public void sendPlanInfo() {
-        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-        List<Long> userIds = userService.getUserIdsByRoleKey("design");
-        DynamicDataSourceContextHolder.poll();
-        WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的工单待下发!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
-    }
+
 
     /**
      * 下发需要人工干预的工单
@@ -490,9 +485,59 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
                 WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的定制工单待配置!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
             } else if ("0".equals(workOrder.getIsCustomized())) {
                 //非定制工单 推送消息给生产计划下发的负责人
-                sendPlanInfo();
+                checkWorkOrderStatus(workOrder.getId());
             }
         }
     }
 
+    /**
+     * 修改BOM
+     */
+    @Override
+    @DSTransactional
+    public synchronized void editBom(WorkOrderBomDto workOrderBomDto) {
+        Long workOrderId = workOrderBomDto.getWorkOrderId();
+        Assert.notEmpty(workOrderId,"工单Id不能为空");
+        WorkOrder workOrder = this.getById(workOrderId);
+        Assert.notEmpty(workOrder,"查询不到工单信息");
+
+        //修改状态
+        Integer researchBomStatus = workOrderBomDto.getResearchBomStatus();
+        Integer electricianBomStatus = workOrderBomDto.getElectricianBomStatus();
+        this.update(q->q
+                .eq(WorkOrder::getId,workOrderId)
+                .set(ObjectUtil.isNotEmpty(researchBomStatus),WorkOrder::getResearchBomStatus, researchBomStatus)
+                .set(ObjectUtil.isNotEmpty(electricianBomStatus),WorkOrder::getElectricianBomStatus, electricianBomStatus)
+        );
+
+        //判断定制还是非定制
+        if(Objects.equals(workOrder.getIsCustomized(),"1")){
+            //定制-修改定制BOM
+            workOrderBomService.edit(workOrderBomDto);
+        }else{
+            //非定制-修改普通BOM
+            List<WorkOrderBom> workOrderBomList = workOrderBomDto.getWorkOrderBomList();
+            //将数据转换成普通BOM
+            BomInfoDto bomInfoDto = new BomInfoDto();
+            List<BomDetail> bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
+            bomInfoDto.setBomDetailList(bomDetailList);
+
+            //查询基本BOM
+            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+            if(ObjectUtil.isNotEmpty(bomInfo)){
+                //修改
+                bomInfoDto.setId(bomInfo.getId());
+                bomInfoService.editByJxst(bomInfoDto);
+            }else{
+                //添加
+                bomInfoDto.setAddType(1);
+                bomInfoDto.setProductId(workOrder.getProductId());
+                bomInfoService.addByJxst(bomInfoDto);
+            }
+        }
+
+        //检查工单状态
+        checkWorkOrderStatus(workOrderId);
+    }
+
 }