浏览代码

feat: "esServer...+1+1"

wangzeyu@tom.com 2 年之前
父节点
当前提交
fbf5cbea0b
共有 32 个文件被更改,包括 2633 次插入12 次删除
  1. 97 5
      src/main/java/com/szwl/controller/EsController.java
  2. 21 0
      src/main/java/com/szwl/controller/TCoinOrderController.java
  3. 21 0
      src/main/java/com/szwl/controller/TEquipmentController.java
  4. 21 0
      src/main/java/com/szwl/controller/TOrderController.java
  5. 43 0
      src/main/java/com/szwl/feign/bean/SzwlFeign.java
  6. 16 0
      src/main/java/com/szwl/mapper/TCoinOrderMapper.java
  7. 16 0
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  8. 16 0
      src/main/java/com/szwl/mapper/TOrderMapper.java
  9. 28 0
      src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml
  10. 74 0
      src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml
  11. 46 0
      src/main/java/com/szwl/mapper/xml/TOrderMapper.xml
  12. 4 0
      src/main/java/com/szwl/model/bean/ChartBean.java
  13. 20 0
      src/main/java/com/szwl/model/bo/ChartType.java
  14. 59 0
      src/main/java/com/szwl/model/entity/TCoinOrder.java
  15. 201 0
      src/main/java/com/szwl/model/entity/TEquipment.java
  16. 122 0
      src/main/java/com/szwl/model/entity/TOrder.java
  17. 19 1
      src/main/java/com/szwl/model/query/StatisticsParam.java
  18. 57 5
      src/main/java/com/szwl/model/query/TAdminParam.java
  19. 60 0
      src/main/java/com/szwl/model/query/TCoinOrderParam.java
  20. 68 0
      src/main/java/com/szwl/model/query/TEquipmentParam.java
  21. 70 0
      src/main/java/com/szwl/model/query/TOrderParam.java
  22. 267 0
      src/main/java/com/szwl/model/utils/DateUtils.java
  23. 16 0
      src/main/java/com/szwl/service/TCoinOrderService.java
  24. 16 0
      src/main/java/com/szwl/service/TEquipmentService.java
  25. 16 0
      src/main/java/com/szwl/service/TOrderService.java
  26. 244 0
      src/main/java/com/szwl/service/impl/EsTCoinOrderServiceImpl.java
  27. 356 0
      src/main/java/com/szwl/service/impl/EsTEquipmentServiceImpl.java
  28. 578 0
      src/main/java/com/szwl/service/impl/EsTOrderServiceImpl.java
  29. 20 0
      src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java
  30. 20 0
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  31. 20 0
      src/main/java/com/szwl/service/impl/TOrderServiceImpl.java
  32. 1 1
      src/test/java/com/szwl/AutoGeneratorTests.java

+ 97 - 5
src/main/java/com/szwl/controller/EsController.java

@@ -1,25 +1,43 @@
 package com.szwl.controller;
 
 
+import cn.com.crbank.ommo.bean.ResultMessage;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.szwl.constant.ResponseCodesEnum;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TOrder;
 import com.szwl.model.entity.TOrderAbroad;
+import com.szwl.model.query.TAdminParam;
+import com.szwl.service.TOrderService;
 import com.szwl.service.impl.EsTOrderAbroadServiceImpl;
