Browse Source

Merge remote-tracking branch 'origin/20210223' into 20210223

wangyangyang 4 years ago
parent
commit
7d5c345b09
65 changed files with 2311 additions and 26 deletions
  1. 8 0
      common/src/main/java/com/huaxu/util/DatesUtil.java
  2. 15 0
      common/src/main/java/com/huaxu/util/IntegerUtil.java
  3. 3 0
      operation_manager/src/main/java/com/huaxu/OperationManagerMain.java
  4. 6 0
      operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java
  5. 89 0
      operation_manager/src/main/java/com/huaxu/config/AsyncConfig.java
  6. 6 0
      operation_manager/src/main/java/com/huaxu/config/FeignConfig.java
  7. 10 0
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationGradeController.java
  8. 10 4
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultController.java
  9. 46 0
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultDetailsController.java
  10. 45 0
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultReportController.java
  11. 39 0
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultTaskDetailsController.java
  12. 2 1
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationItemMapper.java
  13. 32 0
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultDetailsMapper.java
  14. 33 0
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultMapper.java
  15. 29 0
      operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultTaskMapper.java
  16. 25 0
      operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationDetailsDto.java
  17. 36 0
      operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultDetailsDto.java
  18. 26 0
      operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultDto.java
  19. 3 1
      operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultQueryDto.java
  20. 42 0
      operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultUpdateDto.java
  21. 1 0
      operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultDetailsEntity.java
  22. 3 0
      operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultEntity.java
  23. 4 4
      operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultTaskEntity.java
  24. 25 0
      operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationCycleEnums.java
  25. 26 0
      operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationResultStatus.java
  26. 336 0
      operation_manager/src/main/java/com/huaxu/evaluation/job/EvaluationResultJob.java
  27. 10 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationGradeService.java
  28. 29 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultDetailsService.java
  29. 26 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultTaskDetailsService.java
  30. 48 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationGradeServiceImpl.java
  31. 97 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultDetailsServiceImpl.java
  32. 86 2
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultServiceImpl.java
  33. 56 0
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultTaskDetailsServiceImpl.java
  34. 32 0
      operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationItemValueVo.java
  35. 46 0
      operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationItemVo.java
  36. 36 0
      operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultDetailsVo.java
  37. 69 0
      operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultTaskDetailsVo.java
  38. 21 6
      operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultVo.java
  39. 46 0
      operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java
  40. 3 0
      operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java
  41. 3 0
      operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java
  42. 6 0
      operation_manager/src/main/java/com/huaxu/order/dto/StatisticsDto.java
  43. 9 0
      operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java
  44. 21 1
      operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java
  45. 204 0
      operation_manager/src/main/java/com/huaxu/utils/EvaluationUtil.java
  46. 36 0
      operation_manager/src/main/java/com/huaxu/utils/OperactionStringUtils.java
  47. 12 0
      operation_manager/src/main/resources/application-dev.properties
  48. 11 0
      operation_manager/src/main/resources/application-prd.properties
  49. 11 0
      operation_manager/src/main/resources/application-sit.properties
  50. 35 0
      operation_manager/src/main/resources/mapper/evaluation/EvaluationItemMapper.xml
  51. 21 0
      operation_manager/src/main/resources/mapper/evaluation/EvaluationResultDetailsMapper.xml
  52. 49 0
      operation_manager/src/main/resources/mapper/evaluation/EvaluationResultMapper.xml
  53. 57 0
      operation_manager/src/main/resources/mapper/evaluation/EvaluationResultTaskMapper.xml
  54. 23 4
      operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
  55. 0 1
      operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml
  56. 15 1
      readme.md
  57. 9 0
      sms_water/src/main/java/com/huaxu/controller/SceneController.java
  58. 1 0
      sms_water/src/main/java/com/huaxu/dao/SceneMapper.java
  59. 4 0
      sms_water/src/main/java/com/huaxu/service/SceneService.java
  60. 91 0
      sms_water/src/main/resources/mapper/SceneMapper.xml
  61. 1 1
      user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java
  62. 48 0
      user_center/src/main/java/com/huaxu/controller/VerManageController.java
  63. 23 0
      user_center/src/main/java/com/huaxu/dao/VerManageMapper.java
  64. 65 0
      user_center/src/main/java/com/huaxu/entity/VerManageEntity.java
  65. 51 0
      user_center/src/main/java/com/huaxu/service/VerManageService.java

+ 8 - 0
common/src/main/java/com/huaxu/util/DatesUtil.java

@@ -593,6 +593,14 @@ public class DatesUtil {
 		return newDate;
 	}
 
+	public static Date addMinuteOfDate(Date date,int i){
+		Calendar c = Calendar.getInstance();
+		c.setTime(date);
+		c.add(Calendar.MINUTE, i);
+		Date newDate = c.getTime();
+		return newDate;
+	}
+
 	public static LocalDate parseLocalDate(Date date){
 		Instant instant =  date.toInstant();
 		ZoneId zoneId = ZoneId.systemDefault();

+ 15 - 0
common/src/main/java/com/huaxu/util/IntegerUtil.java

@@ -0,0 +1,15 @@
+package com.huaxu.util;
+
+/**
+ * @ClassName IntegerUtil
+ * @Description: TODO
+ * @Author lihui
+ * @Date 2021/5/8
+ * @Version V1.0
+ **/
+public class IntegerUtil {
+
+    public static boolean isNullOrZero(Integer integer){
+         return integer == null || integer == 0;
+    }
+}

+ 3 - 0
operation_manager/src/main/java/com/huaxu/OperationManagerMain.java

@@ -7,6 +7,8 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -15,6 +17,7 @@ import java.net.UnknownHostException;
 @SpringBootApplication
 @EnableFeignClients
 @Slf4j
+@EnableAsync
 public class OperationManagerMain {
     public static void main(String[] args) throws UnknownHostException {
         ApplicationContext context = SpringApplication.run(OperationManagerMain.class, args);

+ 6 - 0
operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java

@@ -52,6 +52,12 @@ public interface UserCenterClient {
     @RequestMapping(value = "/dict/selectList", method = RequestMethod.POST)
     AjaxMessage<List<Dict>> selectDictList(@RequestBody Dict dict);
 
+    @PostMapping(value = "/user/findUserIdsByPermissonOrg")
+    List<Integer> findUserIdsByPermissonOrg(
+            @RequestParam(value = "tenantId", required = false) String tenantId,
+            @RequestParam(value = "companyOrgId", required = false)Integer companyOrgId,
+            @RequestParam(value = "deptOrgId", required = false)Integer deptOrgId);
+
     /**
      * 查询该时间内的运维人数
      */

+ 89 - 0
operation_manager/src/main/java/com/huaxu/config/AsyncConfig.java

@@ -0,0 +1,89 @@
+package com.huaxu.config;
+
+import com.alibaba.fastjson.JSON;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@Slf4j
+@Data
+public class AsyncConfig implements AsyncConfigurer {
+
+    /**
+     * 核心线程池大小
+     */
+    @Value("${aysnc.pool.core-size}")
+    private Integer coreSize;
+    /**
+     * 最大线程池大小
+     */
+    @Value("${aysnc.pool.max-size}")
+    private Integer maxSize;
+    /**
+     * 线程池队列容量(默认Integer.MAX_VALUE)
+     */
+    @Value("${aysnc.queue-capacity}")
+    private Integer queueCapacity;
+    /**
+     * 线程池空闲时长(秒)
+     */
+    @Value("${aysnc.pool.keep-alive}")
+    private Integer keepAlive;
+    /**
+     * 线程池名称
+     */
+    @Value("${aysnc.thread-name-prefix}")
+    private String threadNamePrefix;
+
+    /**
+     * 配置异步线程池
+     *
+     * @return
+     */
+    @Override
+    public Executor getAsyncExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(getCoreSize());
+        executor.setMaxPoolSize(getMaxSize());
+        //queueCapacity Integer.Max= 21 4748 3647
+        executor.setQueueCapacity(getQueueCapacity());
+        executor.setThreadNamePrefix(getThreadNamePrefix());
+        executor.setKeepAliveSeconds(getKeepAlive());
+        /** 拒绝异常处理 - 在调用线程中执行(当线程池中线程都以被占用且queue已满,则拒绝新提交的task,
+         * 默认为ThreadPoolExecutor.AbortPolicy抛出异常到上层应用 - 导致异步调用死掉,无法再处理新任务,
+         * 此处实现照搬ThreadPoolExecutor.CallerRunsPolicy且添加日志记录
+         *
+        executor.setRejectedExecutionHandler((r, e) -> {
+            log.error("Async thread pool over load - caller run - queue.size={} - 请devops人员考虑扩展服务实例", e.getQueue().size());
+            if (!e.isShutdown()) {
+                r.run();
+            }
+        });*/
+        // 设置拒绝策略:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        //如果不初始化,导致找到不到执行器(此语句需放到最后)
+        executor.initialize();
+        return executor;
+    }
+
+    /**
+     * 异步线程池 - 全局异常处理
+     *
+     * @return
+     */
+    @Override
+    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+        return (ex, method, params) -> {
+            log.info("Async method: {} has uncaught exception, params:{}", method.getName(), JSON.toJSONString(params), ex);
+        };
+    }
+}

+ 6 - 0
operation_manager/src/main/java/com/huaxu/config/FeignConfig.java

@@ -19,7 +19,13 @@ public class FeignConfig implements RequestInterceptor {
     @Override
     public void apply(RequestTemplate requestTemplate) {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (attributes == null) {
+            return;
+        }
         HttpServletRequest request = attributes.getRequest();
+        if (request == null) {
+            return;
+        }
         requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
     }
 }

+ 10 - 0
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationGradeController.java

@@ -10,11 +10,13 @@ import com.huaxu.util.UserUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.ui.ModelMap;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -130,4 +132,12 @@ public class EvaluationGradeController {
             return new AjaxMessage<>(ResultStatus.OK, result);
         }
     }
+
+    @ApiOperation(value = "获取绩效等级")
+    @RequestMapping(value = "/getScoreGrade", method = RequestMethod.POST)
+    public AjaxMessage<String> getScoreGrade(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId,
+                                         @ApiParam(value = "租户ID", required = true) @RequestParam Integer companyOrgId,
+                                         @ApiParam(value = "租户ID", required = true) @RequestParam BigDecimal score) {
+        return new AjaxMessage<>(ResultStatus.OK, evaluationGradeService.getScoreGrade(tenantId, companyOrgId, score, true));
+    }
 }

+ 10 - 4
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultController.java

@@ -1,6 +1,8 @@
 package com.huaxu.evaluation.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.enums.EvaluationResultStatus;
 import com.huaxu.evaluation.service.EvaluationResultService;
 import com.huaxu.evaluation.vo.EvaluationResultVo;
 import com.huaxu.model.AjaxMessage;
@@ -15,24 +17,28 @@ import javax.validation.Valid;
 
 /**
  * @ClassName EvaluationResultController
- * @Description: 绩效考评结果控制层处理
+ * @Description: 考评结果
  * @Author lihui
  * @Date 2021/5/7
  * @Version V1.0
  **/
 @RestController
 @RequestMapping("/evaluation/result")
-@Api(tags = "绩效考评结果")
+@Api(tags = "考评结果")
 public class EvaluationResultController {
 
     @Autowired
     private EvaluationResultService evaluationResultService;
 
     @ApiOperation(value = "查询考评结果")
-    @RequestMapping(value = "/findPage", method = RequestMethod.POST)
+    @RequestMapping(value = "/find/page", method = RequestMethod.POST)
     @ResponseBody
     public AjaxMessage<Pagination<EvaluationResultVo>> findPage(@RequestBody @Valid EvaluationResultDto dto) {
-        return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(evaluationResultService.findPage(dto)));
+        IPage<EvaluationResultVo> page = evaluationResultService.findPage(dto);
+        if (page == null) {
+            return new AjaxMessage<>(EvaluationResultStatus.DATA_NOT_FOUND.getStatus(), EvaluationResultStatus.DATA_NOT_FOUND.getMessage(),null);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(page));
     }
 
 }

+ 46 - 0
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultDetailsController.java

