guarantee-lsq před 2 roky
rodič
revize
1ae8d25c76

+ 4 - 0
platform-common/src/main/java/com/platform/common/util/IdGeneratorUtils.java

@@ -177,6 +177,10 @@ public class IdGeneratorUtils {
     public static String getOutStoreNo(Integer countNum) {
         return getProjectNum("CKD", countNum);
     }
+
+    public static String getPreparationNo(Integer countNum) {
+        return getProjectNum("CJD", countNum);
+    }
     /**
      * 生成出库单号
      *

+ 112 - 95
platform-dao/src/main/java/com/platform/dao/dto/preparation/PreparationDTO.java

@@ -2,14 +2,17 @@ package com.platform.dao.dto.preparation;
 
 import com.platform.common.bean.BaseDTO;
 import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.entity.upms.SysFile;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+
 import javax.validation.constraints.*;
 import java.io.Serializable;
 import java.time.LocalDateTime;
 import java.time.LocalDate;
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @Description 筹建管理DTO
@@ -22,147 +25,161 @@ import java.math.BigDecimal;
 @EqualsAndHashCode(callSuper = true)
 public class PreparationDTO extends BaseDTO implements Serializable {
 
-      /**
+    /**
      * 主键
      */
-        @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
     private String id;
-          /**
+    /**
      * 设备型号
      */
-          private String positionId;
-          /**
+    private String positionId;
+    /**
      * 申请人id
      */
-          private String userId;
-          /**
+    private String userId;
+    /**
      * 申请部门
      */
-          private String departId;
-          /**
+    private String departId;
+    /**
      * 报修时间
      */
-        private LocalDateTime applyTime;
-      /**
-       * 报修时间开始
-       */
-      private LocalDateTime applyTimeStart;
-      /**
-       * 报修时间结束
-       */
-      private LocalDateTime applyTimeEnd;
-          /**
+    private LocalDateTime applyTime;
+    /**
+     * 报修时间开始
+     */
+    private LocalDateTime applyTimeStart;
+    /**
+     * 报修时间结束
+     */
+    private LocalDateTime applyTimeEnd;
+    /**
      * 问题描述
      */
-          private String content;
-          /**
+    private String content;
+    /**
      * 报修状态:0:草稿 1-待分配 2-已分配 3-已完成 4-已撤销
-            
      */
-          private Integer status;
-          /**
+    private Integer status;
+    /**
      * 备注
      */
-          private String remark;
-          /**
+    private String remark;
+    /**
      * 创建日期
      */
-        private LocalDateTime createdTime;
-      /**
-       * 创建日期开始
-       */
-      private LocalDateTime createdTimeStart;
-      /**
-       * 创建日期结束
-       */
-      private LocalDateTime createdTimeEnd;
-          /**
+    private LocalDateTime createdTime;
+    /**
+     * 创建日期开始
+     */
+    private LocalDateTime createdTimeStart;
+    /**
+     * 创建日期结束
+     */
+    private LocalDateTime createdTimeEnd;
+    /**
      * 更新日期
      */
-        private LocalDateTime updateTime;
-      /**
-       * 更新日期开始
-       */
-      private LocalDateTime updateTimeStart;
-      /**
-       * 更新日期结束
-       */
-      private LocalDateTime updateTimeEnd;
-          /**
+    private LocalDateTime updateTime;
+    /**
+     * 更新日期开始
+     */
+    private LocalDateTime updateTimeStart;
+    /**
+     * 更新日期结束
+     */
+    private LocalDateTime updateTimeEnd;
+    /**
      * 创建人
      */
-          private String createdUserId;
-          /**
+    private String createdUserId;
+    /**
      * 创建人名称
      */
-          private String createdUserName;
-          /**
+    private String createdUserName;
+    /**
      * 更新人
      */
-          private String updateUserId;
-          /**
+    private String updateUserId;
+    /**
      * 更新人名称
      */
-          private String updateUserName;
-          /**
+    private String updateUserName;
+    /**
      * 维修开始时间
      */
-        private LocalDateTime repairStartTime;
-      /**
-       * 维修开始时间开始
-       */
-      private LocalDateTime repairStartTimeStart;
-      /**
-       * 维修开始时间结束
-       */
-      private LocalDateTime repairStartTimeEnd;
-          /**
+    private LocalDateTime repairStartTime;
+    /**
+     * 维修开始时间开始
+     */
+    private LocalDateTime repairStartTimeStart;
+    /**
+     * 维修开始时间结束
+     */
+    private LocalDateTime repairStartTimeEnd;
+    /**
      * 维修结束时间
      */
-        private LocalDateTime repairEndTime;
-      /**
-       * 维修结束时间开始
-       */
-      private LocalDateTime repairEndTimeStart;
-      /**
-       * 维修结束时间结束
-       */
-      private LocalDateTime repairEndTimeEnd;
-          /**
+    private LocalDateTime repairEndTime;
+    /**
+     * 维修结束时间开始
+     */
+    private LocalDateTime repairEndTimeStart;
+    /**
+     * 维修结束时间结束
+     */
+    private LocalDateTime repairEndTimeEnd;
+    /**
      * 维修耗时
      */
-          private Double repairMinutes;
-          /**
+    private Double repairMinutes;
+    /**
      * 维修人员id
      */
-          private String repairUserId;
-          /**
+    private String repairUserId;
+    /**
      * 维修描述
      */
-          private String repairContent;
-          /**
+    private String repairContent;
+    /**
      * 要求完成日期
      */
-        private LocalDate limitHours;
-      /**
-       * 要求完成日期开始
-       */
-      private LocalDate limitHoursStart;
-      /**
-       * 要求完成日期结束
-       */
-      private LocalDate limitHoursEnd;
-          /**
+    private LocalDate limitHours;
+    /**
+     * 要求完成日期开始
+     */
+    private LocalDate limitHoursStart;
+    /**
+     * 要求完成日期结束
+     */
+    private LocalDate limitHoursEnd;
+    /**
      * 费用预算
      */
-          private BigDecimal fee;
-          /**
+    private BigDecimal fee;
+    /**
      * 预算明细表
      */
-          private String feeFile;
-        /**
+    private String feeFile;
+    /**
      * 关键字
      */
-  private String keyword;
+    private String keyword;
+
+    /**
+     * 派单人
+     */
+    private String dispatchUserId;
+
+    private String no;
+
+    /**
+     * 公司
+     */
+    private String parentPositionId;
+
+    private List<SysFile> imageList;
+
+    private List<SysFile> fileList;
 
 }

