Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

lipenghui vor 2 Monaten
Ursprung
Commit
feea7f617f
16 geänderte Dateien mit 257 neuen und 31 gelöschten Zeilen
  1. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotDeviceController.java
  2. 1 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java
  3. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotDevicePageReqVO.java
  4. 2 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicebom/IotDeviceBomDO.java
  5. 4 2
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/IotDeviceMapper.java
  6. 1 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmainworkorder/IotMainWorkOrderMapper.java
  7. 8 1
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotopeationfill/IotOpeationFillMapper.java
  8. 5 5
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/IotOperationFillJob.java
  9. 61 7
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java
  10. 2 5
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceService.java
  11. 4 3
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java
  12. 21 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java
  13. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillService.java
  14. 77 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillServiceImpl.java
  15. 14 4
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotDeviceMapper.xml
  16. 50 0
      yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotDeviceController.java

@@ -316,7 +316,7 @@ public class IotDeviceController {
     @Operation(summary = "获得设备-bom关联关系列表")
     @PreAuthorize("@ss.hasPermission('rq:iot-device:query')")
     public CommonResult<List<IotDeviceRespVO>> deviceAssociateBomList(IotDevicePageReqVO pageReqVO) {
-        List<IotDeviceRespVO> devices = iotDeviceService.deviceAssociateBomList(pageReqVO.getDeviceIds());
+        List<IotDeviceRespVO> devices = iotDeviceService.deviceAssociateBomList(pageReqVO);
         if (CollUtil.isEmpty(devices)) {
             return success(new ArrayList<>());
         }

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java

@@ -107,7 +107,7 @@ public class IotOpeationFillController {
             }
         }
         for (IotOpeationFillSaveReqVO totalGas:fillList) {
-            if(totalGas.getPointName().equals("累计注气量")){
+            if(totalGas.getPointName().equals("累计注气量")&&totalGas.getIsCollection()==0){
                 double total = Double.parseDouble(fillContent);
                 totalGas.setTotalRunTime(BigDecimal.valueOf(total).add(totalGas.getTotalRunTime()));
                 break;

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotDevicePageReqVO.java

@@ -119,6 +119,9 @@ public class IotDevicePageReqVO extends PageParam {
     @Schema(description = "设备分类BOM同步状态 1已同步 0未同步")
     private Integer bomSyncStatus;
 
+    @Schema(description = "查询相关的BOM分类标识 w维修 b保养")
+    private String bomFlag;
+
     /**
      * 自定义请求参数
      */

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotdevicebom/IotDeviceBomDO.java

@@ -15,7 +15,7 @@ import java.util.List;
  *
  * @author ruiqi
  */
-@TableName("rq_iot_device_bom")
+@TableName(value = "rq_iot_device_bom", autoResultMap = true)
 @KeySequence("rq_iot_device_bom_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -67,7 +67,7 @@ public class IotDeviceBomDO extends BaseDO {
      */
     private Integer sort;
     /**
-     * M维修 S保养 A维修+保养
+     * 1维修 2保养 1,2维修+保养
      */
     @TableField(typeHandler = IntegerListTypeHandler.class)
     private List<Integer> type;

+ 4 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/IotDeviceMapper.java

@@ -150,8 +150,10 @@ public interface IotDeviceMapper extends BaseMapperX<IotDeviceDO> {
     IPage<IotDeviceRespVO> deviceAssociateBomPage(IPage<IotDeviceRespVO> page,
                                                   @Param("reqVO") IotDevicePageReqVO reqVO, @Param("deptIds") Collection<Long> deptIds);
 
-    List<IotDeviceRespVO> deviceAssociateBomList(@Param("deviceIds") Collection<Long> deviceIds);
-    IPage<IotDeviceRespVO> deviceAssociateBomListPage(IPage<IotDeviceRespVO> page, @Param("deviceIds") Collection<Long> deviceIds);
+    List<IotDeviceRespVO> deviceAssociateBomList(@Param("deviceIds") Collection<Long> deviceIds, @Param("bomFlag") String bomFlag);
+
+    IPage<IotDeviceRespVO> deviceAssociateBomListPage(IPage<IotDeviceRespVO> page,
+                                                      @Param("deviceIds") Collection<Long> deviceIds, @Param("bomFlag") String bomFlag);
     default Long selectCountByTimeAndStatus(IotDevicePageReqVO reqVO) {
         return selectCount(new LambdaQueryWrapperX<IotDeviceDO>()
                 .eqIfPresent(IotDeviceDO::getDeviceStatus, reqVO.getDeviceStatus())

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmainworkorder/IotMainWorkOrderMapper.java

@@ -55,6 +55,7 @@ public interface IotMainWorkOrderMapper extends BaseMapperX<IotMainWorkOrderDO>
                 .eqIfPresent(IotMainWorkOrderDO::getOrderNumber, reqVO.getOrderNumber())
                 .likeIfPresent(IotMainWorkOrderDO::getName, reqVO.getName())
                 .eqIfPresent(IotMainWorkOrderDO::getType, reqVO.getType())
+                .eqIfPresent(IotMainWorkOrderDO::getOrderGroupId, reqVO.getOrderGroupId())
                 .eqIfPresent(IotMainWorkOrderDO::getResponsiblePerson, reqVO.getResponsiblePerson())
                 .likeIfPresent(IotMainWorkOrderDO::getResponsiblePersonName, reqVO.getResponsiblePersonName())
                 .eqIfPresent(IotMainWorkOrderDO::getCost, reqVO.getCost())

+ 8 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotopeationfill/IotOpeationFillMapper.java

@@ -49,13 +49,20 @@ public interface IotOpeationFillMapper extends BaseMapperX<IotOpeationFillDO> {
                 .betweenIfPresent(IotOpeationFillDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(IotOpeationFillDO::getId));
     }
-
+    @TenantIgnore
     List<IotOpeationFillDO> getFillDevices();
+    @TenantIgnore
+    List<IotOpeationFillDO> getFillDevices1(Long[] deviceIds);
     List<IotModelTemplateAttrsDO> getAttrsById(IotModelTemplateAttrsRespVO vo);
     int insertFill(List<IotOpeationFillDO> vo);
     int insertFillOrder(List<IotOpeationFillDO> vo);
+    @TenantIgnore
     List<IotOpeationFillDO> fillList(IotOpeationFillPageReqVO vo);
     @TenantIgnore
+    List<IotOpeationFillDO> fills(Long[] deviceIds);
+    @TenantIgnore
+    int upFill(Long[] deviceIds);
+    @TenantIgnore
     List<IotOpeationFillDO> fillListByUserId(IotOpeationFillRespVO vo);
     @TenantIgnore
     List<IotOpeationFillDO> fillListByDeptId(IotOpeationFillRespVO vo);

+ 5 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/IotOperationFillJob.java

@@ -134,12 +134,12 @@ public class IotOperationFillJob implements JobHandler {
         System.out.println("*****************插入运行记录设备表***********************");
         IotOpeationFillPageReqVO vo = new IotOpeationFillPageReqVO();
         List<IotOpeationFillDO> fillList = iotOpeationFillMapper.fillList(vo);
-        if(fillList.size()==0){
-            for (IotOpeationFillDO re:deviceList) {
-                re.setDeviceId(re.getId());
-            }
-            iotOpeationFillMapper.insertFill(deviceList);
+
+        for (IotOpeationFillDO re:deviceList) {
+            re.setDeviceId(re.getId());
         }
+        iotOpeationFillMapper.insertFill(deviceList);
+
 
         System.out.println("*****************插入运行记录设备表完成***********************");
         return "创建成功";

+ 61 - 7
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/mainworkorder/CreateMainWorkOrderJob.java

@@ -2,6 +2,9 @@ package cn.iocoder.yudao.module.pms.job.mainworkorder;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
@@ -9,12 +12,14 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDevice
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.maintenance.vo.IotMaintenancePlanPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdeviceperson.IotDevicePersonDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaintenancebom.IotMaintenanceBomDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbom.IotMainWorkOrderBomDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.maintenance.IotMaintenancePlanDO;
 import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
+import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
 import cn.iocoder.yudao.module.pms.service.iotdevicerunlog.IotDeviceRunLogService;
 import cn.iocoder.yudao.module.pms.service.iotmaintenancebom.IotMaintenanceBomService;
@@ -28,6 +33,7 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
@@ -51,6 +57,8 @@ public class CreateMainWorkOrderJob implements JobHandler {
     private IotMainWorkOrderService iotMainWorkOrderService;
     @Resource
     private IotMainWorkOrderBomService iotMainWorkOrderBomService;
+    @Resource
+    private IotDeviceService iotDeviceService;
 
     @Override
     @TenantJob
@@ -91,6 +99,8 @@ public class CreateMainWorkOrderJob implements JobHandler {
                             )
                     ));
         }
+        // 查询所有设备名称 设备编码集合
+        Map<Long, IotDeviceRespVO> devices = iotDeviceService.getDeviceMap(deviceIds);
         // 查询保养计划明细中所有设备的累计运行里程、累计运行时间
         Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMap(convertListByFlatMap(mainBomList,
                 bom -> Stream.of(bom.getDeviceId())));
@@ -207,13 +217,13 @@ public class CreateMainWorkOrderJob implements JobHandler {
             });
             // 以保养计划id对待保养工单分组 分组后便于生成 保养工单主表记录
             // key保养计划id value待保养工单明细集合
-            Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
+            // Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
             // 以设备为维度 统计每种设备对应的 保养项集合 key保养计划id+设备id value设备对应的保养项集合
             Map<String, List<IotMainWorkOrderBomDO>> deviceBomPair = new HashMap<>();
             // 最终使用的保养工单明细 设置了保养工单主表id
             List<IotMainWorkOrderBomDO> finalWorkOrderBomS = new ArrayList<>();
             if (CollUtil.isNotEmpty(workOrderBOMs)) {
-                workOrderBOMs.forEach(workOrderBom -> {
+                /* workOrderBOMs.forEach(workOrderBom -> {
                     if (workOrderBomPair.containsKey(workOrderBom.getWorkOrderId())) {
                         List<IotMainWorkOrderBomDO> tempOrderBomS = workOrderBomPair.get(workOrderBom.getWorkOrderId());
                         tempOrderBomS.add(workOrderBom);
@@ -223,7 +233,7 @@ public class CreateMainWorkOrderJob implements JobHandler {
                         tempOrderBomS.add(workOrderBom);
                         workOrderBomPair.put(workOrderBom.getWorkOrderId(), tempOrderBomS);
                     }
-                });
+                }); */
                 // 组装设备及对应的 保养项集合 map
                 workOrderBOMs.forEach(bom -> {
                     String uniqueKey = bom.getWorkOrderId()+"-"+bom.getDeviceId();
@@ -239,11 +249,55 @@ public class CreateMainWorkOrderJob implements JobHandler {
                 });
 
                 // 按照 保养计划id+设备id 分组 每个"保养计划id+设备id" 生成一个工单
-                deviceBomPair.forEach((k,v) -> {
-
+                Map<Long, List<Long>> finalDevicePersonPair = devicePersonPair;
+                // 获取当前时间的 yyyy-MM-dd 格式
+                String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY));
+                deviceBomPair.forEach((k, v) -> {
+                    String[] planIdDeviceIdStrS = k.split("-");
+                    // 查询当前设备关联的责任人 如果有多个责任人 需要建立多个对应的工单 但是多个工单 要建立关联关系
+                    if (finalDevicePersonPair.containsKey(Long.valueOf(planIdDeviceIdStrS[1]))) {
+                        List<Long> personIds = finalDevicePersonPair.get(Long.valueOf(planIdDeviceIdStrS[1]));
+                        if (CollUtil.isNotEmpty(personIds)) {
+                            // 多个责任人的相同工单 使用 order_group_id 建立关联
+                            String orderGroupId = StrUtil.uuid();
+                            personIds.forEach(personId -> {
+                                // k保养计划id   v已经触发的保养工单明细
+                                IotMaintenancePlanDO plan = maintenancePair.get(Long.valueOf(planIdDeviceIdStrS[0]));
+                                IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
+                                theMaxId.getAndSet(theMaxId.get() + 1);
+                                workOrder.setId(theMaxId.get());
+                                // 设备多个责任人关联工单标识
+                                workOrder.setOrderGroupId(orderGroupId);
+                                // 查询设备对应的部门
+                                workOrder.setDeptId(plan.getDeptId());
+                                workOrder.setName(plan.getName() + " 工单");
+                                if (devices.containsKey(Long.valueOf(planIdDeviceIdStrS[1]))) {
+                                    workOrder.setDeptId(devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeptId());
+                                    workOrder.setName(devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeviceCode() + " "
+                                            + devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeviceName() + currentDate + " 保养工单");
+                                }
+                                workOrder.setPlanId(plan.getId());
+                                workOrder.setOrderNumber(iotMainWorkOrderService.createWorkOrderNumber());
+                                workOrder.setType(1);   // 计划生成
+                                workOrder.setResult(1); // 待执行
+                                workOrder.setResponsiblePerson(String.valueOf(personId));
+                                workOrder.setAuditStatus(FailureAuditStatusEnum.DRAFT.getStatus());
+                                workOrder.setCreator(String.valueOf(personId));
+                                workOrders.add(workOrder);
+                                // 2. 处理关联的BOM明细
+                                final long workOrderId = workOrder.getId(); // 获取当前工单ID
+                                v.forEach(bom -> {
+                                    IotMainWorkOrderBomDO tempBom = new IotMainWorkOrderBomDO();
+                                    BeanUtils.copyProperties(bom,tempBom);
+                                    tempBom.setWorkOrderId(workOrderId);
+                                    finalWorkOrderBomS.add(tempBom);
+                                });
+                            });
+                        }
+                    }
                 });
 
-                workOrderBomPair.forEach((k,v) -> {
+                /* workOrderBomPair.forEach((k,v) -> {
                     // k保养计划id   v已经触发的保养工单明细
                     IotMaintenancePlanDO plan = maintenancePair.get(k);
                     IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
@@ -264,7 +318,7 @@ public class CreateMainWorkOrderJob implements JobHandler {
                     v.forEach(bom -> bom.setWorkOrderId(workOrderId)); // 设置明细关联ID
                     // 3. 添加到最终集合
                     finalWorkOrderBomS.addAll(v);
-                });
+                }); */
             }
             // 批量新增 保养工单记录
             if (CollUtil.isNotEmpty(workOrders)) {

+ 2 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceService.java

@@ -3,14 +3,11 @@ package cn.iocoder.yudao.module.pms.service;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.SortablePageParam;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.yanfan.ThingsModelDO;
-import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 
 import javax.validation.Valid;
 import java.util.Collection;
@@ -107,10 +104,10 @@ public interface IotDeviceService {
     /**
      * 获得 设备bom 关联 关系 列表
      *
-     * @param deviceIds
+     * @param pageReqVO
      * @return 设备bom 关联 列表
      */
-    List<IotDeviceRespVO> deviceAssociateBomList(List<Long> deviceIds);
+    List<IotDeviceRespVO> deviceAssociateBomList(IotDevicePageReqVO pageReqVO);
     PageResult<IotDeviceRespVO> deviceAssociateBomListPage(IotDevicePageReqVO pageReqVO);
 
     /**

+ 4 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java

@@ -321,14 +321,15 @@ public class IotDeviceServiceImpl implements IotDeviceService {
     }
 
     @Override
-    public List<IotDeviceRespVO> deviceAssociateBomList(List<Long> deviceIds) {
-        List<IotDeviceRespVO> devices = iotDeviceMapper.deviceAssociateBomList(deviceIds);
+    public List<IotDeviceRespVO> deviceAssociateBomList(IotDevicePageReqVO pageReqVO) {
+        List<IotDeviceRespVO> devices = iotDeviceMapper.deviceAssociateBomList(pageReqVO.getDeviceIds(), pageReqVO.getBomFlag());
         return devices;
     }
 
     @Override
     public PageResult<IotDeviceRespVO> deviceAssociateBomListPage(IotDevicePageReqVO pageReqVO) {
-        IPage<IotDeviceRespVO> page = iotDeviceMapper.deviceAssociateBomListPage(new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO.getDeviceIds());
+        IPage<IotDeviceRespVO> page = iotDeviceMapper.deviceAssociateBomListPage(new Page<>(pageReqVO.getPageNo(),
+                pageReqVO.getPageSize()), pageReqVO.getDeviceIds(), pageReqVO.getBomFlag());
         return new PageResult<>(page.getRecords(), page.getTotal());
     }
 

+ 21 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorder/IotMainWorkOrderServiceImpl.java

@@ -573,6 +573,27 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
                 }
             }
         }
+        // 将当前工单的关联工单 一并关闭 是否需要将当前工单选择的物料及费用也复制到 关联工单?
+        IotMainWorkOrderPageReqVO orderReqVO = new IotMainWorkOrderPageReqVO();
+        orderReqVO.setOrderGroupId(updateObj.getOrderGroupId());
+        List<IotMainWorkOrderDO> associateOrders = iotMainWorkOrderMapper.selectList(orderReqVO);
+        List<IotMainWorkOrderDO> filteredOrders = associateOrders.stream()
+                .filter(order -> !order.getId().equals(updateObj.getId()))
+                .collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(filteredOrders)) {
+            // 将关联工单设置为 已执行
+            filteredOrders.forEach(order -> order.setResult(2));
+            iotMainWorkOrderMapper.updateBatch(filteredOrders);
+            List<Long> workOrderIds = filteredOrders.stream()
+                    .map(IotMainWorkOrderDO::getId)
+                    .collect(Collectors.toList());
+            // 将关联工单的明细 status 设置为 1
+            IotMainWorkOrderBomPageReqVO reqVO = new IotMainWorkOrderBomPageReqVO();
+            reqVO.setWorkOrderIds(workOrderIds);
+            List<IotMainWorkOrderBomDO> associateOrderBomS = iotMainWorkOrderBomMapper.selectList(reqVO);
+            associateOrderBomS.forEach(order -> order.setStatus(1));
+            iotMainWorkOrderBomMapper.updateBatch(associateOrderBomS);
+        }
         // 只扣减本地库存 不处理SAP库存
         if (CollUtil.isNotEmpty(factoryIds) && CollUtil.isNotEmpty(costCenterIds) && CollUtil.isNotEmpty(materialCodes)) {
             IotLockStockPageReqVO reqVO = new IotLockStockPageReqVO();

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillService.java

@@ -67,6 +67,9 @@ public interface IotOpeationFillService {
     List<IotOpeationFillDO> fillList(IotOpeationFillPageReqVO vo);
 
     List<IotOpeationFillDO> fillListByUserId(IotOpeationFillRespVO vo);
+
+    void syncWordOrderData(List<Long> deviceIds, List<Long> oldDeptIds, Long deptId);
+
     List<IotOpeationFillDO> fillListByDeptId(IotOpeationFillRespVO vo);
     List<IotOpeationFillDO> deviceList(IotOpeationFillRespVO vo);
 

+ 77 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotopeationfill/IotOpeationFillServiceImpl.java

@@ -21,6 +21,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -114,6 +117,80 @@ public class IotOpeationFillServiceImpl implements IotOpeationFillService {
         return iotOpeationFillMapper.fillListByUserId(vo);
     }
 
+    @Override
+    public void syncWordOrderData(List<Long> deviceIds, List<Long> oldDeptIds, Long deptId) {
+        /**
+         * 1、判断设备
+         */
+        Long[] deviceId = (Long[]) deviceIds.toArray();
+
+        List<IotOpeationFillDO> fills = iotOpeationFillMapper.fills(deviceId);
+        if(fills.size()>0){
+            iotOpeationFillMapper.upFill(deviceId);
+        }
+
+        List<IotOpeationFillDO> fillDOS = iotOpeationFillMapper.getFillDevices1(deviceId);
+        List<IotOpeationFillDO> rhList = iotOpeationFillMapper.rhList();
+        List<IotOpeationFillDO> rdList = iotOpeationFillMapper.rdList();
+        List<IotOpeationFillDO> ryList = iotOpeationFillMapper.ryList();
+        List<IotOpeationFillOrderDO> orderList = new ArrayList<>();
+
+        if(fillDOS.size()>0){
+
+            for (IotOpeationFillDO fillDO:fillDOS) {
+
+                IotOpeationFillOrderDO fill = new IotOpeationFillOrderDO();
+
+                boolean exists = rhList.stream()
+                        .anyMatch(rh -> rh.getId().equals(fillDO.getDeptId()));
+                if(exists){
+                    fillDO.setOrderName("瑞恒兴域"+ LocalDate.now()+"运行记录填报");
+                    fillDO.setDeptId(fillDO.getDeptId());
+                    fillDO.setOrderStatus(0);
+                    fillDO.setCreateTime(LocalDateTime.now());
+                    fillDO.setUserName(fillDO.getUserName());
+                    fillDO.setUserId(fillDO.getUserId());
+                    orderList.add(fill);
+                }
+
+                boolean exists1 = rdList.stream()
+                        .anyMatch(rd -> rd.getId().equals(fillDO.getDeptId()));
+
+                if(exists1){
+                    fillDO.setOrderName("瑞都石油"+LocalDate.now()+"运行记录填报");
+                    fillDO.setDeptId(fillDO.getDeptId());
+                    fillDO.setOrderStatus(0);
+                    fillDO.setCreateTime(LocalDateTime.now());
+                    fillDO.setUserName(fillDO.getUserName());
+                    fillDO.setUserId(fillDO.getUserId());
+                    orderList.add(fill);
+                }
+
+                boolean exists2 = ryList.stream()
+                        .anyMatch(ry -> ry.getId().equals(fillDO.getDeptId()));
+
+                if(exists2){
+                    fillDO.setOrderName("瑞鹰国际"+LocalDate.now()+"运行记录填报");
+                    fillDO.setDeptId(fillDO.getDeptId());
+                    fillDO.setOrderStatus(0);
+                    fillDO.setCreateTime(LocalDateTime.now());
+                    fillDO.setUserName(fillDO.getUserName());
+                    fillDO.setUserId(fillDO.getUserId());
+                    orderList.add(fill);
+                }
+            }
+
+            iotOpeationFillOrderMapper.insertBatch(orderList);
+
+            for (IotOpeationFillDO device:fillDOS) {
+                for (IotOpeationFillOrderDO order:orderList) {
+                    device.setOrderId(order.getId());
+                }
+            }
+            iotOpeationFillMapper.insertFill(fillDOS);
+        }
+    }
+
     @Override
     public List<IotOpeationFillDO> fillListByDeptId(IotOpeationFillRespVO vo) {
         return iotOpeationFillMapper.fillListByDeptId(vo);

+ 14 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotDeviceMapper.xml

@@ -242,12 +242,17 @@
                 t1.`code`
             FROM
                 rq_iot_device t
-            INNER JOIN rq_iot_bom t1 ON ( t1.device_category_id = t.asset_class AND t1.deleted = 0 )
+            INNER JOIN rq_iot_device_bom t1 ON ( t1.device_id = t.id AND t1.deleted = 0 )
             WHERE
                 t.deleted = 0
             AND t1.deleted = 0
             AND t1.leaf_flag = 1
-            AND t1.type LIKE '%2%'
+            <if test='bomFlag!=null and bomFlag!="" and bomFlag=="b" '>
+                AND t1.type LIKE '%2%'
+            </if>
+            <if test='bomFlag!=null and bomFlag!="" and bomFlag=="w" '>
+                AND t1.type LIKE '%1%'
+            </if>
             <if test="deviceIds != null and deviceIds.size &gt; 0">
                 AND t.id IN
                 <foreach collection="deviceIds" index="index" item="key" open="(" separator="," close=")">
@@ -297,12 +302,17 @@
         t1.`code`
         FROM
         rq_iot_device t
-        INNER JOIN rq_iot_bom t1 ON ( t1.device_category_id = t.asset_class AND t1.deleted = 0 )
+        INNER JOIN rq_iot_device_bom t1 ON ( t1.device_id = t.id AND t1.deleted = 0 )
         WHERE
         t.deleted = 0
         AND t1.deleted = 0
         AND t1.leaf_flag = 1
-        AND t1.type LIKE '%2%'
+        <if test='bomFlag!=null and bomFlag!="" and bomFlag=="b" '>
+            AND t1.type LIKE '%2%'
+        </if>
+        <if test='bomFlag!=null and bomFlag!="" and bomFlag=="w" '>
+            AND t1.type LIKE '%1%'
+        </if>
         <if test="deviceIds != null and deviceIds.size &gt; 0">
             AND t.id IN
             <foreach collection="deviceIds" index="index" item="key" open="(" separator="," close=")">

+ 50 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/IotOpeationFillMapper.xml

@@ -30,6 +30,38 @@
     </select>
 
 
+
+    <select id="getFillDevices1"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+
+        select
+            distinct
+            c.id,
+            c.dept_id,
+            c.device_code,
+            c.device_name,
+            b.device_category_id,
+            d.person_id user_id
+        from
+            rqiot.rq_iot_model_template a,
+            rqiot.rq_iot_model_template_attrs b,
+            rqiot.rq_iot_device c,
+            rqiot.rq_iot_device_person d
+        where
+            a.device_category_id = b.device_category_id
+          and
+            a.device_category_id = c.asset_class
+          and
+            c.id = d.device_id
+          and
+            c.device_status in ('sg','dm')
+          and c.device_id in
+        <foreach item="deviceId" collection="array" open="(" separator="," close=")">
+            #{deviceId}
+        </foreach>
+    </select>
+
+
     <insert id="insertFill"
     parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
        insert into rqiot.rq_iot_opeation_fill(device_id,device_code,device_name,device_category_id,create_time,dept_id,order_id)
@@ -89,6 +121,24 @@
         </if>
     </select>
 
+    <select id="fills" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO"
+            resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        SELECT * FROM
+        rqiot.rq_iot_opeation_fill
+        WHERE 1=1
+        and c.device_id in
+        <foreach item="deviceId" collection="array" open="(" separator="," close=")">
+            #{deviceId}
+        </foreach>
+    </select>
+
+    <update id="upFill" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">
+        update rqiot.rq_iot_opeation_fill set dept_id = #{deptId} where device_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{deviceId}
+        </foreach>
+    </update>
+
 
     <select id="deviceList" parameterType="cn.iocoder.yudao.module.pms.controller.admin.iotopeationfill.vo.IotOpeationFillRespVO"
             resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotopeationfill.IotOpeationFillDO">