李天标 3 år sedan
förälder
incheckning
569dde5483
54 ändrade filer med 5088 tillägg och 203 borttagningar
  1. 46 0
      pom.xml
  2. 11 0
      src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscore.java
  3. 38 0
      src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscoreFormatAnnotationFormatterFactory.java
  4. 50 0
      src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscoreFormatter.java
  5. 176 3
      src/main/java/com/szwl/controller/TCoinOrderController.java
  6. 1030 190
      src/main/java/com/szwl/controller/TOrderController.java
  7. 20 7
      src/main/java/com/szwl/feign/bean/SzwlFeign.java
  8. 5 0
      src/main/java/com/szwl/mapper/TCoinOrderMapper.java
  9. 18 0
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  10. 10 0
      src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml
  11. 27 0
      src/main/java/com/szwl/model/bean/ChartBean.java
  12. 58 0
      src/main/java/com/szwl/model/bean/ChartColumn.java
  13. 25 0
      src/main/java/com/szwl/model/bean/ChartSerie.java
  14. 48 0
      src/main/java/com/szwl/model/bean/Child.java
  15. 36 0
      src/main/java/com/szwl/model/bean/Childlast.java
  16. 29 0
      src/main/java/com/szwl/model/bean/Children2.java
  17. 29 0
      src/main/java/com/szwl/model/bean/Children3.java
  18. 93 0
      src/main/java/com/szwl/model/bean/CoinOrderVo.java
  19. 70 0
      src/main/java/com/szwl/model/bean/CommonParamVo.java
  20. 92 0
      src/main/java/com/szwl/model/bean/EquipmentDTO.java
  21. 191 0
      src/main/java/com/szwl/model/bean/EquipmentVo.java
  22. 100 0
      src/main/java/com/szwl/model/bean/ProductVo.java
  23. 22 0
      src/main/java/com/szwl/model/bean/TAdminDTO.java
  24. 68 0
      src/main/java/com/szwl/model/bean/TEquipmentDTO.java
  25. 20 0
      src/main/java/com/szwl/model/bo/ChartType.java
  26. 75 0
      src/main/java/com/szwl/model/entity/TAlarmRecord.java
  27. 2 0
      src/main/java/com/szwl/model/entity/TCoinOrder.java
  28. 93 0
      src/main/java/com/szwl/model/entity/TEquipmentDesc.java
  29. 2 0
      src/main/java/com/szwl/model/entity/TOrder.java
  30. 42 0
      src/main/java/com/szwl/model/entity/TPrice.java
  31. 68 0
      src/main/java/com/szwl/model/query/OrderStatisticsDTO.java
  32. 271 0
      src/main/java/com/szwl/model/query/Pageable.java
  33. 55 0
      src/main/java/com/szwl/model/query/StatisticsParam.java
  34. 60 0
      src/main/java/com/szwl/model/query/TCoinOrderParam.java
  35. 68 0
      src/main/java/com/szwl/model/query/TEquipmentParam.java
  36. 65 0
      src/main/java/com/szwl/model/query/TOrderParam.java
  37. 117 0
      src/main/java/com/szwl/model/utils/Base64Util.java
  38. 17 0
      src/main/java/com/szwl/model/utils/CodeUtil.java
  39. 266 0
      src/main/java/com/szwl/model/utils/DateUtils.java
  40. 85 0
      src/main/java/com/szwl/model/utils/HEXUtil.java
  41. 136 0
      src/main/java/com/szwl/model/utils/JsonUtils.java
  42. 293 0
      src/main/java/com/szwl/model/utils/PushUtils.java
  43. 14 0
      src/main/java/com/szwl/model/utils/constants/Algorithm.java
  44. 12 0
      src/main/java/com/szwl/model/utils/constants/CommonConst.java
  45. 12 0
      src/main/java/com/szwl/model/utils/exceptions/JPException.java
  46. 5 0
      src/main/java/com/szwl/service/TCoinOrderService.java
  47. 21 0
      src/main/java/com/szwl/service/TEquipmentService.java
  48. 186 0
      src/main/java/com/szwl/service/es/EsTCoinOrderService.java
  49. 352 0
      src/main/java/com/szwl/service/es/EsTEquipmentService.java
  50. 364 0
      src/main/java/com/szwl/service/es/EsTOrderService.java
  51. 11 1
      src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java
  52. 60 0
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  53. 23 1
      src/main/resources/bootstrap.yml
  54. 1 1
      src/test/java/com/szwl/AutoGeneratorTests.java

+ 46 - 0
pom.xml

@@ -184,6 +184,37 @@
 			<artifactId>hmpay-sdk</artifactId>
 			<version>1.1.4</version>
 		</dependency>
+		<!--rabbitmq-->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-amqp</artifactId>
+			<version>2.1.3.RELEASE</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.amqp</groupId>
+			<artifactId>spring-rabbit</artifactId>
+			<version>2.3.6</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.amqp</groupId>
+			<artifactId>spring-amqp</artifactId>
+			<version>2.3.6</version>
+		</dependency>
+		<dependency>
+			<groupId>cn.com.crbank.ommo</groupId>
+			<artifactId>EsBaseServer</artifactId>
+			<version>1.2.10</version>
+		</dependency>
+		<!-- 个推 -->
+		<dependency>
+			<groupId>com.gexin.platform</groupId>
+			<artifactId>gexin-rp-sdk-http</artifactId>
+			<version>4.0.1.9</version>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -208,6 +239,21 @@
 				<enabled>false</enabled>
 			</snapshots>
 		</repository>
+		<!-- 个推 -->
+		<repository>
+			<id>getui-nexus</id>
+			<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
+		</repository>
+		<repository>
+			<id>nexus</id>
+			<url>http://www.redouble.store:1888/repository/crbank-host/</url>
+			<releases>
+				<enabled>true</enabled>
+			</releases>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
 	</repositories>
 
 

+ 11 - 0
src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscore.java

@@ -0,0 +1,11 @@
+package com.szwl.common.myAnnotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.ANNOTATION_TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CamelCaseToUnderscore {
+
+}

+ 38 - 0
src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscoreFormatAnnotationFormatterFactory.java

@@ -0,0 +1,38 @@
+package com.szwl.common.myAnnotation;
+
+import org.springframework.format.AnnotationFormatterFactory;
+import org.springframework.format.Parser;
+import org.springframework.format.Printer;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class CamelCaseToUnderscoreFormatAnnotationFormatterFactory 
+implements AnnotationFormatterFactory<CamelCaseToUnderscore> {//①指定可以解析/格式化的字段注解类型
+	private final Set<Class<?>> fieldTypes;  
+    private final CamelCaseToUnderscoreFormatter formatter;  
+    public CamelCaseToUnderscoreFormatAnnotationFormatterFactory() {  
+        Set<Class<?>> set = new HashSet<Class<?>>();  
+        set.add(String.class);  
+        this.fieldTypes = set;  
+        this.formatter = new CamelCaseToUnderscoreFormatter();//此处使用之前定义的Formatter实现  
+    }  
+    
+    //②指定可以被解析/格式化的字段类型集合  
+    @Override  
+    public Set<Class<?>> getFieldTypes() {  
+        return fieldTypes;  
+    }  
+    //③根据注解信息和字段类型获取解析器  
+    @Override  
+    public Parser<?> getParser(CamelCaseToUnderscore annotation, Class<?> fieldType) {
+        return formatter;  
+    }  
+    //④根据注解信息和字段类型获取格式化器  
+    @Override     
+    public Printer<?> getPrinter(CamelCaseToUnderscore annotation, Class<?> fieldType) {
+        return formatter;  
+    }  
+
+
+}

+ 50 - 0
src/main/java/com/szwl/common/myAnnotation/CamelCaseToUnderscoreFormatter.java

@@ -0,0 +1,50 @@
+package com.szwl.common.myAnnotation;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.format.Formatter;
+
+import java.text.ParseException;
+import java.util.Locale;
+
+public class CamelCaseToUnderscoreFormatter implements Formatter<String> {
+
+	@Override
+	public String print(String paramT, Locale paramLocale) {
+		return convertCamelCaseToUnderscore(paramT);
+	}
+
+	@Override
+	public String parse(String paramString, Locale paramLocale) throws ParseException {
+		// TODO Auto-generated method stub
+		return convertCamelCaseToUnderscore(paramString);
+	}
+
+	public static String convertCamelCaseToUnderscore(String str) {
+		String result = "";
+		String[] parts = str.split(",");
+		for (int i = 0; i < parts.length; i++) {
+			String part = parts[i];
+			String[] fields = part.split(" ");
+			for (String field : fields) {
+				field = field.trim();
+				String _str = StringUtils.upperCase(field);
+				if(!"ASC".equals(StringUtils.upperCase(field))&&!"DESC".equals(StringUtils.upperCase(field))) {
+					String[] strings = StringUtils.splitByCharacterTypeCamelCase(field);
+					_str = StringUtils.join(strings, "_");
+					_str = StringUtils.upperCase(_str);
+				}
+				System.out.println(_str);
+				result = result + " " + _str;
+			}
+			if(i+1!= parts.length) {
+				result = result + ",";
+			}
+		}
+		return result;
+	}
+	
+//	public static void main(String[] args) {
+//		String result = convertCamelCaseToUnderscore("myFi desc,myEntity asc");
+//		System.out.println(result);
+//	}
+}

+ 176 - 3
src/main/java/com/szwl/controller/TCoinOrderController.java

@@ -1,9 +1,34 @@
 package com.szwl.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.alibaba.fastjson.JSONObject;