+ 14 - 2
platform-dao/src/main/java/com/platform/dao/entity/preparation/Preparation.java

@@ -26,10 +26,15 @@ public class Preparation implements Serializable{
     /**
      * 主键
      */
-        @Id
+    @Id
     private String id;
     /**
-     * 设备型号
+     * 公司
+     */
+    private String parentPositionId;
+
+    /**
+     * 建筑物车间
      */
     private String positionId;
     /**
@@ -114,6 +119,13 @@ public class Preparation implements Serializable{
      */
     private String feeFile;
 
+    /**
+     * 派单人
+     */
+    private String dispatchUserId;
+
+    private String no;
+
    /**
     * 数据权限
     */

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/enums/SysRoleCodeEnum.java

@@ -170,6 +170,11 @@ public enum SysRoleCodeEnum {
      * 隐患属地负责人
      */
     HIDDEN_DANGER_AREA_USER,
+
+    /**
+     * 筹建主管
+     */
+    PREPARATION_MANAGER,
     ;
 
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogDetailTypeEnum.java

@@ -33,6 +33,7 @@ public enum WorkplaceBacklogDetailTypeEnum {
     REPAIR_RECEIVE(23, "维修接收通知"),
     SB_CALLER_REPAIR(28, "设备部报修审核"),
     SB_APPLY_BIG_REPAIR(30, "报修转大修审核"),
+    PREPARATION_REPAIR(31, "筹建报修"),
     REPAIR_EXAMINE(24, "维修审核通知"),
     CHECK_RUN_EXPIRE(7, "润滑任务过期通知"),
     CHECK_BAOYANG_EXPIRE(8, "保养任务过期通知"),

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogTypeEnum.java

@@ -25,6 +25,11 @@ public enum WorkplaceBacklogTypeEnum {
      * 维修提醒
      */
     REPAIR(2),
+
+    /**
+     * 筹建报修
+     */
+    PREPARATION_REPAIR(8),
     /**
      * 设备报废
      */

+ 10 - 0
platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java

@@ -418,6 +418,16 @@ public class MessageTemplateUtil {
         return String.format("您有新的设备调拨审批【%s】待处理,请处理", applyTitle);
     }
 
+    /**
+     * 筹建报修通知主管
+     *
+     * @param no :
+     * @return :
+     */
+    public static String getPreparationSuccess(String no) {
+        return String.format("您有新的筹建报修单【%s】待处理,请处理", no);
+    }
+
 
     /**
      * 调拨审批通知内容

+ 7 - 0
platform-service/src/main/java/com/platform/service/preparation/PreparationService.java

@@ -32,4 +32,11 @@ public interface PreparationService extends IBaseService<Preparation, Preparatio
      */
     AbstractPageResultBean<PreparationVO> selectPageList(PreparationDTO record, int pageNum, int pageSize);
 
+    /**
+     * 报修生成任务
+     * @param model
+     * @return
+     */
+    Preparation saveByDTO(PreparationDTO model);
+
                                                                                                                                                                                                                                                                             }

+ 116 - 6
platform-service/src/main/java/com/platform/service/preparation/impl/PreparationServiceImpl.java

@@ -1,20 +1,42 @@
 package com.platform.service.preparation.impl;
+
+import com.github.pagehelper.PageHelper;
 import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.cache.ConfigCache;
+import com.platform.common.exception.DeniedException;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.ListUtils;
+import com.platform.common.util.SecurityUtils;
+import com.platform.common.util.SpringContextHolder;
 import com.platform.dao.bean.MyPage;
-import com.github.pagehelper.PageHelper;
-import com.platform.dao.vo.query.preparation.PreparationVO;
 import com.platform.dao.dto.preparation.PreparationDTO;
+import com.platform.dao.dto.upms.SysUserDTO;
 import com.platform.dao.entity.preparation.Preparation;
+import com.platform.dao.entity.sb.SbPosition;
+import com.platform.dao.enums.SysConfigEnum;
+import com.platform.dao.enums.SysRoleCodeEnum;
+import com.platform.dao.enums.WorkplaceBacklogDetailTypeEnum;
+import com.platform.dao.enums.WorkplaceBacklogTypeEnum;
 import com.platform.dao.mapper.preparation.PreparationMapper;
+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.dao.vo.query.preparation.PreparationVO;
+import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.event.WorkplaceBacklogEvent;
 import com.platform.service.preparation.PreparationService;
+import com.platform.service.util.SendMessageUtils;
 import org.springframework.stereotype.Service;
-import com.platform.service.base.impl.BaseServiceImpl;
-import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
-import lombok.AllArgsConstructor;
 
+import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 筹建管理 service 实现类
@@ -22,10 +44,16 @@ import java.util.List;
  * @Date 2022-12-28 20:00:26
  * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
  */
-@AllArgsConstructor
 @Service("preparationService")
 public class PreparationServiceImpl extends BaseServiceImpl<PreparationMapper, Preparation, PreparationDTO> implements PreparationService {
 
+    @Resource
+    private SbPositionMapper sbPositionMapper;
+    @Resource
+    private SysUserDeptMapper sysUserDeptMapper;
+    @Resource
+    private SysUserMapper sysUserMapper;
+
     @Override
     public int batchDelete(List<String> ids) {
         Weekend<Preparation> weekend = new Weekend<>(Preparation.class);
@@ -41,10 +69,92 @@ public class PreparationServiceImpl extends BaseServiceImpl<PreparationMapper, P
         return new MyPage(mapper.selectList(record));
     }
 
+    @Override
+    public Preparation saveByDTO(PreparationDTO model) {
+        // 获取公司ID
+        model.setParentPositionId(getParentPositionId(model.getPositionId()));
+        // 获取筹建主管角色,当一人时,直接赋值,多人时,接单派单
+        SysUserDTO queryUserDTO = new SysUserDTO();
+        queryUserDTO.setRoleCode(SysRoleCodeEnum.PREPARATION_MANAGER.name());
+        List<SysUserVO> userVOS = sysUserMapper.selectDeptRoleUser(queryUserDTO);
+        if(userVOS == null || userVOS.size() == 0){
+            throw new DeniedException("报修失败,筹建部门,尚无派送主管。");
+        }
+        if(userVOS.size() == 1){
+            model.setDispatchUserId(userVOS.get(0).getUserId());
+        }
+        // 获取申请人部门
+        String userId = SecurityUtils.getUserInfo().getUserId();
+        model.setDepartId(sysUserDeptMapper.selectDeptIdByUserId(userId));
+        model.setUserId(userId);
+        // 单据号
+        Weekend<Preparation> weekend = new Weekend<>(Preparation.class);
+        weekend.weekendCriteria().andIsNotNull(Preparation::getId);
+        Integer count = mapper.selectCountByExample(weekend);
+        model.setNo(IdGeneratorUtils.getPreparationNo(++count));
+        Preparation preparation = this.saveModelByDTO(model);
+        // 给主管发送消息
+        sendMessageToManger(userVOS,preparation);
+        return preparation;
+    }
+
+    private String getParentPositionId(String positionId){
+        SbPosition sbPosition = sbPositionMapper.selectByPrimaryKey(positionId);
+        while(!StringUtils.isEmpty(sbPosition.getParentId())){
+            sbPosition = sbPositionMapper.selectByPrimaryKey(sbPosition.getParentId());
+        }
+        return sbPosition.getId();
+    }
+
     @Override
     public AbstractPageResultBean<Preparation> selectPageInfo(PreparationDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         return new MyPage(mapper.selectList(record));
     }
 
+    /**
+     * 给筹建主管发送消息
+     * @param userVOS
+     * @param preparation
+     */
+    private void sendMessageToManger(List<SysUserVO> userVOS,Preparation preparation){
+        String info = MessageTemplateUtil.getPreparationSuccess(preparation.getNo());
+        Integer detailType = WorkplaceBacklogDetailTypeEnum.PREPARATION_REPAIR.getValue();
+        String[] values = new String[]{"有一条新的筹建消息!",preparation.getNo(),"无",preparation.getContent(),sbPositionMapper.selectNameById(preparation.getPositionId()),"请尽快派工"};
+        String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
+        String detailUrl = "pages/service-detail/service-detail?id=" + preparation.getId();
+        Map<String,List<String>> maps = getPushReceivers(userVOS);
+        // 1、站内信
+        sendWorkplaceAndEmailNew(maps.get("mails"),maps.get("userIds"),preparation.getId(),info, detailType);
+        // 2、微信
+        SendMessageUtils.sendWechatNew(maps.get("openIds"),detailUrl,values,wechatTemplateId);
+        // 3、短信
+        SendMessageUtils.sendCommonSms(maps.get("phones"),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;
+    }
+
+    public void sendWorkplaceAndEmailNew(List<String> mails,List<String> userIds,String repairId,String content,Integer detailType){
+        // 通过给当天值班维修人员
+        SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(WorkplaceBacklogTypeEnum.PREPARATION_REPAIR.getValue(), detailType,
+                repairId, content, repairId, userIds, mails));
+    }
+
                                                                                                                                                                                                                                                                             }