Selaa lähdekoodia

Merge branch 'feature/1.0.0' of github.com:ab-inbev-apac/abi-cloud-qr-platform into feature/1.0.0

tanzhongran 4 vuotta sitten
vanhempi
commit
fbaa1e2ad1

+ 1 - 1
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/FactoryProperty.java

@@ -22,7 +22,7 @@ public class FactoryProperty implements AbstractExcelProperty {
     private String factoryType;
 
     @ExcelHeadAlias(value = "供应商级别 1-一级供应商 2-二级供应商")
-    private Integer factoryLevel;
+    private String factoryLevel;
 
     @ExcelHeadAlias(value = "省")
     private String province;

+ 17 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/ReportController.java

@@ -2,7 +2,9 @@ package com.abi.qms.platform.controller.console;
 
 import com.abi.qms.platform.dto.req.ReportReq;
 import com.abi.qms.platform.dto.res.ListBrandCodeReportRes;
+import com.abi.qms.platform.dto.res.ListFactoryCodeReportRes;
 import com.abi.qms.platform.dto.res.ListSkuCodeRankingReportRes;
+import com.abi.qms.platform.dto.res.PackageCodeTypeRes;
 import com.abi.qms.platform.service.ReportService;
 import com.abi.task.common.api.base.BaseResponse;
 import io.swagger.annotations.Api;
@@ -12,8 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * @author ludashi
  * @date 2021年06月02日 15:37
@@ -40,10 +40,23 @@ public class ReportController {
        return BaseResponse.create(result);
     }
 
+    @ApiOperation("码包概况")
+    @GetMapping("/queryPackageCodeGeneral")
+    public BaseResponse<PackageCodeTypeRes> queryPackageCodeGeneral(@Validated ReportReq reportReq) {
+        PackageCodeTypeRes result= reportService.queryPackageCodeGeneral(reportReq);
+        return BaseResponse.create(result);
+    }
     @ApiOperation("SKU使用码量排名")
-    @PostMapping("/querySkuCodeRanking")
-    public BaseResponse<ListSkuCodeRankingReportRes> querySkuCodeRanking(@RequestBody ReportReq reportReq) {
+    @GetMapping("/querySkuCodeRanking")
+    public BaseResponse<ListSkuCodeRankingReportRes> querySkuCodeRanking(@Validated ReportReq reportReq) {
         ListSkuCodeRankingReportRes result= reportService.querySkuCodeRanking(reportReq);
         return BaseResponse.create(result);
     }
+
+    @ApiOperation("包材厂使用码量,下载率")
+    @GetMapping("/queryFactoryCodeReport")
+    public BaseResponse<ListFactoryCodeReportRes> queryFactoryCodeTotalReport(@Validated ReportReq reportReq) {
+        ListFactoryCodeReportRes result= reportService.queryFactoryCodeTotalReport(reportReq);
+        return BaseResponse.create(result);
+    }
 }

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

@@ -1,10 +1,13 @@
 package com.abi.qms.platform.dao.mapper;
 
 import com.abi.qms.platform.dao.vo.result.ListBrandCodeReportVO;
+import com.abi.qms.platform.dao.vo.result.ListFactoryCodeReportVO;
+import com.abi.qms.platform.dao.vo.result.ListPackageCodeVo;
 import com.abi.qms.platform.dao.vo.result.ListSkuCodeReportVO;
 import com.abi.qms.platform.dto.req.ReportReq;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -22,10 +25,38 @@ public interface ReportServiceMapper  {
      */
     List<ListBrandCodeReportVO> queryBrandCodeProportion(@Param("reportReq") ReportReq reportReq);
 
+    /**
+     * 查询生成码数量
+     * @param reportReq
+     * @return
+     */
+    List<ListPackageCodeVo> queryPackageCodeNum(@Param("reportReq") ReportReq reportReq,@Param("beginDate")LocalDateTime beginDate,@Param("endDate")LocalDateTime endDate);
+
+    /**
+     * 查询下载码数量
+     * @param reportReq
+     * @return
+     */
+    List<ListPackageCodeVo> queryLoadPackageCodeNum(@Param("reportReq") ReportReq reportReq,@Param("beginDate")LocalDateTime beginDate,@Param("endDate")LocalDateTime endDate);
+
+    /**
+     * 查询激活码数量
+     * @param reportReq
+     * @return
+     */
+    List<ListPackageCodeVo> queryActivateCodeNum(@Param("reportReq") ReportReq reportReq,@Param("beginDate")LocalDateTime beginDate,@Param("endDate")LocalDateTime endDate);
+
     /**
      * SKU使用码量排名
      * @param reportReq
      * @return
      */
     List<ListSkuCodeReportVO> querySkuCodeRanking(@Param("reportReq") ReportReq reportReq);
+
+    /**
+     * 包材厂使用码量,下载率
+     * @param reportReq
+     * @return
+     */
+    List<ListFactoryCodeReportVO> queryFactoryCodeTotal(@Param("reportReq") ReportReq reportReq, @Param("isDownload") Integer isDownload);
 }

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

@@ -0,0 +1,25 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author guokaixiang
+ * @date 2021年06月03日 11:50
+ */
+@Data
+@ApiModel
+public class ListFactoryCodeReportVO implements Serializable {
+
+    @ApiModelProperty("包材厂名称")
+    private String factoryName;
+
+    @ApiModelProperty("码数量")
+    private Long qrNumber;
+
+    @ApiModelProperty("下载率")
+    private String downloadNumber;
+}

+ 26 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/ListPackageCodeVo.java

@@ -0,0 +1,26 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author liguosong
+ * @date 2021年06月02日
+ */
+@Data
+@ApiModel
+public class ListPackageCodeVo implements Serializable {
+
+    @ApiModelProperty(value = "生成箱码数量")
+    private Integer qrType;
+
+    @ApiModelProperty(value = "生成盖码数量")
+    private Long qrNumber;
+
+    @ApiModelProperty("生成码数量同比")
+    private String Percent;
+
+}

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

@@ -0,0 +1,40 @@
+package com.abi.qms.platform.dto.res;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author guokaixiang
+ * @date 2021年06月03日 11:50
+ */
+@Data
+@ApiModel
+public class ListFactoryCodeReportRes implements Serializable {
+
+    @ApiModelProperty("包材厂使用码占比列表")
+    private List<FactoryCodeReportResBean> factoryCodeResReportList;
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ToString
+    @ApiModel(value = "ListFactoryCodeReportRes_FactoryCodeReportResBean")
+    public static class FactoryCodeReportResBean implements Serializable {
+
+        @ApiModelProperty("包材厂名称")
+        private String factoryName;
+
+        @ApiModelProperty("码数量")
+        private Long qrNumber;
+
+        @ApiModelProperty("下载率")
+        private String downloadNumber;
+    }
+}

+ 44 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/PackageCodeTypeRes.java

@@ -0,0 +1,44 @@
+package com.abi.qms.platform.dto.res;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@ApiModel
+public class PackageCodeTypeRes {
+
+    @ApiModelProperty(value = "生成箱码数量")
+    private Long createBoxNumber;
+
+    @ApiModelProperty(value = "生成盖码数量")
+    private Long createCapNumber;
+
+    @ApiModelProperty("生成码数量同比")
+    private String createPercent;
+
+    @ApiModelProperty(value = "下载箱码数量")
+    private Long loadBoxNumber;
+
+    @ApiModelProperty(value = "下载盖码数量")
+    private Long loadCapNumber;
+
+    @ApiModelProperty("下载码数量同比")
+    private String loadPercent;
+
+    @ApiModelProperty(value = "激活箱码数量")
+    private Long activateBoxNumber;
+
+    @ApiModelProperty(value = "激活盖码数量")
+    private Long activateCapNumber;
+
+    @ApiModelProperty("激活码数量同比")
+    private String activatePercent;
+
+}

+ 11 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/mq/GenerateCodeConsumer.java

@@ -112,6 +112,9 @@ public class GenerateCodeConsumer {
 	@Autowired
 	private RedisClient redisClient;
 
+	@Autowired
+	private BaseMaterialMapper baseMaterialMapper;
+
 	//生成码数据
 	final List<QrData> qrDataList = new LinkedList<>();
 
@@ -130,6 +133,9 @@ public class GenerateCodeConsumer {
 	/** 声明码对应的值 */
 	public Long codeIndex = 0L;
 
+	//该包下共有多少码数量
+	public Long sum = 0L;
+
 	@SneakyThrows
 	@RabbitHandler
 	@RabbitListener(queues = GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE)
@@ -260,8 +266,10 @@ public class GenerateCodeConsumer {
 		}
 
 		//2-保存压缩文件并上传oss
-		//压缩后得名字
-		String zipName = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now())+".zip";
+		//压缩后得名字  正式码_SAP订单号_物料名称_文件内码数量
+		BaseMaterial baseMaterial = baseMaterialMapper.selectById(qrPackage.getMaterialId());
+		String zipName = "正式码_"+qrPackage.getSapOrderNo()+"_"+baseMaterial.getMaterialName()+"_"+sum+".zip";
+		sum = 0L;
 		//压缩密码
 		String pas = RandomCodeUtils.getStr(6);
 		log.info("生成密码:"+pas);
@@ -353,6 +361,7 @@ public class GenerateCodeConsumer {
 			qrCodes.addAll(qrCodeCope);
 		});
 		tableStorePlusUtils.putRow(qrCodes);
+		sum+=qrCodes.size();
 	}
 
 	/**

+ 19 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/ReportService.java

@@ -2,6 +2,8 @@ package com.abi.qms.platform.service;
 
 import com.abi.qms.platform.dto.req.ReportReq;
 import com.abi.qms.platform.dto.res.ListBrandCodeReportRes;
+import com.abi.qms.platform.dto.res.ListFactoryCodeReportRes;
+import com.abi.qms.platform.dto.res.PackageCodeTypeRes;
 import com.abi.qms.platform.dto.res.ListSkuCodeRankingReportRes;
 
 /**
@@ -19,6 +21,15 @@ public interface ReportService {
     */
    ListBrandCodeReportRes queryBrandCodeProportion(ReportReq reportReq);
 
