李天标 3 rokov pred
rodič
commit
d31eb063cc
70 zmenil súbory, kde vykonal 8696 pridanie a 4 odobranie
  1. 41 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. 1182 0
      src/main/java/com/szwl/controller/IndexController.java
  6. 21 0
      src/main/java/com/szwl/controller/TCoinOrderController.java
  7. 21 0
      src/main/java/com/szwl/controller/TEquipmentApplyController.java
  8. 107 0
      src/main/java/com/szwl/controller/TEquipmentController.java
  9. 21 0
      src/main/java/com/szwl/controller/TEquipmentDescController.java
  10. 21 0
      src/main/java/com/szwl/controller/TOrderController.java
  11. 21 0
      src/main/java/com/szwl/controller/TParametersController.java
  12. 21 0
      src/main/java/com/szwl/controller/TProductController.java
  13. 16 0
      src/main/java/com/szwl/mapper/TCoinOrderMapper.java
  14. 16 0
      src/main/java/com/szwl/mapper/TEquipmentApplyMapper.java
  15. 16 0
      src/main/java/com/szwl/mapper/TEquipmentDescMapper.java
  16. 16 0
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  17. 16 0
      src/main/java/com/szwl/mapper/TOrderMapper.java
  18. 16 0
      src/main/java/com/szwl/mapper/TParametersMapper.java
  19. 16 0
      src/main/java/com/szwl/mapper/TProductMapper.java
  20. 26 0
      src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml
  21. 27 0
      src/main/java/com/szwl/mapper/xml/TEquipmentApplyMapper.xml
  22. 16 0
      src/main/java/com/szwl/mapper/xml/TEquipmentDescMapper.xml
  23. 64 0
      src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml
  24. 45 0
      src/main/java/com/szwl/mapper/xml/TOrderMapper.xml
  25. 22 0
      src/main/java/com/szwl/mapper/xml/TParametersMapper.xml
  26. 23 0
      src/main/java/com/szwl/mapper/xml/TProductMapper.xml
  27. 27 0
      src/main/java/com/szwl/model/bean/ChartBean.java
  28. 58 0
      src/main/java/com/szwl/model/bean/ChartColumn.java
  29. 25 0
      src/main/java/com/szwl/model/bean/ChartSerie.java
  30. 70 0
      src/main/java/com/szwl/model/bean/CommonParamVo.java
  31. 92 0
      src/main/java/com/szwl/model/bean/EquipmentDTO.java
  32. 191 0
      src/main/java/com/szwl/model/bean/EquipmentVo.java
  33. 100 0
      src/main/java/com/szwl/model/bean/ProductVo.java
  34. 20 0
      src/main/java/com/szwl/model/bo/ChartType.java
  35. 321 0
      src/main/java/com/szwl/model/bo/JsonMessage.java
  36. 136 0
      src/main/java/com/szwl/model/bo/JsonUtils.java
  37. 12 1
      src/main/java/com/szwl/model/entity/TAdmin.java
  38. 63 0
      src/main/java/com/szwl/model/entity/TCoinOrder.java
  39. 175 0
      src/main/java/com/szwl/model/entity/TEquipment.java
  40. 65 0
      src/main/java/com/szwl/model/entity/TEquipmentApply.java
  41. 33 0
      src/main/java/com/szwl/model/entity/TEquipmentDesc.java
  42. 3110 0
      src/main/java/com/szwl/model/entity/TEquipmentExample.java
  43. 120 0
      src/main/java/com/szwl/model/entity/TOrder.java
  44. 50 0
      src/main/java/com/szwl/model/entity/TParameters.java
  45. 54 0
      src/main/java/com/szwl/model/entity/TProduct.java
  46. 54 0
      src/main/java/com/szwl/model/query/StatisticsParam.java
  47. 60 0
      src/main/java/com/szwl/model/query/TCoinOrderParam.java
  48. 68 0
      src/main/java/com/szwl/model/query/TEquipmentParam.java
  49. 65 0
      src/main/java/com/szwl/model/query/TOrderParam.java
  50. 57 0
      src/main/java/com/szwl/model/utils/AdminUtils.java
  51. 266 0
      src/main/java/com/szwl/model/utils/DateUtils.java
  52. 278 0
      src/main/java/com/szwl/model/utils/PushUtils.java
  53. 16 0
      src/main/java/com/szwl/service/TCoinOrderService.java
  54. 16 0
      src/main/java/com/szwl/service/TEquipmentApplyService.java
  55. 16 0
      src/main/java/com/szwl/service/TEquipmentDescService.java
  56. 19 0
      src/main/java/com/szwl/service/TEquipmentService.java
  57. 16 0
      src/main/java/com/szwl/service/TOrderService.java
  58. 16 0
      src/main/java/com/szwl/service/TParametersService.java
  59. 16 0
      src/main/java/com/szwl/service/TProductService.java
  60. 190 0
      src/main/java/com/szwl/service/es/EsTCoinOrderService.java
  61. 354 0
      src/main/java/com/szwl/service/es/EsTEquipmentService.java
  62. 365 0
      src/main/java/com/szwl/service/es/EsTOrderService.java
  63. 20 0
      src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java
  64. 20 0
      src/main/java/com/szwl/service/impl/TEquipmentApplyServiceImpl.java
  65. 20 0
      src/main/java/com/szwl/service/impl/TEquipmentDescServiceImpl.java
  66. 60 0
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  67. 20 0
      src/main/java/com/szwl/service/impl/TOrderServiceImpl.java
  68. 20 0
      src/main/java/com/szwl/service/impl/TParametersServiceImpl.java
  69. 20 0
      src/main/java/com/szwl/service/impl/TProductServiceImpl.java
  70. 32 3
      src/main/resources/bootstrap.yml

