소스 검색

报表数据BUG修改

v_KaixiangGuo 4 년 전
부모
커밋
b4d7b1958b

+ 1 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/ReportServiceMapper.java

@@ -53,7 +53,7 @@ public interface ReportServiceMapper  {
      * @param reportReq
      * @return
      */
-    List<ListFactoryCodeReportVO> queryFactoryCodeTotal(@Param("reportReq") ReportReq reportReq, @Param("isDownload") Integer isDownload);
+    List<ListFactoryCodeReportVO> queryFactoryCodeTotal(@Param("reportReq") ReportReq reportReq);
 
     /**
      * 统计下单量

+ 4 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/ListFactoryCodeReportVO.java

@@ -17,9 +17,9 @@ public class ListFactoryCodeReportVO implements Serializable {
     @ApiModelProperty("包材厂名称")
     private String factoryName;
 
-    @ApiModelProperty("码数量")
-    private Long qrNumber;
+    @ApiModelProperty("下载量")
+    private Long qrDownloadNumber;
 
-    @ApiModelProperty("下载率")
-    private Long downloadNumber;
+    @ApiModelProperty("总量")
+    private Long qrNumber;
 }

+ 4 - 1
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListFactoryCodeReportRes.java

@@ -31,7 +31,10 @@ public class ListFactoryCodeReportRes implements Serializable {
         @ApiModelProperty("包材厂名称")
         private String factoryName;
 
-        @ApiModelProperty("码数量")
+        @ApiModelProperty("下载量")
+        private Long qrDownloadNumber;
+
+        @ApiModelProperty("总量")
         private Long qrNumber;
 
         @ApiModelProperty("下载率")

+ 40 - 70
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/ReportServiceImpl.java

@@ -78,6 +78,8 @@ public class ReportServiceImpl implements ReportService {
      */
     @Override
     public ListMaterialCodeRankingReportRes queryMaterialCodeRanking(ReportReq reportReq) {
+        //参数设置初始化
+        setQueryTime(reportReq);
         List<ListMaterialCodeReportVO> listMaterialCodeReportVOS = reportServiceMapper.queryMaterialCodeRanking(reportReq);
         // 封装出参
         ListMaterialCodeRankingReportRes res = new ListMaterialCodeRankingReportRes();
@@ -97,24 +99,16 @@ public class ReportServiceImpl implements ReportService {
         //参数设置初始化
         setQueryTime(reportReq);
         //包材厂生成包数量
-        List<ListFactoryCodeReportVO> listFactoryCodeTotalReportVOS = reportServiceMapper.queryFactoryCodeTotal(reportReq,0);
-        //包材厂包下载量
-        List<ListFactoryCodeReportVO> listFactoryCodeDownloadTotalReportVOS = reportServiceMapper.queryFactoryCodeTotal(reportReq,1);
-        Map<String, Long> factoryCodeDownloadTotalMaps = listFactoryCodeDownloadTotalReportVOS.stream().collect(Collectors.toMap(ListFactoryCodeReportVO::getFactoryName, ListFactoryCodeReportVO::getQrNumber));
-        if(!CollectionUtils.isEmpty(listFactoryCodeTotalReportVOS)) {
-            listFactoryCodeTotalReportVOS.forEach(listReportVO -> {
-                Double val = 0d;
-                //计算下载率
-                if (null != factoryCodeDownloadTotalMaps.get(listReportVO.getFactoryName())) {
-                    val = factoryCodeDownloadTotalMaps.get(listReportVO.getFactoryName()).doubleValue() / listReportVO.getQrNumber().doubleValue() * 100;
-                }
-                //下载率取整
-                listReportVO.setDownloadNumber(new BigDecimal(Math.floor(val)).longValue());
-            });
-        }
+        List<ListFactoryCodeReportVO> listFactoryCodeTotalReportVOS = reportServiceMapper.queryFactoryCodeTotal(reportReq);
         // 封装出参
         ListFactoryCodeReportRes res = new ListFactoryCodeReportRes();
         List<ListFactoryCodeReportRes.FactoryCodeReportResBean> reportFactoryRes = PojoConverterUtils.copyList(listFactoryCodeTotalReportVOS, ListFactoryCodeReportRes.FactoryCodeReportResBean.class);
+        reportFactoryRes.forEach(reportFactoryRe ->{
+            //需求未定,暂时不做处理
+            reportFactoryRe.setQrDownloadNumber(0l);
+            reportFactoryRe.setQrNumber(0l);
+            reportFactoryRe.setDownloadNumber(0l);
+        });
         res.setFactoryCodeResReportList(reportFactoryRes);
         return res;
     }
@@ -170,9 +164,9 @@ public class ReportServiceImpl implements ReportService {
                 null == reportReq.getEndTime() &&
                 null == reportReq.getBeginTime() &&
                 !ObjectUtils.isEmpty(reportReq.getValue())){
-            HashMap<String, String> timestamp = getTimestamp(reportReq.getValue());
-            reportReq.setBeginTime( timestamp.get("startTime"));
-            reportReq.setEndTime( timestamp.get("endTime"));
+            Map<String, String> timestamp = getTimestamp(reportReq.getValue());
+            reportReq.setBeginTime( timestamp.get("beginDate"));
+            reportReq.setEndTime( timestamp.get("endDate"));
         }
     }
 
@@ -181,69 +175,44 @@ public class ReportServiceImpl implements ReportService {
      * @param timeType (0-当天,1-本周,2-本月)
      * @return key 开始时间:startTime  结束时间:endTime
      */
-    private HashMap<String, String> getTimestamp(Integer timeType) {
-        HashMap<String, String> hashMap = new HashMap<String, String>();
-        Calendar calendar = Calendar.getInstance();
-
+    private static Map<String,String> getTimestamp(Integer timeType) {
+        SimpleDateFormat startFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat endFormat = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Map<String,String> map=new HashMap<String,String>();
+        Calendar calStart = Calendar.getInstance();
+        Calendar calEnd = Calendar.getInstance();
         //当天
         if (timeType == 0){
-            hashMap.put("startTime", longTurnData(getTimestampByOffsetDay(0)));
-            hashMap.put("endTime", longTurnData(getTimestampByOffsetDay(1)));
+            calStart.set(Calendar.HOUR_OF_DAY, 0);
+            calEnd.set(Calendar.HOUR_OF_DAY, 23);
         }
         //本周
         if (timeType == 1){
-            hashMap.put(
-                    "startTime",
-                    longTurnData(getTimestampByOffsetDay(0 - calendar.get(Calendar.DAY_OF_WEEK) + 2)) );
-            hashMap.put(
-                    "endTime",
-                    longTurnData( getTimestampByOffsetDay(calendar
-                            .getMaximum(Calendar.DAY_OF_WEEK)
-                            - calendar.get(Calendar.DAY_OF_WEEK) + 2)));
+            int day_of_week = calStart.get(Calendar.DAY_OF_WEEK) - 1;
+            if (day_of_week == 0)
+                day_of_week = 7;
+            calStart.add(Calendar.DATE, -day_of_week + 1);
+            day_of_week = calEnd.get(Calendar.DAY_OF_WEEK) - 1;
+            if (day_of_week == 0)
+                day_of_week = 7;
+            calEnd.add(Calendar.DATE, -day_of_week + 7);
         }
 
         //本月
         if (timeType == 2){
-            hashMap.put(
-                    "startTime",
-                    longTurnData(getTimestampByOffsetDay(0 - calendar.get(Calendar.DAY_OF_MONTH) + 1)));
-            hashMap.put(
-                    "endTime",
-                    longTurnData( getTimestampByOffsetDay(calendar
-                            .getMaximum(Calendar.DAY_OF_MONTH)
-                            - calendar.get(Calendar.DAY_OF_MONTH))));
-        }
-        return hashMap;
-    }
 
-    /**
-     * 时间格式转化
-     * @author ludashi
-     * @date 2021/6/3 13:37
-     * @param l 时间毫秒值
-     * @return String
-     */
-    private static String longTurnData(Long l) {
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        Date date = new Date(l);
-        return simpleDateFormat.format(date);
-    }
+            calStart.set(calStart.get(Calendar.YEAR), calStart.get(Calendar.MONDAY), calStart.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+            calStart.set(Calendar.DAY_OF_MONTH, calStart.getActualMinimum(Calendar.DAY_OF_MONTH));
 
-    /**
-     * 时间定义
-     * @author ludashi
-     * @date 2021/6/3 13:12
-     * @param day
-     * @return long
-     */
-    public long getTimestampByOffsetDay(int day){
-        Calendar calendar = Calendar.getInstance();
-        calendar.add(Calendar.DAY_OF_MONTH, day);
-        calendar.set(Calendar.HOUR_OF_DAY, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        return calendar.getTimeInMillis();
+            calEnd.set(calEnd.get(Calendar.YEAR), calEnd.get(Calendar.MONDAY), calEnd.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
+            calEnd.set(Calendar.DAY_OF_MONTH, calEnd.getActualMaximum(Calendar.DAY_OF_MONTH));
+            calEnd.set(Calendar.HOUR_OF_DAY, 23);
+        }
+        String beginTime = startFormat.format(calStart.getTime());
+        String endTime = endFormat.format(calEnd.getTime());
+        map.put("beginDate",beginTime);
+        map.put("endDate",endTime);
+        return map;
     }
 
     /**
@@ -406,6 +375,7 @@ public class ReportServiceImpl implements ReportService {
         return map;
     }
 
+
     /**
      * 获取进三个月的
      * @author lu

+ 7 - 11
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/ReportServiceMapper.xml

@@ -28,11 +28,10 @@
             max( bm.material_name ) AS material_name
 
         FROM qr_package qp
-        LEFT JOIN base_material bm ON qp.material_id = bm.id
-
+        INNER JOIN base_material bm ON qp.material_id = bm.id
         <where>
             <if test="null != reportReq.beginTime and null != reportReq.endTime">
-                and #{reportReq.beginTime} &lt; qp.generate_time &lt; #{reportReq.endTime}
+                and qp.generate_time BETWEEN #{reportReq.beginTime} AND #{reportReq.endTime}
             </if>
             and qp.generate_status = 2
         </where>
@@ -42,18 +41,15 @@
 
     <select id="queryFactoryCodeTotal" resultType="com.abi.qms.platform.dao.vo.result.ListFactoryCodeReportVO">
         SELECT
-        bf.factory_code,
-        max(bf.factory_name) as factory_name,
-        sum( qp.qr_number ) as qr_number
+        max( bf.factory_name ) AS factory_name,
+        IFNULL( SUM( ( IF ( qp.is_download = 1, qp.qr_number, 0 ) ) ), 0 ) AS qr_download_number,
+        IFNULL( SUM( qp.qr_number ), 0 ) AS qr_number
         FROM
         qr_package qp
-        LEFT JOIN base_factory bf ON qp.factory_cover_id = bf.id
+        INNER JOIN base_factory bf ON qp.factory_cover_id = bf.id
         <where>
-            <if test="1 == isDownload">
-                AND qp.is_download = 1
-            </if>
             <if test="null != reportReq.beginTime and null != reportReq.endTime">
-                and #{reportReq.beginTime} &lt; qp.generate_time &lt; #{reportReq.endTime}
+                and qp.generate_time BETWEEN #{reportReq.beginTime} AND #{reportReq.endTime}
             </if>
             and qp.generate_status = 2
         </where>