wangbo 3 years ago
parent
commit
5eaba69c00

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

@@ -190,6 +190,41 @@ public class WorkOrderStatisticsController {
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
 
+    @RequestMapping(value = "orderDurationStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "工单时长统计展示")
+    public AjaxMessage<List<StatisticsDto>> orderDurationStatistics(
+            @ApiParam(value = "统计类型:0-按月统计,1-按年统计,2-自定义统计", required = true) @RequestParam(required = true) int type,
+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy),自定义统计时间开始日期", required = true) @RequestParam(required = true) String startDate,
+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException {
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        switch (type) {
+            case 0:
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                break;
+            case 1:
+                startDate = String.format("%s-01-01", startDate);
+                endDate = subYear(startDate, 1);
+                break;
+            case 2:
+                startDate = String.format("%s-01", startDate);
+                endDate = String.format("%s-01", endDate);
+                break;
+        }
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setEndDate(endDate);
+        List<StatisticsDto> statistics = workOrderManageService.orderDurationStatistics(workOrderManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, statistics);
+    }
+
+
 
     @RequestMapping(value = "distributionStatistics", method = RequestMethod.GET)
     @ApiOperation(value = "上报类型、工单类型、工单状态统计")

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

@@ -88,6 +88,12 @@ public interface WorkOrderManageMapper {
      */
     List<StatisticsDto> orderTypeStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
+    /**
+     * 工单时长统计
+     */
+    List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
     /**
      * 待处理权限
      */

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

@@ -124,4 +124,9 @@ public interface WorkOrderManageService {
      * 工单类型统计
      */
     List<StatisticsDto> orderTypeStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+     * 工单时长月统计
+     */
+    List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 }

+ 4 - 0
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -229,6 +229,10 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
         return workOrderManageMapper.orderTypeStatistics(workOrderManageDto);
     }
 
+    @Override
+    public List<StatisticsDto> orderDurationStatistics(WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.orderDurationStatistics(workOrderManageDto);
+    }
 
     /**
      *获取某月有多少天

+ 49 - 0
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -1130,4 +1130,53 @@
     </where>
     group by t1.order_type_id
   </select>
+
+  <!--工单时长统计-->
+  <select id="orderDurationStatistics" resultMap="StatisticsMap">
+    select count(*) statistics_value,duration statistics_name from(
+      select case when duration<=1 then 1 when duration>1 and duration<=2 then 2
+      when duration>2 and duration<=3 then 3 when duration>3 and duration<=4 then 4
+      else 5 end duration
+      from
+      (
+      select TIMESTAMPDIFF(MINUTE,date_create,finish_date)/60 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')
+        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}
+          </if>
+          <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+            <if test="order.permissonType == 5 or order.permissonType == 2">
+              and ( t1.department_org_id in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              or
+              t1.COMPANY_ORG_ID in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              )
+            </if>
+            <if test="order.permissonType == 4 or order.permissonType == 3">
+              and t1.department_org_id in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+            </if>
+            <if test="order.permissonType == 1">
+              and t1.COMPANY_ORG_ID in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              and (t1.department_org_id is null or t1.department_org_id =0)
+            </if>
+          </if>
+        </where>
+        )a ) b
+      group by duration
+  </select>
 </mapper>