|
@@ -2,18 +2,33 @@ package cn.iocoder.yudao.module.pms.service.failure;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
|
|
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
|
|
|
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.failure.vo.IotFailureReportSaveReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.failure.IotFailureReportDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
|
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.failure.IotFailureReportMapper;
|
|
|
+import cn.iocoder.yudao.module.supplier.dal.dataobject.product.SupplierDO;
|
|
|
+import cn.iocoder.yudao.module.supplier.enums.common.SupplierAuditStatusEnum;
|
|
|
+import cn.iocoder.yudao.module.system.api.dingtalk.DingtalkSendApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
|
|
|
+import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
|
|
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
|
|
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import javax.annotation.Resource;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
+
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
@@ -30,11 +45,36 @@ import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_FAILURE_RE
|
|
|
@Service
|
|
|
@Validated
|
|
|
public class IotFailureReportServiceImpl implements IotFailureReportService {
|
|
|
-
|
|
|
+ public static final String PROCESS_KEY = "failure-report";
|
|
|
@Resource
|
|
|
private IotFailureReportMapper iotFailureReportMapper;
|
|
|
@Resource
|
|
|
private IotDeviceMapper iotDeviceMapper;
|
|
|
+ @Resource
|
|
|
+ private NotifyMessageSendApi notifyMessageSendApi;
|
|
|
+ @Resource
|
|
|
+ private DeptService deptService;
|
|
|
+ @Resource
|
|
|
+ private AdminUserMapper adminUserMapper;
|
|
|
+ @Resource
|
|
|
+ private DingtalkSendApi dingtalkSendApi;
|
|
|
+ @Resource
|
|
|
+ private BpmProcessInstanceApi processInstanceApi;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Long submitForApproval(Long id) {
|
|
|
+ IotFailureReportDO iotFailureReportDO = iotFailureReportMapper.selectById(id);
|
|
|
+ if (Objects.isNull(iotFailureReportDO)) {throw new ServiceException(IOT_FAILURE_REPORT_NOT_EXISTS);}
|
|
|
+ // 发起BPM流程
|
|
|
+ // 获取当前登录人信息
|
|
|
+ String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
|
|
|
+ new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY).setBusinessKey(String.valueOf(id)));
|
|
|
+ // 将流程实例id 更新到 供应商主数据表
|
|
|
+ iotFailureReportMapper.updateById(new IotFailureReportDO().setId(id).setProcessInstanceId(processInstanceId)
|
|
|
+ .setStatus("转工单"));
|
|
|
+ return 0l;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -49,6 +89,24 @@ public class IotFailureReportServiceImpl implements IotFailureReportService {
|
|
|
iotFailureReport.setFailureName(iotDeviceDO.getDeviceName()+DateUtil.format(new Date(), "yyyyMMddHHmmss"));
|
|
|
iotFailureReport.setDeviceName(iotDeviceDO.getDeviceName());
|
|
|
iotFailureReport.setDeleted(false);
|
|
|
+ if (iotFailureReport.getIfDeal()) {
|
|
|
+ iotFailureReport.setStatus("finished");
|
|
|
+ //todo 发送站内信及钉钉
|
|
|
+ Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
|
|
|
+ DeptDO dept = deptService.getDept(loginUserDeptId);
|
|
|
+ List<AdminUserDO> users = adminUserMapper.selectListByDept(dept.getParentId());
|
|
|
+ String templateCode = "failure-report"; // 站内信模版,记得在【站内信管理】中配置噢
|
|
|
+ Map<String, Object> templateParams = new HashMap<>();
|
|
|
+ templateParams.put("name", iotFailureReport.getDeviceName());
|
|
|
+ CompletableFuture.runAsync(() -> users.forEach(e ->{
|
|
|
+ notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO()
|
|
|
+ .setUserId(e.getId()).setTemplateCode(templateCode).setTemplateParams(templateParams));
|
|
|
+ String msg = "【PMS】故障上报 - "+iotFailureReport.getFailureName()+"故障已解决。"+"["+new Date()+"]";
|
|
|
+ dingtalkSendApi.send(e.getMobile(), msg);
|
|
|
+ }));
|
|
|
+ } else {
|
|
|
+ iotFailureReport.setStatus("reporting");
|
|
|
+ }
|
|
|
iotFailureReportMapper.insert(iotFailureReport);
|
|
|
// 返回
|
|
|
return iotFailureReport.getId();
|