|
@@ -0,0 +1,924 @@
|
|
|
+package com.platform.service.repair.strategy.impl;
|
|
|
+
|
|
|
+import com.platform.common.cache.ConfigCache;
|
|
|
+import com.platform.common.constant.CommonConstants;
|
|
|
+import com.platform.common.exception.DeniedException;
|
|
|
+import com.platform.common.model.UserInfo;
|
|
|
+import com.platform.common.util.*;
|
|
|
+import com.platform.dao.dto.repair.*;
|
|
|
+import com.platform.dao.dto.upms.SysUserDTO;
|
|
|
+import com.platform.dao.entity.customize.CustomFieldTemplateData;
|
|
|
+import com.platform.dao.entity.repair.RepairApplicationForm;
|
|
|
+import com.platform.dao.entity.sb.SbInfo;
|
|
|
+import com.platform.dao.entity.upms.SysUser;
|
|
|
+import com.platform.dao.enums.*;
|
|
|
+import com.platform.dao.mapper.customize.CustomFieldTemplateDataMapper;
|
|
|
+import com.platform.dao.mapper.sb.SbPositionMapper;
|
|
|
+import com.platform.dao.mapper.upms.SysUserDeptMapper;
|
|
|
+import com.platform.dao.mapper.upms.SysUserMapper;
|
|
|
+import com.platform.dao.util.MessageTemplateUtil;
|
|
|
+import com.platform.dao.vo.SysUserVO;
|
|
|
+import com.platform.service.part.PartInfoService;
|
|
|
+import com.platform.service.repair.strategy.AbstractRepairBaseStrategy;
|
|
|
+import com.platform.service.util.SendMessageUtils;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import tk.mybatis.mapper.weekend.Weekend;
|
|
|
+import tk.mybatis.mapper.weekend.WeekendCriteria;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 维修接单模式 -- 龙岩
|
|
|
+ * 报修指定
|
|
|
+ * 维修主管出方案
|
|
|
+ * 多个维修人执行
|
|
|
+ * 维修审核
|
|
|
+ * 生产审核
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
|
|
|
+ @Resource
|
|
|
+ private SysUserMapper sysUserMapper;
|
|
|
+ @Resource
|
|
|
+ private CustomFieldTemplateDataMapper customFieldTemplateDataMapper;
|
|
|
+ @Resource
|
|
|
+ private PartInfoService partInfoService;
|
|
|
+ @Resource
|
|
|
+ private SbPositionMapper sbPositionMapper;
|
|
|
+ @Resource
|
|
|
+ private SysUserDeptMapper sysUserDeptMapper;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 龙岩计划性维修报
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationForm callRepair(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationForm form = super.callRepair(model);
|
|
|
+ // 是否具有报修权限
|
|
|
+ UserInfo userInfo = SecurityUtils.getUserInfo();
|
|
|
+ if(userInfo.getSuperAdmin() == 0){
|
|
|
+ // 根据用户的角色来定
|
|
|
+ String role = getCurrentRoles();
|
|
|
+ if(!role.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
|
|
|
+ throw new DeniedException("班组长具有报修权限,如需报修,请管理员配置权限!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String repairDeptId = model.getRepairDeptId();
|
|
|
+ if(StringUtils.isBlank(repairDeptId)){
|
|
|
+ throw new DeniedException("送修部门不能为空!");
|
|
|
+ }
|
|
|
+ form.setRepairDeptId(repairDeptId); // 存储维修部门ID
|
|
|
+ List<SysUserVO> sysUserVOList = getRepairMangers(repairDeptId,null,SysRoleCodeEnum.REPAIR_MANAGE.name());
|
|
|
+ if(sysUserVOList == null || sysUserVOList.size() ==0){
|
|
|
+ throw new DeniedException("该维修部门,没有工程师,请确认!");
|
|
|
+ }
|
|
|
+ // 报修人
|
|
|
+ form.setActualUser(SecurityUtils.getUserInfo().getUsername());
|
|
|
+ form.setUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ // 区域负责人
|
|
|
+ form.setReportLeaderId(getReportLeaderId(model.getSbId()));
|
|
|
+ repairApplicationFormMapper.insert(form);
|
|
|
+ // 记录维修状态跟踪
|
|
|
+ addRepairStatusRecord(form,"报修");
|
|
|
+ // 给相关的工程师推送信息
|
|
|
+ sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
|
|
|
+ // 给该部门班组长推送信息
|
|
|
+ List<SysUserVO> banzuzhangs = getRepairMangers(repairDeptId,null,SysRoleCodeEnum.Maintenance_Leader.name());
|
|
|
+ if(banzuzhangs != null && banzuzhangs.size() > 0){
|
|
|
+ sendMessageToRepairManger(form,banzuzhangs,CommonConstants.CALL_REPAIR_NOTICE);
|
|
|
+ }
|
|
|
+ // 给二十四小时人员发送信息
|
|
|
+ String everyWhereUsers = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_TWENTY_FOUR_USER.name());
|
|
|
+ if(StringUtils.isNotBlank(everyWhereUsers)){
|
|
|
+ sendMessageToRepairManger(form,getUserVOs(everyWhereUsers.trim()),CommonConstants.CALL_REPAIR_NOTICE);
|
|
|
+ }
|
|
|
+ return form;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<SysUserVO> getUserVOs(String user){
|
|
|
+ String[] users = user.split(",");
|
|
|
+ List<SysUserVO> vos = ListUtils.newArrayList();
|
|
|
+ for(String name : users){
|
|
|
+ SysUser u = sysUserService.selectByUsername(name);
|
|
|
+ if(u != null)
|
|
|
+ vos.add(BeanConverterUtil.copyObjectProperties(u,SysUserVO.class));
|
|
|
+ }
|
|
|
+ return vos;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private String getReportLeaderId(String sbId){
|
|
|
+ String positionId = sbInfoService.getById(sbId).getPositionId();
|
|
|
+ if(StringUtils.isBlank(positionId)){
|
|
|
+ throw new DeniedException("该设备的设备位置尚未设置,请设置");
|
|
|
+ }
|
|
|
+ return sbPositionMapper.getById(positionId).getUserId();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Map<String,String> maps = new HashMap<>();
|
|
|
+ maps.put("13410011001","12121,2323,2323");
|
|
|
+ maps.put("13410011002","12121,2323,2323");
|
|
|
+ System.out.println(JsonUtils.objectToJson(maps));
|
|
|
+ Map<String,String> covertMap = JsonUtils.jsonToMap("{\"13410011002\":\"12121,2323,2323\",\"13410011001\":\"12121,2323,2323\"}");
|
|
|
+ System.out.println(covertMap.get("13410011001"));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前用户的角色集合
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getCurrentRoles(){
|
|
|
+ // 根据用户的角色来定
|
|
|
+ StringBuilder roleCodes = new StringBuilder();
|
|
|
+ SecurityUtils.getUserInfo().getRoleCodes().forEach(item-> {
|
|
|
+ roleCodes.append(item).append(",");
|
|
|
+ });
|
|
|
+ return roleCodes.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定部门下的工程师
|
|
|
+ * @param repairDeptId
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<SysUserVO> getRepairMangers(String repairDeptId,String userId,String roleCode){
|
|
|
+ SysUserDTO queryUserDTO = new SysUserDTO();
|
|
|
+ queryUserDTO.setDeptId(repairDeptId);
|
|
|
+ queryUserDTO.setRoleCode(roleCode);
|
|
|
+ queryUserDTO.setUserId(userId);
|
|
|
+ return sysUserMapper.selectDeptRoleUser(queryUserDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取设备部位关联的维修部门
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String queryRepairDeptId(RepairApplicationFormDTO model){
|
|
|
+ String repairDeptId = "";
|
|
|
+ if(StringUtils.isNotBlank(model.getPartId())){
|
|
|
+ repairDeptId = partInfoService.getModelById(model.getPartId()).getRepairDeptId();
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(repairDeptId)){
|
|
|
+ repairDeptId = sbInfoService.getModelById(model.getSbId()).getRepairDeptId();
|
|
|
+ }
|
|
|
+ return repairDeptId;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO receiveRepair(RepairApplicationFormDTO model) {
|
|
|
+ if(StringUtils.isBlank(model.getRepairDeptId())){
|
|
|
+ throw new DeniedException("必须携带设备关联维修部门");
|
|
|
+ }
|
|
|
+ boolean continueFlag = Boolean.FALSE;
|
|
|
+ synchronized (this){
|
|
|
+ // 判断接单方式,根据接单角色进行区分 工程师 班组长 维修人
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ UserInfo userInfo = SecurityUtils.getUserInfo();
|
|
|
+ RepairApplicationForm form = new RepairApplicationForm();
|
|
|
+ form.setId(model.getId());
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(roles.contains(SysRoleCodeEnum.Maintenance.name()) || roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
|
|
|
+ // 维修人和班组长接单
|
|
|
+ form.setRepairUserName(userInfo.getUsername());
|
|
|
+ form.setRepairUserId(userInfo.getUserId());
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ form.setRepairStartTime(LocalDateTime.now()); // 接单后就开始维修
|
|
|
+ continueFlag = Boolean.TRUE;
|
|
|
+ model.setRepairUserName(form.getRepairUserName());
|
|
|
+ model.setRepairUserId(form.getRepairUserId());
|
|
|
+ }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
|
|
|
+ // 工程师接单
|
|
|
+ form.setDispatchUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.RECEIVED.getValue());
|
|
|
+ }else{
|
|
|
+ throw new DeniedException("您不具备承接报修单的能力");
|
|
|
+ }
|
|
|
+ form.setReceiveTime(now);
|
|
|
+ form.setReceiveMinutes(DateUtils.getDurationHours(model.getApplyTime(), now)); // 接单时长
|
|
|
+ // 判断接单是否超时
|
|
|
+ String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
|
|
|
+ if (StringUtils.isBlank(minuteStr)) {
|
|
|
+ form.setReceiveOvertime(false);
|
|
|
+ } else if (form.getReceiveMinutes() > Double.valueOf(minuteStr)) {
|
|
|
+ form.setReceiveOvertime(true);
|
|
|
+ } else {
|
|
|
+ form.setReceiveOvertime(false);
|
|
|
+ }
|
|
|
+ form.setUpdateTime(LocalDateTime.now());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(form);
|
|
|
+ }
|
|
|
+ // 通知报修人,已接单
|
|
|
+ sendMessageToRepairCaller(model,CommonConstants.CALL_REPAIR_RECEIVE);
|
|
|
+ // 添加状态跟踪
|
|
|
+ model.setStatus(RepairApplicationFormStatusEnum.RECEIVED.getValue());
|
|
|
+ addRepairStatusRecord(BeanConverterUtil.copyObjectProperties(model,RepairApplicationForm.class),"已接单");
|
|
|
+ if(continueFlag){
|
|
|
+ // 添加状态跟踪
|
|
|
+ model.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ addRepairStatusRecord(BeanConverterUtil.copyObjectProperties(model,RepairApplicationForm.class),"维修中");
|
|
|
+ // 添加维修记录
|
|
|
+ addRepairRecord(model);
|
|
|
+ }
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationForm callRepairAgain(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
|
|
|
+ SysUserDTO queryUserDTO = new SysUserDTO();
|
|
|
+ queryUserDTO.setDeptId(model.getRepairDeptId());
|
|
|
+ queryUserDTO.setRoleCode(SysRoleCodeEnum.REPAIR_MANAGE.name());
|
|
|
+ List<SysUserVO> sysUserVOList = sysUserMapper.selectDeptRoleUser(queryUserDTO);
|
|
|
+ if(sysUserVOList == null || sysUserVOList.size() ==0 || sysUserVOList.size() > 1){
|
|
|
+ throw new DeniedException("您选择的维修部门,无维修主管或存在多个维修主管");
|
|
|
+ }
|
|
|
+ form.setDispatchUserId(sysUserVOList.get(0).getUserId());
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(form);
|
|
|
+ // 给相关的维修主管推送信息
|
|
|
+ sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录审核
|
|
|
+ * @param form
|
|
|
+ */
|
|
|
+ private void addRepairVerifyRecord(RepairApplicationFormDTO form,Integer status,Integer type){
|
|
|
+ CustomFieldTemplateData data = new CustomFieldTemplateData();
|
|
|
+ data.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ data.setObjId(form.getId());
|
|
|
+ data.setCreatedTime(LocalDateTime.now());
|
|
|
+ data.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ data.setCreatedUserName(SecurityUtils.getUserInfo().getUsername());
|
|
|
+ data.setRemark(CommonConstants.REPAIR_VERIFY_RECORD);
|
|
|
+ RepairVerifyRecordTemplateData dataInfo = new RepairVerifyRecordTemplateData();
|
|
|
+ dataInfo.setRemark(form.getRemark());
|
|
|
+ dataInfo.setStatus(status);
|
|
|
+ dataInfo.setType(type);
|
|
|
+ data.setData(JsonUtils.objectToJson(dataInfo));
|
|
|
+ data.setDelFlag(0);
|
|
|
+ customFieldTemplateDataMapper.insert(data);
|
|
|
+ // 保存维修记录图片
|
|
|
+ sysFileService.saveFile(data.getId(), SysFileTypeEnum.REPAIR_CHECK_IMGS.getValue(), form.getVerifyImages());
|
|
|
+ sysFileService.saveFile(data.getId(), SysFileTypeEnum.REPAIR_CHECK_FILES.getValue(), form.getVerifyFiles());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录维修状态
|
|
|
+ * @param form
|
|
|
+ */
|
|
|
+ private void addRepairStatusRecord(RepairApplicationForm form,String remark){
|
|
|
+ CustomFieldTemplateData data = new CustomFieldTemplateData();
|
|
|
+ data.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ data.setObjId(form.getId());
|
|
|
+ data.setCreatedTime(LocalDateTime.now());
|
|
|
+ data.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ data.setCreatedUserName(SecurityUtils.getUserInfo().getUsername());
|
|
|
+ data.setRemark(CommonConstants.REPAIR_STATUS_RECORD);
|
|
|
+ RepairStatusTemplateData dataInfo = new RepairStatusTemplateData();
|
|
|
+ dataInfo.setRemark(remark);
|
|
|
+ dataInfo.setStatus(form.getStatus());
|
|
|
+ data.setData(JsonUtils.objectToJson(dataInfo));
|
|
|
+ data.setDelFlag(0);
|
|
|
+ customFieldTemplateDataMapper.insert(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工程师派工给班组长
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO sendRepair(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationFormDTO superModel = super.sendRepair(model);
|
|
|
+ // 判断是否具有派单权限
|
|
|
+ UserInfo userInfo = SecurityUtils.getUserInfo();
|
|
|
+ if(userInfo.getSuperAdmin() == 0){
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !roles.contains(SysRoleCodeEnum.MM.name())){
|
|
|
+ throw new DeniedException("不具备派单权限");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(superModel.getRepairUserId())){
|
|
|
+ throw new DeniedException("请指派维修人");
|
|
|
+ }
|
|
|
+ SysUser repairUser = sysUserMapper.selectByPrimaryKey(superModel.getRepairUserId());
|
|
|
+ superModel.setRepairUserName(repairUser.getUsername());
|
|
|
+ // 修改维修状态并记录
|
|
|
+ RepairApplicationForm applicationForm = new RepairApplicationForm();
|
|
|
+ applicationForm.setId(model.getId());
|
|
|
+ applicationForm.setRepairUserId(superModel.getRepairUserId()); // 当前维修人
|
|
|
+ applicationForm.setRepairUserName(repairUser.getUsername());
|
|
|
+ applicationForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ superModel.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ if (superModel.getRepairStartTime() == null) {
|
|
|
+ applicationForm.setRepairStartTime(LocalDateTime.now());
|
|
|
+ superModel.setRepairStartTime(applicationForm.getRepairStartTime());
|
|
|
+ }
|
|
|
+ applicationForm.setUpdateTime(LocalDateTime.now());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
|
|
|
+ // 添加状态跟踪
|
|
|
+ addRepairStatusRecord(BeanConverterUtil.copyObjectProperties(superModel,RepairApplicationForm.class),"维修中");
|
|
|
+ // 添加维修记录
|
|
|
+ addRepairRecord(superModel);
|
|
|
+ // 给报修人发送消息
|
|
|
+ //sendMessageToRepairCaller(superModel,CommonConstants.CALL_REPAIR_PASS);
|
|
|
+ // 给维修人发送消息
|
|
|
+ sendMessageToRepairer(superModel);
|
|
|
+ // 启动超时监控
|
|
|
+ overTimeListen(model.getId());
|
|
|
+ return superModel;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 报修驳回
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void refusedRepair(RepairApplicationFormDTO model) {
|
|
|
+ RepairApplicationForm updRepair = new RepairApplicationForm();
|
|
|
+ updRepair.setId(model.getId());
|
|
|
+ updRepair.setRemark(model.getRemark());
|
|
|
+ updRepair.setStatus(RepairApplicationFormStatusEnum.REFUSED_REPAIR.getValue());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(updRepair);
|
|
|
+ // 添加状态记录
|
|
|
+ addRepairStatusRecord(updRepair,"报修驳回");
|
|
|
+ // 通知报修人
|
|
|
+ sendMessageToRepairCaller(model,CommonConstants.CALL_REPAIR_REFUSED);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 维修人上报
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void stopRepairByPerson(RepairApplicationFormDTO model) {
|
|
|
+ if(StringUtils.isBlank(model.getReportLeaderId())){
|
|
|
+ throw new DeniedException("上报对象不能为空");
|
|
|
+ }
|
|
|
+ if(StringUtils.isBlank(model.getRemark())){
|
|
|
+ throw new DeniedException("上报原因不能为空");
|
|
|
+ }
|
|
|
+ // 1、完善终止人的维修记录
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ editRepairRecord(model,CommonConstants.REPAIR_RECORD_EDIT_STOP);
|
|
|
+ // 2、回写并修改维修表
|
|
|
+ // 根据角色判断自己上报人角色
|
|
|
+ RepairApplicationForm updRepair = new RepairApplicationForm();
|
|
|
+ updRepair.setId(model.getId());
|
|
|
+ updRepair.setRemarkTwo(model.getRemark());
|
|
|
+ updRepair.setRepairUserId(model.getReportLeaderId());
|
|
|
+ if(model.getRoleType() != null && model.getRoleType() == 3){ // 更新维修单的区域负责人
|
|
|
+ updRepair.setReportLeaderId(model.getReportLeaderId());
|
|
|
+ }
|
|
|
+ /*if(roles.contains(SysRoleCodeEnum.Maintenance.name())){
|
|
|
+ // 更新维修人
|
|
|
+ updRepair.setRepairUserId(model.getReportLeaderId());
|
|
|
+ }else if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
|
|
|
+ // 班组长上报
|
|
|
+ updRepair.setDispatchUserId(model.getReportLeaderId());
|
|
|
+ }*/
|
|
|
+ updRepair.setStatus(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(updRepair);
|
|
|
+ // 3、状态记录表
|
|
|
+ addRepairStatusRecord(updRepair,"维修上报");
|
|
|
+ // 4、通知你上报的人
|
|
|
+ sendMessageToReportLeader(form,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(model.getReportLeaderId()),SysUserVO.class));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上报处理方法
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO reportLeaderHandle(RepairApplicationFormDTO model) {
|
|
|
+ String statusRemark = "自主处理";
|
|
|
+ RepairApplicationForm existForm = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ RepairApplicationForm form = new RepairApplicationForm();
|
|
|
+ form.setId(model.getId());
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
|
|
|
+ // 处理方式 自主处理和继续上报
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(model.getReportHandleType() == 1){
|
|
|
+ if(StringUtils.isBlank(model.getReportLeaderId())){
|
|
|
+ throw new DeniedException("派工对象不能为空");
|
|
|
+ }
|
|
|
+ // 自主处理
|
|
|
+ if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
|
|
|
+ // 班组长处理,重新指派维修人
|
|
|
+ form.setRepairUserId(model.getRepairUserId());
|
|
|
+ // 维修记录
|
|
|
+ String repairUserName = sysUserMapper.selectUserNameById(model.getRepairUserId());
|
|
|
+ model.setRepairUserName(repairUserName);
|
|
|
+ addRepairRecord(model);
|
|
|
+ // 通知维修人
|
|
|
+ sendMessageToRepairer(BeanConverterUtil.copyObjectProperties(existForm,RepairApplicationFormDTO.class));
|
|
|
+ }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
|
|
|
+ // 工程师处理
|
|
|
+ form.setRepairUserId(model.getRepairUserId());
|
|
|
+ // 维修记录
|
|
|
+ String repairUserName = sysUserMapper.selectUserNameById(model.getRepairUserId());
|
|
|
+ model.setRepairUserName(repairUserName);
|
|
|
+ addRepairRecord(model);
|
|
|
+ // 通知维修人
|
|
|
+ sendMessageToRepairer(BeanConverterUtil.copyObjectProperties(existForm,RepairApplicationFormDTO.class));
|
|
|
+ }else if(roles.contains(SysRoleCodeEnum.MM.name())){
|
|
|
+ // 区域负责人处理
|
|
|
+ form.setDispatchUserId(model.getDispatchUserId());
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.MM_DISPATCH.getValue());
|
|
|
+ // 主管派单通知工程师
|
|
|
+ SysUserDTO queryUser = new SysUserDTO();
|
|
|
+ queryUser.setUserId(model.getDispatchUserId());
|
|
|
+ sendMessageToRepairManger(existForm,sysUserMapper.getSysUserVO(queryUser),CommonConstants.REPORT_REPAIR);
|
|
|
+ }
|
|
|
+ } else if(model.getReportHandleType() == 2){
|
|
|
+ if(StringUtils.isBlank(model.getRemark())){
|
|
|
+ throw new DeniedException("上报原因不能为空");
|
|
|
+ }
|
|
|
+ statusRemark = "维修上报";
|
|
|
+ String leaderId = model.getReportLeaderId();
|
|
|
+ form.setRemarkTwo(model.getRemark());
|
|
|
+ // 继续上报
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
|
|
|
+ if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
|
|
|
+ if(StringUtils.isBlank(model.getReportLeaderId())){
|
|
|
+ throw new DeniedException("上报对象不能为空");
|
|
|
+ }
|
|
|
+ form.setRepairUserId(null);
|
|
|
+ form.setDispatchUserId(model.getReportLeaderId());
|
|
|
+ }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
|
|
|
+ // 工程师上报
|
|
|
+ leaderId = existForm.getReportLeaderId();
|
|
|
+ form.setDispatchUserId(null);
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.MM_REPAIR_FAIL.getValue());
|
|
|
+ }
|
|
|
+ // 上报通知
|
|
|
+ sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class));
|
|
|
+ }
|
|
|
+ repairApplicationFormMapper.updateLongYan(form);
|
|
|
+ // 添加状态记录
|
|
|
+ addRepairStatusRecord(form,statusRemark);
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO closeRepair(RepairApplicationFormDTO dto) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 维修人提交维修完成
|
|
|
+ * @param dto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO dto) {
|
|
|
+ super.handleRepair(dto);
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectById(dto.getId());
|
|
|
+ // 计算维修时长
|
|
|
+ editRepairRecord(dto,CommonConstants.REPAIR_RECORD_EDIT_ADD);
|
|
|
+ // 此处放在工程师结单时
|
|
|
+ /*double currentHour = form.getRepairMinutes() == null ? 0.0:form.getRepairMinutes();
|
|
|
+ form.setRepairMinutes(currentHour + hours);
|
|
|
+ // 判断维修是否超时
|
|
|
+ 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 (form.getRepairMinutes() > hourFirst) {
|
|
|
+ form.setRepairOvertime(true);
|
|
|
+ } else {
|
|
|
+ form.setRepairOvertime(false);
|
|
|
+ }*/
|
|
|
+ repairApplicationFormMapper.updateByPrimaryKeySelective(form);
|
|
|
+ // 添加状态记录
|
|
|
+ addRepairStatusRecord(form,"维修完成待审");
|
|
|
+ // 通知工程师审核
|
|
|
+ SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
|
|
|
+ sendMessageToRepairManger(form,ListUtils.newArrayList(vo),CommonConstants.REPAIR_COMPLETE_NOTICE);
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工程师之间的转派
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO dispatchRepair(RepairApplicationFormDTO model) {
|
|
|
+ // 完成维修和维修上报的状态才给转派
|
|
|
+ if(model.getStatus() != RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue() &&
|
|
|
+ model.getStatus() != RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue() &&
|
|
|
+ model.getStatus() != RepairApplicationFormStatusEnum.MM_REPAIR_FAIL.getValue()){
|
|
|
+ throw new DeniedException("该状态下不允许转派");
|
|
|
+ }
|
|
|
+ // 角色是否符合要求
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !roles.contains(SysRoleCodeEnum.MM.name())){
|
|
|
+ throw new DeniedException("不具备转派的权限");
|
|
|
+ }
|
|
|
+ SysUser user = sysUserMapper.selectByPrimaryKey(model.getDispatchUserId());
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
|
|
|
+ // 转派人为工程师时
|
|
|
+ if(model.getRoleType() == 2){
|
|
|
+ model.setDispatchUserId(form.getDispatchUserId());
|
|
|
+ // 添加维修转派记录
|
|
|
+ //addRepairDispatchRecord(model,user);
|
|
|
+ // 更新维修信息
|
|
|
+ form.setDispatchUserId(user.getUserId());
|
|
|
+ //form.setRepairUserId(null);
|
|
|
+ //form.setStatus(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
|
|
|
+ //form.setUpdateTime(LocalDateTime.now());
|
|
|
+ //repairApplicationFormMapper.updateLongYan(form);
|
|
|
+ // 添加状态记录
|
|
|
+ //addRepairStatusRecord(form,"维修转派");
|
|
|
+ }else if(model.getRoleType() == 4){ // 区域负责人转派
|
|
|
+ model.setDispatchUserId(form.getReportLeaderId());
|
|
|
+ // 添加维修转派记录
|
|
|
+ //addRepairDispatchRecord(model,user);
|
|
|
+ // 更新维修信息
|
|
|
+ form.setReportLeaderId(user.getUserId());
|
|
|
+ form.setRepairDeptId(sysUserDeptMapper.selectDeptIdByUserId(user.getUserId()));
|
|
|
+ //form.setRepairUserId(null);
|
|
|
+ //form.setStatus(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
|
|
|
+ //form.setUpdateTime(LocalDateTime.now());
|
|
|
+ //repairApplicationFormMapper.updateLongYan(form);
|
|
|
+ // 添加状态记录
|
|
|
+ //addRepairStatusRecord(form,"维修转派");
|
|
|
+ }
|
|
|
+ // 添加维修转派记录
|
|
|
+ addRepairDispatchRecord(model,user);
|
|
|
+ form.setRepairUserId(null);
|
|
|
+ form.setStatus(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
|
|
|
+ form.setUpdateTime(LocalDateTime.now());
|
|
|
+ repairApplicationFormMapper.updateLongYan(form);
|
|
|
+ // 添加状态记录
|
|
|
+ addRepairStatusRecord(form,"维修转派");
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交生产审核
|
|
|
+ * @param model
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public RepairApplicationForm submitRepair(RepairApplicationFormDTO model) {
|
|
|
+ // 判断是否具有接单权限
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !roles.contains(SysRoleCodeEnum.MM.name())){
|
|
|
+ throw new DeniedException("对不起,您不具备结单权限");
|
|
|
+ }
|
|
|
+ RepairApplicationForm form = super.submitRepair(model);
|
|
|
+ // 添加状态跟踪
|
|
|
+ addRepairStatusRecord(form,"生产审核中");
|
|
|
+ // 添加审核记录
|
|
|
+ addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_REPAIR_MANAGER_VERIFY);
|
|
|
+ // 通知报修人(生产审核)
|
|
|
+ sendMessageToRepairCaller(BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class),CommonConstants.CALL_REPAIR_SUCCESS);
|
|
|
+ // 通知相关领导
|
|
|
+ sendMessageToLeader(BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class),CommonConstants.CALL_REPAIR_COMPLETE);
|
|
|
+ return form;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生产审核通过
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void verifyRepair(RepairApplicationFormDTO model) {
|
|
|
+ // 判断是否具有权限
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(!roles.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
|
|
|
+ throw new DeniedException("对不起,您不具有审核权限");
|
|
|
+ }
|
|
|
+ super.verifyRepair(model);
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ // 添加跟踪状态
|
|
|
+ addRepairStatusRecord(form,"维修完成");
|
|
|
+ // 添加审核记录
|
|
|
+ addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_CALLER_VERIFY);
|
|
|
+ // 通知主管,是否通知维修人
|
|
|
+ SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
|
|
|
+ //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FINISH);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model) {
|
|
|
+ // 判断是否具有权限
|
|
|
+ String roles = getCurrentRoles();
|
|
|
+ if(!roles.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
|
|
|
+ throw new DeniedException("对不起,您不具有审核权限");
|
|
|
+ }
|
|
|
+ super.verifyRefused(model);
|
|
|
+ RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
|
|
|
+ // 添加跟踪状态
|
|
|
+ addRepairStatusRecord(form,"生产驳回");
|
|
|
+ // 添加审核记录
|
|
|
+ addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_REFUSED, CommonConstants.TYPE_CALLER_VERIFY);
|
|
|
+ // 通知主管,再次派工维修
|
|
|
+ SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
|
|
|
+ //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FAIL);
|
|
|
+ return model;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据情况修改数据
|
|
|
+ * @param form
|
|
|
+ * @param type 1 回写数据 2 终止
|
|
|
+ */
|
|
|
+ private double editRepairRecord(RepairApplicationFormDTO form,String type){
|
|
|
+ double hours = 0.0;
|
|
|
+ // 获取维修记录
|
|
|
+ CustomFieldTemplateData queryData = getLastRepairRecord(form.getId(),form.getRepairUserId());
|
|
|
+ CustomFieldTemplateData updData = new CustomFieldTemplateData();
|
|
|
+ updData.setId(queryData.getId());
|
|
|
+ updData.setUpdateTime(LocalDateTime.now());
|
|
|
+ RepairRecordTemplateData dataInfo = JsonUtils.jsonToModel(queryData.getData(),RepairRecordTemplateData.class);
|
|
|
+ updData.setUpdateTime(LocalDateTime.now());
|
|
|
+ hours = DateUtils.getDurationHours(queryData.getCreatedTime(), updData.getUpdateTime());
|
|
|
+ dataInfo.setRepairMinutes(hours);
|
|
|
+ dataInfo.setRemark(form.getRemark());
|
|
|
+ // 保存维修记录图片和文件
|
|
|
+ sysFileService.saveFile(queryData.getId(), SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue(), form.getRepairFileList());
|
|
|
+ sysFileService.saveFile(queryData.getId(), SysFileTypeEnum.REPAIR_REPAIR_FILES.getValue(), form.getOpinionFileList());
|
|
|
+ updData.setData(JsonUtils.objectToJson(dataInfo));
|
|
|
+ customFieldTemplateDataMapper.updateByPrimaryKeySelective(updData);
|
|
|
+ return hours;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取最近一次维修记录
|
|
|
+ * @param repairId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private CustomFieldTemplateData getLastRepairRecord(String repairId,String repairUserId){
|
|
|
+ // 获取维修记录
|
|
|
+ Weekend<CustomFieldTemplateData> weekend = new Weekend<>(CustomFieldTemplateData.class);
|
|
|
+ WeekendCriteria<CustomFieldTemplateData, Object> weekendCriteria = weekend.weekendCriteria();
|
|
|
+ weekendCriteria = weekendCriteria.andEqualTo(CustomFieldTemplateData::getRemark,CommonConstants.REPAIR_RECORD)
|
|
|
+ .andEqualTo(CustomFieldTemplateData::getObjId,repairId);
|
|
|
+ if(StringUtils.isNotBlank(repairUserId)){
|
|
|
+ weekendCriteria.andEqualTo(CustomFieldTemplateData::getCreatedUserId,repairUserId);
|
|
|
+ }
|
|
|
+ weekend.orderBy("createdTime").desc();
|
|
|
+ List<CustomFieldTemplateData> list = customFieldTemplateDataMapper.selectByExample(weekend);
|
|
|
+ if(list == null || list.size() == 0){
|
|
|
+ throw new DeniedException("维修记录异常,请联系技术处理");
|
|
|
+ }
|
|
|
+ return list.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加维修记录
|
|
|
+ * @param form
|
|
|
+ */
|
|
|
+ private void addRepairRecord(RepairApplicationFormDTO form){
|
|
|
+ CustomFieldTemplateData data = new CustomFieldTemplateData();
|
|
|
+ data.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ data.setObjId(form.getId());
|
|
|
+ data.setCreatedTime(LocalDateTime.now());
|
|
|
+ data.setCreatedUserId(form.getRepairUserId());
|
|
|
+ data.setCreatedUserName(form.getRepairUserName());
|
|
|
+ data.setRemark(CommonConstants.REPAIR_RECORD);
|
|
|
+ RepairRecordTemplateData dataInfo = new RepairRecordTemplateData();
|
|
|
+ dataInfo.setOpinion(form.getRemark());
|
|
|
+ dataInfo.setRemark("");
|
|
|
+ dataInfo.setRepairMinutes(0.0);
|
|
|
+ dataInfo.setFile("");
|
|
|
+ dataInfo.setImageList("");
|
|
|
+ data.setData(JsonUtils.objectToJson(dataInfo));
|
|
|
+ data.setDelFlag(0);
|
|
|
+ customFieldTemplateDataMapper.insert(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加维修转派记录
|
|
|
+ * @param form
|
|
|
+ */
|
|
|
+ private void addRepairDispatchRecord(RepairApplicationFormDTO form,SysUser user){
|
|
|
+ SysUser oldUser = sysUserMapper.selectByPrimaryKey(form.getDispatchUserId());
|
|
|
+ CustomFieldTemplateData data = new CustomFieldTemplateData();
|
|
|
+ data.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ data.setObjId(form.getId());
|
|
|
+ data.setCreatedTime(LocalDateTime.now());
|
|
|
+ data.setCreatedUserId(form.getDispatchUserId());
|
|
|
+ data.setCreatedUserName(oldUser.getUsername());
|
|
|
+ data.setRemark(CommonConstants.REPAIR_DISPATCH_RECORD);
|
|
|
+ RepairDispatchTemplateData dataInfo = new RepairDispatchTemplateData();
|
|
|
+ dataInfo.setOldDispatchUserId(oldUser.getUserId());
|
|
|
+ dataInfo.setOldDispatchUserName(oldUser.getUsername());
|
|
|
+ dataInfo.setRemark(form.getRepairDispatchRemark());
|
|
|
+ dataInfo.setDispatchUserId(user.getUserId());
|
|
|
+ dataInfo.setDispatchUserName(user.getUsername());
|
|
|
+ dataInfo.setFile("");
|
|
|
+ dataInfo.setImageList("");
|
|
|
+ data.setData(JsonUtils.objectToJson(dataInfo));
|
|
|
+ data.setDelFlag(0);
|
|
|
+ customFieldTemplateDataMapper.insert(data);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给报修人发送消息
|
|
|
+ * @param model
|
|
|
+ * @param type 1 报修成功 2 报修驳回 3 维修成功 4 工程师接单
|
|
|
+ */
|
|
|
+ private void sendMessageToRepairCaller(RepairApplicationFormDTO model,String type){
|
|
|
+ SysUser user = sysUserMapper.selectByPrimaryKey(model.getUserId()); // 推送对象
|
|
|
+ String messageInfo = ""; // 通知内容
|
|
|
+ Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_RECEIVE.getValue();
|
|
|
+ String[] values = null; // 微信填充内容
|
|
|
+ String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID.name()); // 微信模板ID
|
|
|
+ String detailUrl = "pages/service-detail/service-detail?id=" + model.getId(); // 微信跳转url
|
|
|
+ switch (type){
|
|
|
+ case CommonConstants.CALL_REPAIR_PASS:
|
|
|
+ messageInfo = MessageTemplateUtil.getRepairStart(model.getNo());
|
|
|
+ values = new String[]{"您提交的报修单已开始维修!",model.getNo(),"维修中",DateUtils.dateToString(model.getRepairStartTime()),"请知悉"};
|
|
|
+ break;
|
|
|
+ case CommonConstants.CALL_REPAIR_REFUSED:
|
|
|
+ messageInfo = MessageTemplateUtil.getRefusedReceive(model.getNo(),model.getRemark());
|
|
|
+ values = new String[]{"您提交的报修单已被驳回!",model.getNo(),"报修驳回","","请知悉"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_BACK.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.CALL_REPAIR_SUCCESS:
|
|
|
+ messageInfo = MessageTemplateUtil.getRepairSuccess(model.getNo());
|
|
|
+ values = new String[]{"您提交的报修单已维修完成!",model.getNo(),"维修完成","","请尽快审核"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.CALL_REPAIR_RECEIVE:
|
|
|
+ messageInfo = MessageTemplateUtil.getReceive(model.getNo());
|
|
|
+ values = new String[]{"您提交的报修单已被工程师接单!",model.getNo(),"已接单","","请知悉"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_MANAGE_RECEIVE.getValue();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 1、站内信和email
|
|
|
+ sendWorkplaceAndEmailNew(ListUtils.newArrayList(user.getEmail()),
|
|
|
+ ListUtils.newArrayList(user.getUserId()),model.getId(),messageInfo, detailType);
|
|
|
+ // 2、微信
|
|
|
+ SendMessageUtils.sendWechatNew(ListUtils.newArrayList(user.getWxOpenId()),detailUrl,values,wechatTemplateId);
|
|
|
+ // 3、短信
|
|
|
+ if(StringUtils.isNotBlank(user.getPhone()) && user.getPhone().trim().length() == 11){
|
|
|
+ SendMessageUtils.sendCommonSms(ListUtils.newArrayList(user.getPhone()),messageInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给相关领导发送消息
|
|
|
+ * @param model
|
|
|
+ * @param type 1 报修成功 2 报修驳回 3 维修成功 4 工程师接单 5 维修结单
|
|
|
+ */
|
|
|
+ private void sendMessageToLeader(RepairApplicationFormDTO model,String type){
|
|
|
+ // 获取推送对象
|
|
|
+ /*List<SysUserVO> userVOS = getRepairMangers(null,null,SysRoleCodeEnum.REPAIR_LEADER.name());
|
|
|
+ if(userVOS != null && userVOS.size() > 0){
|
|
|
+ String messageInfo = ""; // 通知内容
|
|
|
+ Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
|
|
|
+ String[] values = null; // 微信填充内容
|
|
|
+ String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID.name()); // 微信模板ID
|
|
|
+ String detailUrl = "pages/service-detail/service-detail?id=" + model.getId(); // 微信跳转url
|
|
|
+ switch (type){
|
|
|
+ case CommonConstants.CALL_REPAIR_COMPLETE:
|
|
|
+ messageInfo = MessageTemplateUtil.getRepairSuccessForLeader(model.getNo());
|
|
|
+ values = new String[]{"您有一条维修结单消息!",model.getNo(),"维修结单",DateUtils.dateToString(model.getRepairStartTime()),"请知悉"};
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Map<String,List<String>> maps = getPushReceivers(userVOS);
|
|
|
+ // 1、站内信和email
|
|
|
+ sendWorkplaceAndEmailNew(maps.get("mails"),maps.get("userIds"),model.getId(),messageInfo, detailType);
|
|
|
+ // 2、微信
|
|
|
+ SendMessageUtils.sendWechatNew(maps.get("openIds"),detailUrl,values,wechatTemplateId);
|
|
|
+ // 3、短信
|
|
|
+ SendMessageUtils.sendCommonSms(maps.get("phones"),messageInfo);
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给维修人发送消息
|
|
|
+ * @param model
|
|
|
+ */
|
|
|
+ private void sendMessageToRepairer(RepairApplicationFormDTO model){
|
|
|
+ SbInfo sbInfo = sbInfoService.getModelById(model.getSbId());
|
|
|
+ SysUser user = sysUserMapper.selectByPrimaryKey(model.getRepairUserId());
|
|
|
+ // 1、站内信
|
|
|
+ String domain = getAndCheckPcDomain();
|
|
|
+ String repairUrl = domain + "repair/form?no=" + model.getNo();
|
|
|
+ // 获取站内信内容
|
|
|
+ String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
|
|
|
+ model, sbInfo);
|
|
|
+ sendWorkplaceAndEmailNew(ListUtils.newArrayList(user.getEmail()),
|
|
|
+ ListUtils.newArrayList(user.getUserId()),model.getId(),info, WorkplaceBacklogDetailTypeEnum.REPAIR_DISPATCH.getValue());
|
|
|
+ // 2、微信
|
|
|
+ String[] values = new String[]{"你有一条维修任务!",model.getActualUser(),sbInfo.getName(),DateUtils.dateToString(model.getApplyTime()),model.getSbCph(),model.getContent(),"请知悉"};
|
|
|
+ String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_NOTICE_SUCCESS_WECHAT_TEMPLATE_ID.name());
|
|
|
+ String detailUrl = "pages/service-detail/service-detail?id=" + model.getId();
|
|
|
+ SendMessageUtils.sendWechatNew(ListUtils.newArrayList(user.getWxOpenId()),detailUrl,values,wechatTemplateId);
|
|
|
+ // 3、短信
|
|
|
+ SendMessageUtils.sendCommonSms(ListUtils.newArrayList(user.getPhone()),info);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给维修主管推送消息
|
|
|
+ * @param form
|
|
|
+ * @param type 1 报修通知 2 维修终止通知 3 维修完成 4 生产驳回 5 主管派单通知
|
|
|
+ */
|
|
|
+ private void sendMessageToRepairManger(RepairApplicationForm form,List<SysUserVO> userVOs,String type){
|
|
|
+ SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
|
|
|
+ String domain = getAndCheckPcDomain();
|
|
|
+ String repairUrl = domain + "repair/form?no=" + form.getNo();
|
|
|
+ String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
|
|
|
+ BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
|
|
|
+ Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue();
|
|
|
+ String[] values = null;
|
|
|
+ String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
|
|
|
+ String detailUrl = "pages/service-detail/service-detail?id=" + form.getId();
|
|
|
+ switch (type){
|
|
|
+ case CommonConstants.CALL_REPAIR_NOTICE:
|
|
|
+ values = new String[]{"有一条新的报修消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
|
|
|
+ break;
|
|
|
+ case CommonConstants.REPAIR_FAIL_NOTICE:
|
|
|
+ values = new String[]{"维修单终止维修消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请再次派工"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION_STOP.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.REPAIR_COMPLETE_NOTICE:
|
|
|
+ values = new String[]{"维修完成消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请确认后,提交生产审核"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_OK.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.CALL_REPAIR_FAIL:
|
|
|
+ values = new String[]{"维修审核驳回消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_BACK.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.CALL_REPAIR_FINISH:
|
|
|
+ values = new String[]{"维修生产通过消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
|
|
|
+ break;
|
|
|
+ case CommonConstants.REPORT_REPAIR:
|
|
|
+ values = new String[]{"维修主管派单消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
|
|
|
+ detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER_TRANSFER.getValue();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Map<String,List<String>> maps = getPushReceivers(userVOs);
|
|
|
+ // 1、站内信
|
|
|
+ sendWorkplaceAndEmailNew(maps.get("mails"),maps.get("userIds"),form.getId(),info, detailType);
|
|
|
+ // 2、微信
|
|
|
+ SendMessageUtils.sendWechatNew(maps.get("openIds"),detailUrl,values,wechatTemplateId);
|
|
|
+ // 3、短信
|
|
|
+ SendMessageUtils.sendCommonSms(maps.get("phones"),info);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 维修上报通知
|
|
|
+ * @param form
|
|
|
+ * @param userVOs
|
|
|
+ */
|
|
|
+ private void sendMessageToReportLeader(RepairApplicationForm form,SysUserVO userVOs){
|
|
|
+ SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
|
|
|
+ String domain = getAndCheckPcDomain();
|
|
|
+ String repairUrl = domain + "repair/form?no=" + form.getNo();
|
|
|
+ String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
|
|
|
+ BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
|
|
|
+ Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
|
|
|
+ String[] values = new String[]{"有一条新的维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
|
|
|
+ String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
|
|
|
+ String detailUrl = "pages/service-detail/service-detail?id=" + form.getId();
|
|
|
+ // 1、站内信
|
|
|
+ sendWorkplaceAndEmailNew(ListUtils.newArrayList(userVOs.getEmail()),ListUtils.newArrayList(userVOs.getUserId()),form.getId(),info, detailType);
|
|
|
+ // 2、微信
|
|
|
+ SendMessageUtils.sendWechatNew(ListUtils.newArrayList(userVOs.getWxOpenId()),detailUrl,values,wechatTemplateId);
|
|
|
+ // 3、短信
|
|
|
+ SendMessageUtils.sendCommonSms(ListUtils.newArrayList(userVOs.getPhone()),info);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,List<String>> getPushReceivers(List<SysUserVO> userVOS){
|
|
|
+ Map<String,List<String>> retInfos = new HashMap<>();
|
|
|
+ List<String> mails = ListUtils.newArrayList();
|
|
|
+ List<String> userIds = ListUtils.newArrayList();
|
|
|
+ List<String> openIds = ListUtils.newArrayList();
|
|
|
+ List<String> phones = ListUtils.newArrayList();
|
|
|
+ userVOS.forEach(item -> {
|
|
|
+ mails.add(item.getEmail());
|
|
|
+ userIds.add(item.getUserId());
|
|
|
+ openIds.add(item.getWxOpenId());
|
|
|
+ phones.add(item.getPhone());
|
|
|
+ });
|
|
|
+ retInfos.put("mails",mails);
|
|
|
+ retInfos.put("userIds",userIds);
|
|
|
+ retInfos.put("openIds",openIds);
|
|
|
+ retInfos.put("phones",phones);
|
|
|
+ return retInfos;
|
|
|
+ }
|
|
|
+}
|