+   /**
+    * 获取码包概况
+    * @author liguosong
+    * @date 2021/6/2
+    * @param reportReq
+    * @return
+    */
+   PackageCodeTypeRes queryPackageCodeGeneral(ReportReq reportReq);
+
 
    /**
     * SKU使用码量排名
@@ -26,4 +37,12 @@ public interface ReportService {
     * @return
     */
    ListSkuCodeRankingReportRes querySkuCodeRanking(ReportReq reportReq);
+
+
+    /**
+     * 包材厂使用码量,下载率
+     * @param reportReq
+     * @return
+     */
+    ListFactoryCodeReportRes queryFactoryCodeTotalReport(ReportReq reportReq);
 }

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

@@ -1,19 +1,37 @@
 package com.abi.qms.platform.service.impl;
 
+import com.abi.qms.platform.dao.enums.QrTypeEnum;
 import com.abi.qms.platform.dao.mapper.ReportServiceMapper;
 import com.abi.qms.platform.dao.vo.result.ListBrandCodeReportVO;
+import com.abi.qms.platform.dao.vo.result.ListFactoryCodeReportVO;
 import com.abi.qms.platform.dao.vo.result.ListSkuCodeReportVO;
+import com.abi.qms.platform.dao.vo.result.ListPackageCodeVo;
 import com.abi.qms.platform.dto.req.ReportReq;
 import com.abi.qms.platform.dto.res.ListBrandCodeReportRes;