+ 41 - 0
pom.xml

@@ -152,6 +152,42 @@
 			<artifactId>hutool-core</artifactId>
 			<version>5.7.16</version>
 		</dependency>
+		<dependency>
+			<groupId>commons-beanutils</groupId>
+			<artifactId>commons-beanutils</artifactId>
+			<version>1.8.3</version>
+		</dependency>
+		<!--<dependency>-->
+			<!--<groupId>org.hibernate</groupId>-->
+			<!--<artifactId>hibernate</artifactId>-->
+			<!--<version>3.6.10</version>-->
+		<!--</dependency>-->
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>3.6.10.Final</version>
+		</dependency>
+		<!-- 个推 -->
+		<dependency>
+			<groupId>com.gexin.platform</groupId>
+			<artifactId>gexin-rp-sdk-http</artifactId>
+			<version>4.0.1.9</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>cn.com.crbank.ommo</groupId>
+			<artifactId>EsBaseServer</artifactId>
+			<version>1.2.10</version>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -166,6 +202,11 @@
 		</plugins>
 	</build>
 	<repositories>
+		<!-- 个推 -->
+		<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/maven-public/</url>

+ 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);
+//	}
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1182 - 0
src/main/java/com/szwl/controller/IndexController.java


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

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 线下支付订单 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@RestController
+@RequestMapping("/tCoinOrder")
+public class TCoinOrderController {
+
+}
+

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

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 设备连接申请表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-21
+ */
+@RestController
+@RequestMapping("/tEquipmentApply")
+public class TEquipmentApplyController {
+
+}
+

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

