wangbo 3 years ago
parent
commit
0edd7d5101

+ 42 - 13
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java

@@ -33,38 +33,54 @@ public class WorkOrderStatisticsController {
     @RequestMapping(value = "completionStatistics", method = RequestMethod.GET)
     @ApiOperation(value = "工单完成情况统计")
     public AjaxMessage<Map<String,Object>> completionStatistics(
-            @ApiParam(value="统计类型:0-按月统计,1-按年统计",required =true) @RequestParam(required = true) int type,
+            @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 {
         //同比日期
-        String sameStartDate = null;
+        String sameStartDate = null, sameEndDate = null;
         //环比日期
-        String chainStartDate =null;
+        String chainStartDate =null, chainEndDate = null;
         if(type==0){
             startDate = String.format("%s-01",startDate);
+            endDate = subMonth(startDate,1);
+
             sameStartDate = subYear(startDate,-1);
+            sameEndDate =subYear(sameStartDate, 1);
+
             chainStartDate = subMonth(startDate,-1);
+            chainEndDate = subMonth(chainStartDate, 1);
         }
         else if(type==1){
             startDate = String.format("%s-01-01",startDate);
+            endDate = subMonth(startDate,1);
+
             sameStartDate = subYear(startDate, -1);
+            sameEndDate = subYear(sameStartDate,1);
+
             chainStartDate = subYear(startDate,-1);
+            chainEndDate = subYear(chainEndDate,1);
+        }
+        else if(type == 2) {
+            startDate = String.format("%s-01", startDate);
+            endDate = String.format("%s-01", endDate);
         }
         //根据用户编号,获取用户的权限
         LoginUser loginUser = UserUtil.getCurrentUser();
         WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
         workOrderManageDto.setStartDate(startDate);
-        workOrderManageDto.setOrderStatus(type);
+        workOrderManageDto.setEndDate(endDate);
         workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
         workOrderManageDto.setUserType(loginUser.getType());
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         workOrderManageDto.setPermissonType(loginUser.getPermissonType());
         Map<String,Object> statistics=workOrderManageService.workOrderStatistics(workOrderManageDto);
         workOrderManageDto.setStartDate(sameStartDate);
+        workOrderManageDto.setEndDate(sameEndDate);
         //同比
         Map<String,Object> sameStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
         //环比
         workOrderManageDto.setStartDate(chainStartDate);
+        workOrderManageDto.setEndDate(chainEndDate);
         Map<String,Object> chainStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
 
         DecimalFormat df = new DecimalFormat("#.00");
@@ -107,27 +123,40 @@ public class WorkOrderStatisticsController {
     public AjaxMessage<List<Map<String,Object>>> eventStatistics(
             @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) {
+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException {
         List<Map<String,Object>> statistics = null;
         //根据用户编号,获取用户的权限
         LoginUser loginUser = UserUtil.getCurrentUser();
         WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
-        workOrderManageDto.setStartDate(startDate);
-        workOrderManageDto.setOrderStatus(type);
+
         workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
         workOrderManageDto.setUserType(loginUser.getType());
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         workOrderManageDto.setPermissonType(loginUser.getPermissonType());
-        if(type == 0){
+        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);
+
+        if(type==0 || type ==2){
             statistics = workOrderManageService.eventMonthStatistics(workOrderManageDto);
         }
-        else if(type == 1){
+        else if(type==1){
             statistics =workOrderManageService.eventYearStatistics(workOrderManageDto);
         }
-        else if(type == 2){
-            workOrderManageDto.setEndDate(endDate);
-            statistics = workOrderManageService.eventMonthStatistics(workOrderManageDto);
-        }
+
         return new AjaxMessage<>(ResultStatus.OK,  statistics);
     }
 

+ 28 - 25
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -13,10 +13,7 @@ import com.huaxu.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
@@ -164,35 +161,41 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
     @Override
     public List<Map<String, Object>> eventMonthStatistics(WorkOrderManageDto workOrderManageDto) {
         String strMonth = workOrderManageDto.getStartDate().substring(5,7);
-        int days = Integer.parseInt(strMonth);
+        int days = getDaysByYearMonth(Integer.parseInt(strMonth));
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
         List<Map<String,Object>> list = workOrderManageMapper.eventMonthStatistics(workOrderManageDto);
-        for(int i=0; i<days; i++){
-            String strDate =  workOrderManageDto.getStartDate().substring(0,7) + String.format("-%2d",i+1);
-            Map<String,Object> map = list.get(i);
-            if(!map.get("日期").toString().equals(strDate)) {
-                Map<String, Object> data = new HashMap<>();
-                data.put("数量", 0);
-                data.put("日期", strDate);
-                list.add(i, data);
-            }
+        for(int i=0; i<days; i++) {
+            String strDate = workOrderManageDto.getStartDate().substring(0, 7) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            result.add(data);
         }
-        return list;
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int day = Integer.parseInt(map.get("日期").toString().substring(8,10));
+            list.get(day-1).put("数量",map.get("数量"));
+        }
+        return result;
     }
 
     @Override
     public List<Map<String, Object>> eventYearStatistics(WorkOrderManageDto workOrderManageDto) {
         List<Map<String,Object>> list = workOrderManageMapper.eventYearStatistics(workOrderManageDto);
-        for(int i=0; i<12; i++){
-            String strDate =  workOrderManageDto.getStartDate().substring(0,4) + String.format("-%2d",i+1);
-            Map<String,Object> map = list.get(i);
-            if(!map.get("日期").toString().equals(strDate)) {
-                Map<String, Object> data = new HashMap<>();
-                data.put("数量", 0);
-                data.put("日期", strDate);
-                list.add(i, data);
-            }
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+        for(int i=0; i<12; i++) {
+            String strDate = workOrderManageDto.getStartDate().substring(0, 4) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            result.add(data);
+        }
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int month = Integer.parseInt(map.get("日期").toString().substring(5,7));
+            list.get(month-1).put("数量",map.get("数量"));
         }
-        return list;
+        return result;
     }
 
     @Override

+ 18 - 54
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -666,13 +666,13 @@
 
       <if test="order.startDate != null and order.endDate != null">
         <if test="order.orderStatus == 0">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 DAY)
+          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+          and t1.date_create &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d'),INTERVAL 1 DAY)
           order by t1.date_create desc
         </if>
         <if test="order.orderStatus != 0">
-          and t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.send_time &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 DAY)
+          and t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+          and t1.send_time &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d'),INTERVAL 1 DAY)
           order by t1.send_time desc
         </if>
       </if>
@@ -877,14 +877,8 @@
       from sc_work_order_manage t1
       <where>
         t1.order_status != 0
-        <if test="order.statsType == 0">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-        </if>
-        <if test="order.statsType == 1">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-        </if>
+        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>
@@ -923,17 +917,11 @@
   <select id="eventMonthStatistics" resultType="map">
     select 数量,日期 from
     (
-    select count(1) 数量,date_format(date_create,'%Y-%c-%d') 日期
+    select count(1) 数量,date_format(date_create,'%Y-%m-%d') 日期
     from sc_work_order_manage t1
     <where>
-      <if test="order.statsType == 0">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-      </if>
-      <if test="order.statsType == 1">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-      </if>
+      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>
@@ -965,7 +953,7 @@
         </if>
       </if>
     </where>
-    group by date_format(date_create,'%Y-%c-%d')
+    group by date_format(date_create,'%Y-%m-%d')
     ) a
     order by 日期
   </select>
@@ -977,14 +965,8 @@
     select count(1) 数量,date_format(date_create,'%Y-%c') 日期
     from sc_work_order_manage t1
     <where>
-      <if test="order.statsType == 0">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-      </if>
-      <if test="order.statsType == 1">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-      </if>
+      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>
@@ -1027,14 +1009,8 @@
     count(*) statistics_value
     from sc_work_order_manage t1
     <where>
-      <if test="order.statsType == 0">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-      </if>
-      <if test="order.statsType == 1">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-      </if>
+      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>
@@ -1077,14 +1053,8 @@
       when t1.order_status=2 then '已完成' when t1.order_status=3 then '终止' end 工单状态,count(*) 数量
       from sc_work_order_manage t1
       <where>
-        <if test="order.statsType == 0">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-        </if>
-        <if test="order.statsType == 1">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-        </if>
+        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>
@@ -1131,14 +1101,8 @@
     from sc_work_order_manage t1
     <where>
       t1.order_type_id>=1
-      <if test="order.statsType == 0">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 MONTH)
-      </if>
-      <if test="order.statsType == 1">
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; DATE_ADD(date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 YEAR)
-      </if>
+      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>