+import com.szwl.service.impl.EsTOrderServiceImpl;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
+@Slf4j
 @RestController
 @RequestMapping("/es")
 public class EsController {
 
     EsTOrderAbroadServiceImpl esTOrderAbroadService;
 
-    public EsController(EsTOrderAbroadServiceImpl esTOrderAbroadService) {
+    EsTOrderServiceImpl esTOrderService;
+
+    TOrderService orderService;
+
+    public EsController(EsTOrderAbroadServiceImpl esTOrderAbroadService, EsTOrderServiceImpl esTOrderService, TOrderService orderService) {
         this.esTOrderAbroadService = esTOrderAbroadService;
+        this.esTOrderService = esTOrderService;
+        this.orderService = orderService;
     }
 
     @ApiOperation(value = "同步海外线上订单到es中")
@@ -31,4 +49,78 @@ public class EsController {
         esTOrderAbroadService.insertData(orderAbroad);
         return R.ok("同步es成功");
     }
+
+
+    @ApiOperation("同步国内订单Order表数据")
+    @PostMapping("/saveEsTOrder")
+    public ResponseEntity<?> saveEsTOrder(@RequestBody TAdminParam.TOrderParam param) {
+        try{
+//            时间跨度不要太大,晚上不要超过一个月,白天访问不要超过一天
+            //从3月20号开始同步
+            // 初始化旧流水
+            // 查询es 现有的数据
+            //1,同步已支付的订单
+            int num = 0;
+            while (true) {
+                int limit = 1000;
+                int offset= num * 1000;
+                LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+                query.gt(TOrder::getCreateDate,param.getCreateDate_start());
+                query.lt(TOrder::getCreateDate,param.getCreateDate_end());
+                query.eq(TOrder::getStatus,1);
+                Page<TOrder> page = new Page<>(offset, limit, true);
+                IPage<TOrder> iPage = orderService.page(page, query);
+                List<TOrder> list_es = iPage.getRecords();
+                if(list_es.size()>0){
+                    esTOrderService.insertBatch(list_es);
+                    for(TOrder order:list_es){
+                        try {
+                            esTOrderService.updateDataById(order);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+                num++;
+                if(list_es.size()< 1000){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                    break;
+                }
+            }
+            //2,同步已退款的订单
+            int num2 = 0;
+            while (true) {
+                int limit = 1000;
+                int offset= num2 * 1000;
+                LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+                query.gt(TOrder::getCreateDate,param.getCreateDate_start());
+                query.lt(TOrder::getCreateDate,param.getCreateDate_end());
+                query.eq(TOrder::getStatus,3);
+                Page<TOrder> page = new Page<>(offset, limit, true);
+                IPage<TOrder> iPage = orderService.page(page, query);
+                List<TOrder> list_es = iPage.getRecords();
+                if(list_es.size()>0){
+                    esTOrderService.insertBatch(list_es);
+                    for(TOrder order:list_es){
+                        try {
+                            esTOrderService.updateDataById(order);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+                num2++;
+                if(list_es.size()< 1000){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                    break;
+                }
+            }
+        }catch (Exception e){
+            log.error("ElasticsearchRunner InitEsTOrderThread 发生错误:{}" , e);
+            throw new cn.com.crbank.ommo.exception.MyException("ElasticsearchRunner InitEsTOrderThread 发生错误:" + e.getMessage());
+        }
+        return ResponseEntity
+                .status(HttpStatus.OK)
+                .body(new ResultMessage()
+                        .setCode(true)
+                        .setMessage("同步es设备数据成功"));
+    }
 }

+ 21 - 0
src/main/java/com/szwl/controller/TCoinOrderController.java

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@RestController
+@RequestMapping("/tCoinOrder")
+public class TCoinOrderController {
+
+}
+

+ 21 - 0
src/main/java/com/szwl/controller/TEquipmentController.java

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@RestController
+@RequestMapping("/tEquipment")
+public class TEquipmentController {
+
+}
+

+ 21 - 0
src/main/java/com/szwl/controller/TOrderController.java

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@RestController
+@RequestMapping("/tOrder")
+public class TOrderController {
+
+}
+

+ 43 - 0
src/main/java/com/szwl/feign/bean/SzwlFeign.java

@@ -0,0 +1,43 @@
+package com.szwl.feign.bean;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TEquipment;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+
+@FeignClient(name = "szwl-server")
+public interface SzwlFeign {
+
+    @GetMapping("/tAdmin/getAdminIdList")
+    ResponseModel<List<Long>>  getAdminIdList(@RequestParam String adminId);
+    @GetMapping("/tAdmin/getAdminByUsername")
+    ResponseModel<TAdmin>  getAdminByUsername(@RequestParam String username);
+    @GetMapping("/tAdmin/getAdmin")
+    ResponseModel<TAdmin>  getAdmin(@RequestParam String id);
+
+//    @GetMapping("/tEquipment/getClientIdList")
+//    ResponseModel<TAdminEquipment>  getClientIdList(@RequestParam String adminId);
+    @GetMapping("/tEquipment/getClientIds")
+    ResponseModel<List<String>>  getClientIds(@RequestParam String adminId);
+    @GetMapping("/tEquipment/findEquipmentByClientId")
+    ResponseModel<TEquipment> findEquipmentByClientId(@RequestParam String clientId);
+    @PostMapping("/tEquipment/getEquipmentByNameAndId")
+    ResponseModel<TEquipment> getEquipmentByNameAndId(@RequestBody TEquipment equipment);
+    //    @PostMapping("/tEquipment/findById2")
+//    ResponseModel<TEquipment> findById(@RequestParam String id);
+    @GetMapping("/tEquipment/findEquipmentById")
+    ResponseModel<TEquipment> findById(@RequestParam String id);
+    @GetMapping("/tAdmin/pageAdmin2")
+    ResponseModel<IPage<TAdmin>>  pageAdmin2(@RequestParam(value = "current") long current, @RequestParam(value = "size") long size);
+    @GetMapping("/tEquipment/pageEquipment2")
+    ResponseModel<IPage<TEquipment>>  pageEquipment2(@RequestParam(value = "current") long current, @RequestParam(value = "size") long size);
+
+}

+ 16 - 0
src/main/java/com/szwl/mapper/TCoinOrderMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TCoinOrderMapper extends BaseMapper<TCoinOrder> {
+
+}

+ 16 - 0
src/main/java/com/szwl/mapper/TEquipmentMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TEquipment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TEquipmentMapper extends BaseMapper<TEquipment> {
+
+}

+ 16 - 0
src/main/java/com/szwl/mapper/TOrderMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TOrderMapper extends BaseMapper<TOrder> {
+
+}

+ 28 - 0
src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TCoinOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TCoinOrder">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="admin_id" property="adminId" />
+        <result column="client_id" property="clientId" />
+        <result column="pay_type" property="payType" />
+        <result column="price" property="price" />
+        <result column="sn" property="sn" />
+        <result column="type" property="type" />
+        <result column="product_name" property="productName" />
+        <result column="es" property="es" />
+        <result column="pay_date" property="payDate" />
+        <result column="status" property="status" />
+        <result column="note" property="note" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, admin_id, client_id, pay_type, price, sn, type, product_name, es, pay_date, status, note
+    </sql>
+
+</mapper>

文件差异内容过多而无法显示
+ 74 - 0
src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml


+ 46 - 0
src/main/java/com/szwl/mapper/xml/TOrderMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TOrder">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="admin_id" property="adminId" />
+        <result column="admin_proportion" property="adminProportion" />
+        <result column="agency_id" property="agencyId" />
+        <result column="agency_proportion" property="agencyProportion" />
+        <result column="alt_info" property="altInfo" />
+        <result column="client_id" property="clientId" />
+        <result column="equipment_id" property="equipmentId" />
+        <result column="frp_code" property="frpCode" />
+        <result column="merchant_id" property="merchantId" />
+        <result column="merchant_proportion" property="merchantProportion" />
+        <result column="pay_date" property="payDate" />
+        <result column="personage_id" property="personageId" />
+        <result column="personage_proportion" property="personageProportion" />
+        <result column="price" property="price" />
+        <result column="product_id" property="productId" />
+        <result column="product_name" property="productName" />
+        <result column="product_no" property="productNo" />
+        <result column="refund_date" property="refundDate" />
+        <result column="sn" property="sn" />
+        <result column="status" property="status" />
+        <result column="type" property="type" />
+        <result column="trx_no" property="trxNo" />
+        <result column="refund_trx_no" property="refundTrxNo" />
+        <result column="es" property="es" />
+        <result column="refund_amount" property="refundAmount" />
+        <result column="note" property="note" />
+        <result column="pay_platform" property="payPlatform" />
+        <result column="is_settlement" property="isSettlement" />
+        <result column="proportion_desc" property="proportionDesc" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, admin_id, admin_proportion, agency_id, agency_proportion, alt_info, client_id, equipment_id, frp_code, merchant_id, merchant_proportion, pay_date, personage_id, personage_proportion, price, product_id, product_name, product_no, refund_date, sn, status, type, trx_no, refund_trx_no, es, refund_amount, note, pay_platform, is_settlement, proportion_desc
+    </sql>
+
+</mapper>

+ 4 - 0
src/main/java/com/szwl/model/bean/ChartBean.java

@@ -24,4 +24,8 @@ public class ChartBean {
     @ApiModelProperty(value="销售额")
 //    private Integer salePrice;
     private Float salePrice;
+
+    @ApiModelProperty(value="订单数")
+//    private Integer salePrice;
+    private Float orderNum;
 }

+ 20 - 0
src/main/java/com/szwl/model/bo/ChartType.java

@@ -0,0 +1,20 @@
+package com.szwl.model.bo;
+
+public enum ChartType {
+	/**
+	 * 日统计
+	 */
+	day,
+	/**
+	 * 周统计
+	 */
+	week,
+	/**
+	 * 月统计
+	 */
+	month,
+	/**
+	 * 年统计
+	 */
+	year
+}

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

@@ -0,0 +1,59 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TCoinOrder对象", description="")
+public class TCoinOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    private Long adminId;
+
+    private String clientId;
+
+    private Integer payType;
+
+    private BigDecimal price;
+
+    private String sn;
+
+    private Integer type;
+
+    private String productName;
+
+    private String es;
+
+    private Date payDate;
+
+    @ApiModelProperty(value = "支付状态,0:未支付,1:已支付,3:已退款")
+    private String status;
+
+    private String note;
+
+
+}

+ 201 - 0
src/main/java/com/szwl/model/entity/TEquipment.java

@@ -0,0 +1,201 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TEquipment对象", description="")
+public class TEquipment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "设备唯一ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createDate;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "用户ID")
+    private Long adminId;
+
+    @ApiModelProperty(value = "用户等级")
+    private String adminLevel;
+
+    @ApiModelProperty(value = "机器超级管理员admin密码")
+    private String adminPwd;
+
+    private Long areaId;
+
+    @ApiModelProperty(value = "柜内湿度")
+    private String cabinetHd;
+
+    @ApiModelProperty(value = "炉头温度")
+    private String cabinetTm;
+
+    @ApiModelProperty(value = "设备编号")
+    private String clientId;
+
+    @ApiModelProperty(value = "机器联系人名称")
+    private String contactName;
+
+    @ApiModelProperty(value = "联系人电话")
+    private String contactPhone;
+
+    @ApiModelProperty(value = "运营者电话")
+    private String operationalPhone;
+
+    @ApiModelProperty(value = "机器运营者")
+    private String operationalName;
+
+    @ApiModelProperty(value = "炉头转速")
+    private String furnaceSp;
+
+    @ApiModelProperty(value = "炉头温度")
+    private String furnaceTm;
+
+    @ApiModelProperty(value = "机器guest密码")
+    private String guestPwd;
+
+    @ApiModelProperty(value = "true 代表强制联网使用 ,false 代表可不联网使用")
+    private Boolean isNetWork;
+
+    @ApiModelProperty(value = "机器启用状态,true:启用")
+    private Boolean isUsing;
+
+    @ApiModelProperty(value = "最近刷新时间")
+    private Date lastUpdateTime;
+
+    @ApiModelProperty(value = "经度")
+    private Double latitude;
+
+    @ApiModelProperty(value = "纬度")
+    private Double longitude;
+
+    @ApiModelProperty(value = "管理系统ID")
+    private String managerId;
+
+    @ApiModelProperty(value = "客户自命名")
+    private String selfName;
+
+    @ApiModelProperty(value = "通信方式  1:个推,2:Mq 如果为null,那么用个推")
+    private String channel;
+
+    @ApiModelProperty(value = "机器名称")
+    private String name;
+
+    @ApiModelProperty(value = "联网方式")
+    private String netWorkingMode;
+
+    @ApiModelProperty(value = "运营商")
+    private String operator;
+
+    @ApiModelProperty(value = "支付方式")
+    private Integer payType;
+
+    @ApiModelProperty(value = "销售总数")
+    private Integer productTotal;
+
+    @ApiModelProperty(value = "SIM卡卡号")
+    private String simNo;
+
+    @ApiModelProperty(value = "设备编号自命名")
+    private String sn;
+
+    @ApiModelProperty(value = "所属商家")
+    private String adminUserName;
+
+    private Long agencyId;
+
+    private Long merchantId;
+
+    @ApiModelProperty(value = "公司电话")
+    private String companyPhone;
+
+    private Long personageId;
+
+    @ApiModelProperty(value = "0:分账方2个,1:分账方3个,3:分账方4个,3:分账方超4个")
+    private Integer type;
+
+    @ApiModelProperty(value = "地址全名")
+    private String fullName;
+
+    @ApiModelProperty(value = "最后推送时间")
+    private Date pushUpdateTime;
+
+    @ApiModelProperty(value = "广告规则ID")
+    private Long timeRuleId;
+
+    @ApiModelProperty(value = "实际上的设备ID")
+    private String gtClientId;
+
+    @ApiModelProperty(value = "设备状态 开机为1,关机为0")
+    private Integer eqeStatus;
+
+    @ApiModelProperty(value = "锁机状态")
+    private Boolean isBlocked;
+
+    @ApiModelProperty(value = "短信接收者")
+    private String messageReceiver;
+
+    @ApiModelProperty(value = "睡眠状态,睡眠为true,不睡眠false")
+    private Boolean isSleep;
+
+    private String advancedParameters;
+
+    @ApiModelProperty(value = "音量")
+    private String volume;
+
+    private String commonParameters;
+
+    @ApiModelProperty(value = "远程开关机的时间戳")
+    private String network;
+
+    private String offTime;
+
+    private String bootTime;
+
+    @ApiModelProperty(value = "PLC版本")
+    private String plcVersion;
+
+    @ApiModelProperty(value = "棉花糖机器类型,mg320,mg301")
+    private String equimentType;
+
+    @ApiModelProperty(value = "mg280机器到期时间")
+    private Date endDate;
+
+    @ApiModelProperty(value = "花型数量")
+    private String flowers;
+
+    @ApiModelProperty(value = "设备类型,0:棉花糖,1,爆米花")
+    private String machineType;
+
+    @ApiModelProperty(value = "apk版本")
+    private String apkVersion;
+
+    @ApiModelProperty(value = "优惠券开关,0:关闭,1:开启")
+    private String couponStatus;
+
+    @ApiModelProperty(value = "公司平台,0或空为申泽,1为七云")
+    private String companyType;
+
+
+}

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

@@ -0,0 +1,122 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TOrder对象", description="")
+public class TOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "用户id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "平台分账;")
+    private BigDecimal adminProportion;
+
+    @ApiModelProperty(value = "一级分销商户id;")
+    private Long agencyId;
+
+    @ApiModelProperty(value = "分账比例;")
+    private BigDecimal agencyProportion;
+
+    @ApiModelProperty(value = "分销逻辑;")
+    private String altInfo;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "设备id;")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "支付方式;")
+    private String frpCode;
+
+    @ApiModelProperty(value = "二级分销商户id;")
+    private Long merchantId;
+
+    @ApiModelProperty(value = "分账比例;")
+    private BigDecimal merchantProportion;
+
+    @ApiModelProperty(value = "支付时间;")
+    private Date payDate;
+
+    @ApiModelProperty(value = "三级分销商户id;")
+    private Long personageId;
+
+    @ApiModelProperty(value = "分账比例;")
+    private BigDecimal personageProportion;
+
+    @ApiModelProperty(value = "金额;")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "商品id;")
+    private Long productId;
+
+    @ApiModelProperty(value = "商品名称;")
+    private String productName;
+
+    private String productNo;
+
+    @ApiModelProperty(value = "退款时间;")
+    private Date refundDate;
+
+    @ApiModelProperty(value = "订单编号;")
+    private String sn;
+
+    @ApiModelProperty(value = "支付状态;")
+    private Integer status;
+
+    @ApiModelProperty(value = "0:分账方2个,1:分账方3个,3:分账方4个,3:分账方超4个;")
+    private Integer type;
+
+    @ApiModelProperty(value = "支付流水号;")
+    private String trxNo;
+
+    @ApiModelProperty(value = "退款流水号;")
+    private String refundTrxNo;
+
+    @ApiModelProperty(value = "是否发送到es;")
+    private String es;
+
+    @ApiModelProperty(value = "退款金额;")
+    private BigDecimal refundAmount;
+
+    @ApiModelProperty(value = "标记;")
+    private String note;
+
+    @ApiModelProperty(value = "支付平台; 0或null为汇聚,1为杉德支付")
+    private String payPlatform;
+
+    @ApiModelProperty(value = "是否结算;0或null为未结算,1已结算。仅杉德支付有这个")
+    private String isSettlement;
+
+    @ApiModelProperty(value = "分账详情,当分账超过4方时,这个字段才启用")
+    private String proportionDesc;
+
+
+}

+ 19 - 1
src/main/java/com/szwl/model/query/StatisticsParam.java

@@ -21,6 +21,12 @@ public class StatisticsParam {
 
     @ApiModelProperty(value="设备id")
     private String equipmentId;
+    @ApiModelProperty(value="设备名")
+    private String equipmentName;
+    @ApiModelProperty(value="设备编号")
+    private String clientId;
+    @ApiModelProperty(value="商家")
+    private String username;
     @ApiModelProperty(value="开关炉头,开机为1,关机为0")
     private String eqeStatus;
     @ApiModelProperty(value="代理商id")
@@ -32,6 +38,15 @@ public class StatisticsParam {
     @ApiModelProperty(value="地址id")
     private List<Long> areaIds;
 
+    @ApiModelProperty(value="")
+    private List<Long> adminIds;
+
+    @ApiModelProperty(value="")
+    private List<String> ClientIds;
+
+    @ApiModelProperty(value="")
+    private List<String> equipmentIds;
+
     @ApiModelProperty(value="开始日期")
     private String startDate;
 
@@ -44,7 +59,7 @@ public class StatisticsParam {
     @ApiModelProperty(value="支付类型")
     private String payType;
 
-    @ApiModelProperty(value="统计类型")
+    @ApiModelProperty(value="统计类型,0:销售额统计,1:花型统计")
     private String changeType;
 
     @ApiModelProperty(value="是否外国")
@@ -52,4 +67,7 @@ public class StatisticsParam {
 
     @ApiModelProperty(value="第几次查询")
     private String test = "1";
+
+    @ApiModelProperty(value = "公司平台,0或空为申泽,1为七云")
+    private String companyType;
 }

+ 57 - 5
src/main/java/com/szwl/model/query/TAdminParam.java

@@ -1,15 +1,16 @@
 package com.szwl.model.query;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.szwl.common.myAnnotation.CamelCaseToUnderscore;
 import com.szwl.model.bo.BasePageQuery;
+import com.szwl.model.entity.TOrder;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import lombok.*;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
-import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @since 2022-03-28
@@ -19,4 +20,55 @@ import java.util.Date;
 @ApiModel(value="查询 TAdmin", description="")
 public class TAdminParam extends BasePageQuery {
     String name;
+
+    @SuppressWarnings("serial")
+    @Accessors(chain = true)
+    @NoArgsConstructor
+    @Getter
+    @Setter
+    @ToString
+    public static class TOrderParam extends TOrder {
+        @CamelCaseToUnderscore
+        @ApiModelProperty(value = "排序,如:id desc")
+        private String orderByClause;
+        @ApiModelProperty(value = "是否distinct")
+        private boolean distinct;
+        @ApiModelProperty(value = "分页,展示多少条记录")
+        private Integer limit;
+        @ApiModelProperty(value = "分页,从第几条开始,默认从0开始")
+        private Integer offset;
+        @ApiModelProperty(value = "分页,展示多少条记录")
+        private Integer size;
+        @ApiModelProperty(value = "分页,第几页")
+        private Integer current;
+        @ApiModelProperty(value = "主键id 集合,用于批量删除和批量修改")
+        private List primaryKeyList;
+        private List<TOrder> entityList;//实体集合,用于批量新增
+
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date createDate_start;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date createDate_end;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date modifyDate_start;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date modifyDate_end;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date payDate_start;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date payDate_end;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date refundDate_start;
+        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+        private Date refundDate_end;
+        private String clientId_like;
+        private String createDate_like;
+        private String sn_like;
+        private Integer type_gt;
+
+        private List equipmentId_inList;
+        private List adminId_inList;
+        /*==================================以上是自动生成部分字段======================================*/
+
+    }
 }

+ 60 - 0
src/main/java/com/szwl/model/query/TCoinOrderParam.java

@@ -0,0 +1,60 @@
+/**
+ * Date:2019-09-23 17:09:15
+ * author:吴洪双
+ */
+
+package com.szwl.model.query;
+
+import com.szwl.common.myAnnotation.CamelCaseToUnderscore;
+import com.szwl.model.entity.TCoinOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@SuppressWarnings("serial")
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TCoinOrderParam extends TCoinOrder {
+    @CamelCaseToUnderscore
+    @ApiModelProperty(value = "排序,如:id desc")
+    private String orderByClause;
+    @ApiModelProperty(value = "是否distinct")
+    private boolean distinct;
+    @ApiModelProperty(value = "分页,展示多少条记录")
+    private Integer limit;
+    @ApiModelProperty(value = "分页,从第几条开始,默认从0开始")
+    private Integer offset;
+    @ApiModelProperty(value = "主键id 集合,用于批量删除和批量修改")
+    private List primaryKeyList;
+    private List<TCoinOrder> entityList;//实体集合,用于批量新增
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_end;
+    private String clientId_like;
+    private List clientId_inList;
+    private String sn_like;
+    private String createDate_like;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payDate_end;
+    /*==================================以上是自动生成部分字段======================================*/
+    private List adminId_inList;
+    private List productName_notInList;
+}

+ 68 - 0
src/main/java/com/szwl/model/query/TEquipmentParam.java

@@ -0,0 +1,68 @@
+/**
+ * Date:2019-09-23 17:09:15
+ * author:吴洪双
+ */
+
+package com.szwl.model.query;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.szwl.model.entity.TEquipment;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@SuppressWarnings("serial")
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TEquipmentParam extends TEquipment {
+    // @CamelCaseToUnderscore
+    // @ApiModelProperty(value = "排序,如:id desc")
+    // private String orderByClause;
+    @ApiModelProperty(value = "是否distinct")
+    private boolean distinct;
+    @ApiModelProperty(value = "分页,展示多少条记录")
+    private Integer limit;
+    @ApiModelProperty(value = "分页,从第几条开始,默认从0开始")
+    private Integer offset;
+    @ApiModelProperty(value = "主键id 集合,用于批量删除和批量修改")
+    private List primaryKeyList;
+    private List<TEquipment> entityList;//实体集合,用于批量新增
+
+    //	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate_start;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date lastUpdateTime_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date lastUpdateTime_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date pushUpdateTime_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date pushUpdateTime_end;
+    private String name_like;
+    private String clientId_like;
+    private String adminUserName_like;
+
+    private List clientId_inList;
+    private List id_inList;
+    /*==================================以上是自动生成部分字段======================================*/
+
+}

+ 70 - 0
src/main/java/com/szwl/model/query/TOrderParam.java

@@ -0,0 +1,70 @@
+/**
+ * Date:2019-09-23 17:09:15
+ * author:吴洪双
+ */
+
+package com.szwl.model.query;
+
+import com.szwl.common.myAnnotation.CamelCaseToUnderscore;
+import com.szwl.model.entity.TOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@SuppressWarnings("serial")
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TOrderParam extends TOrder {
+    @CamelCaseToUnderscore
+    @ApiModelProperty(value = "排序,如:id desc")
+    private String orderByClause;
+    @ApiModelProperty(value = "是否distinct")
+    private boolean distinct;
+    @ApiModelProperty(value = "分页,展示多少条记录")
+    private Integer limit;
+    @ApiModelProperty(value = "分页,从第几条开始,默认从0开始")
+    private Integer offset;
+    @ApiModelProperty(value = "分页,展示多少条记录")
+    private Integer size;
+    @ApiModelProperty(value = "分页,第几页")
+    private Integer current;
+    @ApiModelProperty(value = "主键id 集合,用于批量删除和批量修改")
+    private List primaryKeyList;
+    private List<TOrder> entityList;//实体集合,用于批量新增
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifyDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date payDate_end;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date refundDate_start;
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date refundDate_end;
+    private String clientId_like;
+    private String createDate_like;
+    private String sn_like;
+    private Integer type_gt;
+
+    private List equipmentId_inList;
+    private List adminId_inList;
+    /*==================================以上是自动生成部分字段======================================*/
+
+}

+ 267 - 0
src/main/java/com/szwl/model/utils/DateUtils.java

@@ -0,0 +1,267 @@
+package com.szwl.model.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class DateUtils
+{
+  public static final String PATTERN_MMdd = "MMdd";
+  public static final String PATTERN_yyyyMMdd = "yyyyMMdd";
+  public static final String PATTERN_yyyyMMddHHmmss = "yyyyMMddHHmmss";
+  public static final String PATTERN_yyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
+  public static final String PATTERN_yyyy_MM_dd = "yyyy-MM-dd";
+  public static final String PATTERN_yyyy_M_d = "yyyy-M-d";
+  public static final String PATTERN_yyyy_MM = "yyyy-MM";
+  public static final String PATTERN_yyyy = "yyyy";
+  public static final String PATTERN_yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss";
+  public static final String PATTERN_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
+  public static final String PATTERN_HH_mm_ss = "HH:mm:ss";
+  public static final String PATTERN_HHmmss = "HHmmss";
+  public static final String PATTERN_HH = "HH";
+  public static final String PATTERN_MMdd2 = "MM月dd";
+  public static final String PATTERN_MM = "MM";
+  public static final Map<String, String> mapChDate = new HashMap<String, String>();
+
+  public static Date getNextday(Date now)
+  {
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTime(now);
+    calendar.add(5, 1);
+    return calendar.getTime();
+  }
+  
+  public static Date getPreday(Date now)
+  {
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTime(now);
+    calendar.add(5, -1);
+    return calendar.getTime();
+  }
+
+  public static String formatDate_ch(Date date)
+  {
+    if(date==null){
+   	 throw new IllegalArgumentException("需要转换的对象为空");
+    }
+    String str = formatDate(date, "MMdd");
+    str = (String)mapChDate.get(str.substring(0, 2)) + str.substring(2);
+    return str;
+  }
+
+  public static String formatDate(Date date, String pattern)
+  {
+    if(date==null){
+        return "";
+    }
+    SimpleDateFormat sdf = null;
+    if (pattern == null)
+      sdf = new SimpleDateFormat();
+    else {
+      sdf = new SimpleDateFormat(pattern);
+    }
+    return sdf.format(date);
+  }
+
+  public static String formatDate(Date date) {
+    SimpleDateFormat sdf = new SimpleDateFormat();
+    return sdf.format(date);
+  }
+
+  public static Date parseDate(String source, String pattern) throws ParseException {
+    SimpleDateFormat sdf = null;
+    if (pattern == null) {
+      sdf = new SimpleDateFormat();
+    } else {
+      sdf = new SimpleDateFormat(pattern);
+    }
+    return sdf.parse(source);
+  }
+
+  public static Date parseDate(String source) throws ParseException {
+    SimpleDateFormat sdf = new SimpleDateFormat();
+    return sdf.parse(source);
+  }
+
+  public static Date parseDate(String source, Date defaultDate) {
+    try {
+      SimpleDateFormat sdf = new SimpleDateFormat();
+      return sdf.parse(source);
+    }
+    catch (ParseException e)
+    {
+    }
+    return defaultDate;
+  }
+
+  public static Date parseDate(String source, String pattern, Date defaultDate) {
+    try {
+      SimpleDateFormat sdf = null;
+      if (pattern == null) {
+        sdf = new SimpleDateFormat();
+      } else {
+        sdf = new SimpleDateFormat(pattern);
+      }
+      return sdf.parse(source);
+    }
+    catch (ParseException e) {
+    }
+    return defaultDate;
+  }
+
+  public static boolean tryParse(String source) throws ParseException {
+    try {
+      Integer.parseInt(source);
+      return true;
+    } catch (NumberFormatException e) {
+    }
+    return false;
+  }
+
+  public static Date changeDate(Date date, TimeType timeType, int amount)
+  {
+    if ((date == null) || (timeType == null) || (amount == 0)) {
+      return date;
+    }
+    Calendar c = Calendar.getInstance();
+    c.setTime(date);
+    c.add(timeType.getValue(), amount);
+    return c.getTime();
+  }
+
+  public static boolean isSameDay(Date date1, Date date2)
+  {
+    if ((date1 == null) || (date2 == null)) {
+      throw new IllegalArgumentException("The date must not be null");
+    }
+    Calendar cal1 = Calendar.getInstance();
+    cal1.setTime(date1);
+    Calendar cal2 = Calendar.getInstance();
+    cal2.setTime(date2);
+    return isSameDay(cal1, cal2);
+  }
+
+  public static boolean isSameDay(Calendar cal1, Calendar cal2)
+  {
+    if ((cal1 == null) || (cal2 == null)) {
+      throw new IllegalArgumentException("The date must not be null");
+    }
+    return (cal1.get(0) == cal2.get(0)) && (cal1.get(1) == cal2.get(1)) && (cal1.get(6) == cal2.get(6));
+  }
+
+  /** @deprecated */
+  public static Date add(Date date, int calendarField, int amount)
+  {
+    if (date == null) {
+      throw new IllegalArgumentException("The date must not be null");
+    }
+    Calendar c = Calendar.getInstance();
+    c.setTime(date);
+    c.add(calendarField, amount);
+    return c.getTime();
+  }
+
+  public static Date addYears(Date date, int amount)
+  {
+    return add(date, 1, amount);
+  }
+
+  public static Date addMonths(Date date, int amount)
+  {
+    return add(date, 2, amount);
+  }
+
+  public static Date addWeeks(Date date, int amount)
+  {
+    return add(date, 3, amount);
+  }
+
+  public static Date addDays(Date date, int amount)
+  {
+    return add(date, 5, amount);
+  }
+
+  public static Date addHours(Date date, int amount)
+  {
+    return add(date, 11, amount);
+  }
+
+  public static Date addMinutes(Date date, int amount)
+  {
+    return add(date, 12, amount);
+  }
+
+  public static Date addSeconds(Date date, int amount)
+  {
+    return add(date, 13, amount);
+  }
+
+  public static Date addMilliseconds(Date date, int amount)
+  {
+    return add(date, 14, amount);
+  }
+
+  static
+  {
+    mapChDate.put("01", "一月");
+    mapChDate.put("02", "二月");
+    mapChDate.put("03", "三月");
+    mapChDate.put("04", "四月");
+    mapChDate.put("05", "五月");
+    mapChDate.put("06", "六月");
+    mapChDate.put("07", "七月");
+    mapChDate.put("08", "八月");
+    mapChDate.put("09", "九月");
+    mapChDate.put("10", "十月");
+    mapChDate.put("11", "十一月");
+    mapChDate.put("12", "十二月");
+  }
+
+  public static enum TimeType
+  {
+    SECOND(13), MINUTE(12), HOUR(10), DAY(5), 
+    WEEK(4), MONTH(2), 
+    YEAR(1);
+
+    private int value;
+
+    private TimeType(int value) {
+      this.value = value;
+    }
+
+    public int getValue() {
+      return this.value;
+    }
+  }
+  /**
+   * 
+   * 毛龙飞
+   * @Description 获取日期的后几天
+   * @param d
+   * @param day
+   * @return
+   */
+  public static Date getDateAfter(Date d, int day) {  
+      Calendar now = Calendar.getInstance();  
+      now.setTime(d);  
+      now.set(Calendar.DATE, now.get(Calendar.DATE) + day);  
+      return now.getTime();  
+  }
+
+  /**
+   * 获取week 0是周日
+   * @param day
+   * @return
+   */
+  public static int getWeek(Date day) {
+    Calendar cal = Calendar.getInstance();
+    cal.setTime(day);
+    int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
+    if (w < 0)
+      w = 0;
+    return w;
+  }
+}

+ 16 - 0
src/main/java/com/szwl/service/TCoinOrderService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TCoinOrderService extends IService<TCoinOrder> {
+
+}

+ 16 - 0
src/main/java/com/szwl/service/TEquipmentService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TEquipment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TEquipmentService extends IService<TEquipment> {
+
+}

+ 16 - 0
src/main/java/com/szwl/service/TOrderService.java

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+public interface TOrderService extends IService<TOrder> {
+
+}

+ 244 - 0
src/main/java/com/szwl/service/impl/EsTCoinOrderServiceImpl.java

@@ -0,0 +1,244 @@
+package com.szwl.service.impl;
+
+import cn.com.crbank.ommo.esclient.EsBaseService;
+import cn.com.crbank.ommo.exception.MyException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.model.entity.TOrder;
+import com.szwl.model.query.TCoinOrderParam;
+import com.szwl.model.utils.DateUtils;
+import com.szwl.service.TCoinOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.springframework.stereotype.Service;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Service
+public class EsTCoinOrderServiceImpl extends EsBaseService<TCoinOrder, TCoinOrderParam> {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 1000;
+    TCoinOrderService tCoinOrderService;
+
+    public EsTCoinOrderServiceImpl(TCoinOrderService tCoinOrderService) {
+        this.tCoinOrderService = tCoinOrderService;
+    }
+
+    @Override
+    public String getTableName() {
+        return "es_t_coin_order";
+    }
+
+    @Override
+    public TCoinOrder getInstanceOfEntity() {
+        return new TCoinOrder();
+    }
+
+    @Override
+    public void setInitTableStatus(boolean flag) {
+        InitEsTableStatus = flag;
+    }
+
+    @Override
+    public boolean getInitTableStatus() {
+        return InitEsTableStatus;
+    }
+    @Override
+    public String getEntityPrimaryKey(TCoinOrder tCoinOrder) {
+        return String.valueOf(tCoinOrder.getId());
+    }
+
+    @Override
+    public TCoinOrder setEntityPrimaryKey(TCoinOrder tCoinOrder, String value) {
+        return null;
+    }
+
+//    @Override
+//    public TCoinOrder setEntityPrimaryKey(TCoinOrder tCoinOrder, String value) {
+//        return tCoinOrder.setId(Long.parseLong(value));
+//    }
+
+    @Override
+    public void initTableFun() {
+        try{
+            String tableName = getTableName();
+            GetIndexRequest request = new GetIndexRequest(tableName);
+//            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(this.getTableName());
+//            restHighLevelClient.indices().delete(deleteIndexRequest,RequestOptions.DEFAULT);
+            boolean isExists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
+            if (!isExists) {
+                log.info("es 索引 开始创建"+tableName);
+                createTable();
+                // 初始化旧流水
+                int num = 0;
+                while (true) {
+                    int limit = MAX_ROW;
+//                    int offset= num * MAX_ROW;
+                    int offset= num;
+//                    TCoinOrderExample example = new TCoinOrderExample();
+//                    example.setLimit(limit);
+//                    example.setOffset(offset);
+//                    List<TCoinOrder> list = tCoinOrderService.selectByOption(example);
+                    LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+                    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    String time = "2022-07-01 00:00:00";
+                    Date date = ft.parse(time);
+                    query.gt(TCoinOrder::getCreateDate,date);
+                    Page<TCoinOrder> page = new Page<>(offset, limit, true);
+                    IPage<TCoinOrder> iPage = tCoinOrderService.page(page, query);
+                    List<TCoinOrder> list = iPage.getRecords();
+                    insertBatch(list);
+                    num++;
+                    if(list.size()< MAX_ROW){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                        break;
+                    }
+                }
+            } else {
+                log.info("es 索引 "+tableName+" 已存在不再创建");
+            }
+            InitEsTableStatus = true;
+        }catch (Exception e){
+            log.error("ElasticsearchRunner InitEsTCoinOrderThread 发生错误:{}" , e);
+            throw new MyException("ElasticsearchRunner InitEsTCoinOrderThread 发生错误:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 根据时间 重新同步es
+     * @param
+     * @return
+     */
+    public void updateEsByDate(String startTime, String endTime) {
+        try {
+            startTime = startTime.replace("/", "-");
+            endTime = endTime.replace("/", "-");
+            Date start = DateUtils.parseDate(startTime, DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+            Date end = DateUtils.parseDate(endTime, DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+            // 查询es 现有的数据,删除
+            TCoinOrderParam param = new TCoinOrderParam();
+            param.setCreateDate_start(start);
+            param.setCreateDate_end(end);
+            List<TCoinOrder> list_es = this.selectEntityByEqualToOption(param);
+            for (TCoinOrder entity : list_es) {
+                this.deleteTableById(String.valueOf(entity.getId()));
+            }
+            // 插入 新的
+//            List<TCoinOrder> list = tCoinOrderService.selectForEs(param);
+            LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+            query.gt(TCoinOrder::getCreateDate,start);
+            query.lt(TCoinOrder::getCreateDate,end);
+            List<TCoinOrder> list = tCoinOrderService.list(query);
+            if (CollectionUtils.isNotEmpty(list)) {
+                insertBatch(list);
+            }
+        } catch (Exception e) {
+            log.error(this.getTableName()+" updateEsByDate 发生错误:{}", e);
+            throw new MyException(this.getTableName()+" updateEsByDate 发生错误:" + e.getMessage());
+        }
+    }
+
+    public void tongbuByHour() 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.HOUR_OF_DAY, -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;
+            }
+        }
+    }
+
+    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;
+            }
+        }
+
+    }
+}

+ 356 - 0
src/main/java/com/szwl/service/impl/EsTEquipmentServiceImpl.java

@@ -0,0 +1,356 @@
+package com.szwl.service.impl;
+
+import cn.com.crbank.ommo.esclient.EsBaseService;
+import cn.com.crbank.ommo.exception.MyException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.feign.bean.SzwlFeign;
+import com.szwl.model.bean.ChartBean;
+import com.szwl.model.bean.ChartColumn;
+import com.szwl.model.bo.R;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.query.StatisticsParam;
+import com.szwl.model.query.TCoinOrderParam;
+import com.szwl.model.query.TEquipmentParam;
+import com.szwl.model.query.TOrderParam;
+import com.szwl.model.utils.DateUtils;
+import com.szwl.service.IEsService;
+import com.szwl.service.TEquipmentService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.AggregationBuilders;
+import org.elasticsearch.search.aggregations.Aggregations;
+import org.elasticsearch.search.aggregations.BucketOrder;
+import org.elasticsearch.search.aggregations.bucket.terms.Terms;
+import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
+import org.elasticsearch.search.aggregations.metrics.ParsedSum;
+import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Service
+public class EsTEquipmentServiceImpl extends EsBaseService<TEquipment, TEquipmentParam> implements IEsService {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 10000;
+    TEquipmentService tEquipmentService;
+    EsTCoinOrderServiceImpl esTCoinOrderService;
+    EsTOrderServiceImpl esTOrderService;
+
+    public static void setInitEsTableStatus(boolean initEsTableStatus) {
+        InitEsTableStatus = initEsTableStatus;
+    }
+
+    public void settEquipmentService(TEquipmentService tEquipmentService) {
+        this.tEquipmentService = tEquipmentService;
+    }
+
+    public void setEsTCoinOrderService(EsTCoinOrderServiceImpl esTCoinOrderService) {
+        this.esTCoinOrderService = esTCoinOrderService;
+    }
+
+    public void setEsTOrderService(EsTOrderServiceImpl esTOrderService) {
+        this.esTOrderService = esTOrderService;
+    }
+
+    public void setSzwlFeign(SzwlFeign szwlFeign) {
+        this.szwlFeign = szwlFeign;
+    }
+
+    SzwlFeign szwlFeign;
+
+    @Override
+    public String getTableName() {
+        return "es_t_equipment";
+    }
+
+    @Override
+    public TEquipment getInstanceOfEntity() {
+        return new TEquipment();
+    }
+
+    @Override
+    public void setInitTableStatus(boolean flag) {
+        InitEsTableStatus = flag;
+    }
+
+    @Override
+    public boolean getInitTableStatus() {
+        return InitEsTableStatus;
+    }
+
+    @Override
+    public void initTableFun() {
+        try {
+            String tableName = getTableName();
+            GetIndexRequest request = new GetIndexRequest(tableName);
+//            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(this.getTableName());
+//            restHighLevelClient.indices().delete(deleteIndexRequest,RequestOptions.DEFAULT);
+            boolean isExists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
+            if (!isExists) {
+                log.info("es 索引 开始创建" + tableName);
+                createTable();
+                // 初始化旧流水
+                int num = 0;
+                while (true) {
+                    int limit = MAX_ROW;
+//                    int offset= num * MAX_ROW;
+                    int offset = num;
+
+                    LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+                    Page<TEquipment> page = new Page<>(offset, limit, true);
+                    IPage<TEquipment> iPage = tEquipmentService.page(page, query);
+                    List<TEquipment> list = iPage.getRecords();
+//                    TEquipmentExample example = new TEquipmentExample();
+//                    example.setLimit(limit);
+//                    example.setOffset(offset);
+//                    List<TEquipment> list = tEquipmentService.selectByOption(example);
+                    insertBatch(list);
+                    num++;
+                    if (list.size() < MAX_ROW) { // 数据小于 最大值 ,证明后面已无数据,则跳出
+                        break;
+                    }
+                }
+            } else {
+                log.info("es 索引 " + tableName + " 已存在不再创建");
+            }
+            InitEsTableStatus = true;
+        } catch (Exception e) {
+            log.error("ElasticsearchRunner InitEsTEquipmentThread 发生错误:{}", e);
+            throw new MyException("ElasticsearchRunner InitEsTEquipmentThread 发生错误:" + e.getMessage());
+        }
+    }
+
+    @Override
+    public String getEntityPrimaryKey(TEquipment tEquipment) {
+        return String.valueOf(tEquipment.getId());
+    }
+
+    @Override
+    public TEquipment setEntityPrimaryKey(TEquipment tEquipment, String value) {
+        return null;
+    }
+
+
+    /**
+     * 根据时间 重新同步es
+     *
+     * @param
+     * @return
+     */
+    public void updateEsByDate(String startTime, String endTime) {
+
+    }
+
+
+    public ChartColumn getEquipmentStatistics(StatisticsParam param) {
+        if (StringUtils.equals("0", param.getIfForeign())) { // 国内用户
+            return getEquipmentStatistics_0(param);
+        } else { // 国外用户
+            return getEquipmentStatistics_1(param);
+        }
+    }
+
+    /**
+     * 统计 国内
+     *
+     * @param param
+     * @return
+     */
+    public ChartColumn getEquipmentStatistics_0(StatisticsParam param) {
+        BoolQueryBuilder boolQueryBuilder;
+        String startDate = param.getStartDate().replace("/", "-");
+        String endDate = param.getEndDate().replace("/", "-");
+        Date start = DateUtils.parseDate(startDate + " 00:00:00", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+        Date end = DateUtils.parseDate(endDate + " 23:59:59", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+        TOrderParam tOrderParam = new TOrderParam();
+        tOrderParam.setStatus(1);
+        if (param.getEquipmentIds() != null && param.getEquipmentIds().size() > 0) { // 设备id
+            tOrderParam.setEquipmentId_inList(param.getEquipmentIds());
+        }
+        tOrderParam.setCreateDate_start(start);
+        tOrderParam.setCreateDate_end(end);
+        if (StringUtils.isNotEmpty(param.getAdminId())) { // 所属商家id
+            tOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+        }
+
+        boolQueryBuilder = esTOrderService.getParam2QueryBuilder(tOrderParam);
+        // 公司平台
+        String companyType = param.getCompanyType();
+        if (StringUtils.isNotEmpty(companyType)) {
+            if (companyType.equals("0")) {
+                boolQueryBuilder.must(
+                        QueryBuilders.boolQuery().should(
+                                QueryBuilders.termQuery("companyType", "0")
+                        ).should(
+                                QueryBuilders.boolQuery().mustNot(
+                                        QueryBuilders.existsQuery("companyType")
+                                )
+                        )
+                );
+            } else {
+                boolQueryBuilder.must(QueryBuilders.termQuery("companyType", "1"));
+            }
+        }
+        if ("1".equals(param.getChangeType())) {
+            // 花型统计
+            return getEquipmentStatistics(boolQueryBuilder, esTOrderService.getTableName(), "productName.keyword");
+        } else {
+            log.info("1");
+            ChartColumn chartColumn = getEquipmentStatistics(boolQueryBuilder, esTOrderService.getTableName(), "equipmentId");
+
+            // 设置categories
+            ArrayList<String> equipmentIdList = chartColumn.getCategories();
+            ArrayList<String> list = new ArrayList<>();
+//            for(String e:equipmentIdList){
+//                list.add(Long.valueOf(e));
+//            }
+            for (String e : equipmentIdList) {
+                TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(e));
+                if (equipment != null && equipment.getId() != null) {
+                    if (StringUtils.isNotEmpty(equipment.getName())) {
+                        list.add(equipment.getName());
+                    } else {
+                        list.add(equipment.getClientId().substring(equipment.getClientId().length() - 6, equipment.getClientId().length()));
+                    }
+                } else {
+                    list.add(e);
+                }
+
+            }
+            chartColumn.setCategories(list);
+
+            return chartColumn;
+        }
+    }
+
+    /**
+     * 统计 国外
+     *
+     * @param param
+     * @return
+     */
+    public ChartColumn getEquipmentStatistics_1(StatisticsParam param) {
+        BoolQueryBuilder boolQueryBuilder;
+        String startDate = param.getStartDate().replace("/", "-");
+        String endDate = param.getEndDate().replace("/", "-");
+        Date start = DateUtils.parseDate(startDate + " 00:00:00", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+        Date end = DateUtils.parseDate(endDate + " 23:59:59", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+        TCoinOrderParam tCoinOrderParam = new TCoinOrderParam();
+
+//        tCoinOrderParam.setCreateDate_start(start);
+        tCoinOrderParam.setPayDate_start(start);
+//        tCoinOrderParam.setCreateDate_end(end);
+        tCoinOrderParam.setPayDate_end(end);
+        if (param.getClientIds().size() > 0) { // 设备
+            tCoinOrderParam.setClientId_inList(param.getClientIds());
+        }
+        if (StringUtils.isNotEmpty(param.getAdminId())) { // 所属商家id
+            tCoinOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+        }
+
+        boolQueryBuilder = esTCoinOrderService.getParam2QueryBuilder(tCoinOrderParam);
+        if ("1".equals(param.getChangeType())) {
+            // 花型统计
+            return getEquipmentStatistics(boolQueryBuilder, esTCoinOrderService.getTableName(), "productName.keyword");
+        } else {
+            log.info("1");
+            ChartColumn chartColumn = getEquipmentStatistics(boolQueryBuilder, esTCoinOrderService.getTableName(), "clientId.keyword");
+
+            // 设置categories
+            ArrayList<String> clientIdList = chartColumn.getCategories();
+            TEquipmentParam tEquipmentParam = new TEquipmentParam();
+            tEquipmentParam.setClientId_inList(clientIdList);
+            List<TEquipment> equipmentList = this.selectEntityByEqualToOption(tEquipmentParam);
+
+            ArrayList<String> categories_final = new ArrayList<>();
+            for (String clientId : clientIdList) {
+                String finalCategories = clientId.substring(0, 4);
+                Optional<TEquipment> op = equipmentList.stream().filter(
+                        e -> {
+                            return StringUtils.equals(e.getClientId(), clientId);
+                        }
+                ).findFirst();
+                if (op.isPresent()) {
+                    if (StringUtils.isNotEmpty(op.get().getName())) {
+                        finalCategories = op.get().getName();
+                    }
+                }
+                categories_final.add(finalCategories);
+            }
+            chartColumn.setCategories(categories_final);
+            return chartColumn;
+        }
+    }
+
+    public ChartColumn getEquipmentStatistics(BoolQueryBuilder queryBuilder, String tableName, String termField) {
+        try {
+            // 仅为名称,用以获取返回结果
+            String aggregationResultName = "aggregationResult";
+            // 仅为名称,用以获取返回结果
+            String aggSumName = "sales";
+
+            // 根据字段 termField 聚合
+            TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms(aggregationResultName).field(termField);
+            // 聚合后 返回前30条 记录
+            termsAggregationBuilder.size(30);
+            termsAggregationBuilder.order(BucketOrder.compound(
+                    //先按sales,降序排
+                    BucketOrder.aggregation(aggSumName, false)
+            ));
+            // 根据字段price 求和 sum, sales 仅为名称,用以获取返回结果
+            SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum(aggSumName).field("price");
+            termsAggregationBuilder.subAggregation(sumAggregationBuilder);
+            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
+            // 指定size为0,不返回文档 因为只需要数量
+            sourceBuilder.query(queryBuilder).aggregation(termsAggregationBuilder).size(0);
+            SearchRequest searchRequest = new SearchRequest(tableName);
+            searchRequest.source(sourceBuilder);
+            log.debug("sourceBuilder:{}", sourceBuilder);
+            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
+            Aggregations aggregations = searchResponse.getAggregations();
+            Terms terms = aggregations.get(aggregationResultName);
+
+            List<ChartBean> chartBeanList = new ArrayList<>();
+            for (Terms.Bucket bucket : terms.getBuckets()) {
+                ChartBean chartBean = new ChartBean();
+                chartBean.setCategorie(bucket.getKeyAsString());
+//                chartBean.setSaleNum(Long.valueOf(bucket.getDocCount()).intValue());
+                chartBean.setSaleNum(Float.valueOf(bucket.getDocCount()));
+                ParsedSum sum = bucket.getAggregations().get(aggSumName);
+//                chartBean.setSalePrice(Double.valueOf(sum.getValue()).intValue());
+                String s = format1((float) sum.getValue());
+                chartBean.setSalePrice(Float.valueOf(s));
+                chartBeanList.add(chartBean);
+            }
+            log.debug("chartBeanList:{}", chartBeanList);
+            ChartColumn chartColumn = new ChartColumn(chartBeanList);
+            return chartColumn;
+        } catch (Exception e) {
+            log.error(getTableName() + " es根据条件 聚合查询 报错:{}", e);
+            throw new MyException(getTableName() + " es根据条件 聚合查询 报错:" + e.getMessage());
+        }
+    }
+
+    public static String format1(Float value) {
+        BigDecimal bd = new BigDecimal(value);//创建一个bd对象,将要转换的值value传入构造函数
+        bd = bd.setScale(2, RoundingMode.HALF_UP);//调用setScale方法进行数据格式化,保留两位小数,采用四舍五入规则
+        return bd.toString(); //返回bd对象的值(转化为string形式)
+    }
+
+}

+ 578 - 0
src/main/java/com/szwl/service/impl/EsTOrderServiceImpl.java

@@ -0,0 +1,578 @@
+package com.szwl.service.impl;
+
+import cn.com.crbank.ommo.esclient.EsBaseService;
+import cn.com.crbank.ommo.exception.MyException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.model.bean.ChartBean;
+import com.szwl.model.bean.ChartColumn;
+import com.szwl.model.bo.ChartType;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TOrder;
+import com.szwl.model.query.StatisticsParam;
+import com.szwl.model.query.TCoinOrderParam;
+import com.szwl.model.query.TEquipmentParam;
+import com.szwl.model.query.TOrderParam;
+import com.szwl.model.utils.DateUtils;
+import com.szwl.service.IEsService;
+import com.szwl.service.TOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.indices.GetIndexRequest;
+import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.ExistsQueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.aggregations.Aggregation;
+import org.elasticsearch.search.aggregations.AggregationBuilder;
+import org.elasticsearch.search.aggregations.AggregationBuilders;
+import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
+import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
+import org.elasticsearch.search.aggregations.metrics.ParsedSum;
+import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
+import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class EsTOrderServiceImpl extends EsBaseService<TOrder, TOrderParam> implements IEsService {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 1000;
+
+    TOrderService tOrderService;
+    EsTEquipmentServiceImpl esTEquipmentService;
+    EsTCoinOrderServiceImpl esTCoinOrderService;
+
+
+    public static void setInitEsTableStatus(boolean initEsTableStatus) {
+        InitEsTableStatus = initEsTableStatus;
+    }
+
+    public void settOrderService(TOrderService tOrderService) {
+        this.tOrderService = tOrderService;
+    }
+
+    public void setEsTEquipmentService(EsTEquipmentServiceImpl esTEquipmentService) {
+        this.esTEquipmentService = esTEquipmentService;
+    }
+
+    public void setEsTCoinOrderService(EsTCoinOrderServiceImpl esTCoinOrderService) {
+        this.esTCoinOrderService = esTCoinOrderService;
+    }
+
+    @Override
+    public String getTableName() {
+        return "es_t_order";
+    }
+//    public String getTableName() {
+//        return "es_t_order";
+//    }
+
+    @Override
+    public TOrder getInstanceOfEntity() {
+        return new TOrder();
+    }
+
+    @Override
+    public void setInitTableStatus(boolean flag) {
+        InitEsTableStatus = flag;
+    }
+
+    @Override
+    public boolean getInitTableStatus() {
+        return InitEsTableStatus;
+    }
+
+    @Override
+    public void initTableFun() {
+        try{
+            String tableName = getTableName();
+            GetIndexRequest request = new GetIndexRequest(tableName);
+//            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(this.getTableName());
+//            restHighLevelClient.indices().delete(deleteIndexRequest,RequestOptions.DEFAULT);
+            boolean isExists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
+            if (!isExists) {
+                log.info("es 索引 开始创建"+tableName);
+                createTable();
+                // 初始化旧流水
+                int num = 0;
+                while (true) {
+                    int limit = MAX_ROW;
+//                    int offset= num * MAX_ROW;
+                    int offset= num;
+//                    TOrderExample example = new TOrderExample();
+//                    example.setLimit(limit);
+//                    example.setOffset(offset);
+//                    List<TOrder> list = tOrderService.selectByOption(example);
+                    LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+                    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    String time = "2022-07-01 00:00:00";
+                    Date date = ft.parse(time);
+                    query.gt(TOrder::getCreateDate,date);
+                    Page<TOrder> page = new Page<>(offset, limit, true);
+                    IPage<TOrder> iPage = tOrderService.page(page, query);
+                    List<TOrder> list = iPage.getRecords();
+                    insertBatch(list);
+                    num++;
+                    if(list.size()< MAX_ROW){ // 数据小于 最大值 ,证明后面已无数据,则跳出
+                        break;
+                    }
+                }
+            } else {
+                log.info("es 索引 "+tableName+" 已存在不再创建");
+            }
+            InitEsTableStatus = true;
+        }catch (Exception e){
+            log.error("ElasticsearchRunner InitEsTOrderThread 发生错误:{}" , e);
+            throw new MyException("ElasticsearchRunner InitEsTOrderThread 发生错误:" + e.getMessage());
+        }
+    }
+
+    @Override
+    public String getEntityPrimaryKey(TOrder tOrder) {
+        return String.valueOf(tOrder.getId());
+    }
+
+    @Override
+    public TOrder setEntityPrimaryKey(TOrder tOrder, String value) {
+        return null;
+    }
+
+//    @Override
+//    public TOrder setEntityPrimaryKey(TOrder tOrder, String value) {
+//        return tOrder.setId(Long.parseLong(value));
+//    }
+
+    /**
+     * 根据时间 重新同步es
+     * @param
+     * @return
+     */
+    public void updateEsByDate(String startTime, String endTime) {
+        try {
+            startTime = startTime.replace("/", "-");
+            endTime = endTime.replace("/", "-");
+            Date start = DateUtils.parseDate(startTime, DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+            Date end = DateUtils.parseDate(endTime, DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss, new Date());
+            // 查询es 现有的数据,删除
+            TOrderParam param = new TOrderParam();
+            param.setCreateDate_start(start);
+            param.setCreateDate_end(end);
+            List<TOrder> list_es = this.selectEntityByEqualToOption(param);
+            for (TOrder entity : list_es) {
+                this.deleteTableById(String.valueOf(entity.getId()));
+            }
+            // 插入 新的
+//            List<TOrder> list = tOrderService.selectForEs(param);
+            LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
+            query.gt(TOrder::getCreateDate,start);
+            query.lt(TOrder::getCreateDate,end);
+            List<TOrder> list = tOrderService.list(query);
+            if (CollectionUtils.isNotEmpty(list)) {
+                insertBatch(list);
+            }
+        } catch (Exception e) {
+            log.error(this.getTableName()+" updateEsByDate 发生错误:{}", e);
+            throw new MyException(this.getTableName()+" updateEsByDate 发生错误:" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * es 查询条件
+     * @param param
+     * @return
+     */
+    public BoolQueryBuilder getStatisticsParam2QueryBuilder(StatisticsParam param){
+        BoolQueryBuilder boolQueryBuilder;
+        String startDate = param.getStartDate().replace("/","-");
+        String endDate = param.getEndDate().replace("/","-");
+        Date start = DateUtils.parseDate(startDate+" 00:00:00", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss,new Date());
+        Date end = DateUtils.parseDate(endDate+" 23:59:59", DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss,new Date());
+
+        if(StringUtils.equals("0",param.getIfForeign())){ // 国内用户
+            TOrderParam tOrderParam = new TOrderParam();
+            tOrderParam.setStatus(1);
+            tOrderParam.setCreateDate_start(start);
+            tOrderParam.setCreateDate_end(end);
+            if(StringUtils.isNotEmpty(param.getAdminId())){ // 所属商家id
+                tOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+            }
+            if(StringUtils.isNotEmpty(param.getEquipmentId())){ // 设备id
+                tOrderParam.setEquipmentId(Long.parseLong(param.getEquipmentId()));
+            }
+            if(param.getEquipmentIds()!=null&&param.getEquipmentIds().size()>0){ // 设备id
+                tOrderParam.setEquipmentId_inList(param.getEquipmentIds());
+            }
+            if(StringUtils.isNotEmpty(param.getPayType())){ // 支付方式
+                tOrderParam.setFrpCode(param.getPayType());
+            }
+
+            if (null != param.getAgencyId()){
+                tOrderParam.setAgencyId(param.getAgencyId());
+                tOrderParam.setType_gt(1);
+            }
+            if(null != param.getMerchantId()){
+                tOrderParam.setMerchantId(param.getMerchantId());
+                tOrderParam.setType_gt(2);
+            }
+            if(param.getAdminIds()!=null&&param.getAdminIds().size()>0){
+                tOrderParam.setAdminId_inList(param.getAdminIds());
+            }
+
+            boolQueryBuilder = this.getParam2QueryBuilder(tOrderParam);
+
+        }else{ // 国外用户
+            TEquipmentParam tEquipmentParam = new TEquipmentParam();
+            if(StringUtils.isNotEmpty(param.getEquipmentId())){ // 设备id
+                tEquipmentParam.setId(Long.parseLong(param.getEquipmentId()));
+            }
+            List<TEquipment> equipmentList = esTEquipmentService.selectEntityByEqualToOption(tEquipmentParam);
+            List<String> clientIdList = equipmentList.stream().map(TEquipment::getClientId).collect(Collectors.toList());
+
+            TCoinOrderParam tCoinOrderParam = new TCoinOrderParam();
+            tCoinOrderParam.setCreateDate_start(start);
+            tCoinOrderParam.setCreateDate_end(end);
+            tCoinOrderParam.setClientId_inList(clientIdList);
+            if(param.getAdminIds().size()>0){
+                tCoinOrderParam.setAdminId_inList(param.getAdminIds());
+            }
+            if(StringUtils.isNotEmpty(param.getAdminId())){ // 所属商家id
+                tCoinOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+            }
+            if(param.getClientIds().size()>0){ // 设备
+                tCoinOrderParam.setClientId_inList(param.getClientIds());
+            }
+            boolQueryBuilder = esTCoinOrderService.getParam2QueryBuilder(tCoinOrderParam);
+        }
+        return boolQueryBuilder;
+    }
+
+    public ChartColumn getStatistics(StatisticsParam param) {
+        String msg = "";
+        String format = "yyyy-MM";
+        DateHistogramInterval interval = DateHistogramInterval.DAY;
+
+        if (ChartType.day.toString().equals(param.getChartType())) {
+            interval = DateHistogramInterval.HOUR;
+            format = "HH:00";
+            msg = "日统计";
+        }
+        if (ChartType.week.toString().equals(param.getChartType())) {
+            interval = DateHistogramInterval.DAY;
+            format = "yyyy-MM-dd";
+            msg = "周统计";
+        }
+        if (ChartType.month.toString().equals(param.getChartType())) {
+            interval = DateHistogramInterval.DAY;
+            format = "MM-dd";
+            msg = "月统计";
+        }
+        if (ChartType.year.toString().equals(param.getChartType())) {
+            interval = DateHistogramInterval.MONTH;
+            format = "MM月";
+            msg = "年统计";
+        }
+
+        ChartColumn chartColumn = getStatistics(param,format,interval);
+        if (ChartType.week.toString().equals(param.getChartType())) {
+            ArrayList<String> categories = new ArrayList<>();
+            for (String day :chartColumn.getCategories()) {
+                int week = DateUtils.getWeek(DateUtils.parseDate(day, DateUtils.PATTERN_yyyy_MM_dd,new Date()));
+                String finalCategories = "周" + (week==0?"日":week);
+                categories.add(finalCategories);
+            }
+            chartColumn.setCategories(categories);
+        }
+        return chartColumn;
+    }
+
+
+    public ChartColumn getStatistics(StatisticsParam param, String format, DateHistogramInterval interval) {
+        try {
+            String aggregationResultName = "aggregationResult";//  仅为名称,用以获取返回结果
+            String aggSumName = "sales"; //  仅为名称,用以获取返回结果
+            String aggName_productNumber = "productNumber"; //  仅为名称,用以获取返回结果
+
+
+            //Bool查询
+            BoolQueryBuilder queryBuilder = getStatisticsParam2QueryBuilder(param);
+            // 公司平台
+            String companyType = param.getCompanyType();
+            if(StringUtils.isNotEmpty(companyType)) {
+                if(companyType.equals("0")) {
+                    queryBuilder.must(
+                            QueryBuilders.boolQuery().should(
+                                    QueryBuilders.termQuery("companyType", "0")
+                            ).should(
+                                    QueryBuilders.boolQuery().mustNot(
+                                            QueryBuilders.existsQuery("companyType")
+                                    )
+                            )
+                    );
+                } else {
+                    queryBuilder.must(QueryBuilders.termQuery("companyType","1"));
+                }
+            }
+
+            // 时间聚合
+            AggregationBuilder dateHistogram = AggregationBuilders.dateHistogram(aggregationResultName)
+                    .field("createDate")
+                    .calendarInterval(interval)
+                    .format(format);
+
+            // 根据字段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);
+            SearchRequest searchRequest = new SearchRequest(getTableName());
+            searchRequest.source(sourceBuilder);
+            log.debug("sourceBuilder:{}", sourceBuilder);
+            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
+            Aggregation agg = searchResponse.getAggregations().get(aggregationResultName);
+            List<? extends Histogram.Bucket> buckets = ((Histogram) agg).getBuckets();
+
+
+            List<ChartBean> chartBeanList = new ArrayList<>();
+            for (Histogram.Bucket bucket : buckets) {
+                ChartBean chartBean = new ChartBean();
+                chartBean.setCategorie(bucket.getKeyAsString());
+//                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());
+                chartBean.setSalePrice(Float.valueOf(s));
+//                chartBean.setSalePrice(Double.valueOf(sum.getValue()).intValue());
+                chartBeanList.add(chartBean);
+            }
+            ChartColumn chartColumn = new ChartColumn(chartBeanList);
+            return chartColumn;
+        } catch (Exception e) {
+            log.error(getTableName() + " es根据条件 聚合查询 报错:{}", e);
+            throw new MyException(getTableName() + " es根据条件 聚合查询 报错:" + e.getMessage());
+        }
+    }
+
+    public static String format1(Float value){
+        BigDecimal bd = new BigDecimal(value);//创建一个bd对象,将要转换的值value传入构造函数
+        bd = bd.setScale(2, RoundingMode.HALF_UP);//调用setScale方法进行数据格式化,保留两位小数,采用四舍五入规则
+        return bd.toString(); //返回bd对象的值(转化为string形式)
+    }
+    public void tongbuByHour() 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.HOUR_OF_DAY, -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();
+//                    }
+//                }
+//            }
+//        }
+    }
+
+    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();
+//                    }
+//                }
+//            }
+//        }
+    }
+}

+ 20 - 0
src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.mapper.TCoinOrderMapper;
+import com.szwl.service.TCoinOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Service
+public class TCoinOrderServiceImpl extends ServiceImpl<TCoinOrderMapper, TCoinOrder> implements TCoinOrderService {
+
+}

+ 20 - 0
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TEquipment;
+import com.szwl.mapper.TEquipmentMapper;
+import com.szwl.service.TEquipmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Service
+public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {
+
+}

+ 20 - 0
src/main/java/com/szwl/service/impl/TOrderServiceImpl.java

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TOrder;
+import com.szwl.mapper.TOrderMapper;
+import com.szwl.service.TOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Author
+ * @since 2023-08-03
+ */
+@Service
+public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
+
+}

+ 1 - 1
src/test/java/com/szwl/AutoGeneratorTests.java

@@ -48,7 +48,7 @@ class AutoGeneratorTests {
         strategyConfig
 //				.setCapitalMode(true)//设置全局大写命名
                 .setInclude(new String[]{
-                        "t_admin"
+                        "t_coin_order"
                 })//只会生成该表
                 .setEntityLombokModel(true)//实体类生成之后自动添加lombok注解
                 .setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略