@@ -0,0 +1,107 @@
+package com.szwl.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.szwl.constant.ResponseCodesEnum;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TMessageCode;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TEquipmentService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 设备表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-19
+ */
+@RestController
+@RequestMapping("/tEquipment")
+public class TEquipmentController {
+    @Autowired
+    TEquipmentService tEquipmentService;
+    @Autowired
+    TAdminService tAdminService;
+
+    /**
+     *
+     * @param adminName 商户的登录名
+     * @param equipmentName 机器名称
+     * @param areaName 地址名-fullName
+     * @return
+     */
+    @ApiOperation(value = "查找机器列表")
+    @PostMapping("/findList")
+    public ResponseModel<IPage<?>> checkForgetCode(Long id, String clientId, String adminName, String equipmentName, String areaName, String eqeStatus, String machineType, String equimentType, String channel,long current,long size ) {
+
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        TAdmin admin = tAdminService.getById(id);
+        Integer type = admin.getType();
+        if(type>1){
+            if(type==2){
+                query.eq(TEquipment::getAdminId,id);
+            }
+            if(type==3){
+                //查找属于这个商家子账户的设备 todo
+            }
+        }
+        if(StringUtils.isNotEmpty(clientId)){
+            query.eq(TEquipment::getClientId,clientId);
+        }
+        if(StringUtils.isNotEmpty(adminName)){
+            LambdaQueryWrapper<TAdmin> adminQuery = Wrappers.lambdaQuery();
+            adminQuery.eq(TAdmin::getUsername,adminName);
+            List<TAdmin> list = tAdminService.list(adminQuery);
+            if(list.size()>0){
+                query.eq(TEquipment::getAdminId,list.get(0).getId());
+            }
+        }
+        if(StringUtils.isNotEmpty(equipmentName)){
+            query.eq(TEquipment::getName,equipmentName);
+        }
+        if(StringUtils.isNotEmpty(areaName)){
+            query.like(TEquipment::getFullName,areaName);
+        }
+        if(StringUtils.isNotEmpty(eqeStatus)){
+            query.eq(TEquipment::getEqeStatus,eqeStatus);
+        }
+        if(StringUtils.isNotEmpty(machineType)){
+            query.eq(TEquipment::getMachineType,machineType);
+        }
+        if(StringUtils.isNotEmpty(equimentType)){
+            query.eq(TEquipment::getEquimentType,equimentType);
+        }
+        if(StringUtils.isNotEmpty(channel)){
+            query.eq(TEquipment::getChannel,channel);
+        }
+        Page<TEquipment> page = new Page<>(current, size, true);
+        IPage<TEquipment> iPage = tEquipmentService.page(page, query);
+        return R.ok(iPage);
+
+    }
+    @ApiOperation(value = "id查找机器详情")
+    @PostMapping("/findById")
+    public ResponseModel<?> findById(Long id) {
+        TEquipment equipment = tEquipmentService.getById(id);
+        return R.ok(equipment);
+    }
+}
+

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

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@RestController
+@RequestMapping("/tEquipmentDesc")
+public class TEquipmentDescController {
+
+}
+

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

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

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

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 机器参数表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@RestController
+@RequestMapping("/tParameters")
+public class TParametersController {
+
+}
+

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

@@ -0,0 +1,21 @@
+package com.szwl.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 商品价格表 前端控制器
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@RestController
+@RequestMapping("/tProduct")
+public class TProductController {
+
+}
+

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 线下支付订单 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TCoinOrderMapper extends BaseMapper<TCoinOrder> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TEquipmentApply;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 设备连接申请表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-21
+ */
+public interface TEquipmentApplyMapper extends BaseMapper<TEquipmentApply> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TEquipmentDesc;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TEquipmentDescMapper extends BaseMapper<TEquipmentDesc> {
+
+}

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

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

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

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

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TParameters;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 机器参数表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TParametersMapper extends BaseMapper<TParameters> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.TProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商品价格表 Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TProductMapper extends BaseMapper<TProduct> {
+
+}

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

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

+ 27 - 0
src/main/java/com/szwl/mapper/xml/TEquipmentApplyMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TEquipmentApplyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TEquipmentApply">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="admin_id" property="adminId" />
+        <result column="admin_level" property="adminLevel" />
+        <result column="admin_user_name" property="adminUserName" />
+        <result column="client_id" property="clientId" />
+        <result column="manager_id" property="managerId" />
+        <result column="status_type" property="statusType" />
+        <result column="type" property="type" />
+        <result column="gt_client_id" property="gtClientId" />
+        <result column="equiment_type" property="equimentType" />
+        <result column="machine_type" property="machineType" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, admin_id, admin_level, admin_user_name, client_id, manager_id, status_type, type, gt_client_id, equiment_type, machine_type
+    </sql>
+
+</mapper>

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

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TEquipmentDescMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TEquipmentDesc">
+        <id column="equipment_id" property="equipmentId" />
+        <result column="flowers" property="flowers" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        equipment_id, flowers
+    </sql>
+
+</mapper>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 64 - 0
src/main/java/com/szwl/mapper/xml/TEquipmentMapper.xml


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

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

