xiongchao 3 년 전
부모
커밋
23b47d189d
26개의 변경된 파일396개의 추가작업 그리고 39개의 파일을 삭제
  1. 5 1
      platform-dao/src/main/java/com/platform/dao/dto/repair/RepairApplicationFormDTO.java
  2. 11 0
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java
  3. 4 1
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbStatusLogDTO.java
  4. 4 1
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbStopLogDTO.java
  5. 5 2
      platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java
  6. 4 0
      platform-dao/src/main/java/com/platform/dao/entity/sb/SbStatusLog.java
  7. 5 0
      platform-dao/src/main/java/com/platform/dao/entity/sb/SbStopLog.java
  8. 1 1
      platform-dao/src/main/java/com/platform/dao/enums/RepairApplicationFormStopEnum.java
  9. 4 1
      platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbStatusLogVO.java
  10. 8 1
      platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbStopLogVO.java
  11. 5 1
      platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java
  12. 3 0
      platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml
  13. 5 1
      platform-dao/src/main/resources/mapper/sb/SbStatusLogMapper.xml
  14. 7 4
      platform-dao/src/main/resources/mapper/sb/SbStopLogMapper.xml
  15. 30 1
      platform-rest/src/main/java/com/platform/rest/controller/mobile/IgnoreController.java
  16. 15 1
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java
  17. 6 1
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbStatusLogController.java
  18. 5 0
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbStopLogController.java
  19. 13 7
      platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java
  20. 15 1
      platform-service/src/main/java/com/platform/service/sb/SbInfoService.java
  21. 7 1
      platform-service/src/main/java/com/platform/service/sb/SbStatusLogService.java
  22. 121 4
      platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java
  23. 82 0
      platform-service/src/main/java/com/platform/service/sb/impl/SbStatusLogServiceImpl.java
  24. 3 3
      platform-service/src/main/java/com/platform/service/sqarepartmanage/impl/SparePartInfoServiceImpl.java
  25. 3 3
      platform-service/src/main/java/com/platform/service/wechat/service/WeChatConnectService.java
  26. 25 3
      platform-service/src/main/java/com/platform/service/wechat/util/WeChatMessageUtil.java

+ 5 - 1
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairApplicationFormDTO.java

@@ -73,9 +73,13 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
     @Transient
     private String sbNo;
     /**
-     * 是否停机: 1-是 2-否
+     * 是否停机: 0-否 1-是
      */
     private Integer needStop;
+    /**
+     * 是否计划性维修:0:否,1是
+     */
+    private Integer planFlag;
     /**
      * 部件id
      */

+ 11 - 0
platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java