@@ -0,0 +1,46 @@
+package com.huaxu.evaluation.controller;
+
+import com.huaxu.evaluation.dto.EvaluationResultDetailsDto;
+import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.service.EvaluationResultDetailsService;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.exception.ServiceException;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.Pagination;
+import com.huaxu.model.ResultStatus;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @ClassName EvaluationResultController
+ * @Description: 绩效考评结果详情
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("/evaluation/details")
+@Api(tags = "考评结果详情")
+public class EvaluationResultDetailsController {
+
+    @Autowired
+    private EvaluationResultDetailsService evaluationResultDetailService;
+
+    @ApiOperation(value = "修改考评得分")
+    @RequestMapping(value = "/update/score", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxMessage<String> updateEvaluateScore(@RequestBody @Valid EvaluationResultDetailsDto dto) {
+        try {
+            evaluationResultDetailService.updateEvaluateScore(dto);
+            return new AjaxMessage<>(ResultStatus.OK);
+        } catch (ServiceException e) {
+            return new AjaxMessage<>(e.getStatus(), e.getMessage(), null);
+        }
+    }
+
+}
+

+ 45 - 0
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultReportController.java

@@ -0,0 +1,45 @@
+package com.huaxu.evaluation.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.enums.EvaluationResultStatus;
+import com.huaxu.evaluation.service.EvaluationResultService;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.Pagination;
+import com.huaxu.model.ResultStatus;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @ClassName EvaluationResultReportController
+ * @Description: 绩效报表
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("/evaluation/report")
+@Api(tags = "绩效考评报表")
+public class EvaluationResultReportController {
+
+    @Autowired
+    private EvaluationResultService evaluationResultService;
+
+    @ApiOperation(value = "人员绩效排名")
+    @RequestMapping(value = "/find/page", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxMessage<Pagination<EvaluationResultVo>> findPage(@RequestBody @Valid EvaluationResultDto dto) {
+        IPage<EvaluationResultVo> page = evaluationResultService.findPage(dto);
+        if (page == null) {
+            return new AjaxMessage<>(EvaluationResultStatus.DATA_NOT_FOUND.getStatus(), EvaluationResultStatus.DATA_NOT_FOUND.getMessage(),null);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, new Pagination<>(page));
+    }
+
+}
+

+ 39 - 0
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationResultTaskDetailsController.java

@@ -0,0 +1,39 @@
+package com.huaxu.evaluation.controller;
+
+import com.huaxu.evaluation.service.EvaluationResultTaskDetailsService;
+import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.util.IntegerUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @ClassName EvaluationResultTaskDetailsController
+ * @Description: 绩效考评任务详情
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@RestController
+@RequestMapping("/evaluation/task")
+@Api(tags = "考评任务结果详情")
+public class EvaluationResultTaskDetailsController {
+
+    @Autowired
+    private EvaluationResultTaskDetailsService evaluationResultTaskDetailsService;
+
+    @ApiOperation(value = "查询考评结果任务详情")
+    @RequestMapping(value = "/find", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxMessage<EvaluationResultTaskDetailsVo> find(@RequestParam Integer evaluationResultId) {
+        if (IntegerUtil.isNullOrZero(evaluationResultId)) {
+            return new AjaxMessage<>(ResultStatus.PARAM_ERROR.getStatus(), "参数错误", null);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, evaluationResultTaskDetailsService.findResultTaskDetail(evaluationResultId));
+    }
+
+}
+

+ 2 - 1
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationItemMapper.java

@@ -4,6 +4,7 @@ import com.huaxu.evaluation.entity.EvaluationItemEntity;
 import java.io.Serializable;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaxu.evaluation.vo.EvaluationItemVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -30,5 +31,5 @@ public interface EvaluationItemMapper extends BaseMapper<EvaluationItemEntity> {
 
      List<EvaluationItemEntity> findList(EvaluationItemEntity evaluationItemEntity);
 
-     /**删除相关方法  使用mybatis-plus集成的 **/
+    List<EvaluationItemVo> findListItem(EvaluationItemEntity evaluationItemEntity);
 }

+ 32 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultDetailsMapper.java

@@ -1,10 +1,14 @@
 package com.huaxu.evaluation.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huaxu.evaluation.dto.EvaluationDetailsDto;
+import com.huaxu.evaluation.dto.EvaluationResultDetailsDto;
 import com.huaxu.evaluation.entity.EvaluationResultDetailsEntity;
 import com.huaxu.evaluation.entity.EvaluationResultEntity;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @ClassName EvaluationResultDetailsMapper
  * @Description: 考评结果详情
@@ -14,4 +18,32 @@ import org.apache.ibatis.annotations.Mapper;
  **/
 @Mapper
 public interface EvaluationResultDetailsMapper extends BaseMapper<EvaluationResultDetailsEntity> {
+
+
+    /**
+    * @Author lihui
+    * @Description 插入考评结果详情
+    * @Date  2021/5/10
+    * @Param [entity]
+    * @return java.lang.Integer
+    **/
+    Integer insertEvaluationResultDetails(EvaluationResultDetailsEntity entity);
+
+    /**
+    * @Author lihui
+    * @Description 查询考评结果详情ids
+    * @Date 17:09 2021/5/8
+    * @Param [evaluationResultId]
+    * @return java.util.List<java.lang.Integer>
+    **/
+    List<Integer> findResultDetailsIds(Integer evaluationResultId);
+
+    /**
+    * @Author lihui
+    * @Description 修改分数
+    * @Date 17:13 2021/5/8
+    * @Param [dto]
+    * @return void
+    **/
+    int updateEvaluateScore(EvaluationDetailsDto dto);
 }

+ 33 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultMapper.java

@@ -3,10 +3,16 @@ package com.huaxu.evaluation.dao;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.evaluation.dto.EvaluationResultQueryDto;
+import com.huaxu.evaluation.dto.EvaluationResultUpdateDto;
+import com.huaxu.evaluation.entity.EvaluationResultEntity;
 import com.huaxu.evaluation.vo.EvaluationResultVo;
+import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * @ClassName EvaluationResultMapper
  * @Description: 考评结果
@@ -17,6 +23,15 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface EvaluationResultMapper {
 
+    /**
+    * @Author lihui
+    * @Description 插入考评结果
+    * @Date  2021/5/10
+    * @Param [evaluationResultEntity]
+    * @return void
+    **/
+    Integer insertEvaluationResult(@Param("item")EvaluationResultEntity item);
+
     /**
     * @Author lihui
     * @Description 分页查询考评结果
@@ -26,4 +41,22 @@ public interface EvaluationResultMapper {
     **/
     Page<EvaluationResultVo> findPage(@Param("page")IPage<EvaluationResultQueryDto> page, @Param("dto") EvaluationResultQueryDto dto);
 
+    /**
+    * @Author lihui
+    * @Description 查询考评状态
+    * @Date 17:16 2021/5/8
+    * @Param [evaluationResultId]
+    * @return java.lang.Integer
+    **/
+    Integer findEvaluationState(Integer evaluationResultId);
+
+    /**
+    * @Author lihui
+    * @Description 修改考评得分
+    * @Date 17:56 2021/5/8
+    * @Param [evaluationResultId, Score]
+    * @return java.lang.Integer
+    **/
+    Integer updateEvaluationScore(EvaluationResultUpdateDto updateDto);
+
 }

+ 29 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dao/EvaluationResultTaskMapper.java

@@ -0,0 +1,29 @@
+package com.huaxu.evaluation.dao;
+
+import com.huaxu.evaluation.entity.EvaluationResultTaskEntity;
+import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @ClassName EvaluationResultMapper
+ * @Description: 考评结果
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Mapper
+public interface EvaluationResultTaskMapper {
+
+
+    Integer insertEvaluationResultTask(EvaluationResultTaskEntity entity);
+
+    /**
+    * @Author lihui
+    * @Description 查询考评结果
+    * @Date 16:12 2021/5/10
+    * @Param [evaluationResultId]
+    * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
+    **/
+    EvaluationResultTaskDetailsVo findResultTaskDetail(Integer evaluationResultId);
+
+}

+ 25 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationDetailsDto.java

@@ -0,0 +1,25 @@
+package com.huaxu.evaluation.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName EvaluationDetailsDto
+ * @Description: 考评任务结果详情
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评任务结果详情")
+public class EvaluationDetailsDto {
+
+    @ApiModelProperty(value = "考评结果详情Id")
+    private Integer detailId;
+
+    @ApiModelProperty(value = "修改的分数")
+    private BigDecimal score;
+}

+ 36 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultDetailsDto.java

@@ -0,0 +1,36 @@
+package com.huaxu.evaluation.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @ClassName EvaluationResultDetailsDto
+ * @Description: 考评结果详情
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评结果详情")
+public class EvaluationResultDetailsDto {
+
+    @ApiModelProperty(value = "考评结果Id")
+    @NotNull
+    private Integer resultId;
+
+    @ApiModelProperty(value = "租户Id")
+    @NotNull
+    private String tenantId;
+
+    @ApiModelProperty(value = "公司Id")
+    @NotNull
+    private Integer companyOrgId;
+
+    @ApiModelProperty(value = "考评结果详情Id")
+    private List<EvaluationDetailsDto> detailsDtoList;
+}

+ 26 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultDto.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @ClassName EvaluationResultDto
  * @Description: 考评结果入参
@@ -15,4 +17,28 @@ import lombok.Data;
 @ApiModel(value = "考评结果")
 public class EvaluationResultDto extends  BasePageDto{
 
+
+    @ApiModelProperty(value="用户名")
+    private String userName;
+
+    @ApiModelProperty(value="公司ID")
+    private Integer companyOrgId;
+
+    @ApiModelProperty(value="部门ID")
+    private Integer deptOrgId;
+
+    @ApiModelProperty(value="考评状态:0未考评 1已考评")
+    private Integer state;
+
+    @ApiModelProperty(value="类型:周期(0月度 1季度 2年度)")
+    private Integer cycle;
+
+    @ApiModelProperty(value="年")
+    private Integer year;
+
+    @ApiModelProperty(value="月/季度")
+    private Integer month;
+
+    @ApiModelProperty(value="1:考评,2:得分")
+    private int sort;
 }

+ 3 - 1
operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultQueryDto.java

@@ -19,7 +19,7 @@ import java.util.List;
 @ApiModel(value = "考评结果")
 public class EvaluationResultQueryDto extends EvaluationResultDto{
 
-    @ApiModelProperty(value = "页码")
+    @ApiModelProperty(value = "租户")
     private String tenantId;
 
     @ApiModelProperty(value ="权限",hidden = true)
@@ -31,4 +31,6 @@ public class EvaluationResultQueryDto extends EvaluationResultDto{
     @ApiModelProperty(value="用户权限类型")
     private Integer permissonType;
 
+
+
 }

+ 42 - 0
operation_manager/src/main/java/com/huaxu/evaluation/dto/EvaluationResultUpdateDto.java

@@ -0,0 +1,42 @@
+package com.huaxu.evaluation.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @ClassName EvaluationResultUpdateDto
+ * @Description: 考评结果修改
+ * @Author lihui
+ * @Date 2021/5/11
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评结果修改")
+public class EvaluationResultUpdateDto {
+
+    @ApiModelProperty(value="考评结果ID")
+    private Integer evaluationResultId;
+
+    @ApiModelProperty(value="得分")
+    private BigDecimal score;
+
+    @ApiModelProperty(value="等级")
+    private Integer evaluationGrade;
+
+    @ApiModelProperty(value="更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value="更新时间")
+    private Date dateUpdate;
+
+    @ApiModelProperty(value="考评时间")
+    private Date dateEvaluation;
+
+    @ApiModelProperty(value="考评人")
+    private String evaluationBy;
+
+}

+ 1 - 0
operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultDetailsEntity.java

@@ -3,6 +3,7 @@ package com.huaxu.evaluation.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.huaxu.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.math.BigDecimal;

+ 3 - 0
operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultEntity.java

@@ -27,6 +27,9 @@ public class EvaluationResultEntity extends BaseEntity {
     @ApiModelProperty(value = "被考评人")
     private String evaluationBe;
 
+    @ApiModelProperty(value = "被考评人")
+    private Long evaluationBeUserId;
+
     @ApiModelProperty(value = "考评状态(0未考评 1已考评)")
     private Integer state;
 

+ 4 - 4
operation_manager/src/main/java/com/huaxu/evaluation/entity/EvaluationResultTaskEntity.java

@@ -23,16 +23,16 @@ public class EvaluationResultTaskEntity extends BaseEntity {
     private Integer evaluationResultId;
 
     @ApiModelProperty(value = "任务总数")
-    private Integer totalCount;
+    private int totalCount;
 
     @ApiModelProperty(value = "已完成")
-    private Integer completeCount;
+    private int completeCount;
 
     @ApiModelProperty(value = "待完成")
-    private Integer noCompleteCount;
+    private int noCompleteCount;
 
     @ApiModelProperty(value = "延期完成")
-    private Integer delayCompleteCount;
+    private int delayCompleteCount;
 
     @ApiModelProperty(value = "完成率")
     private BigDecimal completionRate;

+ 25 - 0
operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationCycleEnums.java

@@ -0,0 +1,25 @@
+package com.huaxu.evaluation.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum EvaluationCycleEnums {
+
+    MONTH(0,"月"),
+
+    QUARTER(1,"季度"),
+
+    YEAR(2,"年度")
+
+    ,
+    ;
+
+    private final int type;
+
+    private final String message;
+
+    EvaluationCycleEnums(int type, String message) {
+        this.type = type;
+        this.message = message;
+    }
+}

+ 26 - 0
operation_manager/src/main/java/com/huaxu/evaluation/enums/EvaluationResultStatus.java

@@ -0,0 +1,26 @@
+package com.huaxu.evaluation.enums;
+
+import com.huaxu.model.ResultStatus;
+import lombok.Getter;
+
+@Getter
+public enum EvaluationResultStatus {
+
+    DATA_NOT_FOUND(920000,"未找到相关的数据"),
+
+    PARAM_ERROR(920001,"请求参数错误"),
+
+    IS_ASSESSED(920002,"已考核,不能修改")
+
+    ,
+    ;
+
+    private final int status;
+
+    private final String message;
+
+    EvaluationResultStatus(int status, String message) {
+        this.status = status;
+        this.message = message;
+    }
+}

+ 336 - 0
operation_manager/src/main/java/com/huaxu/evaluation/job/EvaluationResultJob.java

@@ -1,5 +1,35 @@
 package com.huaxu.evaluation.job;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.evaluation.dao.*;
+import com.huaxu.evaluation.entity.*;
+import com.huaxu.evaluation.enums.EvaluationCycleEnums;
+import com.huaxu.evaluation.vo.EvaluationItemValueVo;
+import com.huaxu.evaluation.vo.EvaluationItemVo;
+import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
+import com.huaxu.exception.ServiceException;
+import com.huaxu.order.dao.WorkOrderManageMapper;
+import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.task.entity.UserEntity;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.utils.EvaluationUtil;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * @ClassName EvaluationResultJob
  * @Description: TODO
@@ -7,5 +37,311 @@ package com.huaxu.evaluation.job;
  * @Date 2021/5/7
  * @Version V1.0
  **/
+@Component
+@Slf4j
+@EnableScheduling
 public class EvaluationResultJob {
+
+    @Autowired
+    private WorkOrderManageMapper workOrderManageMapper;
+
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    @Autowired
+    private EvaluationCycleMapper evaluationCycleMapper;
+
+    @Autowired
+    private EvaluationResultDetailsMapper evaluationResultDetailsMapper;
+
+    @Autowired
+    private EvaluationResultMapper evaluationResultMapper;
+
+    @Autowired
+    private EvaluationResultTaskMapper evaluationResultTaskMapper;
+
+    @Autowired
+    private EvaluationItemMapper evaluationItemMapper;
+
+    private static boolean lock = false;
+
+    // 保存考评项目设置
+    static Map<String, List<EvaluationItemVo>> itemMap = new HashMap<>();
+
+    static Map<String,  List<Integer>> userIdsMap = new HashMap<>();
+
+
+
+    //@Scheduled(cron = "0/5 * * * * ?")
+    @Async
+    public void run(){
+        if (lock){
+            return;
+        }
+        lock = true;
+        log.info("============绩效考评数据生成begin=====================");
+        // 首先查询哪些公司设置了绩效考评
+        List<EvaluationCycleEntity> evaluationCycleEntities =  evaluationCycleMapper.findList(new EvaluationCycleEntity());
+        try {
+            for (EvaluationCycleEntity evaluationCycleEntity : evaluationCycleEntities) {
+                // 查询公司设置的考评日期是否是今天
+                if (!EvaluationUtil.isToday(evaluationCycleEntity.getEvaluationDay())) {
+                    continue;
+                }
+                // 如果是年度,需要检查当前日期是否是在1月份
+                if (evaluationCycleEntity.getType() == EvaluationCycleEnums.YEAR.getType() &&
+                        !EvaluationUtil.sameMonth(1)) {
+                    continue;
+                }
+                userTask(evaluationCycleEntity.getTenantId(), evaluationCycleEntity.getCompanyOrgId(), evaluationCycleEntity.getType());
+            }
+        } catch (Exception e) {
+            log.error("绩效考评定时任务出错->", e);
+        } finally {
+            // 用完直接clear
+            itemMap.clear();
+            //lock = false;
+        }
+        log.info("============绩效考评数据生成end=====================");
+    }
+
+    /**
+    * @Author lihui
+    * @Description 用户任务分解
+    * @Date 18:19 2021/5/10
+    * @Param [tenantId:租户ID, companyOrgId : 公司ID, cycle : 类型(0月度 1季度 2年度)]
+    * @return void
+    **/
+    public void userTask(String tenantId, Integer companyOrgId, Integer cycle){
+        // 查询该租户公司下的所有用户
+        List<Integer> userIds = getUserIds(tenantId, companyOrgId);
+        Map<Long, UserEntity> userEntityMap = toMap(userIds);
+        String startTime = null;
+        String endTime   = null;
+        List<EvaluationItemVo> itemEntityList = null;
+        for (Integer userId : userIds) {
+            UserEntity userEntity = userEntityMap.get(Long.parseLong(userId.toString()));
+            if (userEntity == null) {
+                continue;
+            }
+            itemEntityList = findItem(userEntity);
+            // 1.获取部门考评项设置,如果未设置直接过滤
+            // 2.判断部门考评项目设置里面有没有设置对应的考评周期,没有就直接过滤
+            if (CollectionUtil.isEmpty(itemEntityList) || !EvaluationUtil.containsType(itemEntityList, cycle)) {
+                continue;
+            }
+            try {
+                // 根据类型(0月度 1季度 2年度)得到当前的开始时间和结束时间,如果是按季度,当月必须是1,4,7,10
+                startTime = EvaluationUtil.getStartTime(cycle, null, null);
+                endTime   = EvaluationUtil.getEndTime(cycle, null,null);
+                if (startTime == null || endTime == null) {
+                    continue;
+                }
+                // 保存用户考评结果
+                saveEvaluationResultInfo(userEntity, itemEntityList , startTime, endTime ,cycle);
+            } catch (Exception e) {
+                log.error("保存用户考评信息出错->", e);
+            }
+        }
+    }
+
+    private List<Integer> getUserIds(String tenantId, Integer companyOrgId){
+        String key = tenantId + "_" + companyOrgId;
+        List<Integer> result = userIdsMap.get(key);
+        if (result == null){
+            result = userCenterClient.findUserIdsByPermissonOrg(tenantId, companyOrgId, null);
+            userIdsMap.put(key, result);
+        }
+        return result;
+    }
+
+
+    /**
+    * @Author lihui
+    * @Description  保存用户考评结果
+    * @Date 10:26 2021/5/11
+    * @Param [userEntity, itemEntityList, startTime, endTime, cycle]
+    * @return void
+    **/
+    @Transactional
+    public void saveEvaluationResultInfo(UserEntity userEntity, List<EvaluationItemVo> itemEntityList, String startTime, String endTime, Integer cycle){
+        Calendar calendar = EvaluationUtil.getCalendar(endTime);
+        // 计算用户完成任务情况
+        EvaluationResultTaskEntity taskDetailsVo = calculationTaskInfo(userEntity.getId().intValue(), userEntity.getTenantId(), startTime, endTime, getValueCondition(itemEntityList));
+        // 组装考评结果数据
+        EvaluationResultEntity resultEntity = packagesEvaluationResultEntity(userEntity, calendar, cycle, startTime, endTime);
+        // 保存考评结果
+        if (evaluationResultMapper.insertEvaluationResult(resultEntity) != 1) {
+            throw new ServiceException(500, "保存考评结果出错,退出。");
+        }
+        Integer resultId = resultEntity.getId().intValue();
+        taskDetailsVo.setEvaluationResultId(resultId);
+        // 保存考评结果任务详情
+        evaluationResultTaskMapper.insertEvaluationResultTask(taskDetailsVo);
+        BigDecimal completeCount   = new BigDecimal(taskDetailsVo.getCompleteCount()) ;
+        BigDecimal completionRate  = taskDetailsVo.getCompletionRate();
+        BigDecimal evaluationValue = null;
+        for (EvaluationItemVo item : itemEntityList) {
+            // 不是当前季度的,过滤
+            if (item.getCycle().indexOf(cycle.toString()) == -1 || item.getType() == null) {
+                continue;
+            }
+            evaluationValue = item.getType() == 1 ? completeCount : completionRate;
+            EvaluationResultDetailsEntity detailsEntity = new EvaluationResultDetailsEntity();
+            detailsEntity.setEvaluationResultId(resultId);
+            detailsEntity.setEvaluationItemId(item.getItemId());
+            detailsEntity.setValue(getScore(item.getType(), item.getEvaluationItemValueVoList(), evaluationValue));
+            detailsEntity.setDateCreate(new Date());
+            detailsEntity.setDateUpdate(new Date());
+            detailsEntity.setTenantId(userEntity.getTenantId());
+            detailsEntity.setStatus(1);
+            evaluationResultDetailsMapper.insertEvaluationResultDetails(detailsEntity);
+        }
+    }
+
+    /**
+    * @Author lihui
+    * @Description 计算用户完成任务情况
+    * @Date 17:38 2021/5/10
+    * @Param [userId, tenantId, startTime, endTime,valueCondition:延期时间多少分钟内算正常]
+    * @return void
+    **/
+    private EvaluationResultTaskEntity calculationTaskInfo(Integer userId, String tenantId, String startTime, String endTime, BigDecimal valueCondition) {
+        int page = 1;
+        IPage<WorkOrderManageDto> iPage = null;
+        EvaluationResultTaskEntity taskEntity = new EvaluationResultTaskEntity();
+        boolean completedBoolean = false;
+        while (true) {
+            iPage = new Page<>(page, 200);
+            // 查询该用户的工单和任务
+            Page<WorkOrderManageDto> pageList = workOrderManageMapper.selectByTime(iPage,  userId, tenantId, startTime, endTime);
+            if (pageList == null || CollectionUtil.isEmpty(pageList.getRecords())) {
+                break;
+            }
+            for (WorkOrderManageDto dto : pageList.getRecords()) {
+                completedBoolean = EvaluationUtil.completed(dto.getOrderStatus());
+                taskEntity.setTotalCount(taskEntity.getTotalCount() + 1);
+                taskEntity.setCompleteCount(taskEntity.getCompleteCount() + (completedBoolean ? 1 : 0));
+                taskEntity.setNoCompleteCount(taskEntity.getNoCompleteCount() + (!completedBoolean ? 1 : 0));
+                int addMinute = valueCondition == null ? EvaluationUtil.minute(dto.getDateLimit()) : valueCondition.intValue();
+                // 计算完成的是否属于延期完成
+                if (completedBoolean && EvaluationUtil.isDelay(dto.getFinishDate(), dto.getPlanFinishDate(), addMinute)) {
+                    taskEntity.setDelayCompleteCount(taskEntity.getDelayCompleteCount() + 1);
+                }
+            }
+            page ++;
+        }
+        // 计算完成率和延期率
+        taskEntity.setCompletionRate(EvaluationUtil.divide(taskEntity.getCompleteCount(),taskEntity.getTotalCount()));
+        taskEntity.setDelayRate(EvaluationUtil.divide(taskEntity.getDelayCompleteCount(),taskEntity.getTotalCount()));
+        taskEntity.setTenantId(tenantId);
+        taskEntity.setStatus(1);
+        taskEntity.setDateCreate(new Date());
+        return taskEntity;
+    }
+
+    /**
+     * @Author lihui
+     * @Description 获取部门考评项
+     * @Date 17:36 2021/5/10
+     * @Param [userEntity]
+     * @return java.util.List<com.huaxu.evaluation.entity.EvaluationItemEntity>
+     **/
+    private List<EvaluationItemVo> findItem(UserEntity userEntity){
+        Integer companyOrgId = EvaluationUtil.toInteger(userEntity.getCompanyOrgId());
+        Integer deptOrgId    = EvaluationUtil.toInteger(userEntity.getDeptOrgId());
+        String  tenantId = userEntity.getTenantId();
+        String key = tenantId + "_" + companyOrgId + "_" + deptOrgId;
+        List<EvaluationItemVo> itemVos = itemMap.get(key);
+        if (itemVos != null) {
+            return  itemVos;
+        }
+        EvaluationItemEntity queryItem = new EvaluationItemEntity();
+        queryItem.setCompanyOrgId(companyOrgId);
+        queryItem.setDeptOrgId(deptOrgId);
+        queryItem.setTenantId(tenantId);
+        itemVos = evaluationItemMapper.findListItem(queryItem);
+        itemMap.put(key, itemVos);
+        return itemVos;
+    }
+
+
+    /**
+    * @Author lihui
+    * @Description 组装考评结果数据
+    * @Date 15:03 2021/5/11
+    * @Param [userEntity, calendar, cycle, startTime, endTime]
+    * @return com.huaxu.evaluation.entity.EvaluationResultEntity
+    **/
+    private EvaluationResultEntity packagesEvaluationResultEntity(UserEntity userEntity, Calendar calendar, Integer cycle, String startTime, String endTime){
+        EvaluationResultEntity resultEntity = new EvaluationResultEntity();
+        resultEntity.setYear(calendar.get(Calendar.YEAR));
+        resultEntity.setMonth(calendar.get(Calendar.MONTH) + 1);
+        resultEntity.setEvaluationBe(userEntity.getUsername());
+        resultEntity.setEvaluationBeUserId(userEntity.getId());
+        resultEntity.setCycle(cycle);
+        resultEntity.setState(0);
+        resultEntity.setDateStart(DatesUtil.parseDate(startTime, "yyyy-MM-dd HH:mm:ss"));
+        resultEntity.setDateEnd(DatesUtil.parseDate(endTime, "yyyy-MM-dd HH:mm:ss"));
+        resultEntity.setTenantId(userEntity.getTenantId());
+        resultEntity.setCompanyOrgId(EvaluationUtil.toInteger(userEntity.getCompanyOrgId()));
+        resultEntity.setDeptOrgId(EvaluationUtil.toInteger(userEntity.getDeptOrgId()));
+        resultEntity.setDateCreate(new Date());
+        resultEntity.setStatus(1);
+        return resultEntity;
+    }
+
+    private Map<Long, UserEntity> toMap(List<Integer> userIds){
+        List<UserEntity> userEntities = userCenterClient.findUserIdsByUserIds(EvaluationUtil.toLong(userIds));
+        if (CollectionUtil.isEmpty(userEntities)){
+            return  null;
+        }
+        return userEntities.stream().collect(Collectors.toMap(UserEntity::getId, a -> a,(k1, k2)->k1));
+    }
+
+    private BigDecimal getScore (Integer type, List<EvaluationItemValueVo> list, BigDecimal evaluationValue){
+        if (type != 1 && type != 2) {
+            return null;
+        }
+        Integer itemType     = null;
+        BigDecimal itemValue = null;
+        BigDecimal valueOne  = null;
+        BigDecimal valueTwo  = null;
+        for (EvaluationItemValueVo evaluationItemValueVo: list) {
+            itemType  = evaluationItemValueVo.getItemType();
+            itemValue = evaluationItemValueVo.getItemValue();
+            valueOne  = evaluationItemValueVo.getValueOne();
+            valueTwo  = evaluationItemValueVo.getValueTwo();
+            // 大于等于 0大于等于 2小于 1介于
+            if (itemType == 0 && evaluationValue.compareTo(valueOne) > -1) {
+                return itemValue;
+            }
+            // 小于
+            if (itemType == 2 &&  evaluationValue.compareTo(valueOne) == -1) {
+                return itemValue;
+            }
+            // 介于 : 比如取8-10,就是≥8,<10
+            if (itemType == 1 && evaluationValue.compareTo(valueOne) > -1  && evaluationValue.compareTo(valueTwo) == -1) {
+                return itemValue;
+            }
+        }
+        return new BigDecimal("0");
+    }
+
+    /**
+     * @Author lihui
+     * @Description 获取任务按时完成率设定的条件值
+     * @Date 9:40 2021/5/11
+     * @Param [itemEntityList]
+     * @return java.math.BigDecimal
+     **/
+    private BigDecimal getValueCondition(List<EvaluationItemVo> itemEntityList){
+        for (EvaluationItemVo evaluationItemVo: itemEntityList) {
+            if (evaluationItemVo.getType() == 2) {
+                return evaluationItemVo.getValueCondition();
+            }
+        }
+        return null;
+    }
+
 }

+ 10 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationGradeService.java

@@ -13,6 +13,7 @@ import javax.annotation.Resource;
 
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.List;
 import java.util.Arrays;
@@ -61,4 +62,13 @@ public interface EvaluationGradeService {
      * 根居ID获取对象
      */
     public EvaluationGradeEntity findEvaluationGradeById(Long id) ;
+
+    /**
+    * @Author lihui
+    * @Description 获取得分等级
+    * @Date 15:57 2021/5/11
+    * @Param [tenantId, companyOrgId, score]
+    * @return java.lang.String
+    **/
+    String getScoreGrade(String tenantId, Integer companyOrgId, BigDecimal score, boolean formatName);
 }

+ 29 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultDetailsService.java

@@ -0,0 +1,29 @@
+package com.huaxu.evaluation.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.evaluation.dto.EvaluationResultDetailsDto;
+import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.exception.ServiceException;
+
+import java.util.List;
+
+/**
+ * @ClassName EvaluationResultService
+ * @Description: 考评结果业务处理
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+public interface EvaluationResultDetailsService {
+
+    /**
+     * @Author lihui
+     * @Description 修改分数
+     * @Date 17:13 2021/5/8
+     * @Param [dto]
+     * @return void
+     **/
+    void updateEvaluateScore(EvaluationResultDetailsDto dto) throws ServiceException;
+}

+ 26 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/EvaluationResultTaskDetailsService.java

@@ -0,0 +1,26 @@
+package com.huaxu.evaluation.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+
+/**
+ * @ClassName EvaluationResultTaskDetailsService
+ * @Description: 考评结果任务详情
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+public interface EvaluationResultTaskDetailsService {
+
+    /**
+    * @Author lihui
+    * @Description 查看任务结果详情
+    * @Date 16:36 2021/5/8
+    * @Param [evaluationResultId]
+    * @return com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo
+    **/
+    EvaluationResultTaskDetailsVo findResultTaskDetail(Integer evaluationResultId);
+}

+ 48 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationGradeServiceImpl.java

@@ -9,7 +9,9 @@ import com.huaxu.dict.DictUtil;
 import com.huaxu.evaluation.dao.EvaluationGradeMapper;
 import com.huaxu.evaluation.entity.EvaluationGradeEntity;
 import com.huaxu.evaluation.service.EvaluationGradeService;
+import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
 import com.huaxu.org.OrgInfoUtil;
 import com.huaxu.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -116,4 +119,49 @@ public class EvaluationGradeServiceImpl extends ServiceImpl<EvaluationGradeMappe
     public EvaluationGradeEntity findEvaluationGradeById(Long id) {
         return evaluationGradeMapper.findEvaluationGradeById(id);
     }
+
+    @Override
+    public String getScoreGrade(String tenantId, Integer companyOrgId, BigDecimal score, boolean formatName){
+        EvaluationGradeEntity gradeEntity = new EvaluationGradeEntity();
+        gradeEntity.setTenantId(tenantId);
+        gradeEntity.setCompanyOrgId(companyOrgId);
+        List<EvaluationGradeEntity> list = evaluationGradeMapper.findList(gradeEntity);
+        if (list == null) {
+            return null;
+        }
+        // 0大于等于 2小于 1介于
+        Long type = null;
+        BigDecimal valueOne= null;
+        BigDecimal valueTwo= null;
+        Long grade = null;
+        for (EvaluationGradeEntity evaluationGradeEntity: list) {
+            type  = evaluationGradeEntity.getType();
+            valueOne  = new BigDecimal(evaluationGradeEntity.getValueOne() == null ? 0 : evaluationGradeEntity.getValueOne());
+            valueTwo  = new BigDecimal(evaluationGradeEntity.getValueTwo() == null ? 0 : evaluationGradeEntity.getValueTwo());
+            // 大于等于 0大于等于 2小于 1介于
+            if (type == 0 && score.compareTo(valueOne) > -1) {
+                grade = evaluationGradeEntity.getEvaluationGrade();
+                break;
+            }
+            // 小于
+            if (type == 2 &&  score.compareTo(valueOne) == -1) {
+                grade = evaluationGradeEntity.getEvaluationGrade();
+                break;
+            }
+            // 介于 : 比如取8-10,就是≥8,<10
+            if (type == 1 && score.compareTo(valueOne) > -1  && score.compareTo(valueTwo) == -1) {
+                grade = evaluationGradeEntity.getEvaluationGrade();
+                break;
+            }
+        }
+        if (grade == null) {
+            return null;
+        }
+        return formatName ? dictUtil.getDictName("SC_EVALUATION_GRADE", grade.intValue()) : grade.toString();
+    }
+
+    public static void main(String[] args) {
+        BigDecimal score = new BigDecimal("60");
+        System.out.println(score.compareTo(new BigDecimal("40")) > -1 && score.compareTo(new BigDecimal("50"))== -1);
+    }
 }

+ 97 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultDetailsServiceImpl.java

@@ -0,0 +1,97 @@
+package com.huaxu.evaluation.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.evaluation.dao.EvaluationResultDetailsMapper;
+import com.huaxu.evaluation.dao.EvaluationResultMapper;
+import com.huaxu.evaluation.dto.*;
+import com.huaxu.evaluation.enums.EvaluationResultStatus;
+import com.huaxu.evaluation.service.EvaluationGradeService;
+import com.huaxu.evaluation.service.EvaluationResultDetailsService;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.exception.ServiceException;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.org.OrgInfoUtil;
+import com.huaxu.util.IntegerUtil;
+import com.huaxu.util.UserUtil;
+import com.huaxu.utils.OperactionStringUtils;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName EvaluationResultServiceImpl
+ * @Description: 考评结果业务处理
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Slf4j
+@Service
+public class EvaluationResultDetailsServiceImpl  implements EvaluationResultDetailsService {
+
+    @Autowired
+    private EvaluationResultDetailsMapper evaluationResultDetailsMapper;
+
+    @Autowired
+    private EvaluationResultMapper evaluationResultMapper;
+
+    @Autowired
+    private EvaluationGradeService evaluationGradeService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateEvaluateScore(EvaluationResultDetailsDto dto) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        Integer resultId = dto.getResultId();
+        if (IntegerUtil.isNullOrZero(resultId)){
+            throw new ServiceException(EvaluationResultStatus.PARAM_ERROR.getStatus(), EvaluationResultStatus.PARAM_ERROR.getMessage());
+        }
+        Integer state = evaluationResultMapper.findEvaluationState(resultId);
+        if (state == null){
+            throw new ServiceException(EvaluationResultStatus.DATA_NOT_FOUND.getStatus(), EvaluationResultStatus.DATA_NOT_FOUND.getMessage());
+        }
+        if (state == 1) {
+            throw new ServiceException(EvaluationResultStatus.IS_ASSESSED.getStatus(), EvaluationResultStatus.IS_ASSESSED.getMessage());
+        }
+        List<Integer> ids = evaluationResultDetailsMapper.findResultDetailsIds(resultId);
+        List<EvaluationDetailsDto>  evaluationDetailsDtos =  dto.getDetailsDtoList();
+        List<Integer> detailIds = evaluationDetailsDtos.stream().map(EvaluationDetailsDto::getDetailId).collect(Collectors.toList());
+        if (!OperactionStringUtils.checkDifferent(ids, detailIds)){
+            throw new ServiceException(EvaluationResultStatus.PARAM_ERROR.getStatus(), EvaluationResultStatus.PARAM_ERROR.getMessage());
+        }
+        // 记录总得分
+        BigDecimal score = new BigDecimal(0);
+        // 修改得分详情
+        for (EvaluationDetailsDto detailsDto : evaluationDetailsDtos) {
+             evaluationResultDetailsMapper.updateEvaluateScore(detailsDto);
+             score = score.add(detailsDto.getScore());
+        }
+        // 获取分数对应的等级
+        String evaluationGrade = evaluationGradeService.getScoreGrade(dto.getTenantId(), dto.getCompanyOrgId(), score, false);
+        EvaluationResultUpdateDto updateDto = new EvaluationResultUpdateDto();
+        updateDto.setUpdateBy(currentUser.getUsername());
+        updateDto.setEvaluationGrade(StringUtils.isEmpty(evaluationGrade) ? null : Integer.parseInt(evaluationGrade));
+        updateDto.setEvaluationResultId(resultId);
+        updateDto.setDateEvaluation(new Date());
+        updateDto.setDateUpdate(new Date());
+        updateDto.setScore(score);
+        updateDto.setEvaluationBy(currentUser.getUsername());
+        // 修改最终得分
+        evaluationResultMapper.updateEvaluationScore(updateDto);
+    }
+
+
+
+}

+ 86 - 2
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultServiceImpl.java

@@ -1,20 +1,31 @@
 package com.huaxu.evaluation.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.evaluation.dao.EvaluationResultMapper;
 import com.huaxu.evaluation.dto.EvaluationResultDto;
 import com.huaxu.evaluation.dto.EvaluationResultQueryDto;
+import com.huaxu.evaluation.enums.EvaluationCycleEnums;
+import com.huaxu.evaluation.enums.EvaluationResultStatus;
 import com.huaxu.evaluation.service.EvaluationResultService;
 import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.exception.ServiceException;
 import com.huaxu.model.LoginUser;
 import com.huaxu.org.OrgInfoUtil;
 import com.huaxu.util.UserUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @ClassName EvaluationResultServiceImpl
  * @Description: 考评结果业务处理
@@ -32,18 +43,91 @@ public class EvaluationResultServiceImpl implements EvaluationResultService {
     @Autowired
     private OrgInfoUtil orgInfoUtil;
 
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+
     @Override
     public IPage<EvaluationResultVo> findPage(EvaluationResultDto dto) {
         EvaluationResultQueryDto queryDto = new EvaluationResultQueryDto();
         BeanUtils.copyProperties(dto, queryDto);
         // 获取用户权限
         LoginUser currentUser = UserUtil.getCurrentUser();
+        if (StringUtils.isEmpty(currentUser.getTenantId())){
+            return null;
+        }
         queryDto.setTenantId(currentUser.getTenantId());
         queryDto.setProgramItems(currentUser.getProgramItemList());
         queryDto.setUserType("3");
         queryDto.setPermissonType(currentUser.getPermissonType());
-        System.out.println(orgInfoUtil.getOrgName(266));
-        return evaluationResultMapper.findPage(new Page<>(dto.getPageNum(), dto.getPageSize()), queryDto);
+        // 格式化
+        format(queryDto);
+        Page<EvaluationResultVo> page =  evaluationResultMapper.findPage(new Page<>(dto.getPageNum(), dto.getPageSize()), queryDto);
+        List<EvaluationResultVo> list = page.getRecords();
+        if (CollectionUtil.isEmpty(list)) {
+            return page;
+        }
+        Map<String,String> stateMap = userCenterClient.selectListByPCodes("SC_EVALUATION_STATE");
+        Map<String,String> gradMap  = userCenterClient.selectListByPCodes("SC_EVALUATION_GRADE");
+        // 避免相同的id去缓存取
+        Map<String, String> companyOrgNameMap = new HashMap<>();
+        Map<String, String> deptOrgNameMap    = new HashMap<>();
+        for (EvaluationResultVo vo : list) {
+            if (StringUtils.isNotEmpty(vo.getCompanyOrgId())){
+                vo.setCompanyOrgName(getOrgName(companyOrgNameMap, vo.getCompanyOrgId()));
+            }
+            if (StringUtils.isNotEmpty(vo.getDeptOrgId())) {
+                vo.setDeptOrgName(getOrgName(deptOrgNameMap, vo.getDeptOrgId()));
+            }
+            vo.setState(stateMap.get(vo.getState()));
+            vo.setEvaluationGrade(gradMap.get(vo.getEvaluationGrade()));
+            vo.setCycle(vo.getYear() + "年" + vo.getMonth() + "月");
+        }
+        return page;
+    }
+
+
+
+    /**
+    * @Author lihui
+    * @Description 避免相同的id去缓存取
+    * @Date 14:39 2021/5/8
+    * @Param [map, id]
+    * @return java.lang.String
+    **/
+    private String getOrgName(Map<String, String> map, String id){
+        String value = map.get(id);
+        value = value != null ? value : orgInfoUtil.getOrgName(Integer.parseInt(id));
+        map.put(id, value);
+        return value;
+    }
+
+
+    private void format(EvaluationResultQueryDto dto){
+        Integer cycle = dto.getCycle();
+        if (cycle == null) {
+            throw new ServiceException(EvaluationResultStatus.PARAM_ERROR.getStatus(), EvaluationResultStatus.PARAM_ERROR.getMessage());
+        }
+        // 季度需要格式化
+        if (cycle == EvaluationCycleEnums.QUARTER.getType()){
+            Integer month = dto.getMonth();
+            if (month == null){
+                throw new ServiceException(EvaluationResultStatus.PARAM_ERROR.getStatus(), EvaluationResultStatus.PARAM_ERROR.getMessage());
+            }
+            if (month == 1) {
+                dto.setMonth(3);
+            } else if (month == 2 ){
+                dto.setMonth(6);
+            } else if (month == 3) {
+                dto.setMonth(9);
+            } else if (month == 4) {
+                dto.setMonth(12);
+            } else {
+                throw new ServiceException(EvaluationResultStatus.PARAM_ERROR.getStatus(), EvaluationResultStatus.PARAM_ERROR.getMessage());
+            }
+        }
+        // dto.setSort(dto.getSort() == null ? 1 : dto.getSort());
     }
 
+
 }

+ 56 - 0
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationResultTaskDetailsServiceImpl.java

@@ -0,0 +1,56 @@
+package com.huaxu.evaluation.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.evaluation.dao.EvaluationResultMapper;
+import com.huaxu.evaluation.dao.EvaluationResultTaskMapper;
+import com.huaxu.evaluation.dto.EvaluationResultDto;
+import com.huaxu.evaluation.dto.EvaluationResultQueryDto;
+import com.huaxu.evaluation.service.EvaluationResultService;
+import com.huaxu.evaluation.service.EvaluationResultTaskDetailsService;
+import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
+import com.huaxu.evaluation.vo.EvaluationResultVo;
+import com.huaxu.model.LoginUser;
+import com.huaxu.org.OrgInfoUtil;
+import com.huaxu.util.UserUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName EvaluationResultServiceImpl
+ * @Description: 考评结果业务处理
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Slf4j
+@Service
+public class EvaluationResultTaskDetailsServiceImpl implements EvaluationResultTaskDetailsService {
+
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    @Autowired
+    private EvaluationResultTaskMapper evaluationResultTaskMapper;
+
+    @Override
+    public EvaluationResultTaskDetailsVo findResultTaskDetail(Integer evaluationResultId) {
+        EvaluationResultTaskDetailsVo vo =  evaluationResultTaskMapper.findResultTaskDetail(evaluationResultId);
+        if (vo == null) {
+            return vo;
+        }
+        Map<String,String> gradMap  = userCenterClient.selectListByPCodes("SC_EVALUATION_GRADE");
+        vo.setEvaluationGrade(gradMap.get(vo.getEvaluationGrade()));
+        vo.setCycle(vo.getYear() + "年" + vo.getMonth() + "月");
+        return vo;
+    }
+}

+ 32 - 0
operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationItemValueVo.java

@@ -0,0 +1,32 @@
+package com.huaxu.evaluation.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName EvaluationItemValueVo
+ * @Description: 考评项分值
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评项分值")
+public class EvaluationItemValueVo {
+
+    @ApiModelProperty(value = "类型(0大于等于 1小于 2介于)")
+    private Integer itemType;
+
+    @ApiModelProperty(value = "得分")
+    private BigDecimal itemValue;
+
+    @ApiModelProperty(value = "分值区间1")
+    private BigDecimal valueOne;
+
+    @ApiModelProperty(value = "分值区间2")
+    private BigDecimal valueTwo;
+
+}

+ 46 - 0
operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationItemVo.java

@@ -0,0 +1,46 @@
+package com.huaxu.evaluation.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @ClassName EvaluationItemVo
+ * @Description: 考评项信息
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评项信息")
+public class EvaluationItemVo {
+
+    @ApiModelProperty(value = "考评项Id")
+    private Integer itemId;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "类型(0任务完成数 1任务按时完成率 2自定义)")
+    private Integer type;
+
+    @ApiModelProperty(value = "分值")
+    private BigDecimal value;
+
+    @ApiModelProperty(value = "条件值")
+    private BigDecimal valueCondition;
+
+    @ApiModelProperty(value = "周期(0月度 1季度 2年度)")
+    private String cycle;
+
+    @ApiModelProperty(value = "评分标准")
+    private String remarks;
+
+    @ApiModelProperty(value = "考评项分值")
+    private List<EvaluationItemValueVo> evaluationItemValueVoList;
+
+}

+ 36 - 0
operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultDetailsVo.java

@@ -0,0 +1,36 @@
+package com.huaxu.evaluation.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName EvaluationResultVo
+ * @Description: 考核结果出参
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考评结果详情")
+public class EvaluationResultDetailsVo {
+
+    @ApiModelProperty(value = "考评结果详情ID")
+    private Integer resultDetailsId;
+
+    @ApiModelProperty(value = "考评项名字")
+    private Integer itemName;
+
+    @ApiModelProperty(value = "考评项总分值")
+    private BigDecimal itemScore;
+
+    @ApiModelProperty(value = "考评得分")
+    private BigDecimal score;
+
+    @ApiModelProperty(value = "评分标准")
+    private String remarks;
+
+
+}

+ 69 - 0
operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultTaskDetailsVo.java

@@ -0,0 +1,69 @@
+package com.huaxu.evaluation.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @ClassName EvaluationResultVo
+ * @Description: 考核结果出参
+ * @Author lihui
+ * @Date 2021/5/7
+ * @Version V1.0
+ **/
+@Data
+@ApiModel(value = "考核结果返回信息")
+public class EvaluationResultTaskDetailsVo {
+
+    @ApiModelProperty(value = "任务总数")
+    private Integer resultId;
+
+    @ApiModelProperty(value = "租户ID")
+    private String tenantId;
+
+    @ApiModelProperty(value = "公司ID")
+    private Integer companyOrgId;
+
+    @ApiModelProperty(value = "任务总数")
+    private int totalCount;
+
+    @ApiModelProperty(value = "已完成")
+    private int completeCount;
+
+    @ApiModelProperty(value = "待完成")
+    private int noCompleteCount;
+
+    @ApiModelProperty(value = "延期完成")
+    private int delayCompleteCount;
+
+    @ApiModelProperty(value = "完成率")
+    private BigDecimal completionRate;
+
+    @ApiModelProperty(value = "延期率")
+    private BigDecimal delayRate;
+
+    @ApiModelProperty(value = "绩效得分")
+    private BigDecimal performanceScore;
+
+    @ApiModelProperty(value = "绩效等级")
+    private String evaluationGrade;
+
+    @ApiModelProperty(value = "考评周期")
+    private String cycle;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "考评年份")
+    private String year;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "考评月份")
+    private String month;
+
+    @ApiModelProperty(value = "考评项详情")
+    List<EvaluationResultDetailsVo> detailsVoList;
+}