+ 22 - 0
src/main/java/com/szwl/mapper/xml/TParametersMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TParametersMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TParameters">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="equipment_id" property="equipmentId" />
+        <result column="client_id" property="clientId" />
+        <result column="name" property="name" />
+        <result column="val" property="val" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, equipment_id, client_id, name, val, status
+    </sql>
+
+</mapper>

+ 23 - 0
src/main/java/com/szwl/mapper/xml/TProductMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.szwl.mapper.TProductMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.TProduct">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="modify_date" property="modifyDate" />
+        <result column="code_price" property="codePrice" />
+        <result column="equipment_id" property="equipmentId" />
+        <result column="product_name" property="productName" />
+        <result column="rmb_price" property="rmbPrice" />
+        <result column="sell_status" property="sellStatus" />
+        <result column="show_type" property="showType" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, modify_date, code_price, equipment_id, product_name, rmb_price, sell_status, show_type
+    </sql>
+
+</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;
+}

+ 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());
+    }
+}

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

+ 321 - 0
src/main/java/com/szwl/model/bo/JsonMessage.java

@@ -0,0 +1,321 @@
+package com.szwl.model.bo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.collection.AbstractPersistentCollection;
+
+import java.lang.reflect.Method;
+import java.util.*;
+
+/**
+ * Created by study on 9/2/2015.
+ */
+public final class JsonMessage {
+    /**
+     * 用户未登录
+     */
+    public static final JsonMessage USER_NOT_LOGIN = JsonMessage.error(2, "用户未登录");
+    /**
+     * 未知错误
+     */
+    public static final JsonMessage UNKNOWN_ERROR = JsonMessage.error(4, "未知错误");
+
+    /**
+     * 成功代码
+     */
+    public static final int CODE_SUCCESS = 0;
+
+    /**
+     * 基本错误代码
+     */
+    public static final int CODE_ERROR = 1;
+
+    /**
+     * 返回码
+     */
+    @JsonProperty
+    private int code;
+
+    /**
+     * 错误信息
+     */
+    @JsonProperty
+    private Object errmsg;
+
+    /**
+     * 返回数据
+     */
+    @JsonProperty
+    private Object data;
+
+    // 禁止创建对象
+    private JsonMessage(int code, Object data) {
+        this.code = code;
+        if ( code== 0 ){
+            this.data = data;
+        } else {
+            this.errmsg = data;
+        }
+    }
+
+    /**
+     * /**
+     * 成功消息(code=0)<br>
+     * 单参数返回格式为:{code:0,data:<Object>}<br>
+     * 多参数格式:参数名1,参数值1,参数名2,参数值2...<br>
+     * 返回Json格式{code:0,data:{'参数1':参数值1(Object),'参数2':参数值2(Object)}}
+     *
+     * @param data 数据组
+     * @return
+     */
+    public static JsonMessage success(Object... data) {
+        return message(CODE_SUCCESS, data);
+    }
+
+    /**
+     * 失败消息(code=1)<br>
+     * 单参数返回格式为:{code:1,data:<Object>}<br>
+     * 多参数格式:参数名1,参数值1,参数名2,参数值2...<br>
+     * 返回Json格式{code:1,data:{'参数1':参数值1(Object),'参数2':参数值2(Object)}}
+     *
+     * @param data 失败消息
+     * @return
+     */
+    public static JsonMessage error(Object data) {
+        return message(CODE_ERROR, data);
+    }
+
+    /**
+     * 失败消息(code=1)<br>
+     * 单参数返回格式为:{code:1,data:<Object>}<br>
+     * 多参数格式:参数名1,参数值1,参数名2,参数值2...<br>
+     * 返回Json格式{code:1,data:{'参数1':参数值1(Object),'参数2':参数值2(Object)}}
+     *
+     * @param data 失败消息
+     * @return
+     */
+    public static JsonMessage error(int code, Object data) {
+        return message(code, data);
+    }
+
+    /**
+     * 通用消息消息<br>
+     * 单参数返回格式为:{code:code(int),data:<Object>}<br>
+     * 多参数格式:参数名1,参数值1,参数名2,参数值2...<br>
+     * 返回Json格式{code:code(int),data:{'参数1':参数值1(Object),'参数2':参数值2(Object)}}
+     *
+     * @param code 返回码
+     * @param data 返回数据,支持多数据返回,多数据参数格式:参数名1(String),参数值1(Object),参数名2(String),参数值2(Object)...
+     * @return
+     */
+    private static JsonMessage message(int code, Object... data) {
+        if (data == null) data = new Object[]{new Object()};
+        if (data.length == 1) {
+            // 单一数据
+            return new JsonMessage(code, data[0]);
+        } else {
+            Map<String, Object> map = new LinkedHashMap<>();
+
+            for (int i = 0; i < data.length; i++) {
+                String key = data[i++].toString();
+                map.put(key, data[i]);
+            }
+            return new JsonMessage(code, map);
+        }
+    }
+
+    /**
+     * 优化对象数据
+     *
+     * @param bean
+     * @param properties
+     * @return
+     */
+    public static Object optimiseObj(Object bean, String... properties) {
+        Map<String, Object> map = new HashMap<>();
+        if (bean == null) {
+            //TODO 前端需要null
+            return null;
+            // TODO 前端需要空对象
+//            return map;
+        }
+        // 判断是否列表
+        if (isCollection(bean.getClass())) {
+            Collection list = (Collection) bean;
+            return optimiseList(list, properties);
+        }
+        // 2. 循环每一个属性
+        for (String string : properties) {
+            if (StringUtils.isEmpty(string)) continue;
+            // 处理级联属性
+            String[] names = string.split("\\.");
+            Map<String, Object> tmp = map;
+            Map<String, Object> field;
+            // 3. 循环每一个级联属性
+            StringBuilder prefix = new StringBuilder();
+            for (int i = 0; i < names.length; i++) {
+                if (i == (names.length - 1)) {
+                    // 最后一个field
+                    tmp.put(names[i], getPropertyValue(bean, string));
+                } else {
+                    field = (Map<String, Object>) tmp.get(names[i]);
+                    if (field == null) {
+                        field = new HashMap<>();
+                        tmp.put(names[i], field);
+                    }
+                    prefix.append(names[i]);
+                    // 处理list
+                    Class type = getPropertyType(bean, prefix.toString());
+                    Object obj = getPropertyObject(bean, prefix.toString());
+                    prefix.append(".");//必须在这里添加
+                    if (obj == null) {
+                        tmp.put(names[i], null);
+                        break;
+                    } else if (isCollection(type)) {
+                        String suffix = string.replace(prefix.toString(), "");
+                        tmp.put(names[i], optimiseList((Collection) getPropertyObject(bean, prefix.substring(0, prefix.length() - 1)), suffix.split("#")));
+                        break;
+                    }
+
+                    tmp = field; // 必须在处理list之后修改
+                }
+            }
+        }
+
+        return map;
+    }
+
+    /**
+     * 优化列表数据
+     *
+     * @param list       列表
+     * @param properties 需要的属性
+     * @return
+     */
+    private static Object optimiseList(Collection list, String... properties) {
+        List<Object> newList = new ArrayList<>();
+        if (list != null && properties != null) {
+            // 1. 循环每一个list item
+            for (Object bean : list) {
+                newList.add(optimiseObj(bean, properties));
+            }
+        }
+
+        return newList;
+    }
+
+    /**
+     * 反射获取字段值,支持级联
+     *
+     * @param bean
+     * @param property
+     * @return
+     */
+    private static Object getPropertyValue(Object bean, String property) {
+        try {
+            Class type = getPropertyType(bean, property);
+            if (isCollection(type)) {
+                return BeanUtils.getArrayProperty(bean, property);
+            } else {
+                return BeanUtils.getProperty(bean, property);
+            }
+        } catch (Exception e) {
+        }
+
+        return null;
+    }
+
+    /**
+     * 获取属性类型,支持级联
+     *
+     * @param bean
+     * @param property
+     * @return
+     */
+    private static Class getPropertyType(Object bean, String property) {
+        try {
+            String[] names = property.split("\\.");
+            Object obj = bean;
+            Method method = null;
+            for (String name : names) {
+                method = obj.getClass().getMethod("get" + toUpperCaseFirstOne(name));
+                obj = method.invoke(obj);
+            }
+
+            return method.getReturnType();
+        } catch (Exception e) {
+        }
+
+        return null;
+    }
+
+    /**
+     * 获取属性对象,支持级联
+     *
+     * @param bean
+     * @param property
+     * @return
+     */
+    private static Object getPropertyObject(Object bean, String property) {
+        try {
+            String[] names = property.split("\\.");
+            Object obj = bean;
+            Method method;
+            for (String name : names) {
+                method = obj.getClass().getMethod("get" + toUpperCaseFirstOne(name));
+                obj = method.invoke(obj);
+            }
+
+            return obj;
+        } catch (Exception e) {
+        }
+
+        return null;
+    }
+
+    /**
+     * 判断类型是否是集合
+     *
+     * @param type
+     * @return
+     */
+    private static boolean isCollection(Class type) {
+//        System.out.println(type);
+        while (type != null && !Object.class.equals(type)) {
+            Class[] classes = type.getInterfaces();
+            for (Class c : classes) {
+                if (Collection.class.equals(c)) {
+                    return true;
+                }
+            }
+
+            if (AbstractCollection.class.equals(type) || AbstractPersistentCollection.class.equals(type)) {
+                return true;
+            } else {
+                type = type.getSuperclass();
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * 首字母转大写
+     *
+     * @param s
+     * @return
+     */
+    private static String toUpperCaseFirstOne(String s) {
+        if (StringUtils.isEmpty(s)) {
+            return "";
+        }
+
+        if (Character.isUpperCase(s.charAt(0))) {
+            return s;
+        } else {
+            return (new StringBuilder()).append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).toString();
+        }
+    }
+
+}

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

@@ -0,0 +1,136 @@
+/*
+ * 
+ * 
+ * 
+ */
+package com.szwl.model.bo;
+
+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();
+        }
+    }
+
+
+}

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

