|
@@ -0,0 +1,448 @@
|
|
|
+package com.platform.service.repair.strategy;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.platform.common.cache.ConfigCache;
|
|
|
+import com.platform.common.constant.RedisKeyConstants;
|
|
|
+import com.platform.common.exception.BusinessException;
|
|
|
+import com.platform.common.exception.DeniedException;
|
|
|
+import com.platform.common.util.*;
|
|
|
+import com.platform.dao.dto.repair.RepairApplicationFormDTO;
|
|
|
+import com.platform.dao.dto.sb.SbInfoDTO;
|
|
|
+import com.platform.dao.entity.repair.RepairApplicationForm;
|
|
|
+import com.platform.dao.entity.sb.SbInfo;
|
|
|
+import com.platform.dao.entity.upms.SysFile;
|
|
|
+import com.platform.dao.entity.upms.SysUser;
|
|
|
+import com.platform.dao.enums.*;
|
|
|
+import com.platform.dao.mapper.repair.RepairApplicationFormMapper;
|
|
|
+import com.platform.dao.mapper.upms.SysFileMapper;
|
|
|
+import com.platform.dao.util.MessageTemplateUtil;
|
|
|
+import com.platform.service.event.WorkplaceBacklogEvent;
|
|
|
+import com.platform.service.sb.SbInfoService;
|
|
|
+import com.platform.service.upms.SysUserService;
|
|
|
+import com.platform.service.util.SysFileUtils;
|
|
|
+import com.platform.service.wechat.util.WeChatMessageUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import tk.mybatis.mapper.weekend.Weekend;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
|
|
|
+ @Resource
|
|
|
+ protected RepairApplicationFormMapper repairApplicationFormMapper;
|
|
|
+ @Resource
|
|
|
+ protected SbInfoService sbInfoService;
|
|
|
+ @Resource
|
|
|
+ protected SysUserService sysUserService;
|
|
|
+ @Resource
|
|
|
+ private SysFileMapper sysFileMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationForm callRepair(RepairApplicationFormDTO model) {
|
|
|
+ if(StringUtils.isBlank(model.getSbId())){
|
|
|
+ throw new DeniedException("请填写报修设备");
|
|
|
+ }
|
|
|
+ model.setType(model.getType() == null ? 1 : model.getType());
|
|
|
+ Weekend<RepairApplicationForm> weekend = new Weekend<>(RepairApplicationForm.class);
|
|
|
+ weekend.weekendCriteria().andIsNotNull(RepairApplicationForm::getId).andEqualTo(RepairApplicationForm::getType, model.getType());
|
|
|
+ int count = repairApplicationFormMapper.selectCountByExample(weekend);
|
|
|
+ // 设备是否存在
|
|
|
+ String sbId = model.getSbId();
|
|
|
+ SbInfo sb = sbInfoService.getModelById(sbId);
|
|
|
+ if (sb == null) {
|
|
|
+ throw new DeniedException("设备不存在,无法报修");
|
|
|
+ }
|
|
|
+ // 存储报修人
|
|
|
+ if(StringUtils.isBlank(model.getActualUser())){
|
|
|
+ SysUser sysUser = sysUserService.getModelById(sb.getSaveUser());
|
|
|
+ if (sysUser != null) {
|
|
|
+ model.setUserId(sysUser.getUserId());
|
|
|
+ model.setActualUser(sysUser.getRealName());
|
|
|
+ } else {
|
|
|
+ model.setUserId("1");
|
|
|
+ model.setActualUser("superadmin");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ SysUser sysUser = new SysUser();
|
|
|
+ sysUser.setRealName(model.getActualUser());
|
|
|
+ SysUser sysUser1 = sysUserService.getModelByModel(sysUser);
|
|
|
+ if (sysUser1 == null) {
|
|
|
+ // 设置设备的使用人
|
|
|
+ model.setUserId(sb.getSaveUser());
|
|
|
+ } else {
|
|
|
+ model.setUserId(sysUser1.getUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (model.getSource() == null) { // 报修来源,默认点检
|
|
|
+ model.setSource(1);
|
|
|
+ }
|
|
|
+ model.setModelId(sb.getModelId());
|
|
|
+ // 根据配置判断是否可以多个提交
|
|
|
+ String only = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_ONLY_ONE.name());
|
|
|
+ if (StringUtils.isNotBlank(only) && Integer.valueOf(only).equals(RepairOnlyOneEnum.ONLY_ONE.getValue())) {
|
|
|
+ if (sb.getStatus().intValue() == SbInfoStatusEnum.IN_MAINTAIN.getValue()) {
|
|
|
+ throw new BusinessException("设备已经在维修中,请等待维修完成, sbId" + model.getSbId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果保修的设备位置和设备本身不一样,则可以更新该设备
|
|
|
+ boolean updateSb = false;
|
|
|
+ SbInfoDTO info = BeanConverterUtil.copyObjectProperties(sb, SbInfoDTO.class);
|
|
|
+ if (StringUtils.isNotBlank(model.getSbCph()) && !model.getSbCph().equalsIgnoreCase((sb.getCph()))) {
|
|
|
+ info.setCph(model.getSbCph());
|
|
|
+ updateSb = true;
|
|
|
+ }
|
|
|
+ // 如果选择了设备停机,则要修改设备状态,记录设备状态变更变
|
|
|
+ if (model.getNeedStop() != null && model.getNeedStop().intValue() == RepairApplicationFormStopEnum.STOP.getValue()) {
|
|
|
+ info.setStatus(SbInfoStatusEnum.IN_STOP.getValue());
|
|
|
+ updateSb = true;
|
|
|
+ }
|
|
|
+ if (updateSb) {
|
|
|
+ info.setChangeReason("维修停机");
|
|
|
+ info.setActualUser(model.getActualUser());
|
|
|
+ sbInfoService.updateStatus(info);
|
|
|
+ }
|
|
|
+ model.setOutNo(model.getOutNo());
|
|
|
+ model.setNo(IdGeneratorUtils.getRepairApplicaitonFormNo(++count));
|
|
|
+
|
|
|
+ model.setStatus(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
|
|
|
+ model.setApplyTime(LocalDateTime.now());
|
|
|
+ model.setCreatedTime(model.getApplyTime());
|
|
|
+ model.setUpdateTime(model.getApplyTime());
|
|
|
+ model.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ this.saveFile(model); // 存储报修图片
|
|
|
+ RepairApplicationForm form = BeanConverterUtil.copyObjectProperties(model, RepairApplicationForm.class);
|
|
|
+ repairApplicationFormMapper.insert(form);
|
|
|
+ return form;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO sendRepair(RepairApplicationFormDTO model) {
|
|
|
+ String id = model.getId();
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(id);
|
|
|
+ if (!RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue().equals(applicationForm.getStatus()) && !RepairApplicationFormStatusEnum.REBACK.getValue().equals(applicationForm.getStatus())) {
|
|
|
+ throw new BusinessException("该状态不允许接收任务");
|
|
|
+ }
|
|
|
+ model.setRepairStartTime(applicationForm.getRepairStartTime());
|
|
|
+ model.setApplyTime(applicationForm.getApplyTime());
|
|
|
+ model.setNo(applicationForm.getNo());
|
|
|
+ model.setUserId(applicationForm.getUserId());
|
|
|
+ SbInfo sbInfo = sbInfoService.getModelById(applicationForm.getSbId());
|
|
|
+ if (sbInfo == null) {
|
|
|
+ throw new BusinessException("设备不存在,无法接收");
|
|
|
+ }
|
|
|
+ /*if (sbInfo.getRepairUser() == null) {
|
|
|
+ throw new BusinessException("设备的第一维修人未设置,无法接受任务");
|
|
|
+ }
|
|
|
+ if (sbInfo.getRepairUserSecond() == null) {
|
|
|
+ throw new BusinessException("设备的第二维修人未设置,无法接受任务");
|
|
|
+ }
|
|
|
+ if (!SecurityUtils.isRole(SysRoleCodeEnum.MM.name()) && !SecurityUtils.isRole(SysRoleCodeEnum.Maintenance.name())) {
|
|
|
+ throw new BusinessException("您不是维修人或维修主管,无法接受任务");
|
|
|
+ }*/
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void handleRepair(RepairApplicationFormDTO dto) {
|
|
|
+ // 1. 将维修单的状态修改已完成
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(dto.getId());
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue());
|
|
|
+ // 驳回重新完成的,不用更新这个时间,驳回应该状态是完成待审核,不需要重新维修
|
|
|
+ if (applicationForm.getRepairEndTime() == null) {
|
|
|
+ applicationForm.setRepairEndTime(LocalDateTime.now());
|
|
|
+ }
|
|
|
+ if (dto.getRepairEndTime() != null) {
|
|
|
+ applicationForm.setRepairEndTime(dto.getRepairEndTime());
|
|
|
+ }
|
|
|
+ applicationForm.setRepairMinutes(DateUtils.getDurationHours(applicationForm.getRepairStartTime(), applicationForm.getRepairEndTime()));
|
|
|
+ applicationForm.setDealMinutes(DateUtils.getDurationHours(applicationForm.getApplyTime(), applicationForm.getRepairEndTime()));
|
|
|
+ // 根据配置判断维修是否超时
|
|
|
+ String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
|
|
|
+ int hourFirst = 180;// 默认3小时,180分钟
|
|
|
+ if (StringUtils.isNotBlank(hourFirstStr)) {
|
|
|
+ hourFirst = Integer.valueOf(hourFirstStr) * 60;
|
|
|
+ }
|
|
|
+ if (applicationForm.getRepairMinutes() > hourFirst) {
|
|
|
+ applicationForm.setRepairOvertime(true);
|
|
|
+ } else {
|
|
|
+ applicationForm.setRepairOvertime(false);
|
|
|
+ }
|
|
|
+ applicationForm.setRepairContent(dto.getRepairContent());
|
|
|
+ applicationForm.setNeedStop(dto.getNeedStop());
|
|
|
+ applicationForm.setUpdateTime(LocalDateTime.now());
|
|
|
+ applicationForm.setOutType(dto.getOutType());
|
|
|
+ // 保存维修图片
|
|
|
+ saveRepairFile(dto);
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
|
|
|
+ // 更新设备状态为使用中
|
|
|
+ SbInfo sbInfo = sbInfoService.getModelById(applicationForm.getSbId());
|
|
|
+ sbInfo.setStatus(SbInfoStatusEnum.IN_USE.getValue());
|
|
|
+ sbInfoService.modModelByPrimaryKey(sbInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationForm submitRepair(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ if (!RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue().equals(applicationForm.getStatus())) {
|
|
|
+ throw new BusinessException("未完成的不允许提交审核");
|
|
|
+ }
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.NOT_ACCEPTANCE.getValue());
|
|
|
+ applicationForm.setCheckStartTime(LocalDateTime.now());
|
|
|
+ applicationForm.setUpdateTime(applicationForm.getCheckStartTime());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
|
|
|
+ return applicationForm;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void verifyRepair(RepairApplicationFormDTO model) {
|
|
|
+ // 1.修改验收单状态和验收验收时间
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ // 如果选择了设备停机,则要修改设备状态
|
|
|
+ SbInfo info = sbInfoService.getModelById(applicationForm.getSbId());
|
|
|
+ info.setStatus(SbInfoStatusEnum.IN_USE.getValue());
|
|
|
+ sbInfoService.modModelByPrimaryKey(info);
|
|
|
+
|
|
|
+ applicationForm.setCheckEndTime(LocalDateTime.now());
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.FINISHED.getValue());
|
|
|
+ // }
|
|
|
+ applicationForm.setUpdateTime(applicationForm.getCheckEndTime());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model) {
|
|
|
+ // 1.修改验收单状态
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ applicationForm.setCheckContent(model.getCheckContent());
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.REBACK.getValue());
|
|
|
+ applicationForm.setUpdateTime(LocalDateTime.now());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
|
|
|
+ model.setRepairUserId(applicationForm.getRepairUserId());
|
|
|
+ model.setNo(applicationForm.getNo());
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO dispatchRepair(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationForm applicationForm = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ if (!RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue().equals(applicationForm.getStatus()) && !RepairApplicationFormStatusEnum.REBACK.getValue().equals(applicationForm.getStatus())) {
|
|
|
+ throw new BusinessException("该状态不允许派工任务, id, status:" + applicationForm.getId() + "," + applicationForm.getStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isBlank(applicationForm.getRepairDispatchList())) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put("userId", applicationForm.getRepairUserId());
|
|
|
+ jsonObject.put("username", applicationForm.getRepairUserName());
|
|
|
+ jsonObject.put("remark", model.getRepairDispatchRemark());
|
|
|
+ jsonObject.put("time", LocalDateTime.now());
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ jsonArray.add(jsonObject);
|
|
|
+ applicationForm.setRepairDispatchList(jsonArray.toJSONString());
|
|
|
+ } else {
|
|
|
+ JSONArray jsonArray = JSONArray.parseArray(applicationForm.getRepairDispatchList());
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put("userId", applicationForm.getRepairUserId());
|
|
|
+ jsonObject.put("username", applicationForm.getRepairUserName());
|
|
|
+ jsonObject.put("remark", applicationForm.getRepairDispatchRemark());
|
|
|
+ jsonObject.put("time", LocalDateTime.now());
|
|
|
+ jsonArray.add(jsonObject);
|
|
|
+ applicationForm.setRepairDispatchList(jsonArray.toJSONString());
|
|
|
+ }
|
|
|
+ applicationForm.setId(model.getId());
|
|
|
+ applicationForm.setRepairUserId(model.getRepairUserId());
|
|
|
+ applicationForm.setRepairDispatchRemark(model.getRepairDispatchRemark());
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ applicationForm.setRepairStartTime(LocalDateTime.now());
|
|
|
+ applicationForm.setUpdateTime(LocalDateTime.now());
|
|
|
+ // 转派其他人要将维修结束时间置空'
|
|
|
+ repairApplicationFormMapper.updateForRepairDispatch(applicationForm);
|
|
|
+
|
|
|
+ SysUser repairUser = sysUserService.getModelById(model.getRepairUserId());
|
|
|
+ SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_DISPATCH.getValue(),
|
|
|
+ applicationForm.getId(), MessageTemplateUtil.getRepairDispatch(applicationForm.getNo()),
|
|
|
+ applicationForm.getId(), ListUtils.newArrayList(model.getRepairUserId()), ListUtils.newArrayList(repairUser.getEmail())));
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void sendRepairToThird(RepairApplicationFormDTO model) {
|
|
|
+ model.setUpdateTime(LocalDateTime.now());
|
|
|
+ model.setUpdateUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ model.setUpdateUserName(SecurityUtils.getUserInfo().getUsername());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(BeanConverterUtil.copyObjectProperties(model, RepairApplicationForm.class));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存维修上传的图片
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ private void saveFile(RepairApplicationFormDTO model) {
|
|
|
+ if (CollectionUtil.isNotEmpty(model.getApplicationFileList())) {
|
|
|
+ Weekend<SysFile> weekend = new Weekend<>(SysFile.class);
|
|
|
+ weekend.weekendCriteria().andEqualTo(SysFile::getType, SysFileTypeEnum.REPAIR_APPLICATION_IMGS.getValue()).andEqualTo(SysFile::getTargetId, model.getId());
|
|
|
+ sysFileMapper.deleteByExample(weekend);
|
|
|
+ List<SysFile> list = SysFileUtils.changeFileList(model.getApplicationFileList(), model.getId(), SysFileTypeEnum.REPAIR_APPLICATION_IMGS.getValue());
|
|
|
+ if (CollectionUtil.isNotEmpty(list)) {
|
|
|
+ sysFileMapper.insertListforComplex(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存维修图片
|
|
|
+ *
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ private void saveRepairFile(RepairApplicationFormDTO model) {
|
|
|
+ if (CollectionUtil.isNotEmpty(model.getRepairFileList())) {
|
|
|
+ Weekend<SysFile> weekend = new Weekend<>(SysFile.class);
|
|
|
+ weekend.weekendCriteria().andEqualTo(SysFile::getType, SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue()).andEqualTo(SysFile::getTargetId, model.getId());
|
|
|
+ sysFileMapper.deleteByExample(weekend);
|
|
|
+ List<SysFile> list = SysFileUtils.changeFileList(model.getRepairFileList(), model.getId(), SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue());
|
|
|
+ if (CollectionUtil.isNotEmpty(list)) {
|
|
|
+ sysFileMapper.insertListforComplex(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 推送站内信和邮箱
|
|
|
+ * @param mails
|
|
|
+ * @param userIds
|
|
|
+ * @param model
|
|
|
+ * @param sb
|
|
|
+ */
|
|
|
+ public void sendWorkplaceAndEmail(List<String> mails,List<String> userIds,RepairApplicationFormDTO model,SbInfo sb){
|
|
|
+ String domain = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.SYSTEM_DOMAIN.name());
|
|
|
+ if (StringUtils.isBlank(domain)) {
|
|
|
+ throw new BusinessException("请先设置系统域名地址,系统管理-》系统参数配置-》SYSTEM_DOMAIN");
|
|
|
+ }
|
|
|
+ if (!domain.endsWith("/")) {
|
|
|
+ domain = domain + "/";
|
|
|
+ }
|
|
|
+ String repairUrl = domain + "repair/form?no=" + model.getNo();
|
|
|
+
|
|
|
+ // 通过给当天值班维修人员
|
|
|
+ SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.REPAIR.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue(),
|
|
|
+ model.getId(),
|
|
|
+ MessageTemplateUtil.getFreemarkerHtmlContent(repairUrl, model, sb),
|
|
|
+ model.getId(), userIds, mails));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 微信通知
|
|
|
+ * @param openIds
|
|
|
+ * @param model
|
|
|
+ * @param sb
|
|
|
+ */
|
|
|
+ public void sendWechat(List<String> openIds,RepairApplicationFormDTO model,SbInfo sb){
|
|
|
+ // 发送微信通知给所有维修人角色
|
|
|
+ if (CollectionUtil.isNotEmpty(openIds) && BeanUtils.isProd()) {
|
|
|
+ String mobileDomain = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.SYSTEM_DOMAIN_MOBILE.name());
|
|
|
+ if (StringUtils.isBlank(mobileDomain)) {
|
|
|
+ throw new BusinessException("请先设置系统域名地址,系统管理-》系统参数配置-》SYSTEM_DOMAIN_MOBILE");
|
|
|
+ }
|
|
|
+ if (!mobileDomain.endsWith("/")) {
|
|
|
+ mobileDomain = mobileDomain + "/";
|
|
|
+ }
|
|
|
+ String mobileRepairUrl = mobileDomain + "pages/repair-detail/repair-detail?detailId=" + model.getId();
|
|
|
+ for (String openId : openIds) {
|
|
|
+ WeChatMessageUtil.repairMessage(openId, mobileRepairUrl, model, sb);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 短息发送
|
|
|
+ * @param receiverList
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ public void sendSms(List<String> receiverList,RepairApplicationFormDTO model,SbInfo sb){
|
|
|
+ if (CollectionUtil.isNotEmpty(receiverList) && BeanUtils.isProd()) {
|
|
|
+ // String templateParas_repair = "[\"C-001\",\"1号车间\",\"熊超\"]";
|
|
|
+ String no = sb.getNo();
|
|
|
+ if (StringUtils.isNotBlank(no)) {
|
|
|
+ no = no.replace("_", "").replace("-", "");
|
|
|
+ }
|
|
|
+ String sbCph = model.getSbCph();
|
|
|
+ String actualUser = model.getActualUser();
|
|
|
+ if (StringUtils.isBlank(sbCph)) {
|
|
|
+ sbCph = "未知";
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(actualUser)) {
|
|
|
+ actualUser = "未知";
|
|
|
+ }
|
|
|
+ String templateParas_repair = "[\"" + no + "\",\"" + sbCph + "\",\"" + actualUser + "\"]";
|
|
|
+ for (String receiver : receiverList) {
|
|
|
+ try {
|
|
|
+ String numStr = RedisUtils.getString(RedisKeyConstants.HW_SMS + receiver);
|
|
|
+ boolean isSend = false;
|
|
|
+ if (StringUtils.isBlank(numStr)) {
|
|
|
+ isSend = true;
|
|
|
+ RedisUtils.setString(RedisKeyConstants.HW_SMS + receiver, "1", 24, TimeUnit.HOURS);
|
|
|
+ } else if (Integer.valueOf(numStr) < 5) {
|
|
|
+ isSend = true;
|
|
|
+ RedisUtils.setString(RedisKeyConstants.HW_SMS + receiver, String.valueOf(Integer.valueOf(numStr) + 1), 24, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+ if (isSend) {
|
|
|
+ System.out.println("templateParas_repair: " + templateParas_repair);
|
|
|
+ SendSms.sendRepairSms(receiver, templateParas_repair);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 启动任务超时监控
|
|
|
+ * @param repairId
|
|
|
+ */
|
|
|
+ public void overTimeListen(String repairId){
|
|
|
+ // 启动接收超时监控
|
|
|
+ String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
|
|
|
+ int minute = 30;// 默认30分钟
|
|
|
+ if (StringUtils.isNotBlank(minuteStr)) {
|
|
|
+ minute = Integer.valueOf(minuteStr);
|
|
|
+ }
|
|
|
+ RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + repairId, repairId, minute, TimeUnit.MINUTES);
|
|
|
+
|
|
|
+ // 启动维修超时监控,维修时间升级流程:超过3个小时没修好,升级给牛工,超过8个小时没修好,升级给相工,超过24 没修好,升级给田总,现在把三阶段的人员位置留好,可以先暂时升级给我,后期再改为具体的人。
|
|
|
+ String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
|
|
|
+ int hourFirst = 3;// 默认3小时
|
|
|
+ if (StringUtils.isNotBlank(hourFirstStr)) {
|
|
|
+ hourFirst = Integer.valueOf(hourFirstStr);
|
|
|
+ }
|
|
|
+ String hourSecondStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_SECOND.name());
|
|
|
+ int hourSecond = 8;// 默认8小时
|
|
|
+ if (StringUtils.isNotBlank(hourSecondStr)) {
|
|
|
+ hourSecond = Integer.valueOf(hourSecondStr);
|
|
|
+ }
|
|
|
+ String hourThirdStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_THIRD.name());
|
|
|
+ int hourThird = 24;// 默认24小时
|
|
|
+ if (StringUtils.isNotBlank(hourThirdStr)) {
|
|
|
+ hourThird = Integer.valueOf(hourThirdStr);
|
|
|
+ }
|
|
|
+ RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + repairId, repairId, hourFirst, TimeUnit.HOURS);
|
|
|
+ RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_SECOND + RedisKeyConstants.EXPIRE_BUSINESS_SEP + repairId, repairId, hourSecond, TimeUnit.HOURS);
|
|
|
+ RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_THIRD + RedisKeyConstants.EXPIRE_BUSINESS_SEP + repairId, repairId, hourThird, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 推送消息给报修人
|
|
|
+ * @param repairId 维修ID
|
|
|
+ * @param repairNo 维修单号
|
|
|
+ * @param userId 报修人ID
|
|
|
+ */
|
|
|
+ public void sendMessageToRepairCaller(String repairId,String repairNo,String userId){
|
|
|
+ SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.RECEIVE.getValue(), WorkplaceBacklogDetailTypeEnum.REPAIR_RECEIVE.getValue(),
|
|
|
+ repairId, MessageTemplateUtil.getReceive(repairNo),
|
|
|
+ repairId, ListUtils.newArrayList(userId)));
|
|
|
+ }
|
|
|
+}
|