+import com.abi.qms.platform.dto.res.ListFactoryCodeReportRes;
 import com.abi.qms.platform.dto.res.ListSkuCodeRankingReportRes;
+import com.abi.qms.platform.dto.res.PackageCodeTypeRes;
 import com.abi.qms.platform.service.ReportService;
 import com.abi.task.common.utils.PojoConverterUtils;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -26,23 +44,26 @@ public class ReportServiceImpl implements ReportService {
     @Autowired
     private ReportServiceMapper reportServiceMapper;
 
-   /**
-    * 品牌使用码量占比
-    * @author ludashi
-    * @date 2021/6/2 17:50
-    * @param reportReq
-    * @return com.abi.qms.platform.dto.res.ListBrandCodeReportRes
-    */
+    /**
+     * 品牌使用码量占比
+     *
+     * @param reportReq
+     * @return com.abi.qms.platform.dto.res.ListBrandCodeReportRes
+     * @author ludashi
+     * @date 2021/6/2 17:50
+     */
     @Override
     public ListBrandCodeReportRes queryBrandCodeProportion(ReportReq reportReq) {
+        //参数设置初始化
+        setQueryTime(reportReq);
         //查询 品牌数量
         List<ListBrandCodeReportVO> listReportVOS = reportServiceMapper.queryBrandCodeProportion(reportReq);
-        //求总和
-        Long collect = listReportVOS.stream().collect(Collectors.summingLong(ListBrandCodeReportVO::getQrNumber));
         if(!CollectionUtils.isEmpty(listReportVOS)){
+            //求总和
+            Long collect = listReportVOS.stream().collect(Collectors.summingLong(ListBrandCodeReportVO::getQrNumber));
             listReportVOS.forEach(listReportVO->{
-                long l = listReportVO.getQrNumber() / collect * 100;
-                listReportVO.setPercent(new DecimalFormat("#0.00").format(l + 0.000001d)+"%");
+                Double val = new Double(listReportVO.getQrNumber() / collect * 100);
+                listReportVO.setPercent(new DecimalFormat("#0.00").format(val + 0.000001d)+"%");
             });
         }
         // 封装出参
@@ -66,4 +87,329 @@ public class ReportServiceImpl implements ReportService {
         res.setReportSkuCodeRankingResList(skuCodeReportResBeans);
         return res;
     }
-}
+
+
+    /**
+     * 包材厂使用码量,下载率
+     * @param reportReq
+     * @return
+     */
+    @Override
+    public ListFactoryCodeReportRes queryFactoryCodeTotalReport(ReportReq reportReq) {
+        //参数设置初始化
+        setQueryTime(reportReq);
+        //包材厂生成包数量
+        List<ListFactoryCodeReportVO> listFactoryCodeTotalReportVOS = reportServiceMapper.queryFactoryCodeTotal(reportReq,0);
+        //包材厂包下载量
+        List<ListFactoryCodeReportVO> listFactoryCodeDownloadTotalReportVOS = reportServiceMapper.queryFactoryCodeTotal(reportReq,1);
+        Map<String, Long> FactoryCodeDownloadTotalMaps = listFactoryCodeTotalReportVOS.stream().collect(Collectors.toMap(ListFactoryCodeReportVO::getFactoryName, ListFactoryCodeReportVO::getQrNumber));
+        listFactoryCodeTotalReportVOS.forEach(listReportVO->{
+            Double val = 0d;
+            if (null != FactoryCodeDownloadTotalMaps.get(listReportVO.getFactoryName())){
+                val = new Double(FactoryCodeDownloadTotalMaps.get(listReportVO.getFactoryName()) / listReportVO.getQrNumber() * 100);
+            }
+            listReportVO.setDownloadNumber(new DecimalFormat("#0.00").format(val + 0.000001d)+"%");
+        });
+        // 封装出参
+        ListFactoryCodeReportRes res = new ListFactoryCodeReportRes();
+        List<ListFactoryCodeReportRes.FactoryCodeReportResBean> reportFactoryRes = PojoConverterUtils.copyList(listFactoryCodeTotalReportVOS, ListFactoryCodeReportRes.FactoryCodeReportResBean.class);
+        res.setFactoryCodeResReportList(reportFactoryRes);
+        return res;
+    }
+
+    /**
+     * 设置时间区间值
+     * @param reportReq
+     */
+    private void setQueryTime(ReportReq reportReq){
+        if(!ObjectUtils.isEmpty(reportReq) &&
+                null == reportReq.getEndTime() &&
+                null == reportReq.getBeginTime() &&
+                !ObjectUtils.isEmpty(reportReq.getValue())){
+            HashMap<String, LocalDateTime> timestamp = getTimestamp(reportReq.getValue());
+            reportReq.setBeginTime( timestamp.get("startTime"));
+            reportReq.setEndTime( timestamp.get("endTime"));
+        }
+    }
+
+    /**
+     * 根据类型获取时间范围
+     * @param timeType (0-当天,1-本周,2-本月)
+     * @return key 开始时间:startTime  结束时间:endTime
+     */
+    private HashMap<String, LocalDateTime> getTimestamp(Integer timeType) {
+        HashMap<String, LocalDateTime> hashMap = new HashMap<String, LocalDateTime>();
+        Calendar calendar = Calendar.getInstance();
+
+        //当天
+        if (timeType == 0){
+            hashMap.put("startTime", longTurnData(getTimestampByOffsetDay(0)));
+            hashMap.put("endTime", longTurnData(getTimestampByOffsetDay(1)));
+        }
+        //本周
+        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)));
+        }
+
+        //本月
+        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 java.time.LocalDateTime
+     */
+    private LocalDateTime longTurnData(Long l) {
+        Instant instant = Instant.ofEpochMilli(l);
+        ZoneId zone = ZoneId.systemDefault();
+        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
+        return localDateTime;
+    }
+
+    /**
+     * 时间定义
+     * @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();
+    }
+
+
+
+    @Override
+    public PackageCodeTypeRes queryPackageCodeGeneral(ReportReq reportReq) {
+        PackageCodeTypeRes res = new PackageCodeTypeRes();
+        int before=0;//往期
+        int present=0;//同期
+        //封装入参
+        Map<String,LocalDateTime> map=null;
+        if(!ObjectUtils.isEmpty(reportReq) && null == reportReq.getEndTime() && null == reportReq.getBeginTime()){
+            HashMap<String, LocalDateTime> timestamp = getTimestamp(reportReq.getValue());
+            reportReq.setBeginTime( timestamp.get("startTime"));
+            reportReq.setEndTime( timestamp.get("endTime"));
+            if(1==reportReq.getValue()){//周
+                map=getBeforeWeekTimes();
+            }
+            if(2==reportReq.getValue()){//月
+                map=getBeforeMonthTime();
+            }
+        }
+        //1.生成码数量
+        getGenerateCodeNum(reportReq, res,present,before,map);
+        //2.下载码数量
+        getLoadCodeNum(reportReq, res,present,before,map);
+        //3.激活码数量
+        getActivateCodeNum(reportReq, res,present,before,map);
+        //返回参数
+        return res;
+    }
+
+    private void getGenerateCodeNum(ReportReq reportReq, PackageCodeTypeRes res, int present, int before,Map<String,LocalDateTime> map) {
+        List<ListPackageCodeVo> createList = reportServiceMapper.queryPackageCodeNum(reportReq,map.get("beginDate"), map.get("endDate"));
+        /**
+         * 处理逻辑
+         * 1.取出本周的数据集
+         * 2.取出不是本周的数据集
+         * 3.本周的数据集-不是本周的数据集/不是本周的数据集*100%
+         */
+        for (int i = 0; i < createList.size(); i++) {
+            if("0".equals(createList.get(i).getPercent())){
+                if (QrTypeEnum.CARTON.getCode().equals(createList.get(i).getQrType())) {//判断是否箱码
+                    res.setCreateBoxNumber(createList.get(i).getQrNumber());//箱码
+                } else if (QrTypeEnum.CAP.getCode().equals(createList.get(i).getQrType())) {//判断是否盖码
+                    res.setCreateCapNumber(createList.get(i).getQrNumber());//盖码
+                }
+            }
+        }
+        if (StringUtils.isNotEmpty(reportReq.getValue() + "")) {
+            //计算同期和往期的箱码和盖码
+            String vaiue=reportReq.getValue() + "";
+            before = createList.stream().filter(x -> x.getPercent().equals(vaiue)).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            present = createList.stream().filter(x -> x.getPercent().equals("0")).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            BigDecimal number = new BigDecimal(0);
+            BigDecimal preNum = BigDecimal.valueOf((int) present);
+            BigDecimal sufNum = BigDecimal.valueOf((int) before);
+            String result = percentBigDecimal(preNum, sufNum);
+            res.setCreatePercent(result);//获取同比增长率
+        }
+    }
+    private void getLoadCodeNum(ReportReq reportReq, PackageCodeTypeRes res, int present, int before,Map<String,LocalDateTime> map) {
+        List<ListPackageCodeVo> loadList = reportServiceMapper.queryLoadPackageCodeNum(reportReq,map.get("beginDate"), map.get("endDate"));
+        for (int i = 0; i < loadList.size(); i++) {
+            if("0".equals(loadList.get(i).getPercent())) {
+                if (QrTypeEnum.CARTON.getCode().equals(loadList.get(i).getQrType())) {
+                    res.setLoadBoxNumber(loadList.get(i).getQrNumber());
+                } else if (QrTypeEnum.CAP.getCode().equals(loadList.get(i).getQrType())) {
+                    res.setLoadCapNumber(loadList.get(i).getQrNumber());
+                }
+            }
+        }
+        if (StringUtils.isNotEmpty(reportReq.getValue() + "")) {
+            //计算同期和往期的箱码和盖码
+            before = loadList.stream().filter(x -> x.getPercent().equals(reportReq.getValue())).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            //获取为0的
+            present = loadList.stream().filter(x -> x.getPercent().equals("0")).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            BigDecimal number = new BigDecimal(0);
+            BigDecimal preNum = BigDecimal.valueOf((int) present);
+            BigDecimal sufNum = BigDecimal.valueOf((int) before);
+            String result = percentBigDecimal(preNum, sufNum);
+            res.setLoadPercent(result);//获取同比增长率
+        }
+    }
+    private void getActivateCodeNum(ReportReq reportReq, PackageCodeTypeRes res, int present, int before,Map<String,LocalDateTime> map) {
+        List<ListPackageCodeVo> activateList = reportServiceMapper.queryActivateCodeNum(reportReq,map.get("beginDate"), map.get("endDate"));
+        for (int i = 0; i < activateList.size(); i++) {
+            if("0".equals(activateList.get(i).getPercent())) {
+                if (QrTypeEnum.CARTON.getCode().equals(activateList.get(i).getQrType())) {
+                    res.setActivateBoxNumber(activateList.get(i).getQrNumber());
+                } else if (QrTypeEnum.CAP.getCode().equals(activateList.get(i).getQrType())) {
+                    res.setActivateCapNumber(activateList.get(i).getQrNumber());
+                }
+            }
+        }
+        if (StringUtils.isNotEmpty(reportReq.getValue() + "")) {
+            //计算同期和往期的箱码和盖码
+            before = activateList.stream().filter(x -> x.getPercent().equals(reportReq.getValue())).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            present = activateList.stream().filter(x -> x.getPercent().equals("0")).mapToInt(x -> Math.toIntExact(x.getQrNumber())).sum();
+            BigDecimal number = new BigDecimal(0);
+            BigDecimal preNum = BigDecimal.valueOf((int) present);
+            BigDecimal sufNum = BigDecimal.valueOf((int) before);
+            String result = percentBigDecimal(preNum, sufNum);
+            res.setActivatePercent(result);//获取同比增长率
+        }
+
+    }
+    /**
+     * @param preNum 同期数
+     * @param sufNum 往期数
+     * @return
+     */
+    public static String percentBigDecimal(BigDecimal preNum, BigDecimal sufNum) {
+        double result = countDecimal(preNum, sufNum);
+        if (result > 0) {
+            System.out.println("上升" + result + "%");
+            return "+" + result + "%";
+        }
+        if (result < 0) {
+            return "-" + Math.abs(result) + "%";
+        }
+        if (result == 0) {
+            return "0%";
+        }
+        return null;
+    }
+
+    public static double countDecimal(BigDecimal preNum, BigDecimal sufNum) {
+        boolean preBoolean = verifyNum(preNum);
+        boolean sufBoolean = verifyNum(sufNum);
+        //同时为true计算
+        if (preBoolean && sufBoolean) {
+            boolean b = verifyEqual(preNum, sufNum);
+            if (b == false) {
+                return realCountDecimal(preNum, sufNum);
+            }
+            if (b) {
+                return 0;
+            }
+        }
+        if (preBoolean == false && sufBoolean == false) {
+            return 0;
+        }
+        if (sufBoolean == false) {
+            return 100;
+        }
+        if (preBoolean == false) {
+            return -100;
+        }
+        return 0;
+    }
+
+    //验证数字是否为零和null
+    public static boolean verifyNum(BigDecimal num) {
+        if (null != num && num.compareTo(BigDecimal.ZERO) != 0) {
+            return true;
+        }
+        return false;
+    }
+
+    //验证两个数字是否相等
+    public static boolean verifyEqual(BigDecimal preNum, BigDecimal sufNum) {
+        int n = preNum.compareTo(sufNum);
+        if (n == 0) {
+            return true;
+        }
+        return false;
+    }
+
+    //真正计算
+    public static double realCountDecimal(BigDecimal preNum, BigDecimal sufNum) {
+        //(前面的数字-后面的数字)/后面的数字*100
+        BigDecimal bigDecimal = (preNum.subtract(sufNum)).divide(sufNum, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
+        if (bigDecimal.compareTo(BigDecimal.ZERO) != 0) {
+            return bigDecimal.doubleValue();
+        }
+        return 0;
+    }
+
+    /**
+     * 获取上月月初和月末日期
+     * @return
+     */
+    public Map<String,LocalDateTime> getBeforeMonthTime(){
+        Map<String,LocalDateTime> map=new HashMap<String,LocalDateTime>();
+        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String localTime = fmt.format(LocalDateTime.now());
+        LocalDateTime date2 = LocalDateTime.parse(localTime, fmt);
+        LocalDateTime localDateTime = date2.minusMonths(1);
+        LocalDateTime with = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
+        LocalDateTime with2 = localDateTime.with(TemporalAdjusters.firstDayOfMonth());
+        map.put("beginDate",localDateTime.with(TemporalAdjusters.lastDayOfMonth()));
+        map.put("endDate",localDateTime.with(TemporalAdjusters.firstDayOfMonth()));
+        return map;
+    }
+
+    /**
+     * 获取上周周一和周末的数据
+     * @return
+     */
+    public Map<String,LocalDateTime> getBeforeWeekTimes(){
+        Map<String,LocalDateTime> map=new HashMap<String,LocalDateTime>();
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime todayOfLastWeek = now.minusDays(7);
+        LocalDateTime monday = todayOfLastWeek.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1);
+        LocalDateTime sunday = todayOfLastWeek.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1);
+        map.put("beginDate",monday);
+        map.put("endDate",sunday);
+        return map;
+    }
+
+}

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

