|
@@ -7,6 +7,7 @@ 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.constant.PmsConstants;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDeviceRunLogRespVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomPageReqVO;
|
|
@@ -19,6 +20,7 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOr
|
|
|
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.message.PmsMessage;
|
|
|
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;
|
|
@@ -26,8 +28,11 @@ import cn.iocoder.yudao.module.pms.service.iotmaintenancebom.IotMaintenanceBomSe
|
|
|
import cn.iocoder.yudao.module.pms.service.iotmainworkorder.IotMainWorkOrderService;
|
|
|
import cn.iocoder.yudao.module.pms.service.iotmainworkorderbom.IotMainWorkOrderBomService;
|
|
|
import cn.iocoder.yudao.module.pms.service.maintenance.IotMaintenancePlanService;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
@@ -35,11 +40,14 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertListByFlatMap;
|
|
|
+import static cn.iocoder.yudao.module.pms.framework.config.MultiThreadConfiguration.PMS_THREAD_POOL_TASK_EXECUTOR;
|
|
|
|
|
|
@Component
|
|
|
@Slf4j
|
|
@@ -59,6 +67,12 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
private IotMainWorkOrderBomService iotMainWorkOrderBomService;
|
|
|
@Resource
|
|
|
private IotDeviceService iotDeviceService;
|
|
|
+ @Resource
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
+ @Resource(name = PMS_THREAD_POOL_TASK_EXECUTOR)
|
|
|
+ private ThreadPoolTaskExecutor pmsThreadPoolTaskExecutor;
|
|
|
+ @Resource
|
|
|
+ private PmsMessage pmsMessage;
|
|
|
|
|
|
@Override
|
|
|
@TenantJob
|
|
@@ -328,6 +342,36 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
if (CollUtil.isNotEmpty(finalWorkOrderBomS)) {
|
|
|
iotMainWorkOrderBomService.batchAddOrderBOMs(finalWorkOrderBomS);
|
|
|
}
|
|
|
+ // 向工单责任人发送 站内信及 钉钉消息
|
|
|
+ if (CollUtil.isNotEmpty(workOrders)) {
|
|
|
+ // 先查询所有工单责任人的手机号
|
|
|
+ Set<Long> personIds = new HashSet<>(convertList(workOrders, order -> Long.valueOf(order.getResponsiblePerson())));
|
|
|
+ Map<Long, AdminUserRespDTO> users = adminUserApi.getUserMap(personIds);
|
|
|
+ // 建立保养工单与 用户手机号的 对应关系
|
|
|
+ Map<Long, String> orderMobilePair = new HashMap<>();
|
|
|
+ workOrders.forEach(order -> {
|
|
|
+ if (users.containsKey(order.getResponsiblePerson())) {
|
|
|
+ AdminUserRespDTO user = users.get(order.getResponsiblePerson());
|
|
|
+ orderMobilePair.put(order.getId(), user.getMobile());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 异步多线程发送 站内信 钉钉 消息
|
|
|
+ workOrders.forEach(order -> {
|
|
|
+ CountDownLatch latch = new CountDownLatch(workOrders.size());
|
|
|
+ pmsThreadPoolTaskExecutor.execute(() -> {
|
|
|
+ try {
|
|
|
+ if (orderMobilePair.containsKey(order.getId())) {
|
|
|
+ String mobile = orderMobilePair.get(order.getId());
|
|
|
+ pmsMessage.sendMessage(order.getId(), order.getName(), PmsConstants.GENERATE_MAINTENANCE,
|
|
|
+ Long.valueOf(order.getResponsiblePerson()), mobile);
|
|
|
+ System.out.println("保养工单消息:" + order.getId() + "-" + mobile);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ latch.countDown();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
return "创建成功";
|
|
|
}
|