ソースを参照

Merge branch 'feature-bieao' of lift-manager/lift-server into develop

bieao 5 年 前
コミット
e53899f5a4

+ 13 - 0
lift-batch-service/src/main/java/cn/com/ty/lift/batch/applet/dao/mapper/ProjectMapper.java

@@ -0,0 +1,13 @@
+package cn.com.ty.lift.batch.applet.dao.mapper;
+
+import cn.com.ty.lift.batch.applet.dao.model.Project;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author bieao
+ * @date 2020/2/9
+ * @description 项目数据层
+ */
+public interface ProjectMapper extends BaseMapper<Project> {
+
+}

+ 157 - 0
lift-batch-service/src/main/java/cn/com/ty/lift/batch/applet/dao/model/Project.java

@@ -0,0 +1,157 @@
+package cn.com.ty.lift.batch.applet.dao.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 实体类 - 表:project
+ * @author bieao
+ * @since 2019-11-28 15:52:37
+ */
+@Data
+public class Project {
+
+    /**
+     * 项目ID
+     */
+    @TableId(value = "id",type = IdType.ID_WORKER)
+    private Long id;
+
+    /**
+     * 维保公司ID
+     */
+    private Long mtCompanyId;
+
+    /**
+     * 甲方公司ID
+     */
+    private Long ppCompanyId;
+
+    /**
+     * 甲方联系人ID
+     */
+    private Long ppContactId;
+
+    /**
+     * 项目编号
+     */
+    private String projectCode;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 省编码
+     */
+    private String provinceCode;
+
+    /**
+     * 省
+     */
+    private String province;
+
+    /**
+     * 市编码
+     */
+    private String cityCode;
+
+    /**
+     * 市
+     */
+    private String city;
+
+    /**
+     * 区编码
+     */
+    private String districtCode;
+
+    /**
+     * 区
+     */
+    private String district;
+
+    /**
+     * 项目地址
+     */
+    private String address;
+
+    /**
+     * 台量
+     */
+    private Integer num;
+
+    /**
+     * 实际台量
+     */
+    private Integer actualNum;
+
+    /**
+     * 用途 1.住宅2.办公楼3.医院4.商场5.工厂6.酒店7.交通枢纽8.学校9.剧场10.其他
+     */
+    private String projectUsage;
+
+    /**
+     * 开始时间
+     */
+    private LocalDate startDate;
+
+    /**
+     * 结束时间
+     */
+    private LocalDate endDate;
+
+    /**
+     * 状态  0:删除 1:尚未开始(项目开始日期晚于系统日期);2:服务中(系统日期在项目开始和结束日期之间,包括相等) 3:停止服务 4.逾期
+     */
+    private String projectStatus;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /**
+     * 是否锁定 0否 1是
+     */
+    private Integer locked;
+
+    /**
+     * 评价方式 0是默认 24  1天后自动评价 48  48小时候默认好评
+     */
+    private Integer evaluate;
+
+    /**
+     * 停止服务描述
+     */
+    private String endRemarks;
+
+    /**
+     * 维保班长编辑电梯负责人权限  0否1是
+     */
+    private Integer ifMonitor;
+
+    /**
+     * 维保工查看所有电梯权限 0否 1是
+     */
+    private Integer allProject;
+
+    /**
+     * 区域ID
+     */
+    private Long regionId;
+    /**
+     * 是否保存
+     */
+    private Integer save;
+
+    /**
+     * 项目停止时间
+     */
+    private LocalDateTime stopTime;
+}

+ 46 - 0
lift-batch-service/src/main/java/cn/com/ty/lift/batch/applet/service/ProjectService.java