+ 21 - 6
operation_manager/src/main/java/com/huaxu/evaluation/vo/EvaluationResultVo.java

@@ -1,5 +1,6 @@
 package com.huaxu.evaluation.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -20,18 +21,15 @@ public class EvaluationResultVo {
     @ApiModelProperty(value = "主键ID")
     private String id;
 
+    @ApiModelProperty(value = "主键ID")
+    private String tenantId;
+
     @ApiModelProperty(value = "被考评人")
     private String evaluationBe;
 
-    @ApiModelProperty(value = "所属公司ID")
-    private String companyOrgId;
-
     @ApiModelProperty(value = "所属公司名字")
     private String companyOrgName;
 
-    @ApiModelProperty(value = "所属部门ID")
-    private String deptOrgId;
-
     @ApiModelProperty(value = "所属部门名字")
     private String deptOrgName;
 
@@ -47,5 +45,22 @@ public class EvaluationResultVo {
     @ApiModelProperty(value = "绩效等级")
     private String evaluationGrade;
 
+    // 以下是不需要返回给前端的数据
+
+    @JsonIgnore
+    @ApiModelProperty(value = "考评年份")
+    private String year;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "考评月份")
+    private String month;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "所属部门ID")
+    private String deptOrgId;
+
+    @JsonIgnore
+    @ApiModelProperty(value = "所属公司ID")
+    private String companyOrgId;
 
 }

