浏览代码

1.生成维保计划24期重置
2.修改项目结束时间,重新生成维保计划
3.项目电梯导出修改

别傲 4 年之前
父节点
当前提交
eeac802ce4

+ 16 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/mapper/MaintenancePlanMapper.java

@@ -59,6 +59,22 @@ public interface MaintenancePlanMapper extends BaseMapper<MaintenancePlan> {
     @Select("SELECT count FROM maintenance_plan WHERE id = #{planId}")
     Long getCountByPlanId(Long planId);
 
+    @Select("Select max(work_date) from maintenance_plan where project_id = #{projectId} and mt_company_id = #{mtCompanyId} and status = '1'")
+    LocalDate queryWorkDateByProjectId(Long projectId, Long mtCompanyId);
+
+    @Select("SELECT max(work_date) AS workDate,\n" +
+            "       lift_id        AS liftId,\n" +
+            "       mt_company_id  AS mtCompanyId,\n" +
+            "       worker_id      AS workerId,\n" +
+            "       project_id     AS projectId,\n" +
+            "       count\n" +
+            "FROM maintenance_plan\n" +
+            "WHERE mt_company_id = #{mtCompanyId}\n" +
+            "  AND project_id = #{projectId}\n" +
+            "  AND status = 1\n" +
+            "GROUP BY project_id, lift_id")
+    List<MaintenancePlan> queryMaxWorkDatePlanList(Long mtCompanyId, Long projectId);
+
     @Select("select (select value from global_set where company_id = #{mtCompanyId}  and code = 'sameUnits') >" +
             "       (select count(*) from maintenance_record where mt_company_id=#{mtCompanyId} and (worker_id1 = #{workerId1}) and status = '1' and DATE_FORMAT(work_date, '%Y-%m-%d') = #{today})")
     boolean selectLiftMaintainableBy(Long workerId1, Long mtCompanyId, String today);

+ 50 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenancePlanService.java

@@ -45,6 +45,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
@@ -262,6 +263,25 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         }
     }
 
+    /**
+     * @param mtCompanyId 公司id
+     * @param projectId 项目id
+     * @param interval 维保间隔
+     * @param endDate 项目结束时间
+     * @return 是否成功
+     * @description 修改项目结束时间生成维保计划
+     * @date 2020/12/14 7:14 下午
+     */
+    public boolean modifyProjectGeneratePlan(Long mtCompanyId, Long projectId, int interval, LocalDate endDate) {
+        List<MaintenancePlan> plans = baseMapper.queryMaxWorkDatePlanList(mtCompanyId, projectId);
+        List<MaintenancePlan> planList = new ArrayList<>();
+        plans.forEach(plan -> {
+            LocalDateTime workDate = plan.getWorkDate();
+            planList.addAll(generatePlan(plan, plan.getCount(), interval, workDate.toLocalDate(), endDate));
+        });
+        return saveBatch(planList, planList.size());
+    }
+
     /**
      * @param request 需要保养的电梯
      * @return List<MaintenancePlan> 维保计划列表
@@ -351,6 +371,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
             entry.setCount(periods);
             log.info("第{}期,类型:{},计划时间:{}", periods, entry.getType(), entry.getPlanDate());
             periods++;
+            if (periods == 25) {
+                periods = 1;
+            }
             planList.add(entry);
         }
         return planList;
@@ -672,4 +695,31 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
         lambdaQueryWrapper.notIn(MaintenancePlan::getStatus, Arrays.asList(-1, 3));
         return page(page, lambdaQueryWrapper);
     }
+
+
+    /**
+     * 根据项目id和公司id查询项目最近一次维保记录
+     *
+     * @param projectId   项目id
+     * @param mtCompanyId 公司id
+     * @return
+     */
+    public LocalDate queryWorkDateByProjectId(Long projectId, Long mtCompanyId) {
+        return baseMapper.queryWorkDateByProjectId(projectId, mtCompanyId);
+    }
+
+    /**
+     * 根据项目id和公司id查询项目下未完成计划
+     *
+     * @param projectId
+     * @param mtCompanyId
+     * @return
+     */
+    public List<MaintenancePlan> queryLiftListByProjectId(Long projectId, Long mtCompanyId) {
+        LambdaQueryWrapper<MaintenancePlan> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(MaintenancePlan::getProjectId, projectId);
+        lambdaQueryWrapper.eq(MaintenancePlan::getMtCompanyId, mtCompanyId);
+        lambdaQueryWrapper.eq(MaintenancePlan::getStatus, 0);
+        return list(lambdaQueryWrapper);
+    }
 }

+ 8 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/project/service/ProjectLiftRelevanceService.java

@@ -404,6 +404,14 @@ public class ProjectLiftRelevanceService extends ServiceImpl<ProjectLiftRelevanc
         return removeByMap(columnMap);
     }
 
