|
@@ -8,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
|
|
|
|
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
|
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDeviceRunLogRespVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDeviceRunLogRespVO;
|
|
@@ -53,6 +54,7 @@ import org.springframework.validation.annotation.Validated;
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
@@ -2478,7 +2480,7 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void syncWorkOrderData(List<Long> deviceIds, Long deptId, List<Long> personIds) {
|
|
|
|
|
|
|
+ public void syncWorkOrderData(List<Long> deviceIds, Long deptId, List<Long> personIds, Map<Long, Long> oldDeptPair) {
|
|
|
if (CollUtil.isEmpty(deviceIds) || CollUtil.isEmpty(personIds)) {
|
|
if (CollUtil.isEmpty(deviceIds) || CollUtil.isEmpty(personIds)) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -2495,8 +2497,8 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
|
// 查询当前设备集合的所有历史保养工单 如果历史工单明细中包含2个设备A,B,但是只调拨了1个设备A,此时 只复制设备A明细生成一个 执行完成的保养工单
|
|
// 查询当前设备集合的所有历史保养工单 如果历史工单明细中包含2个设备A,B,但是只调拨了1个设备A,此时 只复制设备A明细生成一个 执行完成的保养工单
|
|
|
IotMainWorkOrderBomPageReqVO reqVO = new IotMainWorkOrderBomPageReqVO();
|
|
IotMainWorkOrderBomPageReqVO reqVO = new IotMainWorkOrderBomPageReqVO();
|
|
|
reqVO.setDeviceIds(deviceIds);
|
|
reqVO.setDeviceIds(deviceIds);
|
|
|
- reqVO.setStatus(1); // 查询已经保养完成的工单
|
|
|
|
|
- // List<IotMainWorkOrderBomDO> workOrderBomS = iotMainWorkOrderBomMapper.selectList(reqVO);
|
|
|
|
|
|
|
+ reqVO.setStatus(1);
|
|
|
|
|
+ // 查询已经保养完成的工单
|
|
|
List<IotMainWorkOrderBomDO> workOrderBomS = iotMainWorkOrderBomMapper.historyWorkOrderBomS(new ArrayList<>(deviceDeptIds), deviceIds);
|
|
List<IotMainWorkOrderBomDO> workOrderBomS = iotMainWorkOrderBomMapper.historyWorkOrderBomS(new ArrayList<>(deviceDeptIds), deviceIds);
|
|
|
// 以 工单id+设备id+设备负责人 为维度组成 工单BOM集合
|
|
// 以 工单id+设备id+设备负责人 为维度组成 工单BOM集合
|
|
|
Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
|
|
Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
|
|
@@ -2612,6 +2614,87 @@ public class IotMainWorkOrderServiceImpl implements IotMainWorkOrderService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void syncRunningWorkOrder(List<Long> deviceIds, Long deptId, List<Long> personIds, Map<Long, Long> oldDeptPair) {
|
|
|
|
|
+ if (CollUtil.isEmpty(deviceIds) || CollUtil.isEmpty(personIds)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 查询设备集合修改前的部门
|
|
|
|
|
+ Set<Long> deviceDeptIds = oldDeptPair != null ? new HashSet<>(oldDeptPair.values()) : new HashSet<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 查询当前设备对应的 责任人 前端页面已经统一设置了相同的责任人(有可能多个 多个责任人时随机取1个)
|
|
|
|
|
+ Long personId = personIds.get(0);
|
|
|
|
|
+ // 现在保养工单都是 单设备
|
|
|
|
|
+ // 查询 执行中 的保养工单
|
|
|
|
|
+ List<IotMainWorkOrderBomDO> workOrderBomS = iotMainWorkOrderBomMapper.runningWorkOrderBomS(new ArrayList<>(deviceDeptIds), deviceIds);
|
|
|
|
|
+ // 查询所有部门的名称信息
|
|
|
|
|
+ deviceDeptIds.add(deptId);
|
|
|
|
|
+ Map<Long, DeptDO> deptPair = deptService.getDeptMap(deviceDeptIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 以 工单id+设备id+设备负责人 为维度组成 工单BOM集合
|
|
|
|
|
+ Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
|
|
|
|
|
+ Map<Long, IotMainWorkOrderDO> workOrderPair = new HashMap<>();
|
|
|
|
|
+ Set<Long> workOrderIds = new HashSet<>();
|
|
|
|
|
+ Set<Long> bomNodeIds = new HashSet<>();
|
|
|
|
|
+ // 需要新增的保养工单集合 (历史工单)
|
|
|
|
|
+ List<IotMainWorkOrderDO> tobeAddedOrders = new ArrayList<>();
|
|
|
|
|
+ // 需要 更新 的保养工单集合 (部门 责任人 创建人 备注)
|
|
|
|
|
+ List<IotMainWorkOrderDO> tobeUpdatedOrders = new ArrayList<>();
|
|
|
|
|
+ // 需要新增的保养工单明细集合 (历史工单)
|
|
|
|
|
+ List<IotMainWorkOrderBomDO> tobeAddedOrderBomS = new ArrayList<>();
|
|
|
|
|
+ // 需要新增的保养工单物料明细集合 (历史工单)
|
|
|
|
|
+ List<IotMainWorkOrderBomMaterialDO> tobeAddedOrderBomMaterialS = new ArrayList<>();
|
|
|
|
|
+ if (CollUtil.isNotEmpty(workOrderBomS)) {
|
|
|
|
|
+ workOrderBomS.forEach(bom -> {
|
|
|
|
|
+ if (workOrderBomPair.containsKey(bom.getWorkOrderId())) {
|
|
|
|
|
+ List<IotMainWorkOrderBomDO> tempBomS = workOrderBomPair.get(bom.getWorkOrderId());
|
|
|
|
|
+ tempBomS.add(bom);
|
|
|
|
|
+ workOrderBomPair.put(bom.getWorkOrderId(), tempBomS);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ List<IotMainWorkOrderBomDO> tempBomS = new ArrayList<>();
|
|
|
|
|
+ tempBomS.add(bom);
|
|
|
|
|
+ workOrderBomPair.put(bom.getWorkOrderId(), tempBomS);
|
|
|
|
|
+ }
|
|
|
|
|
+ workOrderIds.add(bom.getWorkOrderId());
|
|
|
|
|
+ bomNodeIds.add(bom.getBomNodeId());
|
|
|
|
|
+ });
|
|
|
|
|
+ // 查询所有保养工单明细对应的保养工单主表集合
|
|
|
|
|
+ IotMainWorkOrderPageReqVO orderReqVO = new IotMainWorkOrderPageReqVO();
|
|
|
|
|
+ orderReqVO.setWorkOrderIds(new ArrayList<>(workOrderIds));
|
|
|
|
|
+ orderReqVO.setResult(1);
|
|
|
|
|
+ // 查询 执行中 的保养工单
|
|
|
|
|
+ List<IotMainWorkOrderDO> workOrders = iotMainWorkOrderMapper.selectList(orderReqVO);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(workOrders)) {
|
|
|
|
|
+ workOrders.forEach(order -> {
|
|
|
|
|
+ workOrderPair.put(order.getId(), order);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ // 修改执行中保养工单的 部门 责任人 创建人 并添加备注信息
|
|
|
|
|
+ workOrderBomPair.forEach((k, v) -> {
|
|
|
|
|
+ // k保养工单id v工单明细集合 单设备
|
|
|
|
|
+ if (workOrderPair.containsKey(k)) {
|
|
|
|
|
+ // 获得当前设备对应的 历史部门id
|
|
|
|
|
+ Long bomDeviceId = v.get(0).getDeviceId();
|
|
|
|
|
+ Long oldDeptId = oldDeptPair.get(bomDeviceId);
|
|
|
|
|
+ // 获取当前时间的 yyyy-MM-dd HH:mm:ss 格式
|
|
|
|
|
+ String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
|
|
|
|
|
+ IotMainWorkOrderDO tempWorkOrder = workOrderPair.get(k);
|
|
|
|
|
+ tempWorkOrder.setDeptId(deptId);
|
|
|
|
|
+ tempWorkOrder.setResponsiblePerson(String.valueOf(personId));
|
|
|
|
|
+ tempWorkOrder.setCreator(String.valueOf(personId));
|
|
|
|
|
+ String historyRemark = StrUtil.isNotBlank(tempWorkOrder.getRemark()) ? tempWorkOrder.getRemark() : StrUtil.EMPTY;
|
|
|
|
|
+ tempWorkOrder.setRemark(historyRemark + "\n" + currentDate +" 设备从 " + deptPair.get(oldDeptId).getName()
|
|
|
|
|
+ + " 调拨到部门 " + deptPair.get(deptId).getName());
|
|
|
|
|
+ tobeUpdatedOrders.add(tempWorkOrder);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ // 更新 执行中的 保养工单
|
|
|
|
|
+ if (CollUtil.isNotEmpty(tobeUpdatedOrders)) {
|
|
|
|
|
+ iotMainWorkOrderMapper.updateBatch(tobeUpdatedOrders);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public List<IotMainWorkOrderBomDO> historyWorkOrderBoms(Set<Long> deviceIds, Set<Long> bomNodeIds) {
|
|
public List<IotMainWorkOrderBomDO> historyWorkOrderBoms(Set<Long> deviceIds, Set<Long> bomNodeIds) {
|
|
|
IotMainWorkOrderBomPageReqVO reqVO = new IotMainWorkOrderBomPageReqVO();
|
|
IotMainWorkOrderBomPageReqVO reqVO = new IotMainWorkOrderBomPageReqVO();
|