+ 46 - 0
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java

@@ -9,6 +9,8 @@ import com.huaxu.common.ConvertXY;
 import com.huaxu.common.FileUploadUtil;
 import com.huaxu.common.MyPoint;
 import com.huaxu.entity.Message;
+import com.huaxu.evaluation.enums.EvaluationResultStatus;
+import com.huaxu.exception.ServiceException;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
 import com.huaxu.model.Pagination;
@@ -1019,5 +1021,49 @@ public class WorkOrderManageController {
         List<WorkOrderManageDto> result=workOrderManageService.selectOrderStatus(workOrderManageDto);
         return new AjaxMessage<>(ResultStatus.OK, result );
     }
+
+    /**
+     * APP运维管理全部查询
+     * @return Response对象
+     */
+    @RequestMapping(value = "findWorkOrderPage", method = RequestMethod.GET)
+    @ApiOperation(value = "APP运维管理全部查询")
+    public AjaxMessage<Pagination<WorkOrderManageDto>> findWorkOrderPage(@ApiParam(value = "用户Id")@RequestParam(required = false) Integer userId,
+                                                              @ApiParam(value = "周期类型:1月度,2季度,3年度")@RequestParam(required = false) Integer cycle,
+                                                              @ApiParam(value = "年份")@RequestParam(required = false) Integer year,
+                                                              @ApiParam(value = "月份")@RequestParam(required = false) Integer month,
+                                                              @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
+                                                              @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize) {
+        String startTime = null;
+        String endTime   = null;
+        if (cycle == 2) {
+            if (month == 1) {
+                startTime = year + "-1-1 00:00:00";
+                endTime   = year + "-3";
+            } else if (month == 2 ){
+                startTime = year + "-4-1 00:00:00";
+                endTime   = year + "-6";
+            } else if (month == 3) {
+                startTime = year + "-7-1 00:00:00";
+                endTime   = year + "-9";
+            } else if (month == 4) {
+                startTime = year + "-10-1 00:00:00";
+                endTime   = year + "-12";
+            }
+        } else if (cycle == 1) {
+            startTime = year + "-" + month + "-1 00:00:00";
+            endTime   = year + "-" + month;
+        } else if (cycle == 3) {
+            startTime = year + "-1-1 00:00:00";
+            endTime   = year + "-12";
+        }
+        endTime = endTime + "-" + DatesUtil.getMouthDays(endTime) + " 23:59:59";
+        IPage<WorkOrderManageDto> iPage = new Page<>(pageNum, pageSize);
+        iPage = workOrderManageService.selectByTime(iPage, userId, startTime, endTime);
+        Pagination<WorkOrderManageDto> pages = new Pagination<>(iPage);
+        setName(pages.getList());
+        return new AjaxMessage<>(ResultStatus.OK, pages);
+    }
 }
 
