Jelajahi Sumber

bug修复(无法修改和制定计划)

yang 4 tahun lalu
induk
melakukan
7935c731e1

+ 22 - 10
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/MaintenanceController.java

@@ -11,16 +11,20 @@ import cn.com.ty.lift.common.verify.Val;
 import cn.com.ty.lift.common.verify.Validation;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author bieao
  * @date 2019/12/12
- @description 维保管理控制层*
+ * @description 维保管理控制层*
  */
 @RestController
 @RequestMapping("maintenance")
@@ -77,14 +81,22 @@ public class MaintenanceController {
      * @date 2019/12/16 2:36 PM
      */
     @PostMapping("modify/plan")
-    @Validation(fields = {"mtCompanyId", "projectId", "relevanceId", "liftId", "workerId", "periods"})
+    @Validation(fields = {"mtCompanyId", "projectId", "relevanceId", "liftId", "workerId",})
     public RestResponse modifyPlan(@Val @RequestBody MaintenancePlanRequest request) {
-        boolean result = maintenancePlanService.modifyPlan(request);
-        if (result) {
-            return RestResponse.success(null, MessageUtils.get("msg.modify.success"));
-        } else {
-            return RestResponse.fail(MessageUtils.get("msg.modify.fail"));
+
+//
+//        boolean result = maintenancePlanService.modifyPlan(request);
+//        if (result) {
+//            return RestResponse.success(null, MessageUtils.get("msg.modify.success"));
+//        } else {
+//            return RestResponse.fail(MessageUtils.get("msg.modify.fail"));
+//        }
+//
+        RestResponse restResponse = maintenancePlanService.revisePlan(request);
+        if (Objects.nonNull(restResponse)) {
+            return restResponse;
         }
+        return RestResponse.fail(MessageUtils.get("msg.modify.fail"));
     }
 
     /**
@@ -112,7 +124,7 @@ public class MaintenanceController {
      */
     @PostMapping("export/plan")
     public void export(@RequestBody ExportRequest request, HttpServletResponse response) {
-        maintenancePlanService.export(request,response);
+        maintenancePlanService.export(request, response);
     }
 
     /**
@@ -123,7 +135,7 @@ public class MaintenanceController {
      */
     @PostMapping("plan/print")
     @Validation(fields = {"mtCompanyId", "liftList", "beginTime"})
-    public RestResponse printPlan(@Val @RequestBody MaintenancePlanRequest request){
+    public RestResponse printPlan(@Val @RequestBody MaintenancePlanRequest request) {
         List<MaintenancePlanPrintResponse> detailList = maintenancePlanService.planPrint(request);
         return RestResponse.success(detailList, MessageUtils.get("msg.query.success"));
     }

+ 166 - 44
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenancePlanService.java

@@ -6,6 +6,7 @@ import cn.com.ty.lift.business.framework.util.MessageUtils;
 import cn.com.ty.lift.business.library.dao.entity.Lift;
 import cn.com.ty.lift.business.library.service.LiftService;
 import cn.com.ty.lift.business.maintenance.dao.entity.MaintenancePlan;
+import cn.com.ty.lift.business.maintenance.dao.entity.MaintenanceRecord;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.MaintenancePlanRequest;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.MtPlanRequest;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.LiftPrintResponse;
@@ -69,6 +70,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     @Resource
     private CommonMapper commonMapper;
 
+    @Resource
+    private MaintenanceRecordService maintenanceRecordService;
+
     @Resource
     private ProjectLiftRelevanceService projectLiftRelevanceService;
 
@@ -106,7 +110,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         return baseMapper.findByCondition(request.getPage(), request);
     }
 
-    public List<Map<String,String>> exportList(List<String> ids){
+    public List<Map<String, String>> exportList(List<String> ids) {
         return baseMapper.exportList(ids);
     }
 
@@ -128,7 +132,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     }
 
     /**
-     * @param planList 需生成维保计划的电梯列表
+     * @param planList  需生成维保计划的电梯列表
      * @param firstTime 首保时间
      * @return 判断结果
      * @description 新增维保计划前置判断条件
@@ -154,14 +158,14 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     }
 
     /**
-     * @param liftId 电梯ID
-     * @param projectId 项目ID
+     * @param liftId      电梯ID
+     * @param projectId   项目ID
      * @param mtCompanyId 公司ID
-     * @param interval 保养间隔
-     * @param planDate 保养时间
-     * @param type 保养类型
-     * @param liftCharge 电梯负责人
-     * @param operator 操作人
+     * @param interval    保养间隔
+     * @param planDate    保养时间
+     * @param type        保养类型
+     * @param liftCharge  电梯负责人
+     * @param operator    操作人
      * @return
      * @description 生成保养计划消息推送
      * @date 2020/5/5 9:26 下午
@@ -183,21 +187,21 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
             ProjectDetailResponse detail = projectAppService.detail(projectId);
             Optional<Lift> lift = liftService.getOne(null, liftId);
             lift.ifPresent(l ->
-                PushMessage.maintainCreatePlan(detail.getAreaName(), detail.getProjectName(), l.getDevicePosition(),
-                        l.getRegistrationCode(), interval, planDate, type, liftCharge, operator).sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos));
+                    PushMessage.maintainCreatePlan(detail.getAreaName(), detail.getProjectName(), l.getDevicePosition(),
+                            l.getRegistrationCode(), interval, planDate, type, liftCharge, operator).sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos));
         }
     }
 
     /**
-     * @param liftId 电梯ID
-     * @param projectId 项目ID
+     * @param liftId      电梯ID
+     * @param projectId   项目ID
      * @param mtCompanyId 公司ID
-     * @param interval 保养间隔
-     * @param planDate 保养时间
-     * @param type 保养类型
-     * @param liftCharge 电梯负责人
-     * @param operator 操作人
-     * @param workerId 维保工
+     * @param interval    保养间隔
+     * @param planDate    保养时间
+     * @param type        保养类型
+     * @param liftCharge  电梯负责人
+     * @param operator    操作人
+     * @param workerId    维保工
      * @return
      * @description 修改保养计划消息推送
      * @date 2020/5/8 10:25 上午
@@ -231,6 +235,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
      * @description 批量生成维保计划
      * @date 2019/12/16 2:14 PM
      */
+    // FIXME: 2021/2/20 电梯制定计划count值有问题
     public RestResponse insertBatch(MaintenancePlanRequest request) {
         String demand = request.getDemand();
         if ("0".equals(demand)) {
@@ -265,9 +270,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param mtCompanyId 公司id
-     * @param projectId 项目id
+     * @param projectId   项目id
      * @param intervalMap 维保间隔map
-     * @param endDate 项目结束时间
+     * @param endDate     项目结束时间
      * @return 是否成功
      * @description 修改项目结束时间生成维保计划
      * @date 2020/12/14 7:14 下午
@@ -324,9 +329,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     }
 
     /**
-     * @param interval 保养间隔
+     * @param interval  保养间隔
      * @param beginTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      * @return 期数
      * @description 获取维保计划生成期数
      * @date 2020/1/8 8:11 下午
@@ -339,11 +344,11 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     }
 
     /**
-     * @param plan 维保计划
-     * @param periods 期数
-     * @param interval 保养间隔
+     * @param plan      维保计划
+     * @param periods   期数
+     * @param interval  保养间隔
      * @param beginTime 开始时间
-     * @param endTime 结束时间
+     * @param endTime   结束时间
      * @return 维保计划列表
      * @description 生成维保计划
      * @date 2020/1/8 8:20 下午
@@ -388,8 +393,8 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param currentTime 当前时间
-     * @param liftId 电梯id
-     * @param projectId 项目id
+     * @param liftId      电梯id
+     * @param projectId   项目id
      * @param mtCompanyId 公司id
      * @return List<MaintenancePlan> 维保计划列表
      * @description 查询当前时间之后的维保计划
@@ -412,7 +417,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param mtCompanyId 公司id
-     * @param liftId 电梯id
+     * @param liftId      电梯id
      * @return 维保计划列表
      * @description 获取当前期数后的维保计划列表
      * @date 2020/1/8 10:33 上午
@@ -422,7 +427,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         LambdaQueryWrapper<MaintenancePlan> lambdaQueryWrapper = queryWrapper.lambda();
         lambdaQueryWrapper.eq(MaintenancePlan::getMtCompanyId, mtCompanyId);
         lambdaQueryWrapper.eq(MaintenancePlan::getLiftId, liftId);
-        lambdaQueryWrapper.eq(MaintenancePlan::getStatus,0);
+        lambdaQueryWrapper.eq(MaintenancePlan::getStatus, 0);
         lambdaQueryWrapper.ge(MaintenancePlan::getCount, periods);
         return list(lambdaQueryWrapper);
     }
@@ -433,7 +438,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
      * @description 修改维保计划
      * @date 2019/12/16 5:25 PM
      */
+    // fixme: 2021/2/20   修改计划有问题
     @Transactional(rollbackFor = Exception.class)
+    @SuppressWarnings("all")
     public boolean modifyPlan(MaintenancePlanRequest request) {
         //获取公司id
         Long mtCompanyId = request.getMtCompanyId();
@@ -473,6 +480,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         boolean isNull = ObjectUtil.isEmpty(currentTime) && ObjectUtil.isEmpty(updateTime);
         List<MaintenancePlan> planList;
         List<MaintenancePlan> plans = new ArrayList<>();
+
+
+        //Situation1 修改维保计划日期,但是维保间隔不变
         if (isNotNull && ObjectUtil.isEmpty(updateInterval)) {
             //获取当前时间后的维保计划列表,并清除计划
             planList = findPlanList(liftId, projectId, mtCompanyId, currentTime, "plan");
@@ -481,6 +491,8 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
                 //按照修改时间重新生成计划
                 plans = generatePlan(plan, periods, interval, updateTime, endDate);
             } else return false;
+
+            //situation2  维保计划日期不变,但是维保间隔改变
         } else if (isNull && ObjectUtil.isNotEmpty(updateInterval)) {
             //获取当前期数后的维保计划列表,并清除计划
             planList = findPlanList(mtCompanyId, liftId, periods);
@@ -491,6 +503,8 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
                 projectLiftRelevanceService.modify(relevance);
                 plans = generatePlan(plan, periods, updateInterval, planDate, endDate);
             } else return false;
+
+            //situation3 同时修改
         } else if (isNotNull && ObjectUtil.isNotEmpty(updateInterval)) {
             //获取当前期数后的维保计划列表,并清除计划
             planList = findPlanList(mtCompanyId, liftId, periods);
@@ -512,7 +526,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param mtCompanyId 公司id
-     * @param liftList 电梯id列表
+     * @param liftList    电梯id列表
      * @return 是否成功
      * @description 批量清除维保计划
      * @date 2019/12/28 2:00 PM
@@ -527,7 +541,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param mtCompanyId 公司id
-     * @param liftList 电梯id列表
+     * @param liftList    电梯id列表
      * @return List<MaintenancePlan> 维保计划列表
      * @description 根据公司id和电梯id列表获取维保计划
      * @date 2020/5/23 3:58 下午
@@ -582,8 +596,8 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * @param mtCompanyId 公司id
-     * @param liftIdList 电梯id列表
-     * @param beginTime 开始时间
+     * @param liftIdList  电梯id列表
+     * @param beginTime   开始时间
      * @return List<LiftPrintResponse> 电梯维保计划列表
      * @description 根据公司id和电梯id列表查询维保计划列表,并组装电梯列表数据
      * @date 2020/3/2 4:39 下午
@@ -646,26 +660,28 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
             project.setLiftList(liftPrintResponses);
             project.setNum(project.getLiftList().size());
         }
-     return projectList;
+        return projectList;
     }
 
     /**
      * 根据条件分页查询 维保计划-超期计划
-     * @author wcz
+     *
      * @param request MtPlanRequest
      * @return IPage<MtPlanResponse>
+     * @author wcz
      */
-    public IPage<MtPlanResponse> pagePlanByCondition(MtPlanRequest request){
-        return baseMapper.pagePlanByCondition(request.getPage(),request);
+    public IPage<MtPlanResponse> pagePlanByCondition(MtPlanRequest request) {
+        return baseMapper.pagePlanByCondition(request.getPage(), request);
     }
 
     /**
      * 根据条件统计 维保计划-超期计划
-     * @author wcz
+     *
      * @param request MtPlanRequest
      * @return long
+     * @author wcz
      */
-    public long countPlanByCondition(MtPlanRequest request){
+    public long countPlanByCondition(MtPlanRequest request) {
         return baseMapper.countPlanByCondition(request);
     }
 
@@ -681,11 +697,12 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
 
     /**
      * 根据条件统计 维保计划-超期计划
-     * @author wcz
+     *
      * @param limit 条数
      * @return List<MaintenancePlan>
+     * @author wcz
      */
-    public boolean updateOverduePlan(int limit){
+    public boolean updateOverduePlan(int limit) {
         LambdaUpdateWrapper<MaintenancePlan> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
         lambdaUpdateWrapper.lt(MaintenancePlan::getPlanDate, LocalDate.now());
         lambdaUpdateWrapper.isNull(MaintenancePlan::getWorkDate);
@@ -695,7 +712,7 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         return update(lambdaUpdateWrapper);
     }
 
-    public IPage<MaintenancePlan> pageOverduePlan(IPage<MaintenancePlan> page){
+    public IPage<MaintenancePlan> pageOverduePlan(IPage<MaintenancePlan> page) {
         LambdaQueryWrapper<MaintenancePlan> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.lt(MaintenancePlan::getPlanDate, LocalDate.now());
         lambdaQueryWrapper.isNull(MaintenancePlan::getWorkDate);
@@ -729,4 +746,109 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         lambdaQueryWrapper.eq(MaintenancePlan::getStatus, 0);
         return list(lambdaQueryWrapper);
     }
+
+
+    /**
+     * 修改计划  重新写的接口
+     *
+     * @param request
+     * @return
+     */
+    @SuppressWarnings("all")
+    @Transactional(rollbackFor = Exception.class)
+    public RestResponse revisePlan(MaintenancePlanRequest request) {
+
+        //判断是否传入时间
+        if (Objects.isNull(request.getUpdateTime()) || Objects.isNull(request.getCurrentTime())) {
+            return RestResponse.fail("必须修改维保日期!");
+        }
+        //根据电梯维当前保计划时间查询维保计划时候存在
+        MaintenancePlan maintenancePlan = baseMapper.selectOne(new QueryWrapper<MaintenancePlan>()
+                .lambda()
+                .eq(MaintenancePlan::getLiftId, request.getLiftId())
+                .eq(MaintenancePlan::getMtCompanyId, request.getMtCompanyId())
+                .eq(MaintenancePlan::getProjectId, request.getProjectId())
+                .eq(MaintenancePlan::getPlanDate, request.getCurrentTime())
+                .last("limit 1"));
+        if (Objects.isNull(maintenancePlan)) {
+            return RestResponse.fail("计划的当前时间未查询到计划!");
+        }
+        //判断当前维保计划的电梯是否有保养记录
+        MaintenanceRecord maintenanceRecord = maintenanceRecordService.getBaseMapper().selectOne(
+                new QueryWrapper<MaintenanceRecord>()
+                        .lambda()
+                        .eq(MaintenanceRecord::getMtCompanyId, request.getMtCompanyId())
+                        .eq(MaintenanceRecord::getLiftId, request.getLiftId())
+                        .eq(MaintenanceRecord::getMtPlanId, maintenancePlan.getId())
+                        .last("limit 1")
+        );
+        if (Objects.nonNull(maintenanceRecord)) {
+            return RestResponse.fail("当前计划时间的电梯已经产生保养或正在保养,无法重新修改计划!");
+        }
+        //获取项目的结束时间
+        Project project = projectService.getBaseMapper().selectById(request.getProjectId());
+        if (Objects.isNull(project)) {
+            return RestResponse.fail("当前电梯未查询到项目,无法重新修改计划!");
+        }
+        //项目结束时间默认增加三个月
+        LocalDate endDate = project.getEndDate().plusMonths(3);
+        //取出当前时间上一次的维保计划
+        MaintenancePlan lastMaintenancePlan = baseMapper.selectOne(
+                new QueryWrapper<MaintenancePlan>()
+                        .lambda()
+                        .eq(MaintenancePlan::getMtCompanyId, request.getMtCompanyId())
+                        .eq(MaintenancePlan::getLiftId, request.getLiftId())
+                        .lt(MaintenancePlan::getPlanDate, request.getCurrentTime())
+                        .orderByDesc(MaintenancePlan::getPlanDate)
+                        .last("limit 1"));
+        if (Objects.isNull(lastMaintenancePlan)) {
+            return RestResponse.fail("未找到上一次的维保计划,无法修改计划!");
+        }
+
+        //删除当前时间以后的全部维保计划
+        baseMapper.delete(new QueryWrapper<MaintenancePlan>()
+                .lambda()
+                .eq(MaintenancePlan::getMtCompanyId, request.getMtCompanyId())
+                .eq(MaintenancePlan::getLiftId, request.getLiftId())
+                .eq(MaintenancePlan::getProjectId, request.getProjectId())
+                .ge(MaintenancePlan::getPlanDate, request.getCurrentTime()));
+
+        //维保间隔判断
+        if (Objects.nonNull(request.getInterval())) {
+            //更新维保间隔 写入
+            ProjectLiftRelevance relevance = new ProjectLiftRelevance();
+            relevance.setId(request.getRelevanceId());
+            relevance.setPlanInterval(request.getInterval());
+            projectLiftRelevanceService.modify(relevance);
+        } else {
+            //查出维保间隔
+            request.setInterval(projectLiftRelevanceService.getBaseMapper().selectById(request.getRelevanceId()).getPlanInterval());
+        }
+
+        //生成新的计划,根据上一次的计划得到下次的count值
+        Integer count = lastMaintenancePlan.getCount();
+        if (count == null) {
+            count = 0;
+        }
+        count++;
+        if (count > 24) {
+            count = count % 24;
+        }
+        if (count == 24) {
+            count = 1;
+        }
+
+        List<MaintenancePlan> plans = generatePlan(lastMaintenancePlan, count, request.getInterval(), request.getUpdateTime(), endDate);
+        //批量保存
+        saveBatch(plans);
+
+        MaintenancePlan newPlan = plans.get(0);
+        String workerName = commonMapper.queryUserNameById(request.getWorkerId());
+        String creatorName = commonMapper.queryUserNameById(newPlan.getCreatorId());
+        //发送修改计划消息推送
+        sendModifyMessage(request.getLiftId(), request.getProjectId(), request.getMtCompanyId(), request.getInterval(), newPlan.getPlanDate(), newPlan.getType(), workerName, creatorName, request.getWorkerId());
+
+        return RestResponse.success(null, "修改计划成功!");
+    }
+
 }