+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.gexin.fastjson.JSON;
+import com.szwl.feign.bean.SzwlFeign;
+import com.szwl.model.bean.CoinOrderVo;
+import com.szwl.model.bo.JsonMessage;
+import com.szwl.model.bo.R;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.query.OrderStatisticsDTO;
+import com.szwl.model.query.Pageable;
+import com.szwl.model.utils.JsonUtils;
+import com.szwl.service.TCoinOrderService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.es.EsTCoinOrderService;
+import com.szwl.service.es.EsTOrderService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -14,8 +39,156 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2022-06-17
  */
 @RestController
-@RequestMapping("/tCoinOrder")
+@RequestMapping("/api/coinOrder")
 public class TCoinOrderController {
+    @Autowired
+    TEquipmentService equipmentService;
+    @Autowired
+    TCoinOrderService coinOrderService;
+    @Autowired
+    EsTCoinOrderService esTCoinOrderService;
+    @Autowired
+    SzwlFeign szwlFeign;
+    /**添加线下
+     * @param coinOrderVo
+     * @return
+     */
+    @PostMapping("/saveCoinOrder")
+    @ResponseBody
+    public Object saveConinOrder(@RequestBody CoinOrderVo coinOrderVo) {
+        String clientId = coinOrderVo.getClientId();
+        String name = coinOrderVo.getName();
+        Integer payType = coinOrderVo.getPayType();
+        BigDecimal price = coinOrderVo.getPrice();
+        String sn = coinOrderVo.getSn();
+        TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
+        Long adminId = equipment.getAdminId();
+        if (adminId == null) {
+            return JsonMessage.error("找不到设备商家");
+        }
 
+        TCoinOrder coinOrder = new TCoinOrder();
+        coinOrder.setType(null);
+        coinOrder.setClientId(clientId);
+        coinOrder.setAdminId(adminId);
+        coinOrder.setProductName(name);
+        coinOrder.setPayType(payType);
+        coinOrder.setPrice(price);
+        coinOrder.setProductNo(coinOrderVo.getNo());
+        coinOrder.setSn(sn);
+        if(StringUtils.isNotEmpty(coinOrderVo.getCreateDate())){
+            java.text.SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
+            Date date1 = null;
+            try {
+                date1 =  formatter.parse(coinOrderVo.getCreateDate());
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+            coinOrder.setCreateDate(date1);
+            coinOrder.setModifyDate(date1);
+            coinOrder.setPayDate(date1);
+        }else{
+            coinOrder.setCreateDate(new Date());
+            coinOrder.setModifyDate(new Date());
+            coinOrder.setPayDate(new Date());
+        }
+        coinOrderService.save(coinOrder);
+        try {
+            esTCoinOrderService.insertData(coinOrder);
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return JsonMessage.success("添加订单成功");
+    }
+
+    //设备查询线下订单记录
+    @RequestMapping(value = "/findCoinOrder", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
+    @ResponseBody
+    public String list(String clientId, String sn, String productName, Integer payType, Date begin, Date end, Pageable pageable) {
+        LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+        if (StringUtils.isNotEmpty(sn)) {
+            query.eq(TCoinOrder::getSn,sn);
+        }
+        if (StringUtils.isNotEmpty(productName)) {
+            query.eq(TCoinOrder::getProductName,productName);
+        }
+        if (payType != null) {
+            query.eq(TCoinOrder::getPayType,payType);
+        }
+        if (begin != null && end != null) {
+            query.gt(TCoinOrder::getPayDate,begin);
+            query.lt(TCoinOrder::getPayDate,end);
+        }
+        query.eq(TCoinOrder::getClientId,clientId);
+        int size = pageable.getPageSize();
+        int current = pageable.getPageNumber();
+        Page<TCoinOrder> page = new Page<>(current, size, true);
+        IPage<TCoinOrder> iPage = coinOrderService.page(page, query);
+        long total = page.getTotal();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("total", total);
+        jsonObject.put("coinorders", JSON.toJSONString(iPage.getRecords()));
+        return jsonObject.toJSONString();
+    }
+
+    //设备查询线下订单记录
+    @RequestMapping(value = "/newFindCoinOrder", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
+    @ResponseBody
+    public String newFindCoinOrder(String clientId, String sn, String productName, Integer payType, String begin,String end, Pageable pageable) {
+        LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+        java.text.SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
+        Date date1 = null;
+        Date date2 = null;
+        try {
+            date1 =  formatter.parse(begin);
+            date2 =  formatter.parse(end);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        if (StringUtils.isNotEmpty(sn)) {
+            query.eq(TCoinOrder::getSn,sn);
+        }
+        if (StringUtils.isNotEmpty(productName)) {
+            query.eq(TCoinOrder::getProductName,productName);
+        }
+        if (payType != null) {
+            query.eq(TCoinOrder::getPayType,payType);
+        }
+        if (begin != null && end != null) {
+            query.gt(TCoinOrder::getPayDate,begin);
+            query.lt(TCoinOrder::getPayDate,end);
+        }
+        query.eq(TCoinOrder::getClientId,clientId);
+        int size = pageable.getPageSize();
+        int current = pageable.getPageNumber();
+        Page<TCoinOrder> page = new Page<>(current, size, true);
+        IPage<TCoinOrder> iPage = coinOrderService.page(page, query);
+        long total = page.getTotal();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("total", total);
+        jsonObject.put("coinorders", JSON.toJSONString(iPage.getRecords()));
+        return jsonObject.toJSONString();
+    }
+
+    //设备查看线下汇总统计
+    @RequestMapping(value = "/listCoin", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
+    @ResponseBody
+    public Object findByTime(String clientId, String startTime, String endTime) {
+        java.text.SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss");
+        Date date1 = null;
+        Date date2 = null;
+        try {
+            date1 =  formatter.parse(startTime);
+            date2 =  formatter.parse(endTime);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        List<OrderStatisticsDTO> list = coinOrderService.findTotalByTime(clientId, date1, date2);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("code", 0);
+        jsonObject.put("data", JsonUtils.toJson(list));
+        jsonObject.put("errmsg", "");
+        return jsonObject;
+    }
 }
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1030 - 190
src/main/java/com/szwl/controller/TOrderController.java


+ 20 - 7
src/main/java/com/szwl/feign/bean/SzwlFeign.java

@@ -6,6 +6,10 @@ import com.szwl.model.entity.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Date;
 
 
 @FeignClient(name = "pay-server")
@@ -15,18 +19,27 @@ public interface SzwlFeign {
     ResponseModel<IPage<?>> testPay(String id);
 
     @GetMapping("/tEquipment/findEquipmentByClientId")
-    ResponseModel<IPage<TEquipment>> findEquipmentByClientId(String clientId);
-
+    ResponseModel<TEquipment> findEquipmentByClientId(String clientId);
     @GetMapping("/tPromoCode/getTPromoCode")
     ResponseModel<IPage<TPromoCode>> getTPromoCode(String code);
     @GetMapping("/tPromoCode/updatePromoCode")
-    void updatePromoCode(String id, String type);
+    void updatePromoCode(@RequestParam(value = "id")String id, @RequestParam(value = "type")String type);
     @GetMapping("/tProduct/getProduct")
-    ResponseModel<IPage<TProduct>> getProduct(String equipmentId, String productName);
+    ResponseModel<TProduct> getProduct(@RequestParam(value = "equipmentId")String equipmentId, @RequestParam(value = "productName")String productName);
     @GetMapping("/tProportion/getProportion")
-    ResponseModel<IPage<TProportion>> getProportion(String equipmentId);
+    ResponseModel<TProportion> getProportion(String equipmentId);
     @GetMapping("/tAdmin/getAdmin")
-    ResponseModel<IPage<TAdmin>>  getAdmin(String id);
+    ResponseModel<TAdmin>  getAdmin(String id);
     @GetMapping("/tJoinpayMch/getMch")
-    ResponseModel<IPage<TJoinpayMch>>  getMch(String id);
+    ResponseModel<TJoinpayMch>  getMch(String id);
+    @GetMapping("/tShandeMch/getShandeMch")
+    ResponseModel<TShandeMch>  getShandeMch(String id);
+    @GetMapping("/tShandeMch/updateShandeMch")
+    void updateShandeMch(@RequestBody TShandeMch shandeMch);
+    @GetMapping("/tEquipmentDesc/findEquipmentById")
+    ResponseModel<TEquipmentDesc> findEquipmentById(Long id);
+    @GetMapping("/tPrice/getPrice")
+    ResponseModel<TPrice>  getPrice(String name);
+    @GetMapping("/tPromoCode/addPromoCode")
+    void addPromoCode(@RequestParam(value = "adminId")String adminId, @RequestParam(value = "lastUseDate")Date lastUseDate, @RequestParam(value = "number")int number);
 }

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

@@ -2,6 +2,10 @@ package com.szwl.mapper;
 
 import com.szwl.model.entity.TCoinOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.szwl.model.query.OrderStatisticsDTO;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TCoinOrderMapper extends BaseMapper<TCoinOrder> {
 
+    List<OrderStatisticsDTO> findTotalByTime(String clientId, Date startTime, Date endTime);
 }

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

@@ -0,0 +1,18 @@
+package com.szwl.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.szwl.model.entity.TEquipment;
+
+
+/**
+ * <p>
+ * 设备表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-19
+ */
+public interface TEquipmentMapper extends BaseMapper<TEquipment> {
+
+
+}

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

@@ -22,5 +22,15 @@
     <sql id="Base_Column_List">
         id, create_date, modify_date, admin_id, client_id, pay_type, price, sn, type, product_name, es, pay_date
     </sql>
+    <select id="findTotalByTime" resultType="com.szwl.model.query.OrderStatisticsDTO">
+        SELECT count(id) as totalNumber, sum(price) as totalPrice ,DATE_FORMAT(create_date, '%Y-%m-%d ' ) as sTime FROM  t_coin_order  where 1=1
+        <if test="clientId != null and clientId !=''">
+            and client_id = #{clientId}
+        </if>
+        AND create_date >= STR_TO_DATE(CONCAT(#{startTime},' 00:00:00'),'%Y/%m/%d %H:%i:%s')
+        <![CDATA[ AND create_date <= STR_TO_DATE(CONCAT(#{endTime},' 23:59:59'),'%Y/%m/%d %H:%i:%s') ]]>
+        group by sTime
+    </select>
+
 
 </mapper>

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

@@ -0,0 +1,27 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class ChartBean {
+
+    @ApiModelProperty(value="统计类目")
+    private String categorie;
+
+    @ApiModelProperty(value="销量")
+//    private Integer saleNum;
+    private Float saleNum;
+
+    @ApiModelProperty(value="销售额")
+//    private Integer salePrice;
+    private Float salePrice;
+}

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

@@ -0,0 +1,58 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class ChartColumn {
+    @ApiModelProperty(value="统计类目")
+    private ArrayList<String> categories;
+    @ApiModelProperty(value="统计类目值")
+    private ArrayList<ChartSerie> series;
+
+    public ChartColumn(List<ChartBean>  list){
+        ArrayList<String> categories = new ArrayList<>();
+//        ArrayList<Integer> salePriceList = new ArrayList<>();
+        ArrayList<Float> salePriceList = new ArrayList<>();
+//        ArrayList<Integer> saleNumList = new ArrayList<>();
+        ArrayList<Float> saleNumList = new ArrayList<>();
+
+        for (ChartBean bean :list) {
+            categories.add(bean.getCategorie());
+            saleNumList.add(bean.getSaleNum());
+            salePriceList.add(Float.valueOf(format1(bean.getSalePrice())));
+        }
+
+        this.setCategories(categories);
+        ChartSerie chartSerie = new ChartSerie();
+        chartSerie.setName("销售个数");
+        chartSerie.setData(saleNumList);
+
+        ChartSerie chartSerie2 = new ChartSerie();
+        chartSerie2.setName("销售额");
+        chartSerie2.setData(salePriceList);
+
+        ArrayList<ChartSerie> series = new ArrayList<>();
+        series.add(chartSerie);
+        series.add(chartSerie2);
+        this.setSeries(series);
+    }
+    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形式)
+    }
+}

+ 25 - 0
src/main/java/com/szwl/model/bean/ChartSerie.java

@@ -0,0 +1,25 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.ArrayList;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class ChartSerie {
+
+    @ApiModelProperty(value="类别名")
+    private String name;
+
+    @ApiModelProperty(value="数量")
+//    private ArrayList<Integer> data;
+    private ArrayList<Float> data;
+}

+ 48 - 0
src/main/java/com/szwl/model/bean/Child.java

@@ -0,0 +1,48 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Child {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="机器列表")
+    private List<Childlast> children;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public List<Childlast> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<Childlast> children) {
+        this.children = children;
+    }
+}

+ 36 - 0
src/main/java/com/szwl/model/bean/Childlast.java

@@ -0,0 +1,36 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Childlast {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 29 - 0
src/main/java/com/szwl/model/bean/Children2.java

@@ -0,0 +1,29 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+import java.util.Set;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Children2 {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="商家列表")
+    private List<Child> children;
+    @ApiModelProperty(value="属于该市的所有id")
+    private Set<Long> city;
+    @ApiModelProperty(value="销售数据")
+    private String money;
+}

+ 29 - 0
src/main/java/com/szwl/model/bean/Children3.java

@@ -0,0 +1,29 @@
+package com.szwl.model.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+import java.util.Set;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class Children3 {
+    @ApiModelProperty(value="id")
+    private Long id;
+    @ApiModelProperty(value="名称")
+    private String name;
+    @ApiModelProperty(value="市级列表")
+    private List<Children2> children;
+    @ApiModelProperty(value="属于该省的所有id")
+    private Set<Long> province;
+    @ApiModelProperty(value="销售数据")
+    private String money;
+}

+ 93 - 0
src/main/java/com/szwl/model/bean/CoinOrderVo.java

@@ -0,0 +1,93 @@
+package com.szwl.model.bean;
+
+import java.math.BigDecimal;
+
+public class CoinOrderVo {
+
+
+    /**
+     * 订单
+     */
+    private String sn;
+
+    private String createDate;
+    /**
+     * 订单名字
+     */
+    private String name;
+
+    private String no;
+    /**
+     * 个推
+     */
+    private String clientId;
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 支付类型
+     * 0代表无需支付
+     * 1代表投币支付
+     */
+
+    private Integer payType;
+
+
+    public String getNo() {
+        return no;
+    }
+
+    public void setNo(String no) {
+        this.no = no;
+    }
+
+    public String getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(String createDate) {
+        this.createDate = createDate;
+    }
+
+    public String getSn() {
+        return sn;
+    }
+
+    public void setSn(String sn) {
+        this.sn = sn;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Integer getPayType() {
+        return payType;
+    }
+
+    public void setPayType(Integer payType) {
+        this.payType = payType;
+    }
+}

+ 70 - 0
src/main/java/com/szwl/model/bean/CommonParamVo.java

@@ -0,0 +1,70 @@
+package com.szwl.model.bean;
+
+
+import java.util.List;
+
+public class CommonParamVo {
+
+    private String name;
+    /**
+     * 参数值
+     */
+    private String val;
+
+    private List<CommonParamVo> commonParamVos;
+
+    private String id;
+
+    private String code;
+
+    private String clientId;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getVal() {
+        return val;
+    }
+
+    public void setVal(String val) {
+        this.val = val;
+    }
+
+    public List<CommonParamVo> getCommonParamVos() {
+        return commonParamVos;
+    }
+
+    public void setCommonParamVos(List<CommonParamVo> commonParamVos) {
+        this.commonParamVos = commonParamVos;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+}

+ 92 - 0
src/main/java/com/szwl/model/bean/EquipmentDTO.java

@@ -0,0 +1,92 @@
+package com.szwl.model.bean;
+
+public class EquipmentDTO {
+    /**
+     * 设备唯一码
+     */
+    private String clientId;
+
+    /**
+     * 设备编号
+     */
+    private String sn;
+
+    /**
+     * 设备名称
+     */
+    private String name;
+    /**
+     * 地区完整名称
+     */
+    private String fullName;
+    /**
+     * 经度
+     */
+    private Double longitude;
+
+    /**
+     * 维度
+     */
+    private Double latitude;
+
+    /**
+     * 机器状态   开机为1,关机为0
+     */
+    private Integer eqeStatus;
+
+    public Integer getEqeStatus() {
+        return eqeStatus;
+    }
+
+    public void setEqeStatus(Integer eqeStatus) {
+        this.eqeStatus = eqeStatus;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getSn() {
+        return sn;
+    }
+
+    public void setSn(String sn) {
+        this.sn = sn;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getFullName() {
+        return fullName;
+    }
+
+    public void setFullName(String fullName) {
+        this.fullName = fullName;
+    }
+
+    public Double getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(Double longitude) {
+        this.longitude = longitude;
+    }
+
+    public Double getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(Double latitude) {
+        this.latitude = latitude;
+    }
+}

+ 191 - 0
src/main/java/com/szwl/model/bean/EquipmentVo.java

@@ -0,0 +1,191 @@
+package com.szwl.model.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+public class EquipmentVo {
+
+    /**
+     * 设备唯一码
+     */
+    private String clientId;
+
+    /**
+     * 管理系统ID
+     */
+    private  String managerId;
+
+    /**
+     * 柜内温度
+     */
+    private String cabinetTm;
+
+    /**
+     * 柜内湿度
+     */
+    private  String cabinetHd;
+
+    /**
+     *炉头温度
+     */
+    private String furnaceTm;
+
+    /**
+     *音量
+     */
+    private String volume;
+
+    /**
+     * 炉头转速
+     */
+    private  String furnaceSp;
+
+    /**
+     * 联网方式
+     *
+     */
+    private  String netWorkingMode;
+
+    /**
+     * 上一次心跳时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date lastUpdateTime;
+
+
+    /**
+     * 经度
+     */
+    private Double longitude;
+
+    /**
+     * 维度
+     */
+    private Double latitude;
+
+    /**
+     * 睡眠状态  睡眠为true,不睡眠false
+     */
+    private Boolean is_sleep;
+    /**
+     * 设备状态 开机为1,关机为0
+     */
+    public Integer eqeStatus;
+    /**
+     * 实际上设备id
+     */
+    private String gtClientId;
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public Boolean getIs_sleep() {
+        return is_sleep;
+    }
+
+    public void setIs_sleep(Boolean is_sleep) {
+        this.is_sleep = is_sleep;
+    }
+
+    public Integer getEqeStatus() {
+        return eqeStatus;
+    }
+
+    public void setEqeStatus(Integer eqeStatus) {
+        this.eqeStatus = eqeStatus;
+    }
+
+    public String getVolume() {
+        return volume;
+    }
+
+    public void setVolume(String volume) {
+        this.volume = volume;
+    }
+
+    public String getManagerId() {
+        return managerId;
+    }
+
+    public void setManagerId(String managerId) {
+        this.managerId = managerId;
+    }
+
+    public String getCabinetTm() {
+        return cabinetTm;
+    }
+
+    public void setCabinetTm(String cabinetTm) {
+        this.cabinetTm = cabinetTm;
+    }
+
+    public String getCabinetHd() {
+        return cabinetHd;
+    }
+
+    public void setCabinetHd(String cabinetHd) {
+        this.cabinetHd = cabinetHd;
+    }
+
+    public String getFurnaceTm() {
+        return furnaceTm;
+    }
+
+    public void setFurnaceTm(String furnaceTm) {
+        this.furnaceTm = furnaceTm;
+    }
+
+    public String getFurnaceSp() {
+        return furnaceSp;
+    }
+
+    public void setFurnaceSp(String furnaceSp) {
+        this.furnaceSp = furnaceSp;
+    }
+
+    public String getNetWorkingMode() {
+        return netWorkingMode;
+    }
+
+    public void setNetWorkingMode(String netWorkingMode) {
+        this.netWorkingMode = netWorkingMode;
+    }
+
+    public Date getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    public void setLastUpdateTime(Date lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    public Double getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(Double longitude) {
+        this.longitude = longitude;
+    }
+
+    public Double getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(Double latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getGtClientId() {
+        return gtClientId;
+    }
+
+    public void setGtClientId(String gtClientId) {
+        this.gtClientId = gtClientId;
+    }
+}

+ 100 - 0
src/main/java/com/szwl/model/bean/ProductVo.java

@@ -0,0 +1,100 @@
+package com.szwl.model.bean;
+
+
+public class ProductVo implements Comparable<ProductVo> {
+
+    /**
+     * 个推
+     */
+    private String clientId;
+
+    /**
+     * 人名币价格
+     */
+    private Double rmbPrice;
+
+    /**
+     * 投币价格
+     */
+    private Double codePrice;
+
+    /**
+     * 销售状态 true正常销售
+     * false:已售罄
+     */
+    private Boolean sellStatus;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 是否显示  0:显示 1:屏蔽
+     */
+    private String showType;
+
+    private String id;
+
+    public String getShowType() {
+        return showType;
+    }
+
+    public void setShowType(String showType) {
+        this.showType = showType;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public Double getRmbPrice() {
+        return rmbPrice;
+    }
+
+    public void setRmbPrice(Double rmbPrice) {
+        this.rmbPrice = rmbPrice;
+    }
+
+    public Double getCodePrice() {
+        return codePrice;
+    }
+
+    public void setCodePrice(Double codePrice) {
+        this.codePrice = codePrice;
+    }
+
+    public Boolean getSellStatus() {
+        return sellStatus;
+    }
+
+    public void setSellStatus(Boolean sellStatus) {
+
+        this.sellStatus = sellStatus;
+    }
+
+    @Override
+    public int compareTo(ProductVo o) {
+        return this.getId().compareTo(o.getId());
+    }
+}

+ 22 - 0
src/main/java/com/szwl/model/bean/TAdminDTO.java

@@ -0,0 +1,22 @@
+package com.szwl.model.bean;
+
+import com.szwl.model.entity.TAdmin;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class TAdminDTO extends TAdmin {
+
+	@ApiModelProperty(value="设备列表")
+	private List<TEquipmentDTO> equipmentList;
+}

+ 68 - 0
src/main/java/com/szwl/model/bean/TEquipmentDTO.java

@@ -0,0 +1,68 @@
+package com.szwl.model.bean;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.szwl.model.entity.TAlarmRecord;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.utils.DateUtils;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@ToString
+public class TEquipmentDTO extends TEquipment {
+    @ApiModelProperty(value="所以报警信息")
+    private List<TAlarmRecord> alarmList;
+    @ApiModelProperty(value="最新报警信息")
+    private String alarmContent = "暂无数据";
+
+    @ApiModelProperty(value="当天是否存在告警")
+    private boolean hasTodayAlarm= false;
+
+    public List<TAlarmRecord> getAlarmList() {
+        return alarmList;
+    }
+
+    public void setAlarmList(List<TAlarmRecord> alarmList) {
+        this.alarmList = alarmList;
+    }
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value="报警发生时间")
+
+    private Date occurrenceTime;
+
+    public String getAlarmContent() {
+        return alarmContent;
+    }
+
+    public void setAlarmContent(String alarmContent) {
+        this.alarmContent = alarmContent;
+    }
+
+    public boolean isHasTodayAlarm() {
+        return hasTodayAlarm;
+    }
+
+    public void setHasTodayAlarm(boolean hasTodayAlarm) {
+        this.hasTodayAlarm = hasTodayAlarm;
+    }
+
+    public Date getOccurrenceTime() {
+        return occurrenceTime;
+    }
+
+    public void setOccurrenceTime(Date occurrenceTime) {
+        if(null != occurrenceTime){
+            this.hasTodayAlarm = DateUtils.isSameDay(new Date(),occurrenceTime);
+            this.occurrenceTime = occurrenceTime;
+        }
+    }
+}

+ 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
+}

+ 75 - 0
src/main/java/com/szwl/model/entity/TAlarmRecord.java

@@ -0,0 +1,75 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 报警信息
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TAlarmRecord对象", description="报警信息")
+public class TAlarmRecord 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 = "报警内容;")
+    private String alarmContent;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "标记;")
+    private String remark;
+
+    @ApiModelProperty(value = "用户级别;")
+    private String adminLevel;
+
+    @ApiModelProperty(value = "设备id;")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "名称;")
+    private String name;
+
+    @ApiModelProperty(value = "发生时间;")
+    private Date occurrenceTime;
+
+    @ApiModelProperty(value = "用户id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "用户名;")
+    private String adminUserName;
+
+    private Long agencyId;
+
+    private Long merchantId;
+
+    private Long personageId;
+
+    @ApiModelProperty(value = "级别(省,市,终端);")
+    private Integer type;
+
+    @ApiModelProperty(value = "报警是否消除;0:没有,1:已消除")
+    private Integer isEliminate;
+
+
+}

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

@@ -43,6 +43,8 @@ public class TCoinOrder implements Serializable {
 
     private String productName;
 
+    private String productNo;
+
     private String es;
 
     private Date payDate;

+ 93 - 0
src/main/java/com/szwl/model/entity/TEquipmentDesc.java

@@ -0,0 +1,93 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TEquipmentDesc对象", description="")
+public class TEquipmentDesc implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "equipment_id", type = IdType.ASSIGN_ID)
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "花型数量;")
+    private String flowers;
+
+    /**
+     *白糖
+     */
+    @ApiModelProperty(value = "白糖;")
+    private String whiteSugar;
+
+    /**
+     *红糖
+     */
+    @ApiModelProperty(value = "红糖;")
+    private String redSugar;
+
+    /**
+     黄糖
+     blueSugar:蓝糖
+     stick:棍
+     water:水
+     wasteWater:废水
+     */
+    @ApiModelProperty(value = "黄糖;")
+    private String yellowSugar;
+
+    /**
+     * 蓝糖
+     */
+    @ApiModelProperty(value = "蓝糖;")
+    private String blueSugar;
+
+    /**
+     * 棍
+     */
+    @ApiModelProperty(value = "棍;")
+    private String stick;
+
+    /**
+     * 水
+     */
+    @ApiModelProperty(value = "水;")
+    private String water;
+
+    /**
+     * 废水
+     */
+    @ApiModelProperty(value = "废水;")
+    private String wasteWater;
+
+    /**
+     * 是否启用物料监控功能,0:不启用,1:启用
+     */
+    @ApiModelProperty(value = "是否启用物料监控功能;")
+    private String isMaterialUse;
+
+    /**
+     * 当前机器购物车模式,0:原始模式,1:第二件半价
+     */
+    @ApiModelProperty(value = "当前机器购物车模式;")
+    private String payType;
+
+
+
+}

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

@@ -61,6 +61,8 @@ public class TOrder implements Serializable {
 
     private String productName;
 
+    private String productNo;
+
     private Date refundDate;
 
     private String sn;

+ 42 - 0
src/main/java/com/szwl/model/entity/TPrice.java

@@ -0,0 +1,42 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 金额表(如一个优惠码多少钱)
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-06-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TPrice对象", description="金额表(如一个优惠码多少钱)")
+public class TPrice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "名称;")
+    private String name;
+
+    @ApiModelProperty(value = "金额;")
+    private Double price;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+
+}

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

@@ -0,0 +1,68 @@
+package com.szwl.model.query;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * 订单统计
+ */
+public class OrderStatisticsDTO implements Comparable<OrderStatisticsDTO> {
+
+    /**
+     * 时间
+     */
+
+    private String sTime;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 销售总金额
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 销售个数
+     */
+    private BigInteger totalNumber;
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public BigDecimal getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(BigDecimal totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public BigInteger getTotalNumber() {
+        return totalNumber;
+    }
+
+    public void setTotalNumber(BigInteger totalNumber) {
+        this.totalNumber = totalNumber;
+    }
+
+    public String getsTime() {
+        return sTime;
+    }
+
+    public void setsTime(String sTime) {
+        this.sTime = sTime;
+    }
+
+    @Override
+    public int compareTo(OrderStatisticsDTO o) {
+        return this.getsTime().compareTo(o.getsTime());
+    }
+}

+ 271 - 0
src/main/java/com/szwl/model/query/Pageable.java

@@ -0,0 +1,271 @@
+/*
+ * 
+ * 
+ * 
+ */
+package com.szwl.model.query;
+
+import com.hboxs.common.Order.Direction;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 分页信息
+ */
+public class Pageable implements Serializable {
+
+    private static final long serialVersionUID = -3930180379790344299L;
+
+    /**
+     * 默认页码
+     */
+    private static final int DEFAULT_PAGE_NUMBER = 1;
+
+    /**
+     * 默认每页记录数
+     */
+    private static final int DEFAULT_PAGE_SIZE = 20;
+
+    /**
+     * 最大每页记录数
+     */
+    private static final int MAX_PAGE_SIZE = 1000;
+
+    /**
+     * 页码
+     */
+    private int pageNumber = DEFAULT_PAGE_NUMBER;
+
+    /**
+     * 每页记录数
+     */
+    private int pageSize = DEFAULT_PAGE_SIZE;
+
+    /**
+     * 搜索属性
+     */
+    private String searchProperty;
+
+    /**
+     * 搜索值
+     */
+    private String searchValue;
+
+    /**
+     * 排序属性
+     */
+    private String orderProperty;
+
+    /**
+     * 排序方向
+     */
+    private Direction orderDirection;
+
+    /**
+     * 筛选
+     */
+    private List<Filter> filters = new ArrayList<Filter>();
+
+    /**
+     * 排序
+     */
+    private List<Order> orders = new ArrayList<Order>();
+
+    /**
+     * 初始化一个新创建的Pageable对象
+     */
+    public Pageable() {
+    }
+
+    /**
+     * 初始化一个新创建的Pageable对象
+     *
+     * @param pageNumber 页码
+     * @param pageSize   每页记录数
+     */
+    public Pageable(Integer pageNumber, Integer pageSize) {
+        if (pageNumber != null && pageNumber >= 1) {
+            this.pageNumber = pageNumber;
+        }
+        if (pageSize != null && pageSize >= 1 && pageSize <= MAX_PAGE_SIZE) {
+            this.pageSize = pageSize;
+        }
+    }
+
+    /**
+     * 获取页码
+     *
+     * @return 页码
+     */
+    public int getPageNumber() {
+        return pageNumber;
+    }
+
+    /**
+     * 设置页码
+     *
+     * @param pageNumber 页码
+     */
+    public void setPageNumber(int pageNumber) {
+        if (pageNumber < 1) {
+            pageNumber = DEFAULT_PAGE_NUMBER;
+        }
+        this.pageNumber = pageNumber;
+    }
+
+    /**
+     * 获取每页记录数
+     *
+     * @return 每页记录数
+     */
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    /**
+     * 设置每页记录数
+     *
+     * @param pageSize 每页记录数
+     */
+    public void setPageSize(int pageSize) {
+        if (pageSize < 1 || pageSize > MAX_PAGE_SIZE) {
+            pageSize = DEFAULT_PAGE_SIZE;
+        }
+        this.pageSize = pageSize;
+    }
+
+    /**
+     * 获取搜索属性
+     *
+     * @return 搜索属性
+     */
+    public String getSearchProperty() {
+        return searchProperty;
+    }
+
+    /**
+     * 设置搜索属性
+     *
+     * @param searchProperty 搜索属性
+     */
+    public void setSearchProperty(String searchProperty) {
+        this.searchProperty = searchProperty;
+    }
+
+    /**
+     * 获取搜索值
+     *
+     * @return 搜索值
+     */
+    public String getSearchValue() {
+        return searchValue;
+    }
+
+    /**
+     * 设置搜索值
+     *
+     * @param searchValue 搜索值
+     */
+    public void setSearchValue(String searchValue) {
+        this.searchValue = searchValue;
+    }
+
+    /**
+     * 获取排序属性
+     *
+     * @return 排序属性
+     */
+    public String getOrderProperty() {
+        return orderProperty;
+    }
+
+    /**
+     * 设置排序属性
+     *
+     * @param orderProperty 排序属性
+     */
+    public void setOrderProperty(String orderProperty) {
+        this.orderProperty = orderProperty;
+    }
+
+    /**
+     * 获取排序方向
+     *
+     * @return 排序方向
+     */
+    public Direction getOrderDirection() {
+        return orderDirection;
+    }
+
+    /**
+     * 设置排序方向
+     *
+     * @param orderDirection 排序方向
+     */
+    public void setOrderDirection(Direction orderDirection) {
+        this.orderDirection = orderDirection;
+    }
+
+    /**
+     * 获取筛选
+     *
+     * @return 筛选
+     */
+    public List<Filter> getFilters() {
+        if(filters==null) return new ArrayList<>();
+        return filters;
+    }
+
+    /**
+     * 设置筛选
+     *
+     * @param filters 筛选
+     */
+    public void setFilters(List<Filter> filters) {
+        this.filters = filters;
+    }
+
+    /**
+     * 获取排序
+     *
+     * @return 排序
+     */
+    public List<Order> getOrders() {
+        return orders;
+    }
+
+    /**
+     * 设置排序
+     *
+     * @param orders 排序
+     */
+    public void setOrders(List<Order> orders) {
+        this.orders = orders;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        if (this == obj) {
+            return true;
+        }
+        Pageable other = (Pageable) obj;
+        return new EqualsBuilder().append(getPageNumber(), other.getPageNumber()).append(getPageSize(), other.getPageSize()).append(getSearchProperty(), other.getSearchProperty()).append(getSearchValue(), other.getSearchValue()).append(getOrderProperty(), other.getOrderProperty()).append(getOrderDirection(), other.getOrderDirection()).append(getFilters(), other.getFilters())
+                .append(getOrders(), other.getOrders()).isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 37).append(getPageNumber()).append(getPageSize()).append(getSearchProperty()).append(getSearchValue()).append(getOrderProperty()).append(getOrderDirection()).append(getFilters()).append(getOrders()).toHashCode();
+    }
+
+}

+ 55 - 0
src/main/java/com/szwl/model/query/StatisticsParam.java

@@ -0,0 +1,55 @@
+package com.szwl.model.query;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Accessors(chain = true)
+@NoArgsConstructor
+@Getter
+@Setter
+@ToString
+public class StatisticsParam {
+    @ApiModelProperty(value="商家id")
+    private String adminId;
+
+    @ApiModelProperty(value="设备id")
+    private String equipmentId;
+    @ApiModelProperty(value="开关炉头,开机为1,关机为0")
+    private String eqeStatus;
+    @ApiModelProperty(value="代理商id")
+    private Long agencyId;
+
+    @ApiModelProperty(value="经销商id")
+    private Long merchantId;
+
+    @ApiModelProperty(value="地址id")
+    private List<Long> areaIds;
+
+    @ApiModelProperty(value="开始日期")
+    private String startDate;
+
+    @ApiModelProperty(value="结束日期")
+    private String endDate;
+
+    @ApiModelProperty(value="统计类型")
+    private String chartType;
+
+    @ApiModelProperty(value="支付类型")
+    private String payType;
+
+    @ApiModelProperty(value="统计类型")
+    private String changeType;
+
+    @ApiModelProperty(value="是否外国")
+    private String ifForeign = "0";
+
+    @ApiModelProperty(value="第几次查询")
+    private String test = "1";
+}

+ 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;
+/*==================================以上是自动生成部分字段======================================*/
+	
+}

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

@@ -0,0 +1,65 @@
+/**
+ * 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 = "主键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;
+/*==================================以上是自动生成部分字段======================================*/
+
+}

+ 117 - 0
src/main/java/com/szwl/model/utils/Base64Util.java

@@ -0,0 +1,117 @@
+package com.szwl.model.utils;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * base64 format encoding & decoding
+ */
+public class Base64Util {
+	private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
+			'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
+			'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
+			'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+			'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+			'4', '5', '6', '7', '8', '9', '+', '/' };
+
+	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+			-1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
+			60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+			10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
+			-1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+			38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
+			-1, -1 };
+
+	private Base64Util(){
+	}
+
+	public static String encode(byte[] data){
+		StringBuffer sb = new StringBuffer();
+		int len = data.length;
+		int i = 0;
+		int b1, b2, b3;
+
+		while (i < len) {
+			b1 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
+				sb.append("==");
+				break;
+			}
+			b2 = data[i++] & 0xff;
+			if (i == len) {
+				sb.append(base64EncodeChars[b1 >>> 2]);
+				sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+						| ((b2 & 0xf0) >>> 4)]);
+				sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
+				sb.append("=");
+				break;
+			}
+			b3 = data[i++] & 0xff;
+			sb.append(base64EncodeChars[b1 >>> 2]);
+			sb.append(base64EncodeChars[((b1 & 0x03) << 4)
+					| ((b2 & 0xf0) >>> 4)]);
+			sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
+					| ((b3 & 0xc0) >>> 6)]);
+			sb.append(base64EncodeChars[b3 & 0x3f]);
+		}
+		return sb.toString();
+	}
+
+	public static byte[] decode(String str){
+		byte[] data = str.getBytes();
+		int len = data.length;
+		ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
+		int i = 0;
+		int b1, b2, b3, b4;
+
+		while (i < len) {
+
+			/* b1 */
+			do {
+				b1 = base64DecodeChars[data[i++]];
+			} while (i < len && b1 == -1);
+			if (b1 == -1) {
+				break;
+			}
+
+			/* b2 */
+			do {
+				b2 = base64DecodeChars[data[i++]];
+			} while (i < len && b2 == -1);
+			if (b2 == -1) {
+				break;
+			}
+			buf.write(((b1 << 2) | ((b2 & 0x30) >>> 4)));
+
+			/* b3 */
+			do {
+				b3 = data[i++];
+				if (b3 == 61) {
+					return buf.toByteArray();
+				}
+				b3 = base64DecodeChars[b3];
+			} while (i < len && b3 == -1);
+			if (b3 == -1) {
+				break;
+			}
+			buf.write((((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
+
+			/* b4 */
+			do {
+				b4 = data[i++];
+				if (b4 == 61) {
+					return buf.toByteArray();
+				}
+				b4 = base64DecodeChars[b4];
+			} while (i < len && b4 == -1);
+			if (b4 == -1) {
+				break;
+			}
+			buf.write((((b3 & 0x03) << 6) | b4));
+		}
+		return buf.toByteArray();
+	}
+}

+ 17 - 0
src/main/java/com/szwl/model/utils/CodeUtil.java

@@ -0,0 +1,17 @@
+package com.szwl.model.utils;
+
+/**
+ * 编解码工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class CodeUtil {
+
+    public static String base64Encode(byte[] value) {
+        return Base64Util.encode(value);
+    }
+
+    public static byte[] base64Decode(String value) {
+        return Base64Util.decode(value);
+    }
+}

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

@@ -0,0 +1,266 @@
+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_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;
+  }
+}

+ 85 - 0
src/main/java/com/szwl/model/utils/HEXUtil.java

@@ -0,0 +1,85 @@
+package com.szwl.model.utils;
+
+import com.szwl.model.utils.constants.CommonConst;
+import com.szwl.model.utils.exceptions.JPException;
+
+/**
+ * 16进制工具类
+ * @author chenyf
+ * @date 2018-12-15
+ */
+public class HEXUtil {
+    private static final char[] DIGITS_LOWER =
+            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    private static final char[] DIGITS_UPPER =
+            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+
+    public static String encode(String str){
+        try{
+            return encode(str.getBytes(CommonConst.ENCODING_UTF_8), true);
+        }catch (Exception e){
+            throw new JPException("16进制转换失败", e);
+        }
+    }
+
+    public static String encode(byte[] data, final boolean toUpperCase){
+        return bytes2Hex(data, toUpperCase ? DIGITS_UPPER : DIGITS_LOWER);
+    }
+
+    public static String decode(String str){
+        try{
+            byte[] date = hex2Bytes(str);
+            return new String(date, CommonConst.ENCODING_UTF_8);
+        }catch (Exception e){
+            throw new JPException("16进制转换失败", e);
+        }
+    }
+
+    private static String bytes2Hex(final byte[] data, final char[] toDigits) {
+        final int l = data.length;
+        final char[] out = new char[l << 1];
+        // two characters form the hex value.
+        for (int i = 0, j = 0; i < l; i++) {
+            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
+            out[j++] = toDigits[0x0F & data[i]];
+        }
+        return new String(out);
+    }
+
+    private static byte[] hex2Bytes(final String data) throws Exception {
+        final int len = data.length();
+
+        if ((len & 0x01) != 0) {
+            throw new Exception("Odd number of characters.");
+        }
+
+        final byte[] out = new byte[len >> 1];
+
+        // two characters form the hex value.
+        for (int i = 0, j = 0; j < len; i++) {
+            int f = toDigit(data.charAt(j), j) << 4;
+            j++;
+            f = f | toDigit(data.charAt(j), j);
+            j++;
+            out[i] = (byte) (f & 0xFF);
+        }
+        return out;
+    }
+
+    /**
+     * 16转化为数字
+     * @param ch 16进制
+     * @param index 索引
+     * @return 转化结果
+     * @throws Exception 转化失败异常
+     */
+    private static int toDigit(final char ch, final int index) throws Exception {
+        final int digit = Character.digit(ch, 16);
+        if (digit == -1) {
+            throw new Exception("Illegal hexadecimal character " + ch + " at index " + index);
+        }
+        return digit;
+    }
+}

+ 136 - 0
src/main/java/com/szwl/model/utils/JsonUtils.java

@@ -0,0 +1,136 @@
+/*
+ * 
+ * 
+ * 
+ */
+package com.szwl.model.utils;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gexin.fastjson.JSONObject;
+import com.gexin.fastjson.serializer.SimplePropertyPreFilter;
+import org.springframework.util.Assert;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Utils - JSON
+ */
+public final class JsonUtils {
+
+    /**
+     * ObjectMapper
+     */
+    private static ObjectMapper mapper = new ObjectMapper();
+
+    /**
+     * 不可实例化
+     */
+    private JsonUtils() {
+    }
+
+    /**
+     * 将对象转换为JSON字符串
+     *
+     * @param value 对象
+     * @return JSOn字符串
+     */
+    public static String toJson(Object value) {
+        try {
+            return mapper.writeValueAsString(value);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将JSON字符串转换为对象
+     *
+     * @param json      JSON字符串
+     * @param valueType 对象类型
+     * @return 对象
+     */
+    public static <T> T toObject(String json, Class<T> valueType) {
+        Assert.hasText(json);
+        Assert.notNull(valueType);
+        try {
+            return mapper.readValue(json, valueType);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将对象转成JSON
+     *
+     * @param object 对象
+     * @param attrs  包含的属性值
+     * @return 对象
+     */
+    public static String toString(Object object, String... attrs) {
+        SimplePropertyPreFilter filter = new SimplePropertyPreFilter(object.getClass(), attrs);
+        return JSONObject.toJSONString(object, filter);
+    }
+
+    /**
+     * 将JSON字符串转换为对象
+     *
+     * @param json          JSON字符串
+     * @param typeReference 对象类型
+     * @return 对象
+     */
+    public static <T> T toObject(String json, TypeReference<?> typeReference) {
+        Assert.hasText(json);
+        Assert.notNull(typeReference);
+        try {
+            return mapper.readValue(json, typeReference);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将JSON字符串转换为对象
+     *
+     * @param json     JSON字符串
+     * @param javaType 对象类型
+     * @return 对象
+     */
+    public static <T> T toObject(String json, JavaType javaType) {
+        Assert.hasText(json);
+        Assert.notNull(javaType);
+        try {
+            return mapper.readValue(json, javaType);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 将对象转换为JSON流
+     *
+     * @param writer writer
+     * @param value  对象
+     */
+    public static void writeValue(Writer writer, Object value) {
+        try {
+            mapper.writeValue(writer, value);
+        } catch (JsonGenerationException e) {
+            e.printStackTrace();
+        } catch (JsonMappingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 293 - 0
src/main/java/com/szwl/model/utils/PushUtils.java

@@ -0,0 +1,293 @@
+package com.szwl.model.utils;
+
+import com.gexin.rp.sdk.base.impl.SingleMessage;
+import com.gexin.rp.sdk.base.impl.Target;
+import com.gexin.rp.sdk.base.payload.APNPayload;
+import com.gexin.rp.sdk.exceptions.RequestException;
+import com.gexin.rp.sdk.http.IGtPush;
+import com.gexin.rp.sdk.template.TransmissionTemplate;
+import org.json.JSONObject;
+
+import java.util.List;
+
+/**
+ * Created by dinfeng on 2017/12/21
+ * 个推工具类
+ */
+public class PushUtils {
+
+
+    public final static String appId = "GKa6qa12heALjEXZlAn1U3";
+
+    public final static String appKey = "fLvPjR8hni7VFMkgjh8lx2";
+
+    public final static String masterSecret = "KjxrC6vTLr5wiZu55cCnS8";
+
+    public final static String host = "http://sdk.open.api.igexin.com/apiex.htm";
+
+//    public  static IPushResult rets =null;
+
+    public static String test_clientId = "c69869085580f3b77f2972403fbdd5b3";
+    public static String test_clientId2 = "200cb24ae7af3c4096cc2c46569ed530";
+
+
+    final static IGtPush push = new IGtPush(host, appKey, masterSecret);
+
+//    private static EquipmentService equipmentService;
+//
+//    @Autowired
+//    public PushUtils(EquipmentService equipmentService) {
+//        PushUtils.equipmentService = equipmentService;
+//    }
+//    private static RabbitTemplate rabbitTemplate;
+//
+//    @Autowired
+//    public PushUtils(RabbitTemplate rabbitTemplate) {
+//        PushUtils.rabbitTemplate = rabbitTemplate;
+//    }
+
+    /**
+     * 个推发送信息
+     *
+     * @param clientIds   设备号数组
+     * @param title
+     * @param information 信息
+     * @param json        业务id
+     */
+    public static void push(List<String> clientIds, String title, String information, String json) {
+
+
+        TransmissionTemplate transmissionTemplate = getTemplate(title, information, json);
+        //推送ios
+        final SingleMessage iMessage = new SingleMessage();
+        iMessage.setOffline(true);
+        // 离线有效时间,单位为毫秒,可选
+        iMessage.setOfflineExpireTime(24 * 3600 * 1000);
+        iMessage.setData(transmissionTemplate);
+        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
+        iMessage.setPushNetWorkType(0);
+
+        //个推
+        for (String clientId : clientIds) {
+            final Target target = new Target();
+            target.setAppId(appId);
+            target.setClientId(clientId);
+
+            try {
+
+                new Thread(new Runnable() {
+//                    IPushResult ret = null;
+                    @Override
+                    public void run() {
+//                        ret = push.pushMessageToSingle(iMessage, target);
+                         push.pushMessageToSingle(iMessage, target);
+//                        rets = ret;
+                    }
+
+
+                }).start();
+
+            } catch (RequestException e) {
+                e.printStackTrace();
+                push.pushMessageToSingle(iMessage, target, e.getRequestId());
+            }
+        }
+    }
+
+
+    /**
+     * 个推发送信息
+     *
+     * @param clientId    设备号数组
+     * @param information 信息
+     * @param json        业务id
+     */
+    public static void push(String clientId, String title, String information, String json) {
+//        String type = "1";
+//        if(StringUtils.isNotEmpty(title)){
+//            type = title;
+//        }
+////        List<Filter> filters = new ArrayList<>();
+////        filters.add(Filter.eq("gtClientId", clientId));
+////        List<Equipment> list = equipmentService.findList(null, filters, null);
+////        if(list.size()>0){
+////            for(Equipment equipment:list){
+////                String channel = equipment.getChannel();
+////                String equimentType = equipment.getEquimentType();
+////                String client = equipment.getClientId();
+////                String substring = client.substring(client.length() - 1);
+////                if(substring.equals("x")){
+////                    break;
+////                }
+////                if(StringUtils.isEmpty(channel)||channel.equals("1")||StringUtils.isEmpty(equimentType)){
+////                    //用个推
+////                    type = "1";
+////                }
+////                if(channel.equals("2")||StringUtils.isNotEmpty(equimentType)){
+////                    //用mq
+////                    type = "2";
+////                    //1 创建消息
+////                    MessageProperties messageProperties = new MessageProperties();
+////                    messageProperties.setContentType("text/plain");
+////                    //设置消息的过期时间,60秒
+//////        messageProperties.setExpiration("60000");
+////                    Message message = new Message(json.getBytes(), messageProperties);
+////
+////                    rabbitTemplate.send(equimentType, client, message);
+////                }
+////            }
+////        }
+//        if(type.equals("2")){
+//            String[] split = information.split(":");
+//            String equimentType = split[0];
+//            String client = split[1];
+//            //1 创建消息
+//            MessageProperties messageProperties = new MessageProperties();
+//            messageProperties.setContentType("text/plain");
+//            //设置消息的过期时间,60秒
+////        messageProperties.setExpiration("60000");
+//            Message message = new Message(json.getBytes(), messageProperties);
+//            rabbitTemplate.convertAndSend(equimentType, client, message);
+////            rabbitTemplate.send(equimentType, client, message);
+//        }
+//
+//        if(type.equals("1")){
+//            TransmissionTemplate transmissionTemplate = getTemplate(title, information, json);
+//            //推送ios
+//            final SingleMessage iMessage = new SingleMessage();
+//            iMessage.setOffline(true);
+//            // 离线有效时间,单位为毫秒,可选
+//            iMessage.setOfflineExpireTime(24 * 3600 * 1000);
+//            iMessage.setData(transmissionTemplate);
+//            // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
+//            iMessage.setPushNetWorkType(0);
+//
+//
+//            //个推
+//            final Target target = new Target();
+//            target.setAppId(appId);
+//            target.setClientId(clientId);
+//            try {
+//
+//                new Thread(new Runnable() {
+//
+//                    @Override
+//                    public void run() {
+//                        push.pushMessageToSingle(iMessage, target);
+//                    }
+//
+//
+//                }).start();
+//
+//            } catch (RequestException e) {
+//                e.printStackTrace();
+//                push.pushMessageToSingle(iMessage, target, e.getRequestId());
+//            }
+//        }
+        TransmissionTemplate transmissionTemplate = getTemplate(title, information, json);
+        //推送ios
+        final SingleMessage iMessage = new SingleMessage();
+        iMessage.setOffline(true);
+        // 离线有效时间,单位为毫秒,可选
+        iMessage.setOfflineExpireTime(24 * 3600 * 1000);
+        iMessage.setData(transmissionTemplate);
+        // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
+        iMessage.setPushNetWorkType(0);
+
+
+        //个推
+        final Target target = new Target();
+        target.setAppId(appId);
+        target.setClientId(clientId);
+        try {
+
+            new Thread(new Runnable() {
+
+                @Override
+                public void run() {
+                    push.pushMessageToSingle(iMessage, target);
+                }
+
+
+            }).start();
+
+        } catch (RequestException e) {
+            e.printStackTrace();
+            push.pushMessageToSingle(iMessage, target, e.getRequestId());
+        }
+    }
+
+    /**
+     * 苹果使用透传消息,通过设置payload信息,实现待机时的推送提醒;
+     * 对安卓来说就是没有payload的概念,所以需要去解析透传的消息,把title和body放在透传消息中
+     */
+    private static TransmissionTemplate getTemplate(String title, String msg, String json) {
+        title = title == null ? "" : title;
+        msg = msg == null ? "" : msg;
+        TransmissionTemplate template = new TransmissionTemplate();
+        template.setAppId(appId);
+        template.setAppkey(appKey);
+        template.setTransmissionContent(json);
+        template.setTransmissionType(2);
+        APNPayload payload = new APNPayload();
+        //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
+        payload.setAutoBadge("+1");
+        payload.setContentAvailable(0);
+        payload.setSound("default");
+        payload.setCategory("$由客户端定义");
+        payload.addCustomMsg("payload",json);//好假
+
+        //字典模式使用APNPayload.DictionaryAlertMsg
+        //payload.setAlertMsg(getDictionaryAlertMsg(msg, title));
+
+        template.setAPNInfo(payload);
+        return template;
+    }
+
+    private static APNPayload.DictionaryAlertMsg getDictionaryAlertMsg(String msg, String title) {
+        APNPayload.DictionaryAlertMsg alertMsg = new APNPayload.DictionaryAlertMsg();
+        alertMsg.setBody(msg);//通知小内容
+        alertMsg.setActionLocKey("ActionLockey");
+        alertMsg.setLocKey("LocKey");
+        alertMsg.addLocArg("loc-args");
+        alertMsg.setLaunchImage("launch-image");
+
+        // iOS8.2以上版本支持
+        alertMsg.setTitle(title);//通知标题
+        alertMsg.setTitleLocKey("");
+        alertMsg.addTitleLocArg("");
+        return alertMsg;
+    }
+
+
+    public static JSONObject buildJson(String kind, String kindData) {
+        JSONObject jsonObject = new JSONObject();
+        if (kind != null) {
+            jsonObject.put("kind", kind);
+            jsonObject.put("kind_data", kindData);
+        }else{
+            jsonObject.put("kind", "");
+            jsonObject.put("kind_data", "");
+        }
+        return jsonObject;
+    }
+    public static JSONObject buildJson(String kind, String kindData,String netTime,String webTime) {
+        JSONObject jsonObject = new JSONObject();
+        if (kind != null) {
+            jsonObject.put("kind", kind);
+            jsonObject.put("kind_data", kindData);
+            jsonObject.put("netTime", netTime);
+            jsonObject.put("webTime", webTime);
+        }else{
+            jsonObject.put("kind", "");
+            jsonObject.put("kind_data", "");
+            jsonObject.put("netTime", "");
+            jsonObject.put("webTime", "");
+        }
+        return jsonObject;
+    }
+
+//    public static void main(String[] args) {
+//        push("71963777bd63e0f0a5b6490f04bf1ae4", "niai", "123", buildJson("editNo", "123456789").toString());
+//    }
+}

+ 14 - 0
src/main/java/com/szwl/model/utils/constants/Algorithm.java

@@ -0,0 +1,14 @@
+package com.szwl.model.utils.constants;
+
+/**
+ * 加解密运算时的逻辑算法名常量类
+ * @author: chenyf
+ * @Date: 2018-12-15
+ */
+public class Algorithm {
+    public final static String MD5 = "MD5";
+    public final static String AES = "AES";
+    public final static String RSA = "RSA";
+
+
+}

+ 12 - 0
src/main/java/com/szwl/model/utils/constants/CommonConst.java

@@ -0,0 +1,12 @@
+package com.szwl.model.utils.constants;
+
+/**
+ * 公共常量类
+ * @author: chenyf
+ * @Date: 2018-12-15
+ */
+public class CommonConst {
+    public static final String ENCODING_UTF_8 = "UTF-8";
+
+    public static final String AES_KEY_SEPARATOR = ":";
+}

+ 12 - 0
src/main/java/com/szwl/model/utils/exceptions/JPException.java

@@ -0,0 +1,12 @@
+package com.szwl.model.utils.exceptions;
+
+public class JPException extends RuntimeException {
+
+    public JPException(String message) {
+        super(message);
+    }
+
+    public JPException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}

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

@@ -2,6 +2,10 @@ package com.szwl.service;
 
 import com.szwl.model.entity.TCoinOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.szwl.model.query.OrderStatisticsDTO;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface TCoinOrderService extends IService<TCoinOrder> {
 
+    List<OrderStatisticsDTO> findTotalByTime(String clientId, Date date1, Date date2);
 }

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

@@ -0,0 +1,21 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TEquipment;
+
+
+/**
+ * <p>
+ * 设备表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-19
+ */
+public interface TEquipmentService {
+    /**
+     * 发送信息,1:个推,2:MQ
+     */
+    public String sentMessage(String clientId, String json);
+
+
+}

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

@@ -0,0 +1,186 @@
+package com.szwl.service.es;
+
+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.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.beans.factory.annotation.Autowired;
+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 EsTCoinOrderService extends EsBaseService<TCoinOrder, TCoinOrderParam> {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 10000;
+    @Autowired
+    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();
+                    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 现有的数据
+//        TCoinOrderExample example = new TCoinOrderExample();
+//        TCoinOrderExample.Criteria criteria = example.createCriteria();
+//        criteria.andCreateDateGreaterThanOrEqualTo(start);
+//        criteria.andCreateDateLessThanOrEqualTo(end);
+//        criteria.andEsEqualTo("1");
+//        List<TCoinOrder> list_es = tCoinOrderService.selectByOption(example);
+        LambdaQueryWrapper<TCoinOrder> query = Wrappers.lambdaQuery();
+        query.gt(TCoinOrder::getCreateDate,start);
+        query.lt(TCoinOrder::getCreateDate,end);
+        List<TCoinOrder> list_es = tCoinOrderService.list(query);
+        if (CollectionUtils.isNotEmpty(list_es)) {
+//            insertBatch(list_es);
+            if(list_es.size()>0){
+                for(TCoinOrder coinOrder : list_es){
+                    try {
+                        updateDataById(coinOrder);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+        }
+    }
+}

+ 352 - 0
src/main/java/com/szwl/service/es/EsTEquipmentService.java

@@ -0,0 +1,352 @@
+package com.szwl.service.es;
+
+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.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.TEquipmentService;
+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.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.beans.factory.annotation.Autowired;
+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 EsTEquipmentService extends EsBaseService<TEquipment, TEquipmentParam> {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 10000;
+    @Autowired
+    TEquipmentService tEquipmentService;
+    @Autowired
+    EsTCoinOrderService esTCoinOrderService;
+    @Autowired
+    EsTOrderService esTOrderService;
+
+    @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;
+    }
+
+//    @Override
+//    public TEquipment setEntityPrimaryKey(TEquipment tEquipment, String value) {
+//        return tEquipment.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 现有的数据,删除
+//            TEquipmentParam param = new TEquipmentParam();
+//            param.setCreateDate_start(start);
+//            param.setCreateDate_end(end);
+//            List<TEquipment> list_es = this.selectEntityByEqualToOption(param);
+//            for (TEquipment entity : list_es) {
+//                this.deleteTableById(String.valueOf(entity.getId()));
+//            }
+//            // 插入 新的
+////            TEquipmentExample equipmentExample = new TEquipmentExample();
+////            TEquipmentExample.Criteria criteria =equipmentExample.createCriteria();
+////            criteria.andCreateDateBetween(start,end);
+////            List<TEquipment> list = tEquipmentService.selectByOption(equipmentExample);
+//            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+//            query.gt(TEquipment::getCreateDate,start);
+//            query.lt(TEquipment::getCreateDate,end);
+//            List<TEquipment> list = tEquipmentService.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 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);
+//
+//        tOrderParam.setCreateDate_start(start);
+//        tOrderParam.setCreateDate_end(end);
+//        if(StringUtils.isNotEmpty(param.getAdminId())){ // 所属商家id
+//            tOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+//        }
+//
+//        boolQueryBuilder = esTOrderService.getParam2QueryBuilder(tOrderParam);
+//        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();
+//            List<Long> list = new ArrayList<>();
+//            for(String e:equipmentIdList){
+//                list.add(Long.valueOf(e));
+//            }
+////        TEquipmentParam tEquipmentParam = new TEquipmentParam();
+////        tEquipmentParam.setId_inList(equipmentIdList);
+////        List<TEquipment> equipmentList = this.selectEntityByEqualToOption(tEquipmentParam);
+////            TEquipmentExample exampe = new TEquipmentExample();
+////            TEquipmentExample.Criteria criteria = exampe.createCriteria();
+////            criteria.andIdIn(list);
+////            List<TEquipment> tEquipments = tEquipmentService.selectByOption(exampe);
+//            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+//            query.in(TEquipment::getId,list);
+//            List<TEquipment> tEquipments = tEquipmentService.list(query);
+//            ArrayList<String> categories_final = new ArrayList<>();
+//            for (String equipmentId : equipmentIdList) {
+//                String finalCategories =  equipmentId;
+////            Optional<TEquipment> op = equipmentList.stream().filter(
+//                Optional<TEquipment> op = tEquipments.stream().filter(
+//                        e ->{
+//                            return StringUtils.equals(String.valueOf(e.getId()),equipmentId);
+//                        }
+//                ).findFirst();
+//                if(op.isPresent()){
+//                    TEquipment equipment = op.get();
+//                    if(StringUtils.isNotEmpty(equipment.getName())){
+//                        finalCategories = equipment.getName();
+//                    }else{
+//                        finalCategories = equipment.getClientId().substring(equipment.getClientId().length()-6,equipment.getClientId().length());
+//                    }
+//                }
+//                categories_final.add(finalCategories);
+//            }
+//            chartColumn.setCategories(categories_final);
+//
+//            return chartColumn;
+//        }
+        return null;
+    }
+    /**
+     * 统计 国外
+     * @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.setCreateDate_end(end);
+        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);
+            termsAggregationBuilder.size(30); // 聚合后 返回前30条 记录
+            termsAggregationBuilder.order(BucketOrder.compound(
+                BucketOrder.aggregation(aggSumName,false)//先按sales,降序排
+            ));
+            // 根据字段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形式)
+    }
+
+}

+ 364 - 0
src/main/java/com/szwl/service/es/EsTOrderService.java

@@ -0,0 +1,364 @@
+package com.szwl.service.es;
+
+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.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.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.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.stream.Collectors;
+
+@Slf4j
+@Service
+public class EsTOrderService extends EsBaseService<TOrder, TOrderParam> {
+    private static boolean InitEsTableStatus = false; // 是否正常完成 es 初始化
+    public static final int MAX_ROW = 10000;
+    @Autowired
+    TOrderService tOrderService;
+    @Autowired
+    EsTEquipmentService esTEquipmentService;
+    @Autowired
+    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();
+                    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 (null != param.getAgencyId()){
+                tOrderParam.setAgencyId(param.getAgencyId());
+                tOrderParam.setType_gt(1);
+            }
+            if(null != param.getMerchantId()){
+                tOrderParam.setMerchantId(param.getMerchantId());
+                tOrderParam.setType_gt(2);
+            }
+
+            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(StringUtils.isNotEmpty(param.getAdminId())){ // 所属商家id
+                tCoinOrderParam.setAdminId(Long.parseLong(param.getAdminId()));
+            }
+            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点";
+            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"; //  仅为名称,用以获取返回结果
+
+            //Bool查询
+            BoolQueryBuilder queryBuilder = getStatisticsParam2QueryBuilder(param);
+            // 时间聚合
+            AggregationBuilder dateHistogram = AggregationBuilders.dateHistogram(aggregationResultName)
+                    .field("createDate")
+                    .calendarInterval(interval)
+                    .format(format);
+
+            // 根据字段price 求和 sum, sales 仅为名称,用以获取返回结果
+            SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum(aggSumName).field("price");
+            dateHistogram.subAggregation(sumAggregationBuilder);
+            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()));
+//                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 现有的数据
+//        TOrderExample example = new TOrderExample();
+//        TOrderExample.Criteria criteria = example.createCriteria();
+//        criteria.andCreateDateGreaterThanOrEqualTo(start);
+//        criteria.andCreateDateLessThanOrEqualTo(end);
+//        criteria.andEsEqualTo("1");
+//        List<TOrder> list_es = tOrderService.selectByOption(example);
+        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();
+                    }
+                }
+            }
+        }
+    }
+}

+ 11 - 1
src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java

@@ -2,10 +2,15 @@ package com.szwl.service.impl;
 
 import com.szwl.model.entity.TCoinOrder;
 import com.szwl.mapper.TCoinOrderMapper;
+import com.szwl.model.query.OrderStatisticsDTO;
 import com.szwl.service.TCoinOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -16,5 +21,10 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TCoinOrderServiceImpl extends ServiceImpl<TCoinOrderMapper, TCoinOrder> implements TCoinOrderService {
-
+    @Autowired
+    TCoinOrderMapper tCoinOrderMapper;
+    @Override
+    public List<OrderStatisticsDTO> findTotalByTime(String clientId, Date date1, Date date2) {
+        return tCoinOrderMapper.findTotalByTime( clientId,  date1,  date2);
+    }
 }

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

@@ -0,0 +1,60 @@
+package com.szwl.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.szwl.feign.bean.SzwlFeign;
+import com.szwl.mapper.TEquipmentMapper;
+import com.szwl.model.bo.R;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.query.StatisticsParam;
+import com.szwl.model.utils.PushUtils;
+import com.szwl.service.TEquipmentService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.amqp.core.AmqpTemplate;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 设备表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-19
+ */
+@Service
+public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {
+    @Autowired
+    private AmqpTemplate amqpTemplate;
+
+    @Autowired
+    SzwlFeign szwlFeign;
+    @Override
+    public String sentMessage(String clientId, String json) {
+
+        TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
+        if (equipment == null) {
+            return "该设备不存在";
+        }
+        String channel = equipment.getChannel();
+        String equimentType = equipment.getEquimentType();
+        if(StringUtils.isEmpty(channel)||channel.equals("1")||StringUtils.isEmpty(equimentType)){
+            //用个推
+            PushUtils.push(equipment.getGtClientId(), "", "", json);
+        }
+        if(StringUtils.isNotEmpty(channel)&&channel.equals("2")&&StringUtils.isNotEmpty(equimentType)){
+            //用Mq
+            //1 创建消息
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setContentType("text/plain");
+            org.springframework.amqp.core.Message message = new org.springframework.amqp.core.Message(json.getBytes(), messageProperties);
+            amqpTemplate.send(equimentType, clientId, message);
+        }
+        return "success";
+    }
+
+}

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

@@ -13,7 +13,29 @@ spring:
     username: root
     password: sunzee@020
     driver-class-name: com.mysql.jdbc.Driver
-
+  rabbitmq:
+    addresses: 112.74.63.148:5672,120.78.140.173:5672,47.112.127.131:5672
+    username: zwlzwlzwl
+    password: 123456
+    virtual-host: /
+#    publisher-confirms: true
+    connection-timeout: 5s
+    mandatory: true
+    template.mandatory: true
+    publisher-returns: true
+    cache.channel.size: 1000
+    concurrency: 500
+    max-concurrency: 2000
+    listener.simple.concurrency: 1000
+    listener.simple.max-concurrency: 2000
+elasticSearch:
+  host: 120.78.140.173
+#elasticSearch.host: 10.0.0.155
+  port: 9200
+  client.connectNum: 1000
+  connectPerRoute: 50
+  client.esUserName: elastic
+  client.esPassword: sunzee@020
 server:
   port: 49011
 

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

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