@@ -1,9 +1,13 @@
 package com.szwl.model.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.beans.Transient;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
+
+import com.szwl.model.utils.AdminUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -69,7 +73,7 @@ public class TAdmin implements Serializable {
     @ApiModelProperty(value = "当前查看过公告的id;")
     private Long noticeId;
 
-    @ApiModelProperty(value = "类型(暂时作废);")
+    @ApiModelProperty(value = "类型,0:超管,1,公司人员;2:商家,3:商家子账户")
     private Integer type;
 
     @ApiModelProperty(value = "登录名;")
@@ -104,6 +108,13 @@ public class TAdmin implements Serializable {
 
     @ApiModelProperty(value = "关联商家,相当于以前的parent_id")
     private String relationAdminId;
+    @Transient
+    public String getManagerId() {
+
+        String managerId = "";
 
+        managerId = AdminUtils.encrypt(false, this.getId());
+        return managerId;
+    }
 
 }

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

@@ -0,0 +1,63 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 线下支付订单
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TCoinOrder对象", description="线下支付订单")
+public class TCoinOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "用户id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "支付方式;")
+    private Integer payType;
+
+    @ApiModelProperty(value = "金额;")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "订单号;")
+    private String sn;
+
+    @ApiModelProperty(value = "类型(省,市,终端);")
+    private Integer type;
+
+    @ApiModelProperty(value = "商品名称;")
+    private String productName;
+
+    @ApiModelProperty(value = "是否发送到es报存;")
+    private String es;
+
+    @ApiModelProperty(value = "支付时间;")
+    private Date payDate;
+
+
+}

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

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