@@ -13,14 +13,7 @@
         LEFT JOIN base_brand AS brand ON sku.sub_brand_code = brand.brand_code
         <where>
             package.generate_status = 2
-            <!--   1本周  -->
-            <if test="null != reportReq.value and reportReq.value == 1">
-                and yearweek(date_format(package.generate_time,'%Y-%m-%d')) = yearweek(now())
-            </if>
-            <!--  2本月 -->
-            <if test="null != reportReq.value and reportReq.value == 2">
-                and date_format(package.generate_time,'%Y-%m')=date_format(now(),'%Y-%m')
-            </if>
+            <!--   1本周 2本月 -->
             <if test="null != reportReq.beginTime and null != reportReq.endTime">
                 and #{reportReq.beginTime} &lt; package.generate_time &lt; #{reportReq.endTime}
             </if>
@@ -35,19 +28,179 @@
         LEFT JOIN base_sku bs on bm.sku_id  = bs.id
         <where>
             qp.generate_status = 2
+            <if test="null != reportReq.beginTime and null != reportReq.endTime">
+               AND qp.generate_time BETWEEN #{reportReq.beginTime} AND #{reportReq.endTime}
+            </if>
+        </where>
+        GROUP BY bs.sku_name
+        ORDER BY qr_number DESC
+    </select>
+
+    <select id="queryFactoryCodeTotal" resultType="com.abi.qms.platform.dao.vo.result.ListFactoryCodeReportVO">
+        SELECT
+        bf.factory_code,
+        bf.factory_name,
+        sum( qp.qr_number ) qr_number
+        FROM
+        qr_package qp
+        LEFT JOIN base_factory bf ON qp.factory_cover_id = bf.id
+        <where>
+            qp.generate_status = 2
+            <if test="1 == isDownload">
+                AND qp.is_download = 1
+            </if>
+            <if test="null != reportReq.beginTime and null != reportReq.endTime">
+                AND qp.generate_time BETWEEN #{reportReq.beginTime} AND #{reportReq.endTime}
+            </if>
+        </where>
+        GROUP BY bf.factory_code,bf.factory_name
+        ORDER BY qr_number DESC
+    </select>
+
+    <select id="queryPackageCodeNum" resultType="com.abi.qms.platform.dao.vo.result.ListPackageCodeVo">
+        SELECT
+               qr_type qrType,
+               SUM(qr_number) qrNumber,
+               '0' Percent
+        FROM qr_package
+        <where>
+             generate_status = 2
+        AND  qr_type is not null
+        <!--   1本周  -->
+        <if test="null != reportReq.value and reportReq.value == 1">
+            AND  #{reportReq.beginTime} &lt; generate_time &lt; #{reportReq.endTime}
+            GROUP BY qr_type
+            UNION ALL
+            SELECT
+                qr_type,
+                SUM(qr_number) qrNumber,
+                '1' Percent from qr_package
+            WHERE
+                generate_status = 2
+            AND #{beginDate} &lt; generate_time &lt; #{endDate}
+            AND qr_type is not null
+            GROUP BY qr_type
+        </if>
+        <!--  2本月 -->
+        <if test="null != reportReq.value and reportReq.value == 2">
+            AND #{reportReq.beginTime} &lt; generate_time &lt; #{reportReq.endTime}
+            GROUP BY qr_type
+            UNION ALL
+            SELECT
+                   qr_type,
+                   sum(qr_number) qrNumber,
+                   '2' Percent
+            FROM qr_package
+            WHERE
+                generate_status = 2
+            AND  #{beginDate} &lt; generate_time &lt; #{endDate}
+            AND qr_type is not null
+            GROUP BY qr_type
+        </if>
+        <!--  自定义时间 -->
+        <if test="null != reportReq.beginTime and null != reportReq.endTime">
+            AND  #{reportReq.beginTime} &lt; generate_time &lt; #{reportReq.endTime}
+            GROUP BY qr_type
+        </if>
+        </where>
+    </select>
+
+    <select id="queryLoadPackageCodeNum" resultType="com.abi.qms.platform.dao.vo.result.ListPackageCodeVo">
+        SELECT package.qr_type qrType,
+               SUM(package.qr_number)qrNumber,
+               '0' Percent
+        FROM
+                  qr_package package
+        LEFT JOIN qr_package_download_record download ON package.id=download.qr_package_id
+        <where>
+            package.is_download='1' AND package.qr_type IS NOT NULL
             <!--   1本周  -->
             <if test="null != reportReq.value and reportReq.value == 1">