@@ -26,6 +26,17 @@ import java.util.List;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SbInfoDTO extends BaseDTO implements Serializable {
+    /**
+     * 状态变更原因
+     */
+    @Transient
+    private String changeReason;
+
+    /**
+     * 状态变更实际操作人姓名
+     */
+    @Transient
+    private String actualUser;
 
     /**
      * 验收单id

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/dto/sb/SbStatusLogDTO.java

@@ -20,7 +20,10 @@ import java.time.LocalDate;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SbStatusLogDTO extends BaseDTO implements Serializable {
-
+    /**
+     * 实际操作人姓名
+     */
+    private String actualUser;
       /**
      * id
      */

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/dto/sb/SbStopLogDTO.java

@@ -21,7 +21,10 @@ import java.math.BigDecimal;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SbStopLogDTO extends BaseDTO implements Serializable {
-
+    /**
+     * 实际操作人姓名
+     */
+    private String actualUser;
       /**
      * id
      */

+ 5 - 2
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java

@@ -53,9 +53,13 @@ public class RepairApplicationForm implements Serializable {
     @Transient
     private String sbCph;
     /**
-     * 是否计划性维修: 1-是 0-否
+     * 是否停机: 0-否 1-是
      */
     private Integer needStop;
+    /**
+     * 是否计划性维修:0:否,1是
+     */
+    private Integer planFlag;
     /**
      * 部件id
      */
@@ -106,7 +110,6 @@ public class RepairApplicationForm implements Serializable {
      * 维修结束时间
      */
     private LocalDateTime repairEndTime;
-
     /**
      * 派工时间
      */

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/entity/sb/SbStatusLog.java

@@ -39,6 +39,10 @@ public class SbStatusLog implements Serializable{
      * 变更原因
      */
     private String changeReason;
+    /**
+     * 实际操作人姓名
+     */
+    private String actualUser;
     /**
      * 变更人
      */

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/entity/sb/SbStopLog.java

@@ -44,6 +44,10 @@ public class SbStopLog implements Serializable{
      * 停用人
      */
     private String stopUserId;
+    /**
+     * 实际停用人姓名:废弃,使用id即可
+     */
+    private String actualUser;
     /**
      * 启用时间
      */
@@ -56,6 +60,7 @@ public class SbStopLog implements Serializable{
      * 启用人
      */
     private String startUserId;
+
     /**
      * 状态:0 未关闭,1关闭
      */

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

@@ -19,6 +19,6 @@ public enum RepairApplicationFormStopEnum {
     /**
      * 不停机
      */
-    NOT_STOP(2);
+    NOT_STOP(0);
     private final Integer value;
 }

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbStatusLogVO.java

@@ -21,7 +21,10 @@ import java.time.LocalDate;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SbStatusLogVO extends BaseVO implements Serializable{
-
+    /**
+     * 实际操作人姓名
+     */
+    private String actualUser;
     /**
      * id
      */

+ 8 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/sb/SbStopLogVO.java

@@ -22,7 +22,10 @@ import java.math.BigDecimal;
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SbStopLogVO extends BaseVO implements Serializable{
-
+    /**
+     * 实际操作人姓名
+     */
+    private String actualUser;
     /**
      * id
      */
@@ -59,6 +62,10 @@ private String stopUserId;
      * 启用时间
      */
 private LocalDateTime startTime;
+    /**
+     * 状态:0 未关闭,1关闭
+     */
+    private Integer status;
     /**
      * 启用原因
      */

+ 5 - 1
platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java

@@ -61,9 +61,13 @@ public class RepairApplicationFormVO extends BaseVO implements Serializable {
      */
     private String sbId;
     /**
-     * 是否停机: 1-是 2-否
+     * 是否停机: 0-否 1-是
      */
     private Integer needStop;
+    /**
+     * 是否计划性维修:0:否,1是
+     */
+    private Integer planFlag;
     /**
      * 部件id
      */

+ 3 - 0
platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml

@@ -39,6 +39,9 @@
             <if test="no != null and no != ''">
                 and application.no = #{no}
             </if>
+            <if test="planFlag != null and planFlag != ''">
+                and application.plan_flag = #{planFlag}
+            </if>
             <if test="status != null and status != ''">
                 and application.status = #{status}
             </if>

+ 5 - 1
platform-dao/src/main/resources/mapper/sb/SbStatusLogMapper.xml

@@ -5,6 +5,7 @@
                              sbStatusLog.id,
                                      sbStatusLog.sb_id,
                                      sbStatusLog.change_time,
+sbStatusLog.actual_user,
                                      sbStatusLog.change_reason,
                                      sbStatusLog.change_user_id,
                                      sbStatusLog.pre_status,
@@ -17,7 +18,7 @@
                         </sql>
     <sql id="Ref_Column_List">
                                                                          sbStatusLog.sb_id,
-                                     sbStatusLog.change_time,
+                                     sbStatusLog.change_time,sbStatusLog.actual_user,
                                      sbStatusLog.change_reason,
                                      sbStatusLog.change_user_id,
                                      sbStatusLog.pre_status,
@@ -46,6 +47,9 @@
                                                 <if test="afterStatus != null">
                     and sbStatusLog.after_status = #{afterStatus}
                 </if>
+        <if test="actualUser != null and actualUser != ''">
+            and sbStatusLog.actual_user like concat(concat('%',#{actualUser}),'%')
+        </if>
                                                 <if test="remark != null and remark != ''">
                     and sbStatusLog.remark = #{remark}
                 </if>

+ 7 - 4
platform-dao/src/main/resources/mapper/sb/SbStopLogMapper.xml

@@ -2,9 +2,9 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.platform.dao.mapper.sb.SbStopLogMapper">
     <sql id="Base_Column_List">
-                             sbStopLog.id,
+                             sbStopLog.id, sbStopLog.status,
                                      sbStopLog.sb_id,
-                                     sbStopLog.stop_time,
+                                     sbStopLog.stop_time,sbStopLog.actual_user,
                                      sbStopLog.stop_reason,
                                      sbStopLog.stop_user_id,
                                      sbStopLog.start_time,
@@ -18,9 +18,9 @@
                                      sbStopLog.update_time
                         </sql>
     <sql id="Ref_Column_List">
-                                                                         sbStopLog.sb_id,
+                                                                         sbStopLog.sb_id,sbStopLog.status,
                                      sbStopLog.stop_time,
-                                     sbStopLog.stop_reason,
+                                     sbStopLog.stop_reason,sbStopLog.actual_user,
                                      sbStopLog.stop_user_id,
                                      sbStopLog.start_time,
                                      sbStopLog.start_reason,
@@ -38,6 +38,9 @@
                                                 <if test="stopTime != null">
                     and sbStopLog.stop_time = #{stopTime}
                 </if>
+        <if test="actualUser != null and actualUser != ''">
+            and sbStopLog.actual_user like concat(concat('%',#{actualUser}),'%')
+        </if>
                                                 <if test="stopReason != null and stopReason != ''">
                     and sbStopLog.stop_reason = #{stopReason}
                 </if>

+ 30 - 1
platform-rest/src/main/java/com/platform/rest/controller/mobile/IgnoreController.java

@@ -10,6 +10,7 @@ import com.platform.common.validation.group.UpdateGroup;
 import com.platform.dao.dto.check.CheckJobDTO;
 import com.platform.dao.dto.repair.RepairApplicationFormDTO;
 import com.platform.dao.dto.sb.SbInfoDTO;
+import com.platform.dao.dto.sb.SbStatusLogDTO;
 import com.platform.dao.entity.sb.SbInfo;
 import com.platform.dao.enums.CheckJobStatusEnum;
 import com.platform.dao.enums.CheckStandardTypeEnum;
@@ -28,6 +29,7 @@ import com.platform.rest.log.annotation.SysLog;
 import com.platform.service.check.CheckJobService;
 import com.platform.service.repair.RepairApplicationFormService;
 import com.platform.service.sb.SbInfoService;
+import com.platform.service.sb.SbStatusLogService;
 import com.platform.service.upms.SysFileService;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -69,7 +71,8 @@ public class IgnoreController {
     private RepairApplicationFormService repairApplicationFormService;
     @Autowired
     private CheckJobService checkJobService;
-
+    @Autowired
+    private SbStatusLogService sbStatusLogService;
     /**
      * 通过id查询单条记录
      *
@@ -80,6 +83,19 @@ public class IgnoreController {
     public R<SbInfoVO> getById(@PathVariable("id") String id) {
         return new R<>(sbInfoService.getById(id));
     }
+
+    /**
+     * 更新设备状态等其他信息
+     *
+     * @param id 主键
+     * @return R
+     */
+    @PutMapping("/sb/status/{id}")
+    public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbInfoDTO sbInfoDTO) {
+        sbInfoService.updateStatus(sbInfoDTO);
+        return new R<>();
+    }
+
     /**
      * 更新设备图片
      *
@@ -92,6 +108,7 @@ public class IgnoreController {
         sbInfoService.modImagesByDTO(sbInfoDTO);
         return new R<>();
     }
+
     /**
      * 新增记录
      *
@@ -242,4 +259,16 @@ public class IgnoreController {
         }
         return R.success(fileVO, "上传成功");
     }
+
+    /**
+     * 新增记录
+     *
+     * @param sbStatusLogDTO 设备状态变更记录DTO
+     * @return R
+     */
+    @SysLog("新增设备状态变更记录")
+    @PostMapping("/sb/status-logs")
+    public R save(@Validated({AddGroup.class}) @RequestBody SbStatusLogDTO sbStatusLogDTO) {
+        return new R<>(sbStatusLogService.saveModelByDTOAndUserInfo(sbStatusLogDTO, null));
+    }
 }

+ 15 - 1
platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java

@@ -122,12 +122,26 @@ public class SbInfoController {
      */
     @SysLog("修改设备基础信息")
     @PutMapping("/{id}")
-    //@PreAuthorize("@pms.hasPermission('sb-infos-edit')")
+    @PreAuthorize("@pms.hasPermission('sb-infos-edit')")
     public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbInfoDTO sbInfoDTO) {
         sbInfoService.modModelByDTO(sbInfoDTO);
         return new R<>();
     }
 
+    /**
+     * 更新设备状态:位置等其他信息
+     *
+     * @param sbInfoDTO 设备基础信息DTO
+     * @return R
+     */
+    @SysLog("修改设备状态基础信息")
+    @PutMapping("/status/{id}")
+    @PreAuthorize("@pms.hasPermission('sb-infos-edit')")
+    public R updateStatus(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbInfoDTO sbInfoDTO) {
+        sbInfoService.updateStatus(sbInfoDTO);
+        return new R<>();
+    }
+
     /**
      * 更新设备图片
      *

+ 6 - 1
platform-rest/src/main/java/com/platform/rest/controller/sb/SbStatusLogController.java

@@ -1,6 +1,8 @@
 package com.platform.rest.controller.sb;
 
 import com.platform.common.util.R;
+import com.platform.common.util.SecurityUtils;
+import com.platform.common.util.StringUtils;
 import com.platform.dao.dto.sb.SbStatusLogDTO;
 import com.platform.dao.entity.sb.SbStatusLog;
 import com.platform.service.sb.SbStatusLogService;
@@ -54,7 +56,10 @@ public class SbStatusLogController {
   @PostMapping
   @PreAuthorize("@pms.hasPermission('sb-status-logs-add')")
   public R save(@Validated({AddGroup.class}) @RequestBody SbStatusLogDTO sbStatusLogDTO) {
-      return new R<>(sbStatusLogService.saveModelByDTO(sbStatusLogDTO));
+      if(StringUtils.isBlank(sbStatusLogDTO.getActualUser())){
+          sbStatusLogDTO.setActualUser(SecurityUtils.getUserInfo().getRealName());
+      }
+      return new R<>(sbStatusLogService.saveModelByDTOAndUserInfo(sbStatusLogDTO, SecurityUtils.getUserInfo()));
   }
 
   /**

+ 5 - 0
platform-rest/src/main/java/com/platform/rest/controller/sb/SbStopLogController.java

@@ -1,6 +1,8 @@
 package com.platform.rest.controller.sb;
 
 import com.platform.common.util.R;
+import com.platform.common.util.SecurityUtils;
+import com.platform.common.util.StringUtils;
 import com.platform.dao.dto.sb.SbStopLogDTO;
 import com.platform.dao.entity.sb.SbStopLog;
 import com.platform.service.sb.SbStopLogService;
@@ -54,6 +56,9 @@ public class SbStopLogController {
   @PostMapping
   @PreAuthorize("@pms.hasPermission('sb-stop-logs-add')")
   public R save(@Validated({AddGroup.class}) @RequestBody SbStopLogDTO sbStopLogDTO) {
+      if(StringUtils.isBlank(sbStopLogDTO.getActualUser())){
+          sbStopLogDTO.setActualUser(SecurityUtils.getUserInfo().getRealName());
+      }
       return new R<>(sbStopLogService.saveModelByDTO(sbStopLogDTO));
   }
 

+ 13 - 7
platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java

@@ -231,19 +231,20 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
 
         // 如果保修的设备位置和设备本身不一样,则可以更新该设备
         boolean updateSb = false;
-        SbInfo info = new SbInfo();
-        info.setId(sb.getId());
+        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_MAINTAIN.getValue());
+            info.setStatus(SbInfoStatusEnum.IN_STOP.getValue());
             updateSb = true;
         }
         if(updateSb){
-            sbInfoService.modModelByPrimaryKey(info);
+            info.setChangeReason("维修停机");
+            info.setActualUser(model.getActualUser());
+            sbInfoService.updateStatus(info);
         }
 
         model.setOutNo(model.getOutNo());
@@ -384,7 +385,7 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         // 如果保修的设备位置和设备本身不一样,则可以更新该设备
         boolean updateSb = false;
         SbInfoVO sb = sbInfoService.getById(model.getSbId());
-        SbInfo info = new SbInfo();
+        SbInfoDTO info = new SbInfoDTO();
         info.setId(model.getSbId());
         if(StringUtils.isBlank(sb.getCph()) || !model.getSbCph().equalsIgnoreCase((sb.getCph()))){
             info.setCph(model.getSbCph());
@@ -396,7 +397,8 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
             updateSb = true;
         }
         if(updateSb){
-            sbInfoService.modModelByPrimaryKey(info);
+            info.setChangeReason("维修停机");
+            sbInfoService.updateStatus(info);
         }
         this.saveFile(model);
         super.modModelByDTO(model);
@@ -553,6 +555,10 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         if(applicationForm.getRepairEndTime() == null){
             applicationForm.setRepairEndTime(LocalDateTime.now());
         }
+        if(dto.getRepairEndTime() != null){
+            applicationForm.setRepairEndTime(dto.getRepairEndTime());
+        }
+
         applicationForm.setRepairMinutes(DateUtils.getDurationMinutesStr(applicationForm.getRepairStartTime(), applicationForm.getRepairEndTime()));
         // 根据配置判断维修是否超时
         String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());

+ 15 - 1
platform-service/src/main/java/com/platform/service/sb/SbInfoService.java

@@ -20,6 +20,13 @@ import java.util.List;
  */
 public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
 
+    /**
+     * 根据主键更新属性不为null的值
+     *
+     * @param model
+     */
+    void modModelByDTOIgnore(SbInfoDTO model);
+
     /**
      * 选择父子两种类别,进行树形菜单构造
      *
@@ -133,7 +140,7 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
     /**
      * 根据编号查询
      *
-     * @param id :
+     * @param no :
      * @return :
      */
     SbInfoVO getScreenDetailByNo(String no);
@@ -196,6 +203,13 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
      */
     void updateTotalById(List<SbInfoDTO> modelList);
 
+    /**
+     * 改变设备状态
+     *
+     * @param model :
+     */
+    void updateStatus(SbInfoDTO model);
+
     /**
      * 设置设备部门组织架构
      *

+ 7 - 1
platform-service/src/main/java/com/platform/service/sb/SbStatusLogService.java

@@ -1,10 +1,13 @@
 package com.platform.service.sb;
 
+import com.platform.common.model.UserInfo;
 import com.platform.dao.vo.query.sb.SbStatusLogVO;
 import com.platform.dao.dto.sb.SbStatusLogDTO;
 import com.platform.dao.entity.sb.SbStatusLog;
 import com.platform.dao.bean.MyVOPage;
 import com.platform.service.base.IBaseService;
+import org.springframework.transaction.annotation.Transactional;
+
 import java.util.List;
 
 /**
@@ -15,7 +18,10 @@ import java.util.List;
  */
 public interface SbStatusLogService extends IBaseService<SbStatusLog, SbStatusLogDTO> {
 
-   /**
+    @Transactional(rollbackFor = Exception.class)
+    SbStatusLog saveModelByDTOAndUserInfo(SbStatusLogDTO model, UserInfo userInfo);
+
+    /**
     * 批量删除
     *
     * @param ids :

+ 121 - 4
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -180,11 +180,13 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateBatch(List<SbInfoVO> list) {
         mapper.updateBatch(list);
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateBatchValue(List<SbInfo> list) {
         mapper.updateBatchValue(list);
     }
@@ -497,6 +499,45 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
 
     }
 
+    @Override
+    public void modModelByDTOIgnore(SbInfoDTO model) {
+       /* SbModelVO sbModelVO = sbModelMapper.getById(model.getModelId());
+        if (sbModelVO == null) {
+            throw new BusinessException("找不到型号,modelID: " + model.getModelId());
+        }
+        model.setUnit(sbModelVO.getUnit());
+        model.setTypeId(sbModelVO.getTypeId());
+        model.setLevel(sbModelVO.getLevel());
+        model.setProducerId(sbModelVO.getProducerId());
+        model.setName(sbModelVO.getName());
+        model.setModel(sbModelVO.getModel());
+        model.setNameModel(sbModelVO.getNameModel());*/
+        if(model.getIsFinancing() == null){
+            model.setIsFinancing(SbInfoFinancingEnum.NOT.getValue());
+        }
+        if (model.getIsChild()==null) {
+            model.setIsChild(SbInfoChildEnum.IS_NORMAL.getValue());
+        }
+        if (model.getIsShow()==null) {
+            model.setIsChild(SbInfoShowEnum.NOT_SHOW.getValue());
+        }
+        if (model.getIsFinancing()==null) {
+            model.setIsFinancing(SbInfoFinancingEnum.NOT.getValue());
+        }
+        this.saveFile(model);
+        setSaveDept(model);
+        setSbStatusLogAndStopLogIgnore(model);
+        super.modModelByDTO(model);
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateStatus(SbInfoDTO model) {
+        setSbStatusLogAndStopLogIgnore(model);
+        super.modModelByDTO(model);
+    }
+
     @Override
     public void modImagesByDTO(SbInfoDTO model) {
         this.saveImageFile(model);
@@ -514,11 +555,16 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
             return;
         }
         UserInfo userInfo = SecurityUtils.getUserInfo();
+        String actualUser = model.getActualUser();
+        if(StringUtils.isBlank(actualUser)){
+            actualUser = sysUserMapper.selectByPrimaryKey(userInfo.getUserId()).getRealName();
+        }
         LocalDateTime now = LocalDateTime.now();
         SbStatusLog log = new SbStatusLog();
         log.setSbId(model.getId());
+        log.setActualUser(actualUser);
         log.setId(IdGeneratorUtils.getObjectId());
-        log.setChangeReason("");
+        log.setChangeReason(model.getChangeReason());
         log.setAfterStatus(model.getStatus());
         log.setPreStatus(old.getStatus());
         log.setChangeTime(now);
@@ -536,8 +582,8 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
             stopLog.setId(IdGeneratorUtils.getObjectId());
             stopLog.setSbId(model.getId());
             stopLog.setStopTime(now);
-            stopLog.setStopUserId(userInfo.getUserId());
-            stopLog.setStopReason("");
+            stopLog.setStopUserId(actualUser);
+            stopLog.setStopReason(model.getChangeReason());
             stopLog.setCreatedTime(now);
             stopLog.setCreatedUserId(userInfo.getUserId());
             stopLog.setUpdateTime(now);
@@ -555,8 +601,9 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
             if(stopLog == null){
                 return;
             }
-            stopLog.setStartUserId(userInfo.getUserId());
+            stopLog.setStartUserId(actualUser);
             stopLog.setStartTime(now);
+            stopLog.setStartReason(model.getChangeReason());
             stopLog.setStatus(1);
             stopLog.setStopDuration(new BigDecimal(DateUtils.getDurationMinutes(stopLog.getStopTime(), stopLog.getStartTime())));
             stopLog.setUpdateTime(now);
@@ -565,6 +612,75 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         }
     }
 
+    /**
+     *  如果是未登录的时候,变更了状态,需要记录状态变更表,人员默认都是管理员操作的
+     *  如果是启用,则要更新停机记录表数据
+     *
+     * @param model
+     */
+    private void setSbStatusLogAndStopLogIgnore(SbInfoDTO model) {
+        SbInfo old = mapper.selectByPrimaryKey(model.getId());
+        if(old.getStatus() != null && old.getStatus().equals(model.getStatus())){
+            return;
+        }
+        String userId = model.getSaveUser();
+        String actualUser = model.getActualUser();
+        if(StringUtils.isBlank(actualUser)){
+            actualUser = sysUserMapper.selectByPrimaryKey(userId).getRealName();
+        }
+        LocalDateTime now = LocalDateTime.now();
+        SbStatusLog log = new SbStatusLog();
+        log.setSbId(model.getId());
+        log.setId(IdGeneratorUtils.getObjectId());
+        log.setChangeReason(model.getChangeReason());
+        log.setActualUser(actualUser);
+        log.setAfterStatus(model.getStatus());
+        log.setPreStatus(old.getStatus());
+        log.setChangeTime(now);
+        log.setChangeUserId(userId);
+        log.setCreatedTime(now);
+        log.setCreatedUserId(userId);
+        log.setUpdateTime(now);
+        log.setUpdateUserId(userId);
+        log.setRemark("");
+        sbStatusLogMapper.insert(log);
+
+        // 新增停机记录
+        if(model.getStatus() !=null && model.getStatus().equals(SbInfoStatusEnum.IN_STOP.getValue())){
+            SbStopLog stopLog = new SbStopLog();
+            stopLog.setStopUserId(actualUser);
+            stopLog.setId(IdGeneratorUtils.getObjectId());
+            stopLog.setSbId(model.getId());
+            stopLog.setStopTime(now);
+            stopLog.setStopReason(model.getChangeReason());
+            stopLog.setCreatedTime(now);
+            stopLog.setCreatedUserId(userId);
+            stopLog.setUpdateTime(now);
+            stopLog.setStatus(0);
+            stopLog.setUpdateUserId(userId);
+            sbStopLogMapper.insert(stopLog);
+        }
+
+        // 更新开机记录,并记录时长
+        if(model.getStatus() !=null && model.getStatus().equals(SbInfoStatusEnum.IN_USE.getValue())) {
+            Weekend<SbStopLog> weekend = new Weekend<>(SbStopLog.class);
+            weekend.weekendCriteria().andEqualTo(SbStopLog::getSbId, model.getId()).andEqualTo(SbStopLog::getStatus, 0);
+            SbStopLog stopLog = sbStopLogMapper.selectOneByExample(weekend);
+            // 创建新的记录,直接跳过,不记录了
+            if(stopLog == null){
+                return;
+            }
+            stopLog.setStartUserId(actualUser);
+            stopLog.setStartTime(now);
+            stopLog.setStartReason(model.getChangeReason());
+            stopLog.setStatus(1);
+            stopLog.setStopDuration(new BigDecimal(DateUtils.getDurationMinutes(stopLog.getStopTime(), stopLog.getStartTime())));
+            stopLog.setUpdateTime(now);
+            stopLog.setUpdateUserId(userId);
+            sbStopLogMapper.updateByPrimaryKey(stopLog);
+        }
+    }
+
     /**
      * 设置当前归属部门
      *
@@ -1615,6 +1731,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         this.modModelByDTO(sbInfoDTO);
     }
 
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void submitScrapAudit(SbInfoDTO sbInfoDTO) {

+ 82 - 0
platform-service/src/main/java/com/platform/service/sb/impl/SbStatusLogServiceImpl.java

@@ -1,8 +1,20 @@
 package com.platform.service.sb.impl;
 import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.model.UserInfo;
+import com.platform.common.util.DateUtils;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.SecurityUtils;
 import com.platform.dao.bean.MyPage;
 import com.platform.dao.bean.MyVOPage;
 import com.github.pagehelper.PageHelper;
+import com.platform.dao.entity.sb.SbInfo;
+import com.platform.dao.entity.sb.SbStopLog;
+import com.platform.dao.entity.upms.SysUser;
+import com.platform.dao.enums.SbInfoStatusEnum;
+import com.platform.dao.mapper.sb.SbInfoMapper;
+import com.platform.dao.mapper.sb.SbStopLogMapper;
+import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.vo.query.sb.SbStatusLogVO;
 import com.platform.dao.dto.sb.SbStatusLogDTO;
 import com.platform.dao.entity.sb.SbStatusLog;
@@ -10,10 +22,14 @@ import com.platform.dao.mapper.sb.SbStatusLogMapper;
 import com.platform.service.sb.SbStatusLogService;
 import org.springframework.stereotype.Service;
 import com.platform.service.base.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
 import lombok.AllArgsConstructor;
 
+import javax.persistence.Transient;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -26,6 +42,72 @@ import java.util.List;
 @Service("sbStatusLogService")
 public class SbStatusLogServiceImpl extends BaseServiceImpl<SbStatusLogMapper, SbStatusLog, SbStatusLogDTO> implements SbStatusLogService {
 
+    private final SbInfoMapper sbInfoMapper;
+    private final SysUserMapper sysUserMapper;
+    private final SbStatusLogMapper sbStatusLogMapper;
+    private final SbStopLogMapper sbStopLogMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public SbStatusLog saveModelByDTOAndUserInfo(SbStatusLogDTO model, UserInfo userInfo ) {
+        LocalDateTime now = LocalDateTime.now();
+
+        String userId = null;
+        String realName = null;
+        if(userInfo == null){
+            SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(model.getSbId());
+            SysUser sysUser = sysUserMapper.selectByPrimaryKey(sbInfo.getSaveUser());
+            userId = sysUser.getUserId();
+            realName = sysUser.getRealName();
+        }else{
+            userId = userInfo.getUserId();
+            realName = userInfo.getRealName();
+        }
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setId(model.getSbId());
+        sbInfo.setStatus(model.getAfterStatus());
+        sbInfo.setUpdateTime(now);
+        sbInfo.setUpdateUserId(userId);
+        sbInfo.setUpdateUserName(realName);
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+
+        SbStatusLog sbStatusLog = super.saveModelByDTO(model);
+        // 新增停机记录
+        if(model.getAfterStatus() !=null && model.getAfterStatus().equals(SbInfoStatusEnum.IN_STOP.getValue())){
+            SbStopLog stopLog = new SbStopLog();
+            stopLog.setStopUserId(model.getActualUser());
+            stopLog.setId(IdGeneratorUtils.getObjectId());
+            stopLog.setSbId(model.getSbId());
+            stopLog.setStopTime(now);
+            stopLog.setStopReason(model.getChangeReason());
+            stopLog.setCreatedTime(now);
+            stopLog.setCreatedUserId(userId);
+            stopLog.setUpdateTime(now);
+            stopLog.setStatus(0);
+            stopLog.setUpdateUserId(userId);
+            sbStopLogMapper.insert(stopLog);
+        }
+
+        // 更新停机记录中的开机记录,并记录时长;如果存在多条,选择最新的一条
+        if(model.getAfterStatus() !=null && model.getAfterStatus().equals(SbInfoStatusEnum.IN_USE.getValue())) {
+            Weekend<SbStopLog> weekend = new Weekend<>(SbStopLog.class);
+            weekend.weekendCriteria().andEqualTo(SbStopLog::getSbId, model.getSbId()).andEqualTo(SbStopLog::getStatus, 0);
+            SbStopLog stopLog = sbStopLogMapper.selectOneByExample(weekend);
+            // 创建新的记录,直接跳过,不记录了
+            if(stopLog != null){
+                stopLog.setStartUserId(model.getActualUser());
+                stopLog.setStartTime(now);
+                stopLog.setStartReason(model.getChangeReason());
+                stopLog.setStatus(1);
+                stopLog.setStopDuration(new BigDecimal(DateUtils.getDurationMinutes(stopLog.getStopTime(), stopLog.getStartTime())));
+                stopLog.setUpdateTime(now);
+                stopLog.setUpdateUserId(userId);
+                sbStopLogMapper.updateByPrimaryKey(stopLog);
+            }
+        }
+        return sbStatusLog;
+    }
+
     @Override
     public int batchDelete(List<String> ids) {
         Weekend<SbStatusLog> weekend = new Weekend<>(SbStatusLog.class);

+ 3 - 3
platform-service/src/main/java/com/platform/service/sqarepartmanage/impl/SparePartInfoServiceImpl.java

@@ -413,9 +413,9 @@ public class SparePartInfoServiceImpl extends BaseServiceImpl<SparePartInfoMappe
 
         Weekend<SparePartInfo> weekend = new Weekend<>(SparePartInfo.class);
         weekend.weekendCriteria().andEqualTo(SparePartInfo::getName, model.getName()).andEqualTo(SparePartInfo::getGgxh, model.getGgxh());
-        SparePartInfo checkInfo = mapper.selectOneByExample(weekend);
-        if(checkInfo != null  && !checkInfo.getId().equals(model.getId())){
-            throw new BusinessException("同名称同规格的备件已存在,请重新设置");
+        int count = mapper.selectCountByExample(weekend);
+        if(count > 1){
+            throw new BusinessException("同名称同规格的备件已存在,请重新设置名称或者规格");
         }
         this.saveFile(model);
 

+ 3 - 3
platform-service/src/main/java/com/platform/service/wechat/service/WeChatConnectService.java

@@ -38,10 +38,10 @@ public class WeChatConnectService {
    // public static final String ACCESS_TOKEN = "wwwqykh2009com";
    // private static final String APPID = "wx6e063fb37c1ba333";
     //   private static final String APPSECRET = "e74b6b4d7582ed12b141c62e7737af20";
-    // 微信token,把这个配置到微信:消息推送平台Token(令牌), 重庆建设集团
+    // 微信token,把这个配置到微信:消息推送平台Token(令牌), 乾元坤和科技的服务号
     public static final String ACCESS_TOKEN = "wwwqykh2009com";
-    private static final String APPID = "wx43364e4c23c5a89d";
-    private static final String APPSECRET = "MXTCTc6QzahLKuKwvRyh4jFHgCdwdkhKBiNhPEpvQHn";
+    private static final String APPID = "wx38f46845be704faa";
+    private static final String APPSECRET = "9bt1F6ojLU6JLv76Boo4qaeEU6PcW75nGjjLyauDtAF";
 
     //  private static final String APPID = DictCache.getLabelByValue(DictTypeEnum.WECHAT.getType(), CommonConstants.WECHAT_APP_ID);
     //   private static final String APPSECRET = DictCache.getLabelByValue(DictTypeEnum.WECHAT.getType(), CommonConstants.WECHAT_APP_ID);

+ 25 - 3
platform-service/src/main/java/com/platform/service/wechat/util/WeChatMessageUtil.java

@@ -23,7 +23,10 @@ import java.time.LocalDateTime;
 public class WeChatMessageUtil {
     private static String url = "http://h5.demo.qykh2009.com/";
     private static String template_id_login = "ckoOKCyzY4cMBznwhfabNwpVBLK3cqxQdvEnAeV-Nwk";
-    private static String template_id_repair = "njA6sdMf0EPi1k8iruwe2aw0miH6q-0AvB_GCEyzJpE";
+    private static String template_id_repair = "0dnkGN5y0SkKjc2zjKvzxkTv7O1QIWbekrY2h9HyK_4";
+    // 移动端跳转的维修单地址:跳转到小程序的
+    private static String repair_url = "https://rl.m.litian2017.com/#/pages/service/service?filter=0";
+
     private static boolean isSend() {
         String isSend = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.IS_SEND_WX_MESSAGE.name());
         return "1".equals(isSend);
@@ -53,6 +56,22 @@ public class WeChatMessageUtil {
 
     /**
      * 报修微信通知
+     * 你有一条新的设备故障提醒
+     * 报修人:陈家财
+     * 报修事项:电脑
+     * 报修时间:2019年5月28日 18:36
+     * 报修地址:白云路
+     * 故障描述:电脑蓝屏
+     * 请尽快处理!
+     *
+     * 详细内容
+     * {{first.DATA}}
+     * 报修人:{{keyword1.DATA}}
+     * 报修事项:{{keyword2.DATA}}
+     * 报修时间:{{keyword3.DATA}}
+     * 报修地址:{{keyword4.DATA}}
+     * 故障描述:{{keyword5.DATA}}
+     * {{remark.DATA}}
      *
      * @param url
      * @param model
@@ -60,6 +79,9 @@ public class WeChatMessageUtil {
      */
     public static void repairMessage(String openId, String url, RepairApplicationFormDTO model, SbInfoVO vo) {
         try {
+            if(StringUtils.isBlank(url)){
+                url = repair_url;
+            }
             if (isSend() && StringUtils.isNotBlank(openId)) {
                 String systemName = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.SYSTEM_NAME.name());
                 if (StringUtils.isBlank(systemName)) {
@@ -71,11 +93,11 @@ public class WeChatMessageUtil {
                                 openId,
                                 new String[]{
                                         "有新的报修消息等待您接收",
-                                        vo.getNo(),
                                         model.getActualUser(),
+                                        vo.getNo() + "(" + vo.getName() + ")",
                                         DateUtils.dateToString(model.getApplyTime()),
+                                        model.getSbCph(),
                                         model.getContent(),
-                                        vo.getName()
                                 }, new String[]{"#000000",
                                         "#000000", "#000000", "#000000", "#000000", "#000000" });
                 SpringContextHolder.publishEvent(new WechatEvent(request));