+ 65 - 0
src/main/java/com/szwl/model/entity/TEquipmentApply.java

@@ -0,0 +1,65 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 设备连接申请表
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TEquipmentApply对象", description="设备连接申请表")
+public class TEquipmentApply implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "用户id;")
+    private Long adminId;
+
+    @ApiModelProperty(value = "级别;")
+    private String adminLevel;
+
+    @ApiModelProperty(value = "用户名;")
+    private String adminUserName;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "管理系统ID;")
+    private String managerId;
+
+    @ApiModelProperty(value = "申请状态,1,申请中;2,已拒绝;3,已同意;")
+    private Integer statusType;
+
+    @ApiModelProperty(value = "商家类型;")
+    private Integer type;
+
+    @ApiModelProperty(value = "实际设备id;")
+    private String gtClientId;
+
+    @ApiModelProperty(value = "棉花糖机器类型,mg320,mg301;")
+    private String equimentType;
+
+    @ApiModelProperty(value = "设备类型,0:棉花糖,1,爆米花")
+    private String machineType;
+
+
+}

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

@@ -0,0 +1,33 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 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;
+
+
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3110 - 0
src/main/java/com/szwl/model/entity/TEquipmentExample.java


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

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

+ 50 - 0
src/main/java/com/szwl/model/entity/TParameters.java