+    public List<ProjectLiftRelevance> queryPlanInterval(Long projectId, Long mtCompanyId) {
+        QueryWrapper<ProjectLiftRelevance> queryWrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<ProjectLiftRelevance> lambda = queryWrapper.lambda();
+        lambda.eq(ProjectLiftRelevance::getMtCompanyId, mtCompanyId);
+        lambda.eq(ProjectLiftRelevance::getProjectId, projectId);
+        return list(lambda);
+    }
+
     /**
      * @param projectId   项目id
      * @param mtCompanyId 公司id

+ 39 - 12
lift-business-service/src/main/java/cn/com/ty/lift/business/project/service/ProjectService.java

@@ -90,25 +90,28 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
     private Map<String, String> projectHeadsMap = new LinkedHashMap<String, String>() {{
         put("projectCode", "项目编号");
         put("projectName", "项目名称");
-        put("province", "省份");
-        put("city", "市");
-        put("district", "区");
-        put("num", "台量");
-        put("actualNum", "系统台量");
+        put("companyName", "甲方全称");
         put("address", "项目地址");
-        put("startDate", "开始时间");
-        put("endDate", "结束时间");
+        put("areaName", "所属区域");
+        put("name", "区域主管");
+        put("liftNum", "签约台量");
+        put("startDate", "合同生效日");
+        put("endDate", "合同结束日");
+        put("diff", "超期天数");
     }};
 
     private Map<String, String> liftHeadsMap = new LinkedHashMap<String, String>() {{
         put("projectName", "项目名称");
         put("registrationCode", "注册代码");
         put("liftType", "电梯类型");
-        put("devicePosition", "电梯位置");
+        put("province", "省");
+        put("city", "市");
+        put("district", "区");
+        put("useCompanyCode", "电梯内部编号");
         put("liftBrand", "电梯品牌");
-        put("workerName", "维保工");
+        put("layerStationDoor", "层站");
         put("annualInspectionDate", "年检日期");
-        put("liftStatus", "电梯状态");
+        put("liftCompanyStatus", "电梯状态");
     }};
 
     /**
@@ -469,16 +472,40 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
      */
     @Transactional(rollbackFor = Exception.class)
     public RestResponse modify(Project project) {
-        Optional<Project> oldProject = getOne(project.getId());
+        Long projectId = project.getId();
+        Long mtCompanyId = project.getMtCompanyId();
+        Optional<Project> oldProject = getOne(projectId);
         if (!oldProject.isPresent())
             return RestResponse.fail(MessageUtils.get("msg.project.not.exist"));
+        LocalDate maxWorkDate = maintenancePlanService.queryWorkDateByProjectId(projectId,mtCompanyId );
+        LocalDate endDate = project.getEndDate();
+        Project entry = oldProject.get();
+        //结束时间不应早于最近一次维保记录
+        if (endDate.isBefore(maxWorkDate)) {
+            return RestResponse.fail(MessageUtils.get("msg.end.date.error"));
+            //结束时间比最近一次维保记录晚的话,维保计划相应按照新结束时间往后推三个月
+        } else {
+            List<MaintenancePlan> planList = maintenancePlanService.queryLiftListByProjectId(projectId, mtCompanyId);
+            boolean result = maintenancePlanService.removeByIds(planList);
+            if (!result)
+                return RestResponse.fail(MessageUtils.get("msg.delete.fail"));
+            List<ProjectLiftRelevance> list = projectLiftRelevanceService.queryPlanInterval(projectId, mtCompanyId);
+            int planInterval = 0;
+            if (Objects.nonNull(list)) {
+                planInterval = list.get(0).getPlanInterval();
+            }
+            //项目结束时间默认增加三个月
+            endDate = entry.getEndDate().plusMonths(3);
+            boolean ret = maintenancePlanService.modifyProjectGeneratePlan(mtCompanyId, projectId, planInterval, endDate);
+            if (!ret)
+                return RestResponse.fail(MessageUtils.get("msg.add.fail"));
+        }
         log.debug("维护项目状态");
         this.setProjectStatus(project, oldProject.get().getProjectStatus());
         project.setUpdateDate(LocalDateTime.now());
         boolean result = updateById(project);
         if (!result)
             return RestResponse.fail(MessageUtils.get("msg.modify.fail"));
-        Project entry = oldProject.get();
         //生成项目操作记录
         ProjectHistory history = projectHistoryService.createOperaHistory(entry, project, project.getMtCompanyId());
         if (Objects.nonNull(history)) {

+ 2 - 1
lift-business-service/src/main/resources/locale/response.properties

@@ -38,4 +38,5 @@ msg.contract.not.exist=\u5408\u540C\u4E0D\u5B58\u5728
 msg.maintenance.plan.not.exist=\u7EF4\u4FDD\u8BA1\u5212\u4E0D\u5B58\u5728
 msg.capital.not.sign.record=\u8BE5\u9879\u76EE\u8FD8\u6CA1\u6709\u7B7E\u5230\u8BB0\u5F55
 msg.longitude.error=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u7ECF\u7EAC\u5EA6
-msg.list.relevance.exist=\u7EF4\u4FDD\u5DE5\u6709\u76F8\u5173\u7535\u68AF\u4E0D\u80FD\u79FB\u9664
+msg.list.relevance.exist=\u7EF4\u4FDD\u5DE5\u6709\u76F8\u5173\u7535\u68AF\u4E0D\u80FD\u79FB\u9664
+msg.end.date.error=\u7ED3\u675F\u65F6\u95F4\u4E0D\u5E94\u65E9\u4E8E\u6700\u8FD1\u4E00\u6B21\u7EF4\u4FDD\u8BB0\u5F55

+ 38 - 32
lift-business-service/src/main/resources/mapper/project/ProjectMapper.xml

@@ -282,17 +282,21 @@
 	</select>
 
 	<select id="exportList" resultType="java.util.Map" parameterType="java.util.List">
-		SELECT 	project_code AS projectCode,
-				project_name AS projectName,
-				province     AS province,
-				city         AS city,
-				district     AS district,
-				num          AS num,
-				actual_num   AS actualNum,
-				address      AS address,
-				DATE_FORMAT(start_date,'%Y-%m-%d') AS startDate,
-				DATE_FORMAT(end_date,'%Y-%m-%d') AS endDate
-		FROM project
+		SELECT  p.project_code AS projectCode,
+				p.project_name AS projectName,
+				mc.name        AS companyName,
+				p.address      AS address,
+				r.area_name    AS areaName,
+				ui.name        AS name,
+				c.lift_num     AS liftNum,
+				c.star_date    AS startDate,
+				c.end_date     AS endDate,
+				if(datediff(now(), c.end_date) &lt; 0, '未超期', datediff(now(), c.end_date)) diff
+		FROM project p
+				LEFT JOIN region r ON p.region_id = r.id
+				LEFT JOIN user_info ui ON r.user_id = ui.user_id
+				LEFT JOIN maintenance_company mc ON p.mt_company_id = mc.id
+				LEFT JOIN contracts c ON p.id = c.project_id
 		<where>
 			<if test="exportList != null and exportList.size > 0">
 				id IN
@@ -304,27 +308,29 @@
 	</select>
 
 	<select id="exportLiftList" resultType="java.util.Map" parameterType="java.util.List">
-		SELECT  p.project_name           AS projectName,
-				l.registration_code      AS registrationCode,
-				if(l.lift_type = 1, '直梯', '扶梯') AS liftType,
-				l.device_position        AS devicePosition,
-				lb.name                  AS liftBrand,
-				l.annual_inspection_date AS annualInspectionDate,
-				CASE pclr.lift_company_status
-				WHEN '1' THEN '停保'
-				WHEN '2' THEN '正常'
-				WHEN '3' THEN '保养中'
-				WHEN '4' THEN '维修中'
-				WHEN '5' THEN '年检中'
-				WHEN '6' THEN '大修中'
-				END AS liftStatus,
-				ui.name                  AS workerName
-		FROM project_lift_relevance plr
-		LEFT JOIN project p ON plr.project_id = p.id
-		LEFT JOIN lift l ON plr.lift_id = l.id
-		LEFT JOIN lift_brand lb ON l.lift_brand = lb.code
-		LEFT JOIN user_info ui ON plr.worker_id = ui.user_id
-		LEFT JOIN platform_company_lift_relevance pclr ON plr.lift_id = pclr.lift_id AND pclr.id = plr.relevance_id
+		SELECT DISTINCT p.project_name                  AS projectName,
+						l.registration_code             AS registrationCode,
+						if(l.lift_type = 1, '直梯', '扶梯') AS liftType,
+						p.province,
+						p.city,
+						p.district,
+						l.use_company_code              AS useCompanyCode,
+						lb.name                         AS liftBrand,
+						l.layer_station_door            AS layerStationDoor,
+						annual_inspection_date          AS annualInspectionDate,
+						CASE pclr.lift_company_status
+							WHEN '1' THEN '停保'
+							WHEN '2' THEN '正常'
+							WHEN '3' THEN '保养中'
+							WHEN '4' THEN '维修中'
+							WHEN '5' THEN '年检中'
+							WHEN '6' THEN '大修中'
+						END                         AS liftCompanyStatus
+		FROM lift l
+				LEFT JOIN project_lift_relevance plr ON l.id = plr.lift_id
+				LEFT JOIN project p ON plr.project_id = p.id
+				LEFT JOIN platform_company_lift_relevance pclr ON l.id = pclr.lift_id
+				LEFT JOIN lift_brand lb ON l.lift_brand = lb.code
 		<where>
 			<if test="exportLiftList != null and exportLiftList.size > 0">
 				plr.project_id IN