-                yearweek(date_format(qp.generate_time,'%Y-%m-%d')) = yearweek(now())
+                AND #{reportReq.beginTime} &lt; download.create_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
+                UNION ALL
+                SELECT
+                package.qr_type qrType,
+                       SUM(package.qr_number)qrNumber,
+                       '1' Percent
+                FROM qr_package package
+                    LEFT JOIN qr_package_download_record download ON package.id=download.qr_package_id
+                WHERE  package.is_download='1'
+                AND #{beginDate} &lt; download.create_time &lt; #{endDate}
+                AND package.qr_type IS NOT NULL
+                GROUP BY package.qr_type
             </if>
             <!--  2本月 -->
             <if test="null != reportReq.value and reportReq.value == 2">
-                and date_format(qp.generate_time,'%Y-%m')=date_format(now(),'%Y-%m')
+                AND #{reportReq.beginTime} &lt; download.create_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
+                UNION ALL
+                SELECT
+                       qr_type qrType,
+                       SUM(qr_number)qrNumber,
+                       '2' Percent
+                FROM qr_package package
+                LEFT JOIN qr_package_download_record download ON package.id=download.qr_package_id
+                WHERE package.is_download='1'
+                AND #{beginDate} &lt; download.create_time &lt; #{endDate}
+                AND package.qr_type IS NOT NULL
+                GROUP BY package.qr_type
             </if>