@@ -0,0 +1,46 @@
+package cn.com.ty.lift.batch.applet.service;
+
+import cn.com.ty.lift.batch.applet.dao.mapper.ProjectMapper;
+import cn.com.ty.lift.batch.applet.dao.model.Project;
+import cn.com.ty.lift.common.constants.CommonEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author bieao
+ * @date 2020/2/10
+ * @description 项目业务层
+ */
+@Service
+@Slf4j
+public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
+
+    /**
+     * @return 项目列表
+     * @description 查询项目列表
+     * @date 2020/2/9 4:02 下午
+     */
+    public List<Project> queryProjectList() {
+        LambdaQueryWrapper<Project> lambdaQueryWrapper = new QueryWrapper<Project>().lambda();
+        lambdaQueryWrapper.lt(Project::getEndDate, LocalDate.now());
+        lambdaQueryWrapper.ne(Project::getProjectStatus, CommonEnum.ProjectStatus.OVERDUE.getCode());
+        return list(lambdaQueryWrapper);
+    }
+
+    /**
+     * @param list 项目列表
+     * @description 更新项目状态
+     * @date 2020/2/10 4:16 下午
+     */
+    public void updateBatch(List<Project> list) {
+        list.forEach(project -> project.setProjectStatus(CommonEnum.ProjectStatus.OVERDUE.getCode()));
+        updateBatchById(list, list.size());
+        log.info("批量更新项目状态" + list.size() + "条");
+    }
+}

+ 39 - 0
lift-batch-service/src/main/java/cn/com/ty/lift/batch/quartz/ProjectStatusQuartzJob.java