@@ -0,0 +1,50 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 机器参数表
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TParameters对象", description="机器参数表")
+public class TParameters implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    @ApiModelProperty(value = "机器id;")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "设备编号;")
+    private String clientId;
+
+    @ApiModelProperty(value = "参数名;")
+    private String name;
+
+    @ApiModelProperty(value = "参数值;")
+    private String val;
+
+    @ApiModelProperty(value = "参数类型;")
+    private String status;
+
+
+}

+ 54 - 0
src/main/java/com/szwl/model/entity/TProduct.java

@@ -0,0 +1,54 @@
+package com.szwl.model.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 商品价格表
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TProduct对象", description="商品价格表")
+public class TProduct 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 BigDecimal codePrice;
+
+    @ApiModelProperty(value = "机器id;")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "产品名称;")
+    private String productName;
+
+    @ApiModelProperty(value = "人名币价格;")
+    private BigDecimal rmbPrice;
+
+    @ApiModelProperty(value = "销售状态;")
+    private Boolean sellStatus;
+
+    @ApiModelProperty(value = "是否显示")
+    private String showType;
+
+
+}

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

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

+ 57 - 0
src/main/java/com/szwl/model/utils/AdminUtils.java

@@ -0,0 +1,57 @@
+/*
+ *
+ *
+ *
+ */
+package com.szwl.model.utils;
+
+/**
+ * 处理id
+ */
+public final class AdminUtils {
+
+    private static final Long base1 = 2452l;
+
+    private static final Long base2 = 13l;
+
+    private static final String prefix = "u";
+
+
+    /**
+     * 将id转成加密样式
+     */
+    public static String encrypt(boolean isPrefix , Long id) {
+        id = id * base2 + base1;
+        if(isPrefix){
+            return prefix + id.toString();
+        }else{
+            return id.toString();
+        }
+
+    }
+
+
+    /**
+     * 解密id
+     */
+    public static Long decrypt(boolean isPrefix , String uid) {
+        try {
+            if(isPrefix){
+                uid = uid.substring(1, uid.length());
+            }
+
+            Long id = Long.valueOf(uid);
+            id = id - base1;
+            id = id / base2;
+            return id;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+    public static void main(String[] args) {
+        System.out.println(encrypt(false, 36L));
+        System.out.println(decrypt(false, "2478"));
+    }
+}

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

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

@@ -0,0 +1,278 @@
+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 void main(String[] args) {
+//        push("71963777bd63e0f0a5b6490f04bf1ae4", "niai", "123", buildJson("editNo", "123456789").toString());
+//    }
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 线下支付订单 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TCoinOrderService extends IService<TCoinOrder> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TEquipmentApply;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 设备连接申请表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-21
+ */
+public interface TEquipmentApplyService extends IService<TEquipmentApply> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TEquipmentDesc;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TEquipmentDescService extends IService<TEquipmentDesc> {
+
+}

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

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

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

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

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TParameters;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 机器参数表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TParametersService extends IService<TParameters> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.szwl.service;
+
+import com.szwl.model.entity.TProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 商品价格表 服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+public interface TProductService extends IService<TProduct> {
+
+}

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

@@ -0,0 +1,190 @@
+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.entity.TEquipment;
+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.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+
+@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();
+                    }
+                }
+            }
+
+        }
+    }
+}

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

