jiawuxian 1 год назад
Родитель
Сommit
f3e790f9d6
21 измененных файлов с 446 добавлено и 116 удалено
  1. 6 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java
  2. 22 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/NumberUtils.java
  3. 22 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/controller/WebCockpitController.java
  4. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/TaskStatisticDto.java
  5. 35 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebGA38InfoDto.java
  6. 27 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebSyntheticQuestionDto.java
  7. 31 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/CockpitMapper.java
  8. 18 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/CockpitService.java
  9. 19 39
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java
  10. 146 42
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/CockpitServiceImpl.java
  11. 13 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgGA38StatisticVo.java
  12. 16 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgInfoVo.java
  13. 17 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgSecurityInfo.java
  14. 14 14
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/QuestionStatisticVo.java
  15. 23 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/VisitInfoVo.java
  16. 15 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/WebDrillInfoVo.java
  17. 12 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/WebSafetyCheckVo.java
  18. 3 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  19. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  20. 2 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java
  21. 1 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

+ 6 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/DateUtils.java

@@ -171,6 +171,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return toLocalDateTime(date).toLocalDate();
     }
 
+    /**
+     * 适用于教育培训、预案演练
+     * @param date
+     * @param cycle
+     * @return
+     */
     public static DateRange getStartAndEnd(Date date, Integer cycle) {
         LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
         LocalDateTime startDateTime;

+ 22 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/utils/NumberUtils.java

@@ -0,0 +1,22 @@
+package com.xunmei.common.core.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+
+public class NumberUtils {
+    /**
+     * 计算比例
+     *
+     * @param total
+     * @param divisor
+     * @return
+     */
+    public static float computeRate(Integer total, Integer divisor) {
+        if (ObjectUtil.equal(total, 0) || ObjectUtil.isNull(total)) {
+            return 1F;
+        } else if (ObjectUtil.equal(divisor, 0) || ObjectUtil.isNull(divisor)) {
+            return 0F;
+        } else {
+            return (divisor.floatValue() / total.floatValue());
+        }
+    }
+}

+ 22 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/controller/WebCockpitController.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.core.board.dto.web.TaskStatisticDto;
 import com.xunmei.core.board.service.CockpitService;
+import com.xunmei.core.board.vo.web.VisitInfoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
@@ -76,8 +77,27 @@ public class WebCockpitController extends BaseController {
      */
     @ApiOperation(value = "统计GA38达标情况")
     @GetMapping("/orgga38")
-    public AjaxResult orgGA38(Long orgId) {
-        return success(cockpitService.orgGA38(orgId));
+    public AjaxResult orgGA38(TaskStatisticDto dto) {
+        return success(cockpitService.orgGA38(dto));
+    }
+
+    /**
+     * 机构信息
+     */
+    @ApiOperation(value = "统计机构信息")
+    @GetMapping("/orginfo")
+    public AjaxResult orgInfo(String orgPath) {
+        return success(cockpitService.orgInfo(orgPath));
+    }
+
+    /**
+     * 本月来访
+     *
+     * @param orgPath
+     * @return
+     */
+    public AjaxResult currentMonthVisitInfo(String orgPath) {
+        return success(cockpitService.currentMonthVisitInfo(orgPath));
     }
 
     /**

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/TaskStatisticDto.java

@@ -16,6 +16,9 @@ public class TaskStatisticDto {
     @NotNull
     private Long orgId;
 
+
+    private String orgPath;
+
     /**
      * 统计周期
      */

+ 35 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebGA38InfoDto.java

@@ -0,0 +1,35 @@
+package com.xunmei.core.board.dto.web;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * APP驾驶舱总览GA38信息
+ */
+@Data
+public class WebGA38InfoDto {
+    /**
+     * 应完成数
+     */
+    private int total;
+
+    private String path;
+
+    @ApiModelProperty("GA38-2021总达标数")
+    private int  ga382021;
+
+    @ApiModelProperty("本周期的GA38-2021达标数")
+    private int  ga382021current;
+
+    @ApiModelProperty("本周期前的GA38-2021达标数")
+    private int  ga382021prev;
+
+    @ApiModelProperty("本周期前的GA38-2015达标数")
+    private int  ga382015;
+
+    @ApiModelProperty("本周期的GA38-2015达标数")
+    private int  ga382015current;
+
+    @ApiModelProperty("本周期前的GA38-2015达标数")
+    private int  ga382015prev;
+}

+ 27 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/dto/web/WebSyntheticQuestionDto.java

@@ -0,0 +1,27 @@
+package com.xunmei.core.board.dto.web;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class WebSyntheticQuestionDto {
+    private int total;
+
+    @ApiModelProperty("待确认")
+    private int unconfirmedCount;
+
+    @ApiModelProperty("有异议(只有安全检查才会)")
+    private int dissentCount;
+
+    @ApiModelProperty("已关闭")
+    private int closedCount;
+
+    @ApiModelProperty("待整改")
+    private int waitReformCount;
+
+    @ApiModelProperty("已整改")
+    private int reformedCount;
+
+    @ApiModelProperty("已逾期")
+    private int ovedueCount;
+}

+ 31 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/mapper/CockpitMapper.java

@@ -1,26 +1,52 @@
 package com.xunmei.core.board.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.xunmei.core.board.vo.web.OrgGA38StatisticVo;
-import com.xunmei.core.board.vo.web.QuestionStatisticVo;
-import com.xunmei.core.board.vo.web.TaskStatisticVo;
+import com.xunmei.core.board.dto.app.AppSyntheticQuestionDto;
+import com.xunmei.core.board.dto.web.WebGA38InfoDto;
+import com.xunmei.core.board.dto.web.WebSyntheticQuestionDto;
+import com.xunmei.core.board.vo.web.*;
 import org.apache.ibatis.annotations.Param;
+import org.omg.CORBA.INTERNAL;
 
 import java.util.List;
 import java.util.Date;
+import java.util.Map;
+
 public interface CockpitMapper extends BaseMapper {
     List<TaskStatisticVo> resumption(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
 
-    List<TaskStatisticVo> safetyCheck(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
+    List<WebSafetyCheckVo> safetyCheck(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
 
     List<TaskStatisticVo> edu(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
     List<TaskStatisticVo> monitor(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
 
     List<TaskStatisticVo> drill(@Param("startDate") Date start,@Param("endDate") Date end,@Param("orgPath") String orgPath);
 
-    List<OrgGA38StatisticVo> orgGA38(@Param("orgId") Long orgId);
+    List<WebGA38InfoDto> orgGA38(@Param("orgId") String orgPath, @Param("date") Date date);
+
+    OrgInfoVo orgInfo(@Param("orgPath") String orgPath);
+
+    VisitInfoVo currentMonthVisitInfo(@Param("orgPath") String orgPath, @Param("startDate") Date startDate);
 
     QuestionStatisticVo question(@Param("date") Date start,@Param("orgPath") String orgPath);
+
+
+
+    /**
+     *
+     * @param orgPath
+     * @param startDate
+     * @return
+     */
+    WebSyntheticQuestionDto selectQuestion(@Param("orgPath") String orgPath, @Param("startDate") Date startDate);
+    /**
+     * 获取逾期未整改数量
+     * @param orgPath
+     * @param startDate
+     * @return
+     */
+    Map<String,Integer> selectOverDueQuestionCount(@Param("orgPath") String orgPath, @Param("startDate") Date startDate);
+
 }
 
 

+ 18 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/CockpitService.java

@@ -1,9 +1,7 @@
 package com.xunmei.core.board.service;
 
 import com.xunmei.core.board.dto.web.TaskStatisticDto;
-import com.xunmei.core.board.vo.web.OrgGA38StatisticVo;
-import com.xunmei.core.board.vo.web.QuestionStatisticVo;
-import com.xunmei.core.board.vo.web.TaskStatisticVo;
+import com.xunmei.core.board.vo.web.*;
 
 import java.util.List;
 
@@ -16,7 +14,7 @@ public interface CockpitService {
     /**
      * 统计近期下级机构安全检查情况
      */
-    List<TaskStatisticVo> safetyCheck(TaskStatisticDto dto);
+    List<WebSafetyCheckVo> safetyCheck(TaskStatisticDto dto);
 
     /**
      * 统计近期下级视频调阅情况
@@ -31,12 +29,26 @@ public interface CockpitService {
     /**
      * 统计近期下级机构预案演练情况
      */
-    List<TaskStatisticVo> drill(TaskStatisticDto dto);
+    List<WebDrillInfoVo> drill(TaskStatisticDto dto);
+
 
     /**
      * 统计GA38达标情况
      */
-    List<OrgGA38StatisticVo> orgGA38(Long orgId);
+    List<OrgGA38StatisticVo> orgGA38(TaskStatisticDto dto);
+
+    /**
+     * 机构信息
+     * @return
+     */
+    OrgInfoVo orgInfo(String orgPath);
+
+    /**
+     * 本月来访
+     * @param orgPath
+     * @return
+     */
+    VisitInfoVo currentMonthVisitInfo(String orgPath);
 
     /**
      * 隐患统计

+ 19 - 39
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java

@@ -11,6 +11,7 @@ import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.utils.NumberUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.core.board.dto.app.*;
 import com.xunmei.core.board.mapper.AppCockpitMapper;
@@ -129,19 +130,19 @@ public class AppCockpitServiceImpl implements AppCockpitService {
 
         vo.setBanking2021(new AppGa38RateVo());
         vo.getBanking2021().setTotal(baseInfoDto.getBankingCount());
-        vo.getBanking2021().setRate(computeRate(baseInfoDto.getBankingCount(), baseInfoDto.getBankingGA382021()));
+        vo.getBanking2021().setRate(NumberUtils.computeRate(baseInfoDto.getBankingCount(), baseInfoDto.getBankingGA382021()));
 
         vo.setBanking2015(new AppGa38RateVo());
         vo.getBanking2015().setTotal(baseInfoDto.getBankingCount());
-        vo.getBanking2015().setRate(computeRate(baseInfoDto.getBankingCount(), baseInfoDto.getBankingGA382015()));
+        vo.getBanking2015().setRate(NumberUtils.computeRate(baseInfoDto.getBankingCount(), baseInfoDto.getBankingGA382015()));
 
         vo.setOfflineATM2021(new AppGa38RateVo());
         vo.getOfflineATM2021().setTotal(baseInfoDto.getOffATMCount());
-        vo.getOfflineATM2021().setRate(computeRate(baseInfoDto.getOffATMCount(), baseInfoDto.getOffATMGA382021()));
+        vo.getOfflineATM2021().setRate(NumberUtils.computeRate(baseInfoDto.getOffATMCount(), baseInfoDto.getOffATMGA382021()));
 
         vo.setOfflineATM2015(new AppGa38RateVo());
         vo.getOfflineATM2015().setTotal(baseInfoDto.getOffATMCount());
-        vo.getOfflineATM2015().setRate(computeRate(baseInfoDto.getOffATMCount(), baseInfoDto.getOffATMGA382015()));
+        vo.getOfflineATM2015().setRate(NumberUtils.computeRate(baseInfoDto.getOffATMCount(), baseInfoDto.getOffATMGA382015()));
 
         vo.setBusinessStoreInfo(new LinkedHashMap<>());
         vo.getBusinessStoreInfo().put("一类库", baseInfoDto.getBusinessLibraryOne());
@@ -310,7 +311,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
             List<AppSyntheticTaskCategoryDto> used = taskCategoryDtos.stream().filter(d -> types.contains(d.getPlanType())).collect(Collectors.toList());
             int total = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getTotal).sum();
             int completed = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getCompleted).sum();
-            Float rate = computeRate(total, completed);
+            Float rate = NumberUtils.computeRate(total, completed);
 
             vo.getRateByType().put(label, rate);
             vo.getInfoByType().put(label, AppSyntheticTaskInfoVo.builder()
@@ -345,22 +346,22 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         vo.getRateByState().put("待整改", (float) questionDto.getWaitReformCount());
         vo.getRateByState().put("已逾期", (float) overdueCount);
         vo.getRateByState().put("已整改", (float) questionDto.getReformedCount());
-        vo.getRateByState().put("整改率", computeRate(questionDto.getConfirmedCount(), questionDto.getReformedCount()));
+        vo.getRateByState().put("整改率", NumberUtils.computeRate(questionDto.getConfirmedCount(), questionDto.getReformedCount()));
 
         vo.getResumption().put("隐患数", (float) questionDto.getResumptionCount());
         vo.getResumption().put("已整改", (float) questionDto.getResumptionReformedCount());
-        vo.getResumption().put("整改率", computeRate(questionDto.getResumptionCount(), questionDto.getResumptionReformedCount()));
+        vo.getResumption().put("整改率", NumberUtils.computeRate(questionDto.getResumptionCount(), questionDto.getResumptionReformedCount()));
 
         vo.getOffATMCheck().put("隐患数", (float) questionDto.getOffATMResumptionCount());
         vo.getOffATMCheck().put("已整改", (float) questionDto.getOffATMResumptionReformedCount());
-        vo.getOffATMCheck().put("整改率", computeRate(questionDto.getOffATMResumptionCount(), questionDto.getOffATMResumptionReformedCount()));
+        vo.getOffATMCheck().put("整改率", NumberUtils.computeRate(questionDto.getOffATMResumptionCount(), questionDto.getOffATMResumptionReformedCount()));
 
         vo.getSafetyCheck().put("隐患数", (float) questionDto.getSafetyCheckCount());
         vo.getSafetyCheck().put("有异议", (float) questionDto.getDissentCount());
         vo.getSafetyCheck().put("已取消", (float) questionDto.getCancelCount());
         vo.getSafetyCheck().put("已确认", (float) questionDto.getSafetyCheckConfirmedCount());
         vo.getSafetyCheck().put("已整改", (float) questionDto.getSafetyCheckReformCount());
-        vo.getSafetyCheck().put("整改率", computeRate(questionDto.getSafetyCheckConfirmedCount(), questionDto.getSafetyCheckReformCount()));
+        vo.getSafetyCheck().put("整改率", NumberUtils.computeRate(questionDto.getSafetyCheckConfirmedCount(), questionDto.getSafetyCheckReformCount()));
 
         return vo;
 
@@ -381,7 +382,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
             int total = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getTotal).sum();
             int completed = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getCompleted).sum();
             int exceptionCount = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getExceptionCount).sum();
-            Float rate = computeRate(total, completed);
+            Float rate = NumberUtils.computeRate(total, completed);
 
             vo.getRateByType().put(label, rate);
             vo.getTaskInfoByType().put(label, AppSyntheticSafetycheckTaskVo.builder()
@@ -423,7 +424,7 @@ public class AppCockpitServiceImpl implements AppCockpitService {
 //            List<AppSyntheticTaskCategoryDto> used = taskCategoryDtos.stream().filter(d -> types.contains(d.getPlanType())).collect(Collectors.toList());
 //            int total = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getTotal).sum();
 //            int completed = used.stream().mapToInt(AppSyntheticTaskCategoryDto::getCompleted).sum();
-//            Float rate = computeRate(total, completed);
+//            Float rate = NumberUtils.computeRate(total, completed);
 //
 //            vo.getRateByType().put(label, rate);
 //            vo.getInfoByType().put(label, AppSyntheticTaskInfoVo.builder()
@@ -496,15 +497,15 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         AppSyntheticOtherVo vo = new AppSyntheticOtherVo();
         vo.getDrill().setShouldCompleteCount(drill.get().getTotal());
         vo.getDrill().setCompletedCount(drill.get().getCompleted());
-        vo.getDrill().setCompletedRate(computeRate(drill.get().getTotal(), drill.get().getCompleted()));
+        vo.getDrill().setCompletedRate(NumberUtils.computeRate(drill.get().getTotal(), drill.get().getCompleted()));
 
         vo.getEdu().setShouldCompleteCount(edu.get().getTotal());
         vo.getEdu().setCompletedCount(edu.get().getCompleted());
-        vo.getEdu().setCompletedRate(computeRate(edu.get().getTotal(), edu.get().getCompleted()));
+        vo.getEdu().setCompletedRate(NumberUtils.computeRate(edu.get().getTotal(), edu.get().getCompleted()));
 
         vo.getMonitor().setShouldCompleteCount(monitor.get().getTotal());
         vo.getMonitor().setCompletedCount(monitor.get().getCompleted());
-        vo.getMonitor().setCompletedRate(computeRate(monitor.get().getTotal(), monitor.get().getCompleted()));
+        vo.getMonitor().setCompletedRate(NumberUtils.computeRate(monitor.get().getTotal(), monitor.get().getCompleted()));
 
         vo.getInout().setDepartment(inout.get().getDepartment());
         vo.getInout().setEmergency(inout.get().getEmergency());
@@ -527,8 +528,8 @@ public class AppCockpitServiceImpl implements AppCockpitService {
         }
         vo.setCurrentCompletedCount(dto.getCompleted());
         vo.setShouldComplete(dto.getTotal());
-        vo.setCurrentCompletedRate(computeRate(dto.getTotal(), dto.getCompleted()));
-        float prevRate = computeRate(dto.getPrevTotal(), dto.getPrevCompleted());
+        vo.setCurrentCompletedRate(NumberUtils.computeRate(dto.getTotal(), dto.getCompleted()));
+        float prevRate = NumberUtils.computeRate(dto.getPrevTotal(), dto.getPrevCompleted());
         vo.setPrevCompletedRate(prevRate);
         vo.setCompare(vo.getCurrentCompletedRate() - prevRate);
 
@@ -557,31 +558,10 @@ public class AppCockpitServiceImpl implements AppCockpitService {
     private AppOverviewItemVo computeGa38(int total, int completed, int currentCompleted, int prevCompleted) {
         AppOverviewItemVo vo = new AppOverviewItemVo();
         vo.setShouldComplete(total);
-        vo.setCurrentCompletedRate(computeRate(total, completed));
-        vo.setPrevCompletedRate(computeRate(total, prevCompleted));
+        vo.setCurrentCompletedRate(NumberUtils.computeRate(total, completed));
+        vo.setPrevCompletedRate(NumberUtils.computeRate(total, prevCompleted));
         vo.setCompare(((float) currentCompleted) - prevCompleted);
         vo.setCurrentCompletedCount(currentCompleted);
         return vo;
     }
-
-    /**
-     * 计算比例
-     *
-     * @param total
-     * @param divisor
-     * @return
-     */
-    private float computeRate(Integer total, Integer divisor) {
-        if (ObjectUtil.equal(total, 0) || ObjectUtil.isNull(total)) {
-            return 1F;
-        } else if (ObjectUtil.equal(divisor, 0) || ObjectUtil.isNull(divisor)) {
-            return 0F;
-        } else {
-            return (divisor.floatValue() / total.floatValue());
-        }
-    }
-
-//    private void throwIfNull(Date date){
-//
-//    }
 }

+ 146 - 42
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/CockpitServiceImpl.java

@@ -4,23 +4,30 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.DateRange;
+import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.exception.ServiceException;
+import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.utils.NumberUtils;
+import com.xunmei.common.core.utils.StringUtils;
+import com.xunmei.core.board.dto.app.AppSyntheticQuestionDto;
 import com.xunmei.core.board.dto.web.TaskStatisticDto;
+import com.xunmei.core.board.dto.web.WebGA38InfoDto;
+import com.xunmei.core.board.dto.web.WebSyntheticQuestionDto;
 import com.xunmei.core.board.enums.PeriodEnum;
 import com.xunmei.core.board.mapper.CockpitMapper;
 import com.xunmei.core.board.service.CockpitService;
-import com.xunmei.core.board.vo.web.OrgGA38StatisticVo;
-import com.xunmei.core.board.vo.web.QuestionStatisticVo;
-import com.xunmei.core.board.vo.web.TaskStatisticVo;
+import com.xunmei.core.board.vo.web.*;
+import com.xunmei.system.api.RemoteDictDataService;
 import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
+import org.apache.http.annotation.Obsolete;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Date;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class CockpitServiceImpl implements CockpitService {
@@ -30,31 +37,50 @@ public class CockpitServiceImpl implements CockpitService {
     @Resource
     RemoteOrgService remoteOrgService;
 
+    @Resource
+    RemoteDictDataService remoteDictDataService;
+
     @Override
     public List<TaskStatisticVo> resumption(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
         SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
         String orgPath = org.getPath();
         List<TaskStatisticVo> list = cockpitMapper.resumption(date, DateUtil.endOfDay(new Date()), orgPath);
-        return taskStatistic(list, dto, org);
+        return taskStatistic(list, dto.getOrgId());
     }
 
     @Override
-    public List<TaskStatisticVo> safetyCheck(TaskStatisticDto dto) {
+    public List<WebSafetyCheckVo> safetyCheck(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
         SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
-        String orgPath = org.getPath();
-        List<TaskStatisticVo> list = cockpitMapper.safetyCheck(date, DateUtil.endOfDay(new Date()), orgPath);
-        return taskStatistic(list, dto, org);
+
+//        String orgPath = org.getPath();
+        List<WebSafetyCheckVo> list = cockpitMapper.safetyCheck(date, DateUtil.endOfDay(new Date()), dto.getOrgPath());
+        List<SysDictData> dicts = remoteDictDataService.selectDictByeType("check_type", SecurityConstants.INNER);
+        List<WebSafetyCheckVo> r = dicts.stream().map(d -> {
+            Optional<WebSafetyCheckVo> voOpt = list.stream().filter(i -> ObjectUtil.equal(i.getType(), d.getDictValue())).findFirst();
+            WebSafetyCheckVo vo;
+            if (voOpt.isPresent()) {
+                vo = voOpt.get();
+            } else {
+                vo = new WebSafetyCheckVo();
+            }
+
+            vo.setType(d.getDictLabel());
+            return vo;
+        }).collect(Collectors.toList());
+
+        return r;
     }
 
     @Override
+    @Obsolete
     public List<TaskStatisticVo> monitor(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
         SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
         String orgPath = org.getPath();
         List<TaskStatisticVo> list = cockpitMapper.monitor(date, DateUtil.endOfDay(new Date()), orgPath);
-        return taskStatistic(list, dto, org);
+        return taskStatistic(list,  dto.getOrgId());
     }
 
     @Override
@@ -63,57 +89,120 @@ public class CockpitServiceImpl implements CockpitService {
         SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
         String orgPath = org.getPath();
         List<TaskStatisticVo> list = cockpitMapper.edu(date, DateUtil.endOfDay(new Date()), orgPath);
-        return taskStatistic(list, dto, org);
+        return taskStatistic(list,  dto.getOrgId());
     }
 
     @Override
-    public List<TaskStatisticVo> drill(TaskStatisticDto dto) {
+    public List<WebDrillInfoVo> drill(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
-        SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
-        String orgPath = org.getPath();
-        List<TaskStatisticVo> list = cockpitMapper.drill(date, DateUtil.endOfDay(new Date()), orgPath);
-        return taskStatistic(list, dto, org);
+//        SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
+//        String orgPath = org.getPath();
+        List<TaskStatisticVo> list = cockpitMapper.drill(date, DateUtil.endOfDay(new Date()), dto.getOrgPath());
+        list = taskStatistic(list, dto.getOrgId());
+
+        List<WebDrillInfoVo> r = list.stream().map(i -> {
+            WebDrillInfoVo vo = new WebDrillInfoVo();
+            vo.setOrgName(i.getOrgName());
+            vo.setTotal((int) i.getTaskTotal());
+            vo.setCompletedRate(i.getCompletedRate());
+            return vo;
+        }).collect(Collectors.toList());
+
+        return r;
     }
 
     @Override
-    public List<OrgGA38StatisticVo> orgGA38(Long orgId) {
-        List<OrgGA38StatisticVo> data = cockpitMapper.orgGA38(orgId);
-        List<OrgGA38StatisticVo> r = getGA38Children(orgId);
-        for (OrgGA38StatisticVo orgVo : data) {
+    public List<OrgGA38StatisticVo> orgGA38(TaskStatisticDto dto) {
+        Date date = getStartDate(dto.getPeriod());
+        SysOrg org = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER);
+        List<WebGA38InfoDto> data = cockpitMapper.orgGA38(org.getPath(), date);
+        List<OrgGA38StatisticVo> r = getGA38Children(dto.getOrgId());
+        for (WebGA38InfoDto orgVo : data) {
             for (OrgGA38StatisticVo statisticVo : r) {
-                if (orgVo.getOrgPath().startsWith(statisticVo.getOrgPath())) {
+                if (orgVo.getPath().startsWith(statisticVo.getOrgPath())) {
                     statisticVo.setTotal(1 + statisticVo.getTotal());
-                    statisticVo.setReachCount(orgVo.getReachCount() + statisticVo.getReachCount());
+                    statisticVo.setGa382021(1 + statisticVo.getGa382021());
+                    statisticVo.setGa382021(1 + statisticVo.getGa382021());
+                    if (statisticVo.getGa382021() > 0 || statisticVo.getGa382015() > 0) {
+                        statisticVo.setReachCount(1 + statisticVo.getReachCount());
+                    }
+//                    statisticVo.setReachCount(orgVo.getReachCount() + statisticVo.getReachCount());
                 }
             }
         }
 
         r.forEach(i -> {
-            if (ObjectUtil.equal(i.getTotal(), 0F)) {
-                i.setReachRate(1F);
-            } else {
-                i.setReachRate(i.getReachCount() / i.getTotal());
-            }
+            i.setReachRate(NumberUtils.computeRate(i.getTotal(), i.getReachCount()));
         });
+
         r.sort(new Comparator<OrgGA38StatisticVo>() {
             @Override
             public int compare(OrgGA38StatisticVo o1, OrgGA38StatisticVo o2) {
-                return NumberUtil.compare(o2.getReachRate(),o1.getReachRate());
+                return -NumberUtil.compare(o2.getReachRate(), o1.getReachRate());
             }
         });
 
         return r;
     }
 
+
+    /**
+     * 机构信息
+     *
+     * @return
+     */
+    @Override
+    public OrgInfoVo orgInfo(String orgPath) {
+        return cockpitMapper.orgInfo(orgPath);
+    }
+
+    /**
+     * 本月来访
+     *
+     * @param orgPath
+     * @return
+     */
+    @Override
+    public VisitInfoVo currentMonthVisitInfo(String orgPath) {
+        DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.MONTHLY);
+        VisitInfoVo vo = cockpitMapper.currentMonthVisitInfo(orgPath, range.getStartTime());
+        int total = vo.getPaperCount() + vo.getElectronicCount() + vo.getUrgencyCount();
+        vo.setElectronicRate(NumberUtils.computeRate(total, vo.getElectronicCount()));
+        vo.setUrgencyRate(NumberUtils.computeRate(total, vo.getUrgencyCount()));
+        vo.setPaperRate(NumberUtils.computeRate(total, vo.getPaperCount()));
+
+        return vo;
+    }
+
     @Override
     public QuestionStatisticVo question(TaskStatisticDto dto) {
         Date date = getStartDate(dto.getPeriod());
-        String orgPath = remoteOrgService.selectOrgById(dto.getOrgId(), SecurityConstants.INNER).getPath();
-        return cockpitMapper.question(date, orgPath);
+
+        WebSyntheticQuestionDto questionDto = cockpitMapper.selectQuestion(dto.getOrgPath(), date);
+        if (ObjectUtil.isNull(questionDto)) {
+            questionDto = new WebSyntheticQuestionDto();
+        }
+        Map<String, Integer> overdueCount = cockpitMapper.selectOverDueQuestionCount(dto.getOrgPath(), date);
+
+        QuestionStatisticVo vo = new QuestionStatisticVo();
+        vo.setTotal(questionDto.getTotal());
+        vo.setUnconfirm(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getUnconfirmedCount()));
+        vo.setDissent(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getDissentCount()));
+        vo.setClosed(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getClosedCount()));
+        vo.setUnreform(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getUnconfirmedCount()));
+        vo.setReformed(NumberUtils.computeRate(questionDto.getTotal(), questionDto.getReformedCount()));
+
+        if (overdueCount.size() > 0) {
+            vo.setClosed(NumberUtils.computeRate(overdueCount.get("total"), overdueCount.get("overdueCount")));
+        } else {
+            vo.setClosed(1f);
+        }
+
+        return vo;
     }
 
-    private List<TaskStatisticVo> taskStatistic(List<TaskStatisticVo> data, TaskStatisticDto dto,SysOrg org) {
-        List<TaskStatisticVo> r = getTaskChildren(org);
+    private List<TaskStatisticVo> taskStatistic(List<TaskStatisticVo> data, Long orgId) {
+        List<TaskStatisticVo> r = getTaskChildren(orgId);
         for (TaskStatisticVo orgVo : data) {
             for (TaskStatisticVo statisticVo : r) {
                 if (orgVo.getOrgPath().startsWith(statisticVo.getOrgPath())) {
@@ -150,15 +239,25 @@ public class CockpitServiceImpl implements CockpitService {
         }
     }
 
-    private List<TaskStatisticVo> getTaskChildren(SysOrg org) {
-        List<SysOrg> children=remoteOrgService.selectOrgTreeListByCurOrgId(org.getId(), SecurityConstants.INNER);
+    private DateRange getStartAndEnd(Integer period) {
+        Date start = getStartDate(period);
+        Date end = DateUtil.endOfDay(new Date());
+        return new DateRange(start, end);
+    }
+
+    private List<TaskStatisticVo> getTaskChildren(Long orgId) {
+        List<SysOrg> children = remoteOrgService.selectOrgTreeListByCurOrgId(orgId, SecurityConstants.INNER);
         List<TaskStatisticVo> list = new ArrayList<>();
 
         for (SysOrg child : children) {
             TaskStatisticVo vo = new TaskStatisticVo();
             vo.setOrgPath(child.getPath());
             vo.setOrgId(child.getId());
-            vo.setOrgName(child.getName());
+            if (StringUtils.isEmpty(child.getBreviary())) {
+                vo.setOrgName(child.getShortName());
+            } else {
+                vo.setOrgName(child.getBreviary());
+            }
             vo.setTaskTotal(0F);
             vo.setCompletedCount(0F);
             list.add(vo);
@@ -168,15 +267,20 @@ public class CockpitServiceImpl implements CockpitService {
     }
 
     private List<OrgGA38StatisticVo> getGA38Children(Long orgId) {
-        List<SysOrg> children=remoteOrgService.selectOrgTreeListByCurOrgId(orgId, SecurityConstants.INNER);
+        List<SysOrg> children = remoteOrgService.selectOrgTreeListByCurOrgId(orgId, SecurityConstants.INNER);
         List<OrgGA38StatisticVo> list = new ArrayList<>();
         for (SysOrg child : children) {
             OrgGA38StatisticVo vo = new OrgGA38StatisticVo();
             vo.setOrgPath(child.getPath());
             vo.setOrgId(child.getId());
-            vo.setOrgName(child.getName());
-            vo.setTotal(0F);
-            vo.setReachCount(0F);
+            if (StringUtils.isEmpty(child.getBreviary())) {
+                vo.setOrgName(child.getShortName());
+            } else {
+                vo.setOrgName(child.getBreviary());
+            }
+
+            vo.setTotal(0);
+            vo.setReachCount(0);
             list.add(vo);
         }
 

+ 13 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgGA38StatisticVo.java

@@ -21,12 +21,23 @@ public class OrgGA38StatisticVo {
     /**
      * 机构总数
      */
-    private float total;
+    private int total;
+
+    /**
+     * 2015达标数量
+     */
+    private int ga382015;
+
+    /**
+     * 2021达标数量
+     */
+    private int ga382021;
 
     /**
      * 达标数
      */
-    private float reachCount;
+    @JsonIgnore
+    private int reachCount;
 
     /**
      * 达标率

+ 16 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgInfoVo.java

@@ -0,0 +1,16 @@
+package com.xunmei.core.board.vo.web;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class OrgInfoVo {
+    @ApiModelProperty("行社数量")
+    private int hangsheCount;
+    @ApiModelProperty("营业网点数量")
+    private int bankingCount;
+    @ApiModelProperty("离行数量")
+    private int offlineCount;
+    @ApiModelProperty("网点业务库数量")
+    private int bankingStoreCount;
+}

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/OrgSecurityInfo.java

@@ -0,0 +1,17 @@
+package com.xunmei.core.board.vo.web;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 机构安保情况
+ */
+public class OrgSecurityInfo {
+    @ApiModelProperty("配备有保安的数量")
+    private int equippedCount;
+    @ApiModelProperty("配备的比例")
+    private float equippedRate;
+    @ApiModelProperty("未配备有保安的数量")
+    private int unequippedCount;
+    @ApiModelProperty("未配备的比例")
+    private int unequippedRate;
+}

+ 14 - 14
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/QuestionStatisticVo.java

@@ -7,29 +7,29 @@ import lombok.Data;
  */
 @Data
 public class QuestionStatisticVo {
-    private int total;
+    private float total;
     /**
-     * 确认
+     * 确认
      */
-    private int unconfirm;
-
+    private float unconfirm;
     /**
-     * 异议审批中
+     * 异议
      */
-    private int auditing;
-
+    private float dissent;
+    /**
+     * 已关闭
+     */
+    private float closed;
     /**
      * 待整改
      */
-    private int unreform;
-
+    private float unreform;
     /**
-     * 异议隐患
+     * 已整改
      */
-    private int notQuestion;
-
+    private float reformed;
     /**
-     * 整改完成
+     * 已逾期
      */
-    private int reformed;
+    private float overdue;
 }

+ 23 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/VisitInfoVo.java

@@ -0,0 +1,23 @@
+package com.xunmei.core.board.vo.web;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 来访信息
+ */
+@Data
+public class VisitInfoVo {
+    @ApiModelProperty("纸质来访数量")
+    private int paperCount;
+    @ApiModelProperty("纸质来访比例")
+    private float paperRate;
+    @ApiModelProperty("紧急来访数量")
+    private int urgencyCount;
+    @ApiModelProperty("紧急来访比例")
+    private float urgencyRate;
+    @ApiModelProperty("电子来访数量")
+    private int electronicCount;
+    @ApiModelProperty("电子来访比例")
+    private float electronicRate;
+}

+ 15 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/WebDrillInfoVo.java

@@ -0,0 +1,15 @@
+package com.xunmei.core.board.vo.web;
+
+import lombok.Data;
+
+/**
+ * web驾驶舱预案演练
+ */
+@Data
+public class WebDrillInfoVo {
+    private String orgName;
+
+    private int total;
+
+    private float completedRate;
+}

+ 12 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/vo/web/WebSafetyCheckVo.java

@@ -0,0 +1,12 @@
+package com.xunmei.core.board.vo.web;
+
+import lombok.Data;
+
+@Data
+public class WebSafetyCheckVo {
+    private  String type;
+
+    private int total;
+
+    private int completed;
+}

+ 3 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -129,7 +129,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                     record.setHasTaskCurrentCycle(false);
                 } else {
                     boolean b = !new Date().before(record.getEffectiveTime());
-                    DateRange dr = DateUtils.getStartAndEnd(new Date(), record.getPlanCycle());
+                    DateRange dr = DateUtils.getStartAndEnd(new Date(),CycleCommonEnum.getEnum(record.getPlanCycle()));
                     b &= (!record.getWithdrawTime().before(dr.getStartTime()));
                     record.setHasTaskCurrentCycle(b);
                 }
@@ -284,7 +284,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         Date now = new Date();
         Date effectiveTime = new Date();
         if (!immediateEffect) {
-            effectiveTime = DateUtil.offset(DateUtil.beginOfDay(DateUtils.getStartAndEnd(now, plan.getPlanCycle()).getEndTime()), DateField.DAY_OF_YEAR, 1);
+            effectiveTime = DateUtil.offset(DateUtil.beginOfDay(DateUtils.getStartAndEnd(now,CycleCommonEnum.getEnum(plan.getPlanCycle())).getEndTime()), DateField.DAY_OF_YEAR, 1);
         }
         plan.setPublishTime(now);
         plan.setEffectiveTime(effectiveTime);
@@ -736,7 +736,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
      * @return
      */
     private Boolean needCopyOnEdit(AppPlan plan) {
-        DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
+        DateRange dateRange = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.getEnum(plan.getPlanCycle()));
         if (ObjectUtil.equal(plan.getPlanStatus(), PlanStatus.USING.getCode()) && new Date().before(plan.getEffectiveTime())) {
             return false;
         } else if (ObjectUtil.equal(plan.getPlanStatus(), PlanStatus.USING.getCode())

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -190,7 +190,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
 
         //删除本周期未完成任务
         Date workDate = new Date();
-        DateRange dr = DateUtils.getStartAndEnd(workDate, appPlans.stream().findFirst().get().getPlanCycle());
+        DateRange dr = DateUtils.getStartAndEnd(workDate,CycleCommonEnum.getEnum(appPlans.stream().findFirst().get().getPlanCycle()) );
         LambdaUpdateWrapper<Resumption> wrapper = new LambdaUpdateWrapper<>();
         wrapper.ge(Resumption::getYmdDate, dr.getStartTime())
                 .le(Resumption::getYmdDate, dr.getEndTime())

+ 2 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java

@@ -124,7 +124,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
                     record.setHasTaskCurrentCycle(false);
                 } else {
                     boolean b = !new Date().before(record.getEffectiveTime());
-                    DateRange dr = DateUtils.getStartAndEnd(new Date(), record.getPlanCycle());
+                    DateRange dr = DateUtils.getStartAndEnd(new Date(), SafetyPlanCycle.toCommon(record.getPlanCycle()));
                     b &= (!record.getWithdrawTime().before(dr.getStartTime()));
                     record.setHasTaskCurrentCycle(b);
                 }
@@ -775,7 +775,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
      * @return
      */
     private Boolean needCopyOnEdit(CoreSafecheckPlan plan) {
-        DateRange dateRange = DateUtils.getStartAndEnd(new Date(), plan.getPlanCycle());
+        DateRange dateRange = DateUtils.getStartAndEnd(new Date(), SafetyPlanCycle.toCommon(plan.getPlanCycle()));
         if (ObjectUtil.equal(plan.getPlanStatus(), PlanStatus.USING.getCode()) && new Date().before(plan.getEffectiveTime())) {
             return false;
         } else if (ObjectUtil.equal(plan.getPlanStatus(), PlanStatus.USING.getCode())

+ 1 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysUserController.java

@@ -194,6 +194,7 @@ public class SysUserController extends BaseController {
         if (ObjectUtil.isNotEmpty(org)) {
             user.setOrgType(org.getType());
             user.setOrgShortName(org.getShortName());
+            user.setOrgPath(org.getPath());
         }
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);