Browse Source

巡检任务统计

yuejiaying 3 years ago
parent
commit
ad6a653009

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

@@ -51,4 +51,10 @@ public interface UserCenterClient {
      */
     @RequestMapping(value = "/dict/selectList", method = RequestMethod.POST)
     AjaxMessage<List<Dict>> selectDictList(@RequestBody Dict dict);
+
+    /**
+     * 查询该时间内的运维人数
+     */
+    @RequestMapping(value = "/user/findMaintainerCount", method = RequestMethod.GET)
+    Integer findMaintainerCount(@RequestParam("endDate") String endDate);
 }

+ 181 - 0
operation_manager/src/main/java/com/huaxu/task/controller/PlanStatisticsController.java

@@ -0,0 +1,181 @@
+package com.huaxu.task.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.Pagination;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.order.entity.WorkFlowDetail;
+import com.huaxu.order.entity.WorkFlowLog;
+import com.huaxu.order.service.WorkFlowLogService;
+import com.huaxu.process.entity.ProcessDefinition;
+import com.huaxu.process.service.WorkFlowService;
+import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
+import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.UserEntity;
+import com.huaxu.task.service.PlanManageService;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.activiti.engine.task.Task;
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.joda.time.Months;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/task/planStatistics")
+@Api(tags = "任务统计")
+public class PlanStatisticsController {
+
+    @Autowired
+    PlanManageService planManageService;
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    /**
+     * 查询任务完成情况
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskFinishedByDate", method = RequestMethod.GET)
+    @ApiOperation(value = "按时间查询任务完成情况")
+    public AjaxMessage<List<PlanManageDto>> selectTaskFinished(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+        List<PlanManageDto> result=planManageService.selectTaskFinishedByDate(planManageDto);
+        if(result.size()>0) {
+            Map<String,String> dictMap=userCenterClient.selectListByPCodes("SC_TASK_TYPE");
+            for(PlanManageDto plan:result){
+                if (plan.getTaskType() != null) {
+                    plan.setTypeName(dictMap.get(plan.getTaskType().toString()));
+                }
+            }
+        }
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+
+    /**
+     * 查询任务情况
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskCondition", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务情况")
+    public AjaxMessage<TaskConditionDto> selectTaskCondition(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+
+        TaskConditionDto result=planManageService.selectTaskCondition(planManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+    /**
+     * 查询任务变化趋势
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskChangeTrend", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务情况")
+    public AjaxMessage<List<TaskChangeTendDto>> selectTaskChangeTrend(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            Calendar c=Calendar.getInstance();
+            String maintainerEndDate=null;
+            Integer intervalCount=0;
+            switch (statsType){
+                case 0:
+                    maintainerEndDate=startDate;
+                    c.setTime(sdf.parse(startDate));
+                    intervalCount= c.getActualMaximum(Calendar.DAY_OF_MONTH);
+                    break;
+                case 1:
+                    maintainerEndDate=startDate+"-12";
+                    intervalCount=12;
+                    break;
+                case 2:
+                    maintainerEndDate=endDate;
+                    c.setTime(sdf.parse(endDate));
+                    intervalCount= Days.daysBetween(new DateTime(startDate), new DateTime(endDate)).getDays()+c.getActualMaximum(Calendar.DAY_OF_MONTH);
+                    break;
+            }
+            planManageDto.setMaintainerCount(userCenterClient.findMaintainerCount(maintainerEndDate));
+            planManageDto.setIntervalCount(intervalCount);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new AjaxMessage<>(ResultStatus.OK, planManageService.selectTaskChangeTrend(planManageDto));
+    }
+
+    /**
+     * 查询任务处理时长
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskDuration", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务处理时长")
+    public AjaxMessage<int[]> selectTaskDuration(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+
+        int[] result=planManageService.selectTaskDuration(planManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+}

+ 9 - 0
operation_manager/src/main/java/com/huaxu/task/dao/PlanManageMapper.java

@@ -3,6 +3,7 @@ package com.huaxu.task.dao;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
 import com.huaxu.task.entity.PlanManage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -36,4 +37,12 @@ public interface PlanManageMapper {
     List<Map<String,Object>> selectTaskName(Map<String,Object> map);
 
     List<PlanManageDto> selectTaskFinished(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto);
+
+    PlanManageDto selectTaskCondition(PlanManageDto planManageDto);
+
+    List<TaskChangeTendDto> selectTaskChangeTrend(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskDuration(PlanManageDto planManageDto);
 }

+ 8 - 0
operation_manager/src/main/java/com/huaxu/task/dto/PlanManageDto.java

@@ -84,4 +84,12 @@ public class PlanManageDto extends PlanManage {
     @ApiModelProperty(value="统计类型 0或null本月、1本年、2近一年",hidden = true)
     @JsonIgnore
     private Integer statsType;
+
+    @ApiModelProperty(value="间隔数",hidden = true)
+    @JsonIgnore
+    private Integer intervalCount;
+
+    @ApiModelProperty(value="运维人数",hidden = true)
+    @JsonIgnore
+    private Integer maintainerCount;
 }

+ 24 - 0
operation_manager/src/main/java/com/huaxu/task/dto/TaskChangeTendDto.java

@@ -0,0 +1,24 @@
+package com.huaxu.task.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.Double2Serializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("任务变化趋势")
+public class TaskChangeTendDto implements Serializable {
+
+    @ApiModelProperty(value = "任务数")
+    private String dateCreate;
+
+    @ApiModelProperty(value = "任务数")
+    private Integer taskCount;
+
+    @ApiModelProperty(value = "人均任务量")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountAvg;
+}

+ 54 - 0
operation_manager/src/main/java/com/huaxu/task/dto/TaskConditionDto.java

@@ -0,0 +1,54 @@
+package com.huaxu.task.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.Double2Serializer;
+import com.huaxu.model.ProgramItem;
+import com.huaxu.order.entity.WorkFlowDetail;
+import com.huaxu.order.entity.WorkFlowLog;
+import com.huaxu.task.entity.PlanManage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@ApiModel("任务情况")
+public class TaskConditionDto implements Serializable {
+
+    @ApiModelProperty(value = "任务总数")
+    private Integer taskCount;
+
+    @ApiModelProperty(value = "任务完成数")
+    private Integer finishedCount;
+
+    @ApiModelProperty(value = "任务完成率")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRate;
+
+    @ApiModelProperty(value = "任务总数环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountRateMOnM;
+
+    @ApiModelProperty(value = "任务完成数环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double finishedCountRateMOnM;
+
+    @ApiModelProperty(value = "任务完成率环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRateMOnM;
+
+    @ApiModelProperty(value = "任务总数同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountRateYOnY;
+
+    @ApiModelProperty(value = "任务完成数同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double finishedCountRateYOnY;
+
+    @ApiModelProperty(value = "任务完成率同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRateYOnY;
+}

+ 10 - 0
operation_manager/src/main/java/com/huaxu/task/service/PlanManageService.java

@@ -2,6 +2,8 @@ package com.huaxu.task.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
 import com.huaxu.task.entity.PlanManage;
 import org.apache.ibatis.annotations.Param;
 
@@ -66,4 +68,12 @@ public interface PlanManageService {
      * 综合展示-查询任务执行情况
      */
     List<PlanManageDto> selectTaskFinished(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto);
+
+    TaskConditionDto selectTaskCondition(PlanManageDto planManageDto);
+
+    List<TaskChangeTendDto> selectTaskChangeTrend(PlanManageDto planManageDto);
+
+    int[] selectTaskDuration(PlanManageDto planManageDto);
 }