@@ -0,0 +1,39 @@
+package cn.com.ty.lift.batch.quartz;
+
+import cn.com.ty.lift.batch.applet.dao.model.Project;
+import cn.com.ty.lift.batch.applet.service.ProjectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author bieao
+ * @date 2020/2/9
+ * @description 批量更新项目状态
+ */
+@Slf4j
+@Component
+@Configuration
+@EnableScheduling
+public class ProjectStatusQuartzJob {
+
+    @Resource
+    private ProjectService projectService;
+
+    /**
+     * @description 批量更新项目状态
+     * @date 2020/2/10 11:26 上午
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void modifyProjectStatus() {
+        log.info("开始执行批量更新项目状态");
+        List<Project> projects = projectService.queryProjectList();
+        projectService.updateBatch(projects);
+        log.info("批量更新项目状态执行成功");
+    }
+}

+ 0 - 2
lift-batch-service/src/main/resources/application.yml

@@ -1,7 +1,5 @@
 server:
   port: 20231
-  tomcat:
-    basedir: /Users/huangyuan/application/tomcat/data/tomcat_temp
 
 spring:
   application:

+ 149 - 6
lift-batch-service/src/main/resources/logback-spring.xml

@@ -1,8 +1,151 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--debug="true" : 打印 logback 内部状态(默认当 logback 运行出错时才会打印内部状态 ), 配置该属性后打印条件如下(同时满足):
+    1、找到配置文件
+    2、配置文件是一个格式正确的xml文件 也可编程实现打印内部状态,
+    例如: LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); -->
+<!-- scan="true" : 自动扫描该配置文件,若有修改则重新加载该配置文件 -->
+<!-- scanPeriod="30 seconds" : 配置自动扫面时间间隔
+    (单位可以是:milliseconds, seconds, minutes or hours,默认为:milliseconds),
+    默认为1分钟,scan="true"时该配置才会生效 -->
+<!--https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd-->
+<configuration
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd"
+        debug="false" scan="true" scanPeriod="30 seconds">
 
-<configuration debug="false" scan="false">
-    <include resource="cn/com/xwy/boot/logging/logback/defaults.xml"/>
-    <!-- Level: ALL > TRACE > FATAL > DEBUG > INFO > WARN > ERROR > OFF -->
-    <Logger name="cn.com.ty.lift" level="DEBUG"/>
-    <root level="info"/>
-</configuration>
+    <property name="PROJECT" value="lift-batch-service"/>
+    <property name="ROOT" value="logs/${PROJECT}/"/>
+    <property name="FILE_SIZE" value="10MB"/>
+    <property name="MAX_HISTORY" value="100"/>
+    <property name="LOG_WIDTH" value="30"/>
+    <timestamp key="DATETIME" datePattern="yyyy-MM-dd HH:mm"/>
+    <!-- 控制台打印 -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!--是否支持ANSI color codes(类似linux中的shell脚本的输出字符串颜色控制代码)。默认为false。如果设置为true。例如:[31m 代表将前景色设置成红色。-->
+        <!--在windows中,需要提供"org.fusesource.jansi:jansi:1.9",而在linux,mac os x中默认支持。-->
+        <withJansi>true</withJansi>
+        <encoder charset="utf-8">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
+            <!--"%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray", "%boldRed","%boldGreen", -->
+            <!--"%boldYellow", "%boldBlue", "%boldMagenta""%boldCyan", "%boldWhite" and "%highlight"-->
+            <pattern>%highlight([%-5level]) %highlight(%d{${DATETIME}}) %cyan([%thread]) %boldMagenta(%logger{${LOG_WIDTH}}) - %m%n
+            </pattern>
+        </encoder>
+    </appender>
+    <!-- ERROR 输入到文件,按日期和文件大小 -->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder charset="utf-8">
+            <pattern>[%-5level] %d{${DATETIME}} %logger{${LOG_WIDTH}} - %m%n
+            </pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${ROOT}%d/error.%i.log</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+
+    <!-- WARN 输入到文件,按日期和文件大小 -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder charset="utf-8">
+            <pattern>[%-5level] %d{${DATETIME}} %logger{${LOG_WIDTH}} - %m%n
+            </pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${ROOT}%d/warn.%i.log</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+
+    <!-- INFO 输入到文件,按日期和文件大小 -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder charset="utf-8">
+            <pattern>[%-5level] %d{${DATETIME}} %logger{${LOG_WIDTH}} - %m%n
+            </pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${ROOT}%d/info.%i.log</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <!-- DEBUG 输入到文件,按日期和文件大小 -->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder charset="utf-8">
+            <pattern>[%-5level] %d{${DATETIME}} %logger{${LOG_WIDTH}} - %m%n
+            </pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${ROOT}%d/debug.%i.log</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <!-- TRACE 输入到文件,按日期和文件大小 -->
+    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder charset="utf-8">
+            <pattern>[%-5level] %d{${DATETIME}} %logger{${LOG_WIDTH}} - %m%n
+            </pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>TRACE</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${ROOT}%d/trace.%i.log</fileNamePattern>
+            <maxHistory>${MAX_HISTORY}</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy
+                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>${FILE_SIZE}</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+
+    <!-- SQL相关日志输出-->
+    <logger name="org.apache.ibatis" level="INFO" additivity="true"/>
+    <logger name="org.mybatis.spring" level="INFO" additivity="false"/>
+    <logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false"/>
+
+    <!-- Logger 根目录 -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+        <appender-ref ref="DEBUG"/>
+        <appender-ref ref="ERROR"/>
+        <appender-ref ref="WARN"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="TRACE"/>
+    </root>
+</configuration>

+ 4 - 2
lift-business-service/src/main/java/cn/com/ty/lift/business/contract/controller/ContractController.java

@@ -1,6 +1,5 @@
 package cn.com.ty.lift.business.contract.controller;
 
-import cn.com.ty.lift.business.contract.dao.entity.Contracts;
 import cn.com.ty.lift.business.contract.dao.entity.ContractsExtend;
 import cn.com.ty.lift.business.contract.dao.entity.ContractsHistory;
 import cn.com.ty.lift.business.contract.dao.entity.model.*;
@@ -11,7 +10,10 @@ import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 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.validation.Valid;

+ 5 - 1
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenancePlanService.java

@@ -88,6 +88,8 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
     }
 
     /**
+     * @param planList 需生成维保计划的电梯列表
+     * @param firstTime 首保时间
      * @return 判断结果
      * @description 新增维保计划前置判断条件
      * @date 2020/1/9 3:56 下午
@@ -151,7 +153,9 @@ public class MaintenancePlanService extends ServiceImpl<MaintenancePlanMapper, M
             Optional<Project> project = projects.stream().filter(p -> p.getId().equals(plan.getProjectId())).findFirst();
             if (project.isPresent()) {
                 Project entry = project.get();
-                planList.addAll(generatePlan(plan, periods, interval, firstTime, entry.getEndDate()));
+                //项目结束时间默认增加三个月
+                LocalDate endDate = entry.getEndDate().plusMonths(3);
+                planList.addAll(generatePlan(plan, periods, interval, firstTime,endDate));
             }
         });
         //更新项目电梯关联表中电梯的首保时间和保养间隔