+            <!--  自定义时间 -->
             <if test="null != reportReq.beginTime and null != reportReq.endTime">
-                and #{reportReq.beginTime} &lt; qp.generate_time &lt; #{reportReq.endTime}
+                AND  #{reportReq.beginTime} &lt; download.create_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
             </if>
         </where>
-        GROUP BY bs.sku_name
-        ORDER BY qr_number DESC
     </select>
+
+    <select id="queryActivateCodeNum" resultType="com.abi.qms.platform.dao.vo.result.ListPackageCodeVo">
+        SELECT
+               package.qr_type qrType,
+               SUM(package.qr_number)qrNumber,
+               '0' Percent
+        FROM qr_package package
+            LEFT JOIN  qr_box_mapping boxmap ON package.id=boxmap.package_id
+        <where>
+            boxmap.active_status ='1' AND  package.qr_type IS NOT NULL
+            <!--   1本周  -->
+            <if test="null != reportReq.value and reportReq.value == 1">
+                AND #{reportReq.beginTime} &lt; boxmap.active_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
+                UNION ALL
+                SELECT
+                       package.qr_type qrType,
+                       SUM(package.qr_number)qrNumber,
+                       '1' Percent
+                FROM qr_package package
+                    LEFT JOIN qr_box_mapping boxmap ON package.id=boxmap.package_id
+                WHERE  boxmap.active_status ='1'
+                AND #{beginDate} &lt; boxmap.active_time &lt; #{endDate}
+                AND package.qr_type IS NOT NULL
+                GROUP BY package.qr_type
+            </if>
+            <!--  2本月 -->
+            <if test="null != reportReq.value and reportReq.value == 2">
+                AND #{reportReq.beginTime} &lt; boxmap.active_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
+                UNION ALL
+                SELECT
+                       package.qr_type qrType,
+                       SUM(package.qr_number)qrNumber,
+                       '2' Percent
+                FROM qr_package package
+                    LEFT JOIN qr_box_mapping boxmap ON package.id=boxmap.package_id
+                WHERE  boxmap.active_status ='2'
+                AND #{beginDate} &lt; boxmap.active_time &lt; #{endDate}
+                AND package.qr_type IS NOT NULL
+                GROUP BY package.qr_type
+            </if>
+            <!--  自定义时间 -->
+            <if test="null != reportReq.beginTime and null != reportReq.endTime">
+                AND  #{reportReq.beginTime} &lt; boxmap.active_time &lt; #{reportReq.endTime}
+                GROUP BY package.qr_type
+            </if>
+        </where>
+    </select>
+
 </mapper>