+ 96 - 0
operation_manager/src/main/java/com/huaxu/task/service/impl/PlanManageServiceImpl.java

@@ -4,12 +4,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.model.LoginUser;
 import com.huaxu.task.dao.PlanManageMapper;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
 import com.huaxu.task.entity.PlanManage;
 import com.huaxu.task.service.PlanManageService;
 import com.huaxu.util.UserUtil;
+import org.joda.time.DateTime;
+import org.joda.time.Months;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -83,4 +90,93 @@ public class PlanManageServiceImpl implements PlanManageService {
         result.add(plan);
         return result;
     }
+
+    @Override
+    public List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto) {
+        return planManageMapper.selectTaskFinishedByDate(planManageDto);
+    }
+
+    @Override
+    public TaskConditionDto selectTaskCondition(PlanManageDto planManageDto) {
+        TaskConditionDto result=new TaskConditionDto();
+        try{
+            PlanManageDto plan=planManageMapper.selectTaskCondition(planManageDto);
+            result.setTaskCount(plan.getTaskCount());
+            result.setFinishedCount(plan.getFinishedCount());
+            result.setTaskFinishedRate(plan.getTaskCount()!=0?(double)plan.getFinishedCount()/plan.getTaskCount()*100:null);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            Calendar c=Calendar.getInstance();
+
+            PlanManageDto planMOnM=new PlanManageDto();
+            PlanManageDto planYOnY=new PlanManageDto();
+            if(planManageDto.getStatsType()==0){
+                Date thisDate=sdf.parse(planManageDto.getStartDate());
+                c.setTime(thisDate);
+                c.add(Calendar.MONTH,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+
+                c.setTime(thisDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planYOnY=planManageMapper.selectTaskCondition(planManageDto);
+            }else if(planManageDto.getStatsType()==1){
+                planManageDto.setStartDate(String.valueOf(Integer.parseInt(planManageDto.getStartDate())-1));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+                planYOnY=planMOnM;
+            }else if(planManageDto.getStatsType()==2){
+                //自定义时间相差多少个月
+                int month=Months.monthsBetween(new DateTime(planManageDto.getStartDate()), new DateTime(planManageDto.getEndDate())).getMonths();
+                Date startDate=sdf.parse(planManageDto.getStartDate());
+                Date endDate=sdf.parse(planManageDto.getEndDate());
+                c.setTime(startDate);
+                c.add(Calendar.MONTH,-1);
+                planManageDto.setEndDate(sdf.format(c.getTime()));
+                c.add(Calendar.MONTH,-month);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+
+                c.setTime(startDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                c.setTime(endDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setEndDate(sdf.format(c.getTime()));
+                planYOnY=planManageMapper.selectTaskCondition(planManageDto);
+            }
+            double taskFinishedRateMOnM=planMOnM.getTaskCount()!=0?(double)planMOnM.getFinishedCount()/planMOnM.getTaskCount()*100:0;
+            double taskFinishedRateYOnY=planYOnY.getTaskCount()!=0?(double)planYOnY.getFinishedCount()/planYOnY.getTaskCount()*100:0;
+
+            result.setTaskCountRateMOnM(planMOnM.getTaskCount()!=0?(double)(result.getTaskCount()-planMOnM.getTaskCount())/planMOnM.getTaskCount()*100:null);
+            result.setTaskCountRateYOnY(planYOnY.getTaskCount()!=0?(double)(result.getTaskCount()-planYOnY.getTaskCount())/planYOnY.getTaskCount()*100:null);
+            result.setFinishedCountRateMOnM(planMOnM.getFinishedCount()!=0?(double)(result.getFinishedCount()-planMOnM.getFinishedCount())/planMOnM.getFinishedCount()*100:null);
+            result.setFinishedCountRateYOnY(planYOnY.getFinishedCount()!=0?(double)(result.getFinishedCount()-planYOnY.getFinishedCount())/planYOnY.getFinishedCount()*100:null);
+            result.setTaskFinishedRateMOnM(taskFinishedRateMOnM !=0 ?(result.getTaskFinishedRate()-taskFinishedRateMOnM)/taskFinishedRateMOnM*100:null);
+            result.setTaskFinishedRateYOnY(taskFinishedRateYOnY !=0 ?(result.getTaskFinishedRate()-taskFinishedRateYOnY)/taskFinishedRateYOnY*100:null);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    @Override
+    public List<TaskChangeTendDto>  selectTaskChangeTrend(PlanManageDto planManageDto) {
+        return planManageMapper.selectTaskChangeTrend(planManageDto);
+    }
+
+    @Override
+    public int[]  selectTaskDuration(PlanManageDto planManageDto) {
+        int[] result=new int[6];
+        List<PlanManageDto> listPlan=planManageMapper.selectTaskDuration(planManageDto);
+        for(PlanManageDto plan : listPlan){
+            if(plan.getIntervalCount()!=null){
+                if(plan.getIntervalCount()<5){
+                    result[plan.getIntervalCount()]=plan.getFinishedCount();
+                }else{
+                    result[5]+=plan.getFinishedCount();
+                }
+            }
+        }
+        return result;
+    }
 }

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

@@ -32,6 +32,7 @@
     <result column="task_count" property="taskCount" jdbcType="VARCHAR" />
     <result column="finished_count" property="finishedCount" jdbcType="VARCHAR" />
     <result column="in_process_status" property="inProcessStatus" jdbcType="INTEGER" />
+    <result column="interval_count" property="intervalCount" jdbcType="INTEGER" />
   </resultMap>
 
   <resultMap id="workFlowLogResultMap" type="com.huaxu.order.entity.WorkFlowLog">
@@ -544,4 +545,228 @@
     group by task_type
   </select>
 
+  <select id="selectTaskFinishedByDate" resultMap="BaseResultMap" >
+    select task_type,sum(task_count) task_count,sum(case when plan_status=2 or plan_status=3 then task_count else 0 end) finished_count
+    from(
+      select task_type,plan_status,count(1) task_count
+      from sc_plan_manage t1
+      where
+      <if test="statsType == 0">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + INTERVAL 1 MONTH
+      </if>
+      <if test="statsType == 1">
+        t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + INTERVAL 1 YEAR
+      </if>
+      <if test="statsType == 2">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + INTERVAL 1 MONTH
+      </if>
+      <if test="tenantId != null and tenantId != ''">
+        and t1.tenant_id=#{tenantId}
+      </if>
+      <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+        <if test="permissonType == 5 or permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="permissonType == 4 or permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+      group by task_type,plan_status
+    )tab1
+    group by task_type
+  </select>
+
+  <select id="selectTaskCondition" resultMap="BaseResultMap" >
+    select count(1) task_count,ifnull(sum(case when plan_status=2 or plan_status=3 then 1 else 0 end),0) finished_count
+    from sc_plan_manage t1
+    where
+    <if test="statsType == 0">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+    </if>
+    <if test="statsType == 1">
+      t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+    </if>
+    <if test="statsType == 2">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+    </if>
+    <if test="tenantId != null and tenantId != ''">
+      and t1.tenant_id=#{tenantId}
+    </if>
+    <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+      <if test="permissonType == 5 or permissonType == 2">
+        and ( t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        or
+        t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        )
+      </if>
+      <if test="permissonType == 4 or permissonType == 3">
+        and t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+      </if>
+      <if test="permissonType == 1">
+        and t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        and (t1.department_org_id is null or t1.department_org_id =0)
+      </if>
+    </if>
+  </select>
+
+  <select id="selectTaskChangeTrend" resultType="com.huaxu.task.dto.TaskChangeTendDto" >
+    select
+      tab1.dateCreate,
+      ifnull(TaskCount, 0) TaskCount
+      <if test="maintainerCount != 0">
+        ,ifnull(TaskCount, 0) / #{maintainerCount} taskCountAvg
+      </if>
+    from(
+        select
+        <if test="statsType == 0 or statsType == 2">
+          date_format(date_add(concat(#{startDate}, '-1'),interval rownum day),'%Y-%m-%d') dateCreate
+        </if>
+        <if test="statsType == 1">
+          date_format(date_add(concat(#{startDate}, '-1-1'),interval rownum month),'%Y-%m') dateCreate
+        </if>
+        from(
+            select @rowNum :=@rowNum + 1 rownum
+            from sc_gps_data_his a,(select @rowNum :=- 1) b limit #{intervalCount}
+        ) duration
+    ) tab1
+    left join (
+      select
+      <if test="statsType == 0 or statsType == 2">
+        date_format(t1.date_create, '%Y-%m-%d') dateCreate
+      </if>
+      <if test="statsType == 1">
+        date_format(t1.date_create, '%Y-%m') dateCreate
+      </if>,count(1) TaskCount
+      from sc_plan_manage t1
+      where
+      <if test="statsType == 0">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+      </if>
+      <if test="statsType == 1">
+        t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+      </if>
+      <if test="statsType == 2">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+      </if>
+      <if test="tenantId != null and tenantId != ''">
+        and t1.tenant_id=#{tenantId}
+      </if>
+      <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+        <if test="permissonType == 5 or permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="permissonType == 4 or permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+      <if test="statsType == 0 or statsType == 2">
+        group by date_format(t1.date_create, '%Y-%m-%d')
+      </if>
+      <if test="statsType == 1">
+        group by date_format(t1.date_create, '%Y-%m')
+      </if>
+    ) tab2 on tab1.dateCreate = tab2.dateCreate
+    <if test="statsType == 0 or statsType == 2">
+      where tab1.dateCreate &lt;=date_format(now(),'%Y-%m-%d')
+    </if>
+    <if test="statsType == 1">
+      where tab1.dateCreate &lt;=date_format(now(),'%Y-%m')
+    </if>
+  </select>
+
+  <select id="selectTaskDuration" resultMap="BaseResultMap" >
+    SELECT timestampdiff(day,date_create,finish_date) interval_count,count(1) finished_count
+    FROM sc_plan_manage t1
+    where (plan_status=2 or plan_status=3) and
+    <if test="statsType == 0">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+    </if>
+    <if test="statsType == 1">
+      t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+    </if>
+    <if test="statsType == 2">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+    </if>
+    <if test="tenantId != null and tenantId != ''">
+      and t1.tenant_id=#{tenantId}
+    </if>
+    <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+      <if test="permissonType == 5 or permissonType == 2">
+        and ( t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        or
+        t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        )
+      </if>
+      <if test="permissonType == 4 or permissonType == 3">
+        and t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+      </if>
+      <if test="permissonType == 1">
+        and t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        and (t1.department_org_id is null or t1.department_org_id =0)
+      </if>
+    </if>
+    group by timestampdiff(day,date_create,finish_date)
+  </select>
 </mapper>

+ 11 - 4
user_center/src/main/java/com/huaxu/controller/UserController.java

@@ -311,11 +311,18 @@ public class UserController {
     @ApiOperation(value = "查询运维人员数量情况")
     @RequestMapping(value = "/findMaintainer", method = RequestMethod.GET)
     public AjaxMessage<MaintainerCountDto> findMaintainer(
-            @ApiParam(value = "开始时间", required = true) @RequestParam String startTime,
-            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endTime,
-            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer type) {
-        MaintainerCountDto maintainerCountDto = userService.findMaintainer(startTime,endTime,type);
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        MaintainerCountDto maintainerCountDto = userService.findMaintainer(startDate,endDate,statsType);
         return new AjaxMessage<>(ResultStatus.OK, maintainerCountDto);
     }
 
+    @ApiOperation(value = "查询运维人员数量")
+    @RequestMapping(value = "/findMaintainerCount", method = RequestMethod.GET)
+    public Integer findMaintainerCount(
+            @ApiParam(value = "结束时间(YYYY-MM)", required = true) @RequestParam String endDate) {
+        return userService.findMaintainerCount(endDate);
+    }
+
 }

+ 29 - 8
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -472,7 +472,7 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		List<UserEntity> userEntities = userMapper.findUserListByType(userEntity);
 		return userEntities;
 	}
-	public MaintainerCountDto findMaintainer(String startTime, String endTime, Integer type){
+	public MaintainerCountDto findMaintainer(String startDate, String endDate, Integer statsType){
 		MaintainerCountDto result=new MaintainerCountDto();
 		try {
 			LoginUser currentUser = UserUtil.getCurrentUser();
@@ -484,22 +484,22 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 			Calendar c=Calendar.getInstance();
 			Date thisDate=null, dateMtoM=null,dateYtoY=null;
-			if(type==0){
-				dateMtoM=sdf.parse(startTime+"-1");
+			if(statsType==0){
+				dateMtoM=sdf.parse(startDate+"-1");
 				c.setTime(dateMtoM);
 				c.add(Calendar.MONTH,1);
 				thisDate=c.getTime();
 				c.add(Calendar.YEAR,-1);
 				dateYtoY=c.getTime();
-			}else if(type==1){
-				dateMtoM=sdf.parse(startTime+"-1-1");
+			}else if(statsType==1){
+				dateMtoM=sdf.parse(startDate+"-1-1");
 				dateYtoY=dateMtoM;
 				c.setTime(dateMtoM);
 				c.add(Calendar.YEAR,1);
 				thisDate=c.getTime();
-			}else if(type==2){
-				dateMtoM=sdf.parse(startTime+"-1");
-				thisDate=sdf.parse(endTime+"-1");
+			}else if(statsType==2){
+				dateMtoM=sdf.parse(startDate+"-1");
+				thisDate=sdf.parse(endDate+"-1");
 				c.setTime(thisDate);
 				c.add(Calendar.MONTH,1);
 				thisDate=c.getTime();
@@ -519,4 +519,25 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		}
 		return result;
 	}
+
+	public Integer findMaintainerCount(String endDate){
+		Integer maintainerCount=0;
+		try {
+			LoginUser currentUser = UserUtil.getCurrentUser();
+			UserEntity userEntity = new UserEntity();
+			userEntity.setTenantId(currentUser.getTenantId());
+			userEntity.setProgramItems(currentUser.getProgramItemList());
+			//1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+			userEntity.setPermissonType(currentUser.getPermissonType());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			Calendar c=Calendar.getInstance();
+			c.setTime(sdf.parse(endDate+"-1"));
+			c.add(Calendar.MONTH,1);
+			userEntity.setDateCreate(c.getTime());
+			maintainerCount=userMapper.findMaintainer(userEntity);
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return maintainerCount;
+	}
 }