+

+ 3 - 0
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java

@@ -174,8 +174,10 @@ public class WorkOrderStatisticsController {
         } else if (type == 1) {
             statistics = workOrderManageService.eventYearStatistics(workOrderManageDto);
         }
+        int seq=0;
         DecimalFormat df = new DecimalFormat("#0.00");
         for(Map<String,Object> map : statistics){
+            seq++;
             double number = 0;
             if(maintainerCount > 0){
                 number = Double.parseDouble(map.get("数量").toString())/maintainerCount;
@@ -183,6 +185,7 @@ public class WorkOrderStatisticsController {
             Map<String,Object> data = new HashMap<>();
             data.put("日期",map.get("日期"));
             data.put("数量",df.format(number));
+            data.put("序号",seq);
             average.add(data);
         }
         result.put("事件数量",statistics);

+ 3 - 0
operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java

@@ -101,6 +101,9 @@ public interface WorkOrderManageMapper {
 
     List<WorkOrderManageDto> selectOrderStatus(WorkOrderManageDto workOrderManageDto);
 
+    Page<WorkOrderManageDto> selectByTime( IPage<WorkOrderManageDto> page, @Param("userId")Integer userId, @Param("tenantId")String tenantId ,
+                                           @Param("startTime")String startTime, @Param("endTime")String endTime);
+
 
 
 

+ 6 - 0
operation_manager/src/main/java/com/huaxu/order/dto/StatisticsDto.java

@@ -19,4 +19,10 @@ public class StatisticsDto {
      */
     @ApiModelProperty(value = "统计数据")
     private Double statisticsValue;
+
+    /**
+     * 序号
+     */
+    @ApiModelProperty(value = "统计数据")
+    private int index;
 }

+ 9 - 0
operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java

@@ -129,4 +129,13 @@ public interface WorkOrderManageService {
      * 工单时长月统计
      */
     List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+    * @Author lihui
+    * @Description 查询个人工单信息
+    * @Date 9:13 2021/5/13
+    * @Param [page, userId, startTime, endTime]
+    * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.huaxu.order.dto.WorkOrderManageDto>
+    **/
+    Page<WorkOrderManageDto> selectByTime(IPage<WorkOrderManageDto> page, Integer userId, String startTime, String endTime);
 }

+ 21 - 1
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -233,7 +233,27 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
 
     @Override
     public List<StatisticsDto> orderDurationStatistics(WorkOrderManageDto workOrderManageDto) {
-        return workOrderManageMapper.orderDurationStatistics(workOrderManageDto);
+        List<StatisticsDto> result = new ArrayList<StatisticsDto>();
+        List<StatisticsDto> list = workOrderManageMapper.orderStatusStatistics(workOrderManageDto);
+        for(int i=1;i<=5;i++){
+            StatisticsDto statisticsDto = new StatisticsDto();
+            statisticsDto.setIndex(i);
+            statisticsDto.setStatisticsName(String.valueOf(i));
+            statisticsDto.setStatisticsValue(0.0);
+            result.add(statisticsDto);
+        }
+        for(int i=0;i<list.size();i++){
+            StatisticsDto statisticsDto = list.get(i);
+            StatisticsDto statisticsDto1 = result.get(Integer.parseInt(statisticsDto.getStatisticsName())-1);
+            statisticsDto1.setStatisticsValue(statisticsDto.getStatisticsValue());
+        }
+        return result;
+    }
+
+    @Override
+    public Page<WorkOrderManageDto> selectByTime(IPage<WorkOrderManageDto> page, Integer userId, String startTime, String endTime) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        return workOrderManageMapper.selectByTime(page, userId, currentUser.getTenantId(), startTime, endTime);
     }
 
     /**

+ 204 - 0
operation_manager/src/main/java/com/huaxu/utils/EvaluationUtil.java

@@ -0,0 +1,204 @@
+package com.huaxu.utils;
+
+import com.huaxu.evaluation.enums.EvaluationCycleEnums;
+import com.huaxu.evaluation.vo.EvaluationItemVo;
+import com.huaxu.util.DatesUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName EvaluationJobUtil
+ * @Description: TODO
+ * @Author lihui
+ * @Date 2021/5/10
+ * @Version V1.0
+ **/
+public class EvaluationUtil {
+
+    private static Calendar getCalendar(){
+        return Calendar.getInstance();
+    }
+
+    public static Calendar getCalendar (String dateTime){
+        Calendar calendar = getCalendar();
+        calendar.setTime(DatesUtil.parseDate(dateTime, "yyyy-MM-dd HH:mm:ss"));
+        return calendar;
+    }
+
+    public static Integer toInteger(Long lon) {
+        return lon == null ? null : lon.intValue();
+    }
+
+    public static BigDecimal divide(Integer completeCount, Integer total){
+        BigDecimal bigDecimalComplete =  new BigDecimal(completeCount.toString());
+        BigDecimal bigDecimalTotal =  new BigDecimal(total.toString());
+        return bigDecimalComplete.divide(bigDecimalTotal,2, RoundingMode.HALF_UP);
+    }
+
+    /**
+    * @Author lihui
+    * @Description 转换分钟
+    * @Date 17:11 2021/5/11
+    * @Param [dataLimit]
+    * @return int
+    **/
+    public static int minute(String dataLimit){
+        if (StringUtils.isEmpty(dataLimit)){
+            return 0;
+        }
+        return new BigDecimal(dataLimit).multiply(new BigDecimal("60")).intValue();
+    }
+
+    /**
+    * @Author lihui
+    * @Description 完成状态
+    * @Date 17:08 2021/5/11
+    * @Param [status]
+    * @return boolean
+    **/
+    public static boolean completed(Integer status){
+        return status == 2 || status == 3 ;
+    }
+
+    /**
+     * @Author lihui
+     * @Description 计算是否延期完成
+     * @Date 11:06 2021/5/11
+     * @Param [finishDate :最终完成时间, planFinishDate:预计完成时间, addMinute:可延期的时间]
+     * @return boolean
+     **/
+    public static boolean isDelay(Date finishDate, Date planFinishDate, int addMinute){
+        if (finishDate == null || planFinishDate == null) {
+            return false;
+        }
+        return finishDate.after(DatesUtil.addMinuteOfDate(planFinishDate,addMinute));
+    }
+
+    public static Long[] toLong (List<Integer> userIds){
+        Long [] longs = new Long[userIds.size()];
+        for (int i = 0 ; i < userIds.size(); i++) {
+            longs[i] =Long.parseLong(userIds.get(i).toString()) ;
+        }
+        return longs;
+    }
+
+    /**
+    * @Author lihui
+    * @Description 是否是当天
+    * @Date 17:08 2021/5/11
+    * @Param [evaluationDay]
+    * @return boolean
+    **/
+    public static boolean isToday(int evaluationDay){
+        return Calendar.getInstance().get(Calendar.DAY_OF_MONTH)  == evaluationDay;
+    }
+
+    /**
+    * @Author lihui
+    * @Description 是否是同月
+    * @Date 18:14 2021/5/11
+    * @Param [month]
+    * @return boolean
+    **/
+    public static boolean sameMonth(int month){
+        return Calendar.getInstance().get(Calendar.MONTH) + 1  == month;
+    }
+
+    public static boolean containsType(List<EvaluationItemVo> itemEntityList, Integer type){
+        List<String> list = itemEntityList.stream().map(EvaluationItemVo::getCycle).collect(Collectors.toList());
+        for (String str: list) {
+            if (str.indexOf(type.toString()) != -1) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static String getStartTime(int cycle, Integer year, Integer month){
+        int mark = month == null ? 1 : 2;
+        Calendar calendar = getCalendar();
+        year  = year == null ? calendar.get(Calendar.YEAR) : year;
+        Integer calendarMonth =  calendar.get(Calendar.MONTH) + 1;
+        Integer newMonth = month == null ? calendarMonth : month;
+        // 月度
+        if (cycle == EvaluationCycleEnums.MONTH.getType()) {
+            return year + "-" + toString(newMonth) + "-01 00:00:00";
+        }
+        if (cycle == EvaluationCycleEnums.QUARTER.getType()) {
+            Integer quMonth = null;
+            month = month == null ? calendarMonth(calendarMonth) : month;
+            if (month != null) {
+                quMonth = month == 1 ? 1 :
+                          month == 2 ? 4 :
+                          month == 3 ? 7 :
+                          month == 4 ? 10 : null;
+                year = mark == 1 && month == 4  ? year -1 : year;
+            }
+            if (quMonth == null) {
+                return null;
+            }
+            return year + "-"+toString(quMonth)+"-01 00:00:00";
+        }
+        if (cycle == EvaluationCycleEnums.YEAR.getType()) {
+            return year + "-01-01 00:00:00";
+        }
+        return null;
+    }
+
+    private static Integer calendarMonth(Integer calendarMonth){
+        switch (calendarMonth){
+            case 1 :
+                return 4;
+            case 4 :
+                return 1;
+            case 7 :
+                return 2;
+            case 10 :
+                return 3;
+        }
+        return null;
+    }
+
+    public static String getEndTime(int cycle, Integer year, Integer month){
+        int mark = month == null ? 1 : 2;
+        Calendar calendar = getCalendar();
+        year  = year == null ? calendar.get(Calendar.YEAR) : year;
+        Integer calendarMonth =  calendar.get(Calendar.MONTH) + 1;
+        Integer newMonth = month == null ? calendarMonth : month;
+        Integer quMonth = null;
+        // 月度
+        if (cycle == EvaluationCycleEnums.MONTH.getType()) {
+            quMonth = newMonth;
+        }
+        if (cycle == EvaluationCycleEnums.QUARTER.getType()) {
+            month = month == null ? calendarMonth(calendarMonth) : month;
+            if (month != null) {
+                quMonth = month == 1 ? 3 :
+                          month == 2 ? 6 :
+                          month == 3 ? 9 :
+                          month == 4 ? 12 : null;
+                year = mark == 1 && month == 4  ? year -1 : year;
+            }
+            if (quMonth == null) {
+                return null;
+            }
+        }
+        if (cycle == EvaluationCycleEnums.YEAR.getType()) {
+            quMonth = 12;
+        }
+        String monthStr = toString(quMonth);
+        return year + "-" + monthStr + "-" + DatesUtil.getMouthDays( year + "-" +monthStr) + " 23:59:59";
+    }
+
+    private static String toString (Integer var){
+        String result = var.toString();
+        return result.length() == 1 ?   "0" + result : result;
+    }
+
+}

+ 36 - 0
operation_manager/src/main/java/com/huaxu/utils/OperactionStringUtils.java

@@ -0,0 +1,36 @@
+package com.huaxu.utils;
+
+import java.util.List;
+
+/**
+ * @ClassName OperactionStringUtils
+ * @Description: TODO
+ * @Author lihui
+ * @Date 2021/5/8
+ * @Version V1.0
+ **/
+public class OperactionStringUtils {
+
+    /**
+     * @Author lihui
+     * @Description 检查值是否相同
+     * @Date 18:11 2021/5/8
+     * @Param [diffrent, list]
+     * @return boolean
+     **/
+    public static <T> boolean checkDifferent(List<T> different, List<T> list) {
+        if (different == null || list == null) {
+            return false;
+        }
+        if (different.size() != list.size() ){
+            return false;
+        }
+        for (T diff : different) {
+            if (!list.contains(diff)){
+                return false;
+            }
+        }
+        return true;
+    }
+
+}

+ 12 - 0
operation_manager/src/main/resources/application-dev.properties

@@ -86,6 +86,18 @@ UMIS.sys_excel_path=/UMIS_USER_EXCEL/
 UMIS.sys_video_path=/UMIS_USER_VIDEOS/
 wf.svg.file.path=D:/test/
 
+#=====================新增参数线程池配置
+#核心线程数
+aysnc.pool.core-size=50
+#最大线程数
+aysnc.pool.max-size=200
+#空闲线程保留时间
+aysnc.pool.keep-alive=200
+#队列容量
+aysnc.queue-capacity=100000
+#线程名称前缀
+aysnc.thread-name-prefix=aysnc-thread-
+
 
 
 

+ 11 - 0
operation_manager/src/main/resources/application-prd.properties

@@ -94,3 +94,14 @@ ribbon.ReadTimeout=5000
 ribbon.ConnectionTimeout=5000
 
 
+#=====================新增参数线程池配置
+#核心线程数
+aysnc.pool.core-size=50
+#最大线程数
+aysnc.pool.max-size=200
+#空闲线程保留时间
+aysnc.pool.keep-alive=200
+#队列容量
+aysnc.queue-capacity=100000
+#线程名称前缀
+aysnc.thread-name-prefix=aysnc-thread-

+ 11 - 0
operation_manager/src/main/resources/application-sit.properties

@@ -93,3 +93,14 @@ ribbon.ReadTimeout=5000
 ribbon.ConnectionTimeout=5000
 
 
+#=====================新增参数线程池配置
+#核心线程数
+aysnc.pool.core-size=50
+#最大线程数
+aysnc.pool.max-size=200
+#空闲线程保留时间
+aysnc.pool.keep-alive=200
+#队列容量
+aysnc.queue-capacity=100000
+#线程名称前缀
+aysnc.thread-name-prefix=aysnc-thread-

+ 35 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationItemMapper.xml

@@ -23,6 +23,24 @@
         <result property="updateBy" column="update_by"/>
     </resultMap>
 
+    <resultMap  id="evaluationItemVo" type="com.huaxu.evaluation.vo.EvaluationItemVo">
+        <result property="itemId" column="itemId"/>
+        <result property="name" column="NAME"/>
+        <result property="type" column="TYPE"/>
+        <result property="value" column="VALUE"/>
+        <result property="valueCondition" column="VALUE_CONDITION"/>
+        <result property="cycle" column="CYCLE"/>
+        <result property="remarks" column="REMARKS"/>
+        <collection property="evaluationItemValueVoList" resultMap="evaluationItemValueVo"></collection>
+    </resultMap>
+
+    <resultMap  id="evaluationItemValueVo" type="com.huaxu.evaluation.vo.EvaluationItemValueVo">
+        <result property="itemType" column="itemType"/>
+        <result property="itemValue" column="itemValue"/>
+        <result property="valueOne" column="VALUE_ONE"/>
+        <result property="valueTwo" column="VALUE_TWO"/>
+    </resultMap>
+
     <!--  实体栏位  -->
     <sql id="evaluationItemColumns">
          a.id as "id" ,
@@ -122,4 +140,21 @@
             </if>
         </where>
     </select>
+
+    <select id="findListItem" resultMap="evaluationItemVo">
+        SELECT
+        a.id as "itemId", a.`NAME`, a.`TYPE`,a.`VALUE`,a.VALUE_CONDITION,a.`CYCLE`,a.REMARKS,
+        v.`TYPE` as "itemType", v.`VALUE` as "itemValue", v.VALUE_ONE, v.VALUE_TWO
+        FROM sc_evaluation_item a
+        inner join sc_evaluation_item_value v on a.id = v.EVALUATION_ITEM_ID
+        <where>
+            a.COMPANY_ORG_ID = #{companyOrgId}
+            <if test="deptOrgId == null">
+                and a.DEPT_ORG_ID is null
+            </if>
+            and a.TENANT_ID = #{tenantId}
+            and a.status=1
+        </where>
+    </select>
+
 </mapper>

+ 21 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationResultDetailsMapper.xml

@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.huaxu.evaluation.dao.EvaluationResultDetailsMapper" >
+
+
+    <insert id="insertEvaluationResultDetails">
+        insert sc_evaluation_result_details (TENANT_ID,EVALUATION_RESULT_ID,EVALUATION_ITEM_ID,`VALUE`,`STATUS`,DATE_CREATE,CREATE_BY,DATE_UPDATE,UPDATE_BY)
+        values (#{tenantId}, #{evaluationResultId}, #{evaluationItemId}, #{value}, #{status}, #{dateCreate}, #{createBy}, #{dateUpdate}, #{updateBy})
+    </insert>
+
+    <select id="findResultDetailsIds" resultType="java.lang.Integer">
+        select  d.id
+        from  sc_evaluation_result r
+        INNER JOIN sc_evaluation_result_details d  on d.EVALUATION_RESULT_ID = r.ID
+        where
+            r.id = #{evaluationResultId}
+            and r.status = 1 and d.status = 1
+    </select>
+
+    <update id="updateEvaluateScore">
+        update sc_evaluation_result_details
+        set `VALUE` = #{score}
+        where id = #{detailId}
+    </update>
 </mapper>

+ 49 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationResultMapper.xml

@@ -4,6 +4,7 @@
 
     <sql id="evaluation_result_list" >
            a.ID,
+           a.TENANT_ID,
            a.COMPANY_ORG_ID,
            a.DEPT_ORG_ID,
            a.EVALUATION_BY,
@@ -19,6 +20,17 @@
            a.DATE_EVALUATION
     </sql>
 
+    <insert id="insertEvaluationResult" useGeneratedKeys="true"  keyProperty="id" parameterType="com.huaxu.evaluation.entity.EvaluationResultEntity">
+        insert sc_evaluation_result (TENANT_ID,COMPANY_ORG_ID,DEPT_ORG_ID,EVALUATION_BE,`STATE`,`CYCLE`,`YEAR`,`MONTH`,EVALUATION_GRADE,
+                `VALUE`,DATE_START,DATE_END,DATE_EVALUATION,STATUS,DATE_CREATE,CREATE_BY,DATE_UPDATE,UPDATE_BY)
+        values
+            (
+            #{item.tenantId}, #{item.companyOrgId}, #{item.deptOrgId}, #{item.evaluationBe}, #{item.state},
+            #{item.cycle}, #{item.year}, #{item.month}, #{item.evaluationGrade}, #{item.value},
+            #{item.dateStart}, #{item.dateEnd}, #{item.dateEvaluation}, #{item.status}, #{item.dateCreate},
+            #{item.createBy}, #{item.dateUpdate}, #{item.updateBy})
+    </insert>
+
     <select id="findPage" resultType="com.huaxu.evaluation.vo.EvaluationResultVo">
         select
         <include refid="evaluation_result_list"></include>
@@ -51,7 +63,44 @@
                     </foreach>
                     and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID = 0)
                 </if>
+                <if test="dto.userName != null">
+                    and a.EVALUATION_BE like CONCAT('%',#{dto.userName,jdbcType=VARCHAR},'%')
+                </if>
+                <if test="dto.companyOrgId != null">
+                    and a.COMPANY_ORG_ID = #{dto.companyOrgId}
+                </if>
+                <if test="dto.deptOrgId != null">
+                    and a.DEPT_ORG_ID = #{dto.deptOrgId}
+                </if>
+                <if test="dto.sort == 1 and dto.state != null">
+                    and a.`STATE` = #{dto.state}
+                </if>
+                <if test="dto.sort == 2">
+                    and a.`STATE` = 1
+                </if>
+                and a.`cycle` = #{dto.cycle}
+                and a.`YEAR`  = #{dto.year}
+                <if test="dto.cycle != 2">
+                    and a.`month` = #{dto.month}
+                </if>
             </if>
         </where>
+        <if test="dto.sort == 1">
+            order by a.date_start desc,a.`state`
+        </if>
+        <if test="dto.sort == 2">
+            order by a.date_start desc,a.`VALUE` desc
+        </if>
     </select>
+
+    <select id="findEvaluationState" resultType="java.lang.Integer">
+        select `state` from sc_evaluation_result where id =#{evaluationResultId}
+    </select>
+
+    <update id="updateEvaluationScore">
+        update  sc_evaluation_result
+        set `VALUE` = #{score}, `state` = 1, EVALUATION_GRADE = #{evaluationGrade},UPDATE_BY = #{updateBy},
+            DATE_UPDATE = #{dateUpdate},DATE_EVALUATION =#{dateEvaluation},EVALUATION_BY =#{evaluationBy}
+        where id = #{evaluationResultId}
+    </update>
 </mapper>

+ 57 - 0
operation_manager/src/main/resources/mapper/evaluation/EvaluationResultTaskMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.huaxu.evaluation.dao.EvaluationResultTaskMapper" >
+
+
+    <resultMap id="evaluationResultTaskDetailsVo" type="com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo">
+        <result property="resultId" column="resultId" jdbcType="INTEGER"/>
+        <result property="tenantId" column="TENANT_ID" jdbcType="INTEGER"/>
+        <result property="companyOrgId" column="COMPANY_ORG_ID" jdbcType="INTEGER"/>
+        <result property="totalCount" column="TOTAL_COUNT" jdbcType="INTEGER"/>
+        <result property="completeCount" column="COMPLETE_COUNT" jdbcType="INTEGER"/>
+        <result property="noCompleteCount" column="NO_COMPLETE_COUNT" jdbcType="INTEGER"/>
+        <result property="delayCompleteCount" column="DELAY_COMPLETE_COUNT" jdbcType="INTEGER"/>
+        <result property="completionRate" column="COMPLETION_RATE" jdbcType="INTEGER"/>
+        <result property="delayRate" column="DELAY_RATE" jdbcType="INTEGER"/>
+        <result property="performanceScore" column="performanceScore" jdbcType="INTEGER"/>
+        <result property="evaluationGrade" column="EVALUATION_GRADE" jdbcType="INTEGER"/>
+        <result property="year" column="YEAR" jdbcType="INTEGER"/>
+        <result property="month" column="MONTH" jdbcType="INTEGER"/>
+        <result property="delayCompleteCount" column="DELAY_COMPLETE_COUNT" jdbcType="INTEGER"/>
+
+        <collection property="detailsVoList"  resultMap="detailsVoMap"></collection>
+    </resultMap>
+
+    <resultMap id="detailsVoMap" type="com.huaxu.evaluation.vo.EvaluationResultDetailsVo">
+        <result property="resultDetailsId" column="resultDetailsId" jdbcType="INTEGER"/>
+        <result property="itemName" column="itemName" jdbcType="INTEGER"/>
+        <result property="itemScore" column="itemScore" jdbcType="INTEGER"/>
+        <result property="score" column="score" jdbcType="INTEGER"/>
+        <result property="remarks" column="remarks" jdbcType="INTEGER"/>
+    </resultMap>
+
+
+    <select id="findResultTaskDetail" resultMap="evaluationResultTaskDetailsVo">
+        select
+            r.id as "resultId",r.`YEAR`, r.`MONTH`,r.`VALUE` as "performanceScore",r.EVALUATION_GRADE,r.COMPANY_ORG_ID,r.TENANT_ID,
+            t.TOTAL_COUNT,t.COMPLETE_COUNT,t.NO_COMPLETE_COUNT,t.DELAY_COMPLETE_COUNT,t.COMPLETION_RATE,t.DELAY_RATE,
+            d.ID as "resultDetailsId", d.`VALUE` as "score",
+            i.`NAME` as "itemName",i.`VALUE` as "itemScore",i.REMARKS
+        from
+            sc_evaluation_result r
+        INNER JOIN sc_evaluation_result_task t     on t.EVALUATION_RESULT_ID = r.ID
+        INNER JOIN sc_evaluation_result_details d  on d.EVALUATION_RESULT_ID = r.ID
+        INNER JOIN sc_evaluation_item i            on i.id = d.EVALUATION_ITEM_ID
+        where
+              r.id = #{evaluationResultId} and r.status = 1 and t.status =1 and d.status = 1 and i.status = 1
+    </select>
+
+    <insert id="insertEvaluationResultTask">
+        insert sc_evaluation_result_task (TENANT_ID,EVALUATION_RESULT_ID,TOTAL_COUNT,COMPLETE_COUNT,NO_COMPLETE_COUNT,DELAY_COMPLETE_COUNT,COMPLETION_RATE
+                ,DELAY_RATE,`STATUS`,DATE_CREATE,CREATE_BY,DATE_UPDATE,UPDATE_BY)
+        values
+            (#{tenantId}, #{evaluationResultId}, #{totalCount}, #{completeCount}, #{noCompleteCount},
+        #{delayCompleteCount}, #{completionRate}, #{delayRate}, #{status}, #{dateCreate},
+        #{createBy}, #{dateUpdate}, #{updateBy})
+    </insert>
+</mapper>

+ 23 - 4
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -1139,11 +1139,11 @@
       else 5 end duration
       from
       (
-      select TIMESTAMPDIFF(MINUTE,date_create,finish_date)/60 duration
+      select TIMESTAMPDIFF(DAY,date_create,finish_date) duration
       from sc_work_order_manage t1
-      <where>t1.order_status=2
-        and t1.
-        date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      <where>
+        (t1.order_status=2 or t1.order_status=3)
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
         and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
         <if test="order.tenantId != null and order.tenantId != ''">
             and t1.tenant_id = #{order.tenantId}
@@ -1179,4 +1179,23 @@
         )a ) b
       group by duration
   </select>
+
+  <select id="selectByTime" resultMap="BaseResultMap">
+    select distinct t1.id,task_no,send_time,address,order_type_id,current_task_name,t1.create_by,t1.update_by,task_desc,order_status,in_process_status,t1.plan_finish_date,t1.finish_date,t1.date_create,t1.date_limit
+    from sc_work_order_manage t1
+           left join sc_work_flow_log t2 ON t1.id=t2.flow_id and flow_type=2 and find_in_set(#{userId},handle_user_id) and left(flow_result,2)='拒单'
+    where (find_in_set(#{userId},current_users)
+       or t1.id in(select flow_id from sc_work_flow_log where flow_type=2 and find_in_set(#{userId},handle_user_id)))
+      and tenant_id = #{tenantId}
+      and (t2.id is null or t1.order_user_id=t2.handle_user_id)
+      and t1.date_create between #{startTime} and #{endTime}
+    union
+    select id,plan_id,plan_date,task_area_name,task_type,current_task_name,create_by,update_by,task_content,plan_status,in_process_status,plan_end_date,finish_date,date_create,"0"
+    from sc_plan_manage
+    where (find_in_set(#{userId},current_users)
+      or id in(select flow_id from sc_work_flow_log where flow_type=1 and find_in_set(#{userId},handle_user_id)))
+      and tenant_id = #{tenantId}
+      and date_create between #{startTime} and #{endTime}
+    order by send_time desc
+  </select>
 </mapper>

+ 0 - 1
operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml

@@ -639,7 +639,6 @@
       </if>
     </if>
   </select>
-
   <select id="selectTaskChangeTrend" resultType="com.huaxu.task.dto.TaskChangeTendDto" >
     select
       tab1.dateCreate,

+ 15 - 1
readme.md

@@ -227,4 +227,18 @@ CREATE TABLE `sms_device_setup_method` (
 
 ### sc_work_order_manage、sc_plan_manage 添加字段in_process_status
 ALTER TABLE sc_work_order_manage ADD in_process_status int(11) null COMMENT '处理中状态(null未接单、1已接单、2已提交、3已审核)';
-ALTER TABLE sc_plan_manage ADD in_process_status int(11) null COMMENT '处理中状态(null未提交、2已提交、3已审核)'
+ALTER TABLE sc_plan_manage ADD in_process_status int(11) null COMMENT '处理中状态(null未提交、2已提交、3已审核)'
+
+## uims 用户中心数据库
+CREATE TABLE `uims_ver_manage` (
+  `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', 
+  `VER_ID` varchar(255) COLLATE utf8mb4_croatian_ci DEFAULT NULL COMMENT '版本号',
+  `VER_URL` varchar(255) COLLATE utf8mb4_croatian_ci DEFAULT NULL COMMENT 'App URL',
+  `IS_FORCED_UPGRADE` int(1) DEFAULT NULL COMMENT '是否强制升级',
+  `REMARK` varchar(255) COLLATE utf8mb4_croatian_ci DEFAULT NULL COMMENT '备注',
+  `CREATE_BY` varchar(255) COLLATE utf8mb4_croatian_ci DEFAULT NULL COMMENT '创建人',
+  `DATE_CREATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `UPDATE_BY` varchar(255) COLLATE utf8mb4_croatian_ci DEFAULT NULL COMMENT '更新人',
+  `DATE_UPDATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`ID`)
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_croatian_ci COMMENT='APP版本表';

+ 9 - 0
sms_water/src/main/java/com/huaxu/controller/SceneController.java

@@ -209,4 +209,13 @@ public class SceneController {
         sceneService.saveUpdateBatch(deviceScenes);
         return new AjaxMessage<>(ResultStatus.OK,1 );
     }
+
+    @RequestMapping(value = "/selectAlarmSceneAndDevice", method = RequestMethod.GET)
+    @ResponseBody
+    @ApiOperation(value = "场景及设备故障率")
+    public  AjaxMessage<List<SceneEntity>> selectAlarmSceneAndDevice(@ApiParam(value = "父级场景ID", required = false)@RequestParam(required = false) Long id) {
+        List<SceneEntity> sceneEntities = sceneService.findByParentId(id);
+        return new AjaxMessage<>(ResultStatus.OK, sceneEntities);
+    }
+
 }

+ 1 - 0
sms_water/src/main/java/com/huaxu/dao/SceneMapper.java

@@ -46,5 +46,6 @@ public interface SceneMapper extends BaseMapper<SceneEntity> {
 
     List<Map<String,Object>> findSceneAmount(@Param("scene") SceneEntity sceneEntity,@Param("months") Integer months);
 
+    List<Map<String,Object>> selectAlarmSceneAndDevice(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate);
     /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 4 - 0
sms_water/src/main/java/com/huaxu/service/SceneService.java

@@ -445,4 +445,8 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         sceneEntity.setCompanyOrgId(companyOrgId);
         return sceneMapper.selectByTypeName(sceneEntity);
     }
+
+    List<Map<String,Object>> selectAlarmSceneAndDevice(SceneEntity sceneEntity, String startDate, String endDate){
+        return sceneMapper.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate);
+    }
 }

+ 91 - 0
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -428,4 +428,95 @@
             </if>
         </where>
     </select>
+    <!--报警场景及报警设备查询-->
+    <select id="selectAlarmSceneAndDevice" resultType="map">
+        select count(1) amount,a.id,a.SCENE_NAME name,2 type
+        from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+        INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+        <where>
+            a.PARENT_SCENE_ID=0 and a.STATUS=1
+            <if test="scene.tenantId != null  and scene.tenantId != ''">
+                and a.tenant_id = #{scene.tenantId}
+            </if>
+            <if test="scene.userType!=null and scene.userType!=-999 and scene.userType!=-9999 and  scene.programItems != null and scene.programItems.size() > 0">
+                <if test="scene.permissonType == 5 or scene.permissonType == 2">
+                    and ( a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="scene.permissonType == 4 or scene.permissonType == 3">
+                    and a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="scene.permissonType == 1">
+                    and a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID =0)
+                </if>
+            </if>
+            and c.date_create &gt;= date_format(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            and SCENE_TYPE_NAME in('水源','水厂','泵站')
+        </where>
+        group by a.SCENE_NAME, a.ID, 2
+
+        union all
+
+        select count(1) amount,a.id,d.DEVICE_NAME name,1 type
+        from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+        INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+        INNER JOIN sms_device d on c.DEVICE_ID=d.ID
+        <where>
+            a.PARENT_SCENE_ID=0 and a.STATUS=1
+            <if test="scene.tenantId != null  and scene.tenantId != ''">
+                and a.tenant_id = #{scene.tenantId}
+            </if>
+            <if test="scene.userType!=null and scene.userType!=-999 and scene.userType!=-9999 and  scene.programItems != null and scene.programItems.size() > 0">
+                <if test="scene.permissonType == 5 or scene.permissonType == 2">
+                    and ( a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="scene.permissonType == 4 or scene.permissonType == 3">
+                    and a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="scene.permissonType == 1">
+                    and a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID =0)
+                </if>
+            </if>
+            and c.date_create &gt;= date_format(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+            and SCENE_TYPE_NAME='管网'
+        </where>
+        group by d.DEVICE_NAME, d.ID, 1
+    </select>
+
+
+
+
 </mapper>

+ 1 - 1
user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java

@@ -17,7 +17,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .and()
                 .authorizeRequests()
                 .antMatchers("/swagger-ui.html","/webjars/**", "/webjars/**", "/swagger-resources/**",
-                       "/user/findUserIdsByPermissonOrg",
+                       "/user/findUserIdsByPermissonOrg","/user/findUserIdsByUserIds","/verManage/selectVer",
                        "/v2/**")
                 .permitAll() //配置不需要身份认证的请求路径
                 .anyRequest().authenticated() //其他所有访问路径都需要身份认证

+ 48 - 0
user_center/src/main/java/com/huaxu/controller/VerManageController.java

@@ -0,0 +1,48 @@
+package com.huaxu.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.entity.App;
+import com.huaxu.entity.VerManageEntity;
+import com.huaxu.model.*;
+import com.huaxu.service.AppService;
+import com.huaxu.service.VerManageService;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * app版本表控制层
+ *
+ * @author yjy
+ * @since 2021-5-13
+ */
+@RestController
+@RequestMapping("/verManage")
+@Api(tags = "app版本")
+public class VerManageController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private VerManageService verManageService;
+
+    /**
+     * 查询app版本信息
+     * @return 单条数据
+     */
+    @RequestMapping(value = "selectVer", method = RequestMethod.GET)
+    @ApiOperation(value = "查询app版本信息")
+    public AjaxMessage<VerManageEntity> selectVer() {
+        return new AjaxMessage<>(ResultStatus.OK, verManageService.selectVer());
+    }
+}

+ 23 - 0
user_center/src/main/java/com/huaxu/dao/VerManageMapper.java

@@ -0,0 +1,23 @@
+package com.huaxu.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.entity.UserEntity;
+import com.huaxu.entity.VerManageEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *
+ * VerManageMapper
+ * @author: yjy
+ * @date 2021-5-13
+ */
+@Mapper
+public interface VerManageMapper extends BaseMapper<VerManageEntity> {
+
+}

+ 65 - 0
user_center/src/main/java/com/huaxu/entity/VerManageEntity.java

@@ -0,0 +1,65 @@
+package com.huaxu.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.huaxu.model.ProgramItem;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * uims_ver_manage
+ * @author: yjy
+ * @date 2021-5-13
+ */
+@Data
+@TableName("uims_ver_manage")
+@NoArgsConstructor
+public class VerManageEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @ApiModelProperty(value = "主键")
+    @TableId(type=IdType.AUTO)
+    private Long id;
+
+    /** 版本号 */
+    @ApiModelProperty(value = "版本号")
+    private String verId;
+
+    /** App URL */
+    @ApiModelProperty(value = "App URL")
+    private String verUrl;
+
+    /** 是否强制升级 */
+    @ApiModelProperty(value = "是否强制升级(0不强制、1强制)")
+    private Integer isForcedUpgrade;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    /** 创建者 */
+    @ApiModelProperty(value = "创建者")
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
+    private Date dateCreate;
+
+    /** 更新者 */
+    @ApiModelProperty(value = "更新者")
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @ApiModelProperty(value = "更新时间")
+    private Date dateUpdate;
+}

+ 51 - 0
user_center/src/main/java/com/huaxu/service/VerManageService.java

@@ -0,0 +1,51 @@
+package com.huaxu.service;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaxu.common.ToolUtil;
+import com.huaxu.dao.OrgMapper;
+import com.huaxu.dao.UserMapper;
+import com.huaxu.dao.VerManageMapper;
+import com.huaxu.dto.MaintainerCountDto;
+import com.huaxu.dto.UserListDto;
+import com.huaxu.entity.*;
+import com.huaxu.model.LoginUser;
+import com.huaxu.util.ByteArrayUtils;
+import com.huaxu.util.RedisUtil;
+import com.huaxu.util.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * APP版本Service接口
+ * @author: yjy
+ * @date 2021-5-13
+ */
+@Service
+public class VerManageService extends ServiceImpl<VerManageMapper, VerManageEntity> {
+
+	public VerManageEntity selectVer(){
+		VerManageEntity res=null;
+		List<VerManageEntity> list=this.list();
+		if(list.size()>0){
+			res=list.get(0);
+		}
+		return res;
+	}
+}