Browse Source

添加订单数概念

litianbiao 2 years ago
parent
commit
17ee798f41

+ 1 - 1
pom.xml

@@ -195,7 +195,7 @@
 		<dependency>
 			<groupId>cn.com.crbank.ommo</groupId>
 			<artifactId>EsBaseServer</artifactId>
-			<version>1.2.10</version>
+			<version>1.2.11</version>
 		</dependency>
 		<!-- 个推 -->
 		<dependency>

+ 23 - 1
src/main/java/com/szwl/controller/ScheduledService.java

@@ -71,7 +71,7 @@ public class ScheduledService {
     }
 
 //    在每小时的26分执行一次 es同步数据
-    @Scheduled(cron = "0  * * * ?")
+    @Scheduled(cron = "0 26 * * * ?")
     public void tongbuEs() throws ParseException {
 //        esTOrderService.tongbuByHour();
 //        esTCoinOrderService.tongbuByHour();
@@ -92,6 +92,28 @@ public class ScheduledService {
         }
 
     }
+    //凌晨同步过去一天数据 es同步数据
+    @Scheduled(cron = "30 10 0 * * ?")
+    public void tongbuDayEs() throws ParseException {
+//        esTOrderService.tongbuByHour();
+//        esTCoinOrderService.tongbuByHour();
+        int i = 0;
+        try {
+            String hostAddress = InetAddress.getLocalHost().getHostAddress();
+            if(hostAddress.equals("10.0.0.153")){
+                esTOrderService.tongbuByDay();
+                esTCoinOrderService.tongbuByDay();
+                i++;
+            }
+//            if(hostAddress.equals("10.0.0.152")){
+//                i++;
+//            }
+
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+
+    }
 //    //每天凌晨统计/核对杉德支付的金额表
 //    @Scheduled(cron = "30 05 0 * * ?")
 //    public void shandejiesuan(){

+ 1 - 1
src/main/java/com/szwl/controller/TOrderController.java

@@ -583,7 +583,7 @@ public class TOrderController {
         }else{
             //查去年的数据找数据库
             String endDate = param.getEndDate();
-            String toYear = "2022-01-01 00:00:00";
+            String toYear = "2023-01-01 00:00:00";
             Date date =null;
             Date year = null;
             SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

+ 13 - 12
src/main/java/com/szwl/mapper/xml/TOrderMapper.xml

@@ -42,6 +42,7 @@
         <result column="saleNum" jdbcType="FLOAT" property="saleNum" />
         <!--<result column="salePrice" jdbcType="DECIMAL" property="salePrice" />-->
         <result column="salePrice" jdbcType="FLOAT" property="salePrice" />
+        <result column="orderNum" jdbcType="FLOAT" property="orderNum" />
     </resultMap>
     <resultMap id="orderDaoChuDTO" type="com.szwl.model.bean.OrderDaoChuDTO">
         <result column="username" jdbcType="VARCHAR"  property="username" />
@@ -64,11 +65,11 @@
     <!-- 日统计select concat(DATE_FORMAT( a.create_date,'%H'),'点') as categorie,count(1) as saleNum,sum(a.price) as salePrice -->
     <select id="getDayStatistics" resultMap="chartBean" parameterType="com.szwl.model.query.StatisticsParam">
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
-            select concat(DATE_FORMAT( a.create_date,'%H'),'点') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select concat(DATE_FORMAT( a.create_date,'%H'),'点') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_order a where a.status='1' -- 支付成功
         </if>
         <if test="ifForeign != null and ifForeign ==1"> -- 国外用户
-            select concat(DATE_FORMAT( a.pay_date,'%H'),'点') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select concat(DATE_FORMAT( a.pay_date,'%H'),'点') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_coin_order a  where 1=1
         </if>
         <if test="adminId != null and adminId !=''">
@@ -111,7 +112,7 @@
     <!--group by DATE_FORMAT( a.create_date,'%H')-->
     <!-- 周统计 -->
     <select id="getWeekStatistics" resultMap="chartBean" parameterType="com.szwl.model.query.StatisticsParam">
-        SELECT tab1.categorie,ifnull(tab2.saleNum,0) as saleNum,ifnull(tab2.salePrice,0) as salePrice from (
+        SELECT tab1.categorie,ifnull(tab2.saleNum,0) as saleNum,ifnull(tab2.orderNum,0) as orderNum,ifnull(tab2.salePrice,0) as salePrice from (
         select '周1' as categorie from dual UNION all
         select '周2' as categorie from dual UNION all
         select '周3' as categorie from dual UNION all
@@ -124,12 +125,12 @@
         --     count(1) as saleNum,sum(a.price) as salePrice
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
             select case DATE_FORMAT( a.create_date,'%w') when 0 then '周日' else CONCAT('周',DATE_FORMAT( a.create_date,'%w')) end as categorie,
-            count(1) as saleNum,sum(a.price) as salePrice
+            count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_order a where a.status='1' -- 支付成功
         </if>
         <if test="ifForeign != null and ifForeign ==1"> -- 国外用户
             select case DATE_FORMAT( a.pay_date,'%w') when 0 then '周日' else CONCAT('周',DATE_FORMAT( a.pay_date,'%w')) end as categorie,
-            count(1) as saleNum,sum(a.price) as salePrice
+            count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_coin_order a  where 1=1
         </if>
         <if test="adminId != null and adminId !=''">
@@ -175,11 +176,11 @@
     <!-- 月统计 -->
     <select id="getMonthStatistics" resultMap="chartBean" parameterType="com.szwl.model.query.StatisticsParam">
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
-            select DATE_FORMAT( a.create_date,'%m月%d') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select DATE_FORMAT( a.create_date,'%m月%d') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_order a where a.status='1' -- 支付成功
         </if>
         <if test="ifForeign != null and ifForeign ==1"> -- 国外用户
-            select DATE_FORMAT( a.pay_date,'%m月%d') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select DATE_FORMAT( a.pay_date,'%m月%d') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_coin_order a  where 1=1
         </if>
         <if test="adminId != null and adminId !=''">
@@ -222,7 +223,7 @@
 
     <!-- 年统计 -->
     <select id="getYearStatistics" resultMap="chartBean" parameterType="com.szwl.model.query.StatisticsParam">
-        SELECT tab1.categorie,ifnull(tab2.saleNum,0) as saleNum,ifnull(tab2.salePrice,0) as salePrice from (
+        SELECT tab1.categorie,ifnull(tab2.saleNum,0) as saleNum,ifnull(tab2.orderNum,0) as orderNum,ifnull(tab2.salePrice,0) as salePrice from (
         select '01月' as categorie from dual UNION all
         select '02月' as categorie from dual UNION all
         select '03月' as categorie from dual UNION all
@@ -237,11 +238,11 @@
         select '12月' as categorie from dual) tab1
         left join (
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
-            select concat(DATE_FORMAT( a.create_date,'%m'),'月') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select concat(DATE_FORMAT( a.create_date,'%m'),'月') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_order a where a.status='1' -- 支付成功
         </if>
         <if test="ifForeign != null and ifForeign ==1"> -- 国外用户
-            select concat(DATE_FORMAT( a.pay_date,'%m'),'月') as categorie,count(1) as saleNum,sum(a.price) as salePrice
+            select concat(DATE_FORMAT( a.pay_date,'%m'),'月') as categorie,count(a.product_number) as saleNum,count(1) as orderNum,sum(a.price) as salePrice
             from t_coin_order a  where 1=1
         </if>
         <if test="adminId != null and adminId !=''">
@@ -284,7 +285,7 @@
     </select>
     <!-- 统计 机器花型销售排行-->
     <select id="getProductNameStatistics" resultType="com.szwl.model.bean.ChartBean">
-        select product_name as categorie,count(1) as saleNum,sum(a.price) as salePrice
+        select product_name as categorie,count(a.product_number) as saleNum,sum(a.price) as salePrice
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
             from t_order a
             where a.status='1'
@@ -306,7 +307,7 @@
     </select>
     <!-- 统计 机器销售排行-->
     <select id="getEquipmentStatistics" resultType="com.szwl.model.bean.ChartBean">
-        select a.client_id as categorie,count(1) as saleNum,sum(a.price) as salePrice
+        select a.client_id as categorie,count(a.product_number) as saleNum,sum(a.price) as salePrice
         <if test="ifForeign != null and ifForeign ==0"> -- 国内用户
             from t_order a
             where  a.status='1'

+ 5 - 1
src/main/java/com/szwl/model/bean/ChartBean.java

@@ -17,11 +17,15 @@ public class ChartBean {
     @ApiModelProperty(value="统计类目")
     private String categorie;
 
-    @ApiModelProperty(value="销量")
+    @ApiModelProperty(value="商品数")
 //    private Integer saleNum;
     private Float saleNum;
 
     @ApiModelProperty(value="销售额")
 //    private Integer salePrice;
     private Float salePrice;
+
+    @ApiModelProperty(value="订单数")
+//    private Integer salePrice;
+    private Float orderNum;
 }

+ 9 - 0
src/main/java/com/szwl/model/bean/ChartColumn.java

@@ -28,11 +28,15 @@ public class ChartColumn {
 //        ArrayList<Integer> salePriceList = new ArrayList<>();
         ArrayList<Float> salePriceList = new ArrayList<>();
 //        ArrayList<Integer> saleNumList = new ArrayList<>();
+        //商品数
         ArrayList<Float> saleNumList = new ArrayList<>();
+        //订单数
+        ArrayList<Float> orderNumList = new ArrayList<>();
 
         for (ChartBean bean :list) {
             categories.add(bean.getCategorie());
             saleNumList.add(bean.getSaleNum());
+            orderNumList.add(bean.getOrderNum());
             salePriceList.add(Float.valueOf(format1(bean.getSalePrice())));
         }
 
@@ -45,9 +49,14 @@ public class ChartColumn {
         chartSerie2.setName("销售额");
         chartSerie2.setData(salePriceList);
 
+        ChartSerie chartSerie3 = new ChartSerie();
+        chartSerie3.setName("订单数");
+        chartSerie3.setData(saleNumList);
+
         ArrayList<ChartSerie> series = new ArrayList<>();
         series.add(chartSerie);
         series.add(chartSerie2);
+        series.add(chartSerie3);
         this.setSeries(series);
     }
     public static String format1(Float value){

+ 1 - 1
src/main/java/com/szwl/model/entity/TCoinOrder.java

@@ -70,6 +70,6 @@ public class TCoinOrder implements Serializable {
     private String note;
 
     @ApiModelProperty(value = "商品数量;")
-    private Integer productNumber=1;
+    private Integer productNumber;
 
 }

+ 1 - 1
src/main/java/com/szwl/model/entity/TOrder.java

@@ -86,7 +86,7 @@ public class TOrder implements Serializable {
     private String productName;
 
     @ApiModelProperty(value = "商品数量;")
-    private Integer productNumber=1;
+    private Integer productNumber;
 
     @ApiModelProperty(value = "商品名称;")
     private String productDesc;

+ 48 - 0
src/main/java/com/szwl/service/es/EsTCoinOrderService.java

@@ -208,4 +208,52 @@ public class EsTCoinOrderService extends EsBaseService<TCoinOrder, TCoinOrderPar
 //
 //        }
     }
+
+    public void tongbuByDay() throws ParseException {
+        String startDate = null;
+
+        String endDate = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Calendar calendar = Calendar.getInstance();
+
+        calendar.setTime(new Date());
+
+        endDate = sdf.format(calendar.getTime());
+
+        calendar.add(calendar.DATE, -1);
+
+        startDate = sdf.format(calendar.getTime());
+        Date start = sdf.parse(startDate);
+        Date end = sdf.parse(endDate);
+        // 查询es 现有的数据
+        int num = 0;
+        while (true) {
+            int limit = MAX_ROW;
+            int offset= num * MAX_ROW;
+            LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+            query.gt(TCoinOrder::getCreateDate,start);
+            query.lt(TCoinOrder::getCreateDate,end);
+//            List<TCoinOrder> list_es = tCoinOrderService.list(query);
+            Page<TCoinOrder> page = new Page<>(offset, limit, true);
+            IPage<TCoinOrder> iPage = tCoinOrderService.page(page, query);
+            List<TCoinOrder> list_es = iPage.getRecords();
+            if(list_es.size()>0){
+                insertBatch(list_es);
+                for(TCoinOrder order:list_es){
+                    try {
+                        updateDataById(order);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            num++;
+            if(list_es.size()< MAX_ROW){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                break;
+            }
+        }
+
+    }
 }

+ 107 - 1
src/main/java/com/szwl/service/es/EsTOrderService.java

@@ -286,6 +286,8 @@ public class EsTOrderService extends EsBaseService<TOrder, TOrderParam> {
         try {
             String aggregationResultName = "aggregationResult";//  仅为名称,用以获取返回结果
             String aggSumName = "sales"; //  仅为名称,用以获取返回结果
+            String aggName_productNumber = "productNumber"; //  仅为名称,用以获取返回结果
+
 
             //Bool查询
             BoolQueryBuilder queryBuilder = getStatisticsParam2QueryBuilder(param);
@@ -298,6 +300,8 @@ public class EsTOrderService extends EsBaseService<TOrder, TOrderParam> {
             // 根据字段price 求和 sum, sales 仅为名称,用以获取返回结果
             SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum(aggSumName).field("price");
             dateHistogram.subAggregation(sumAggregationBuilder);
+            SumAggregationBuilder sumAggregationBuilder2 = AggregationBuilders.sum(aggName_productNumber).field("productNumber");
+            dateHistogram.subAggregation(sumAggregationBuilder2);
             SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
             // 指定size为0,不返回文档 因为只需要数量
             sourceBuilder.query(queryBuilder).aggregation(dateHistogram).size(0);
@@ -313,7 +317,16 @@ public class EsTOrderService extends EsBaseService<TOrder, TOrderParam> {
             for (Histogram.Bucket bucket : buckets) {
                 ChartBean chartBean = new ChartBean();
                 chartBean.setCategorie(bucket.getKeyAsString());
-                chartBean.setSaleNum(Float.valueOf(bucket.getDocCount()));
+//                chartBean.setSaleNum(Float.valueOf(bucket.getDocCount()));
+                //统计商品数
+                ParsedSum saleNum = bucket.getAggregations().get(aggName_productNumber);
+                String saleNumStr = format1((float) saleNum.getValue());
+                if(StringUtils.isEmpty(saleNumStr)){
+                    saleNumStr = "1";
+                }
+                chartBean.setSaleNum(Float.valueOf(saleNumStr));
+                //统计订单数
+                chartBean.setOrderNum(Float.valueOf(bucket.getDocCount()));
 //                chartBean.setSaleNum(Long.valueOf(bucket.getDocCount()).intValue());
                 ParsedSum sum = bucket.getAggregations().get(aggSumName);
                 String s = format1((float) sum.getValue());
@@ -426,4 +439,97 @@ public class EsTOrderService extends EsBaseService<TOrder, TOrderParam> {
 //            }
 //        }
     }
+
+    public void tongbuByDay() throws ParseException {
+        String startDate = null;
+
+        String endDate = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Calendar calendar = Calendar.getInstance();
+
+        calendar.setTime(new Date());
+
+        endDate = sdf.format(calendar.getTime());
+
+        calendar.add(calendar.DATE, -1);
+//        calendar.add(calendar.DATE, -4);
+
+        startDate = sdf.format(calendar.getTime());
+        Date start = sdf.parse(startDate);
+        Date end = sdf.parse(endDate);
+        // 查询es 现有的数据
+        //1,同步已支付的订单
+        int num = 0;
+        while (true) {
+            int limit = MAX_ROW;
+            int offset= num * MAX_ROW;
+            LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+            query.gt(TOrder::getCreateDate,start);
+            query.lt(TOrder::getCreateDate,end);
+            query.eq(TOrder::getStatus,1);
+            Page<TOrder> page = new Page<>(offset, limit, true);
+            IPage<TOrder> iPage = tOrderService.page(page, query);
+            List<TOrder> list_es = iPage.getRecords();
+            if(list_es.size()>0){
+                insertBatch(list_es);
+                for(TOrder order:list_es){
+                    try {
+                        updateDataById(order);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            num++;
+            if(list_es.size()< MAX_ROW){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                break;
+            }
+        }
+        //2,同步已退款的订单
+        int num2 = 0;
+        while (true) {
+            int limit = MAX_ROW;
+            int offset= num2 * MAX_ROW;
+            LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+            query.gt(TOrder::getCreateDate,start);
+            query.lt(TOrder::getCreateDate,end);
+            query.eq(TOrder::getStatus,3);
+            Page<TOrder> page = new Page<>(offset, limit, true);
+            IPage<TOrder> iPage = tOrderService.page(page, query);
+            List<TOrder> list_es = iPage.getRecords();
+            if(list_es.size()>0){
+                insertBatch(list_es);
+                for(TOrder order:list_es){
+                    try {
+                        updateDataById(order);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            num2++;
+            if(list_es.size()< MAX_ROW){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                break;
+            }
+        }
+        // 查询es 现有的数据
+//        LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+//        query.gt(TOrder::getCreateDate,start);
+//        query.lt(TOrder::getCreateDate,end);
+//        List<TOrder> list_es = tOrderService.list(query);
+//        if (CollectionUtils.isNotEmpty(list_es)) {
+//            insertBatch(list_es);
+//            if(list_es.size()>0){
+//                for(TOrder order : list_es){
+//                    try {
+//                        updateDataById(order);
+//                    } catch (Exception e) {
+//                        e.printStackTrace();
+//                    }
+//                }
+//            }
+//        }
+    }
 }

+ 1 - 1
src/main/resources/bootstrap.yml

@@ -3,7 +3,7 @@ spring:
     name: order-server
   profiles:
     # 打包或运行时,换这里:sit测试,prod正式
-    active: prod
+    active: sit
   cloud:
     config:
       name: order-server