@@ -0,0 +1,354 @@
+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.TAdmin;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentExample;
+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;
+        }
+
+    }
+    /**
+     * 统计 国外
+     * @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形式)
+    }
+
+}

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

@@ -0,0 +1,365 @@
+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.TCoinOrder;
+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();
+                    }
+                }
+            }
+        }
+    }
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.mapper.TCoinOrderMapper;
+import com.szwl.service.TCoinOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 线下支付订单 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Service
+public class TCoinOrderServiceImpl extends ServiceImpl<TCoinOrderMapper, TCoinOrder> implements TCoinOrderService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TEquipmentApply;
+import com.szwl.mapper.TEquipmentApplyMapper;
+import com.szwl.service.TEquipmentApplyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 设备连接申请表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-21
+ */
+@Service
+public class TEquipmentApplyServiceImpl extends ServiceImpl<TEquipmentApplyMapper, TEquipmentApply> implements TEquipmentApplyService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.mapper.TEquipmentDescMapper;
+import com.szwl.service.TEquipmentDescService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Service
+public class TEquipmentDescServiceImpl extends ServiceImpl<TEquipmentDescMapper, TEquipmentDesc> implements TEquipmentDescService {
+
+}

+ 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.szwl.model.entity.TEquipment;
+import com.szwl.mapper.TEquipmentMapper;
+import com.szwl.model.utils.PushUtils;
+import com.szwl.service.TEquipmentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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
+    TEquipmentMapper tEquipmentMapper;
+    @Override
+    public String sentMessage(String clientId, String json) {
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.eq(TEquipment::getClientId,clientId);
+        List<TEquipment> equipmentList = tEquipmentMapper.selectList(query);
+        if(equipmentList.size()==0){
+            return "该设备不存在";
+        }
+        TEquipment equipment = equipmentList.get(0);
+        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";
+    }
+}

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

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

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TParameters;
+import com.szwl.mapper.TParametersMapper;
+import com.szwl.service.TParametersService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 机器参数表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Service
+public class TParametersServiceImpl extends ServiceImpl<TParametersMapper, TParameters> implements TParametersService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.entity.TProduct;
+import com.szwl.mapper.TProductMapper;
+import com.szwl.service.TProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 商品价格表 服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2022-04-23
+ */
+@Service
+public class TProductServiceImpl extends ServiceImpl<TProductMapper, TProduct> implements TProductService {
+
+}

+ 32 - 3
src/main/resources/bootstrap.yml

@@ -13,7 +13,37 @@ spring:
     username: root
     password: sunzee@020
     driver-class-name: com.mysql.jdbc.Driver
-
+  stream:
+      # 如果你项目里只对接一个中间件,那么不用定义binders
+      # 当系统要定义多个不同消息中间件的时候,使用binders定义
+      binders:
+        my-rabbit:
+          type: rabbit
+          environment:
+            spring:
+              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
 
@@ -36,5 +66,4 @@ mybatis-plus:
 
 logging:
   level:
-    com.szwl: debug
-
+    com.szwl: debug