Przeglądaj źródła

:tada:feat: 同步旧系统数据库中的admin, equipment 表数据

Ritchie 1 rok temu
rodzic
commit
ff69c71f2e
26 zmienionych plików z 822 dodań i 30 usunięć
  1. 10 0
      src/main/java/com/szwl/controller/DelOldController.java
  2. 72 0
      src/main/java/com/szwl/controller/SyncOldByClientController.java
  3. 106 0
      src/main/java/com/szwl/controller/SyncOldByTimeController.java
  4. 2 2
      src/main/java/com/szwl/controller/TAdminController.java
  5. 21 0
      src/main/java/com/szwl/controller/TCoinOrderController.java
  6. 1 1
      src/main/java/com/szwl/controller/TEquipmentController.java
  7. 21 0
      src/main/java/com/szwl/controller/TOrderController.java
  8. 1 1
      src/main/java/com/szwl/exception/MyException.java
  9. 0 9
      src/main/java/com/szwl/feign/bean/EsFeign.java
  10. 0 13
      src/main/java/com/szwl/feign/bean/OrderFeign.java
  11. 16 0
      src/main/java/com/szwl/mapper/TCoinOrderMapper.java
  12. 1 1
      src/main/java/com/szwl/mapper/TEquipmentMapper.java
  13. 16 0
      src/main/java/com/szwl/mapper/TOrderMapper.java
  14. 8 0
      src/main/java/com/szwl/mapper/xml/TAdminMapper.xml
  15. 60 0
      src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml
  16. 54 0
      src/main/java/com/szwl/mapper/xml/TOrderMapper.xml
  17. 154 0
      src/main/java/com/szwl/model/entity/TCoinOrder.java
  18. 1 1
      src/main/java/com/szwl/model/entity/TEquipment.java
  19. 116 0
      src/main/java/com/szwl/model/entity/TOrder.java
  20. 16 0
      src/main/java/com/szwl/service/TCoinOrderService.java
  21. 1 1
      src/main/java/com/szwl/service/TEquipmentService.java
  22. 16 0
      src/main/java/com/szwl/service/TOrderService.java
  23. 20 0
      src/main/java/com/szwl/service/impl/TCoinOrderServiceImpl.java
  24. 1 1
      src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java
  25. 20 0
      src/main/java/com/szwl/service/impl/TOrderServiceImpl.java
  26. 88 0
      src/main/java/com/szwl/util/IDGenerator.java

+ 10 - 0
src/main/java/com/szwl/controller/DelOldController.java

@@ -0,0 +1,10 @@
+package com.szwl.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/delOld")
+public class DelOldController {
+
+}

+ 72 - 0
src/main/java/com/szwl/controller/SyncOldByClientController.java

@@ -0,0 +1,72 @@
+package com.szwl.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.TOrder;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TCoinOrderService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.TOrderService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static com.szwl.constant.ResponseCodesEnum.A0206;
+
+@RestController
+@RequestMapping("/syncOldByClient")
+public class SyncOldByClientController {
+
+    /**
+     * 旧系统同步方案一:
+     *  根据设备编号和用户id进行同步:
+     *      e.g. 同步某一客户,某台机,从2023-3-19至今的所有 t_order 信息
+     *  目前要做的事:
+     *      先将旧系统的一条信息查出来,再插入到新系统中,以 t_admin 表为例
+     */
+    TEquipmentService equipmentService;
+    TAdminService adminService;
+
+    TOrderService orderService;
+
+    TCoinOrderService coinOrderService;
+
+    public SyncOldByClientController(TEquipmentService equipmentService, TAdminService adminService, TOrderService orderService, TCoinOrderService coinOrderService) {
+        this.equipmentService = equipmentService;
+        this.adminService = adminService;
+        this.orderService = orderService;
+        this.coinOrderService = coinOrderService;
+    }
+
+    @ApiOperation(value = "通过 clientId 获取机器信息")
+    @GetMapping("/getEquipmentByClientId")
+    public ResponseModel<TEquipment> getEquipmentByClientId(String clientId) {
+        if (StringUtils.isNotEmpty(clientId)) {
+            LambdaQueryWrapper<TEquipment> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(TEquipment::getClientId, clientId);
+            TEquipment equipment = equipmentService.getOne(wrapper);
+            return R.ok(equipment);
+        }
+        return R.fail("未找到设备");
+    }
+
+
+    @ApiOperation(value = "通过 adminId 获取用户信息")
+    @GetMapping("/getAdminById")
+    public ResponseModel<TAdmin> getAdminById(String adminId) {
+        if (StringUtils.isNotEmpty(adminId)) {
+            LambdaQueryWrapper<TAdmin> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(TAdmin::getId, adminId);
+            TAdmin admin = adminService.getOne(wrapper);
+            return R.ok(admin);
+        }
+        return R.fail(A0206);
+    }
+
+}

+ 106 - 0
src/main/java/com/szwl/controller/SyncOldByTimeController.java

@@ -0,0 +1,106 @@
+package com.szwl.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.TOrder;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TCoinOrderService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.TOrderService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+@RestController
+@RequestMapping("/syncOldByTime")
+public class SyncOldByTimeController {
+
+    /**
+     * 旧系统同步方案二:
+     *  根据时间段进行同步:
+     *      e.g. 同步某一时间内的数据,涉及的表有 t_admin, t_equipment, t_order, t_coin_order, ...
+     *      e.g. proportion, product, maintaining_history, equipment_apply, apk_info, ad
+     *  目前在做:
+     *      同步某一段时间内的 admin 信息,并插入到新系统
+     */
+    TEquipmentService equipmentService;
+    TAdminService adminService;
+
+    TOrderService orderService;
+
+    TCoinOrderService coinOrderService;
+
+    public SyncOldByTimeController(TEquipmentService equipmentService, TAdminService adminService, TOrderService orderService, TCoinOrderService coinOrderService) {
+        this.equipmentService = equipmentService;
+        this.adminService = adminService;
+        this.orderService = orderService;
+        this.coinOrderService = coinOrderService;
+    }
+
+    @ApiOperation(value = "获取某一时间段内的所有 order")
+    @PostMapping("/getOrderInTime")
+    public ResponseModel<List<TOrder>> getOrderInTime(String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            LambdaQueryWrapper<TOrder> lqw = Wrappers.lambdaQuery();
+            lqw.between(TOrder::getCreateDate, startTime, endTime);
+            List<TOrder> list = orderService.list(lqw);
+
+            return R.ok(list);
+        }
+        return R.fail("时间参数为空");
+    }
+
+    @ApiOperation(value = "获取某一时间段内的所有 equipment")
+    @PostMapping ("/getEquipmentInTime")
+    public ResponseModel<List<TEquipment>> getEquipmentInTime(String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            LambdaQueryWrapper<TEquipment> lqw = Wrappers.lambdaQuery();
+            lqw.between(TEquipment::getCreateDate, startTime, endTime);
+            List<TEquipment> list = equipmentService.list(lqw);
+
+            return R.ok(list);
+        }
+        return R.fail("时间参数为空");
+    }
+
+    @ApiOperation(value = "获取某一时间段内的所有 admin")
+    @PostMapping ("/getAdminInTime")
+    public ResponseModel<List<TAdmin>> getAdminInTime(String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            LambdaQueryWrapper<TAdmin> lqw = Wrappers.lambdaQuery();
+            lqw.between(TAdmin::getCreateDate, startTime, endTime);
+            List<TAdmin> list = adminService.list(lqw);
+
+            return R.ok(list);
+        }
+
+        return R.fail("时间参数为空");
+    }
+
+    @ApiOperation(value = "获取某一时间段内的所有数据")
+    @PostMapping ("/getAllDataInTime")
+    public ResponseModel<List<?>> getAllDataInTime(String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            // 获取某一时段内的所有 admin
+            // 获取某一时段内的所有 equipment
+            // 获取某一时段内的所有 order
+            // 获取某一时段内的所有 coin_order
+            // 获取某一时段内的所有 proportion
+            // 获取某一时段内的所有 product
+            // 获取某一时段内的所有 maintaining_history
+            // 获取某一时段内的所有 equipment_apply
+            // 获取某一时段内的所有 apk_info
+            // 获取某一时段内的所有 ad
+            return R.ok();
+        }
+        return R.fail("时间参数为空");
+    }
+
+}

+ 2 - 2
src/main/java/com/szwl/controller/TAdminController.java

@@ -1,9 +1,8 @@
 package com.szwl.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -17,5 +16,6 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/tAdmin")
 public class TAdminController {
 
+
 }
 

+ 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 2023-10-18
+ */
+@RestController
+@RequestMapping("/tCoinOrder")
+public class TCoinOrderController {
+
+}
+

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

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
  * </p>
  *
  * @author wuhs
- * @since 2023-10-17
+ * @since 2023-10-25
  */
 @RestController
 @RequestMapping("/tEquipment")

+ 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 2023-10-18
+ */
+@RestController
+@RequestMapping("/tOrder")
+public class TOrderController {
+
+}
+

+ 1 - 1
src/main/java/com/szwl/exception/MyException.java

@@ -4,7 +4,7 @@ import lombok.Data;
 
 @Data
 public class MyException extends RuntimeException {
-    private static final long serialVersionUID = -2565431806475335331L;
+//    private static final long serialVersionUID = -2565431806475335331L;
     String message;
 
     public MyException(String message) {

+ 0 - 9
src/main/java/com/szwl/feign/bean/EsFeign.java

@@ -1,9 +0,0 @@
-package com.szwl.feign.bean;
-
-
-import org.springframework.cloud.openfeign.FeignClient;
-
-@FeignClient(name = "es-server")
-public interface EsFeign {
-
-}

+ 0 - 13
src/main/java/com/szwl/feign/bean/OrderFeign.java

@@ -1,13 +0,0 @@
-package com.szwl.feign.bean;
-
-import com.szwl.model.bo.ResponseModel;
-import com.szwl.model.entity.*;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-
-@FeignClient(name = "order-server")
-public interface OrderFeign {
-
-}

+ 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 2023-10-18
+ */
+public interface TCoinOrderMapper extends BaseMapper<TCoinOrder> {
+
+}

+ 1 - 1
src/main/java/com/szwl/mapper/TEquipmentMapper.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  *
  * @author wuhs
- * @since 2023-10-17
+ * @since 2023-10-25
  */
 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 2023-10-18
+ */
+public interface TOrderMapper extends BaseMapper<TOrder> {
+
+}

+ 8 - 0
src/main/java/com/szwl/mapper/xml/TAdminMapper.xml

@@ -47,4 +47,12 @@
         id, create_date, modify_date, agency_id, area_id, qr_code_img_url, department, email, is_admined, is_enabled, is_locked, locked_date, login_date, login_failure_count, login_ip, merchant_id, trade_merchant_no, name, parent_id, password, personage_id, notice_id, type, username, phone, is_refund, if_foreign, open, promo_code_open, apply_start_time, apply_end_time, code, pay_platform, logo_rule, relation_admin_id, manager_id
     </sql>
 
+<!--    &lt;!&ndash; 查询某一时间段内的数据 &ndash;&gt;-->
+<!--    <select id="findByTimeRange" resultType="com.szwl.model.entity.TAdmin">-->
+<!--        SELECT id, create_date, modify_date, agency_id, area_id, qr_code_img_url, department, email, is_admined, is_enabled, is_locked, locked_date, login_date, login_failure_count, login_ip, merchant_id, trade_merchant_no, name, parent_id, password, personage_id, notice_id, type, username, phone, is_refund, if_foreign, open, promo_code_open, apply_start_time, apply_end_time, code, pay_platform, logo_rule, relation_admin_id, manager_id-->
+<!--        FROM t_admin-->
+<!--        WHERE create_time >= #{startTime}-->
+<!--        AND create_time <= #{endTime}-->
+<!--    </select>-->
+
 </mapper>

Plik diff jest za duży
+ 60 - 0
src/main/java/com/szwl/mapper/xml/TCoinOrderMapper.xml


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

@@ -0,0 +1,54 @@
+<?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_desc" property="productDesc" />
+        <result column="product_name" property="productName" />
+        <result column="product_no" property="productNo" />
+        <result column="refund_date" property="refundDate" />
+        <result column="sn" property="sn" />
+        <result column="status" property="status" />
+        <result column="type" property="type" />
+        <result column="trx_no" property="trxNo" />
+        <result column="refund_trx_no" property="refundTrxNo" />
+        <result column="es" property="es" />
+        <result column="refund_amount" property="refundAmount" />
+        <result column="note" property="note" />
+        <result column="pay_platform" property="payPlatform" />
+        <result column="is_settlement" property="isSettlement" />
+        <result column="wx_id" property="wxId" />
+        <result column="proportion_desc" property="proportionDesc" />
+        <result column="marketing_amount" property="marketingAmount" />
+        <result column="coupons" property="coupons" />
+        <result column="product_number" property="productNumber" />
+        <result column="is_invoice" property="isInvoice" />
+        <result column="refund_reason" property="refundReason" />
+        <result column="company_type" property="companyType" />
+    </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_desc, product_name, product_no, refund_date, sn, status, type, trx_no, refund_trx_no, es, refund_amount, note, pay_platform, is_settlement, wx_id, proportion_desc, marketing_amount, coupons, product_number, is_invoice, refund_reason, company_type
+    </sql>
+
+</mapper>

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

@@ -0,0 +1,154 @@
+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 2023-10-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="TCoinOrder对象", description="")
+public class TCoinOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private Date createDate;
+
+    private Date modifyDate;
+
+    private Long adminId;
+
+    private String clientId;
+
+    private Integer payType;
+
+    private BigDecimal price;
+
+    private String sn;
+
+    private Integer type;
+
+    private String productName;
+
+    private String es;
+
+    private Date payDate;
+
+    @ApiModelProperty(value = "支付状态,0:未支付,1:已支付,3:已退款")
+    private String status;
+
+    private String productNo;
+
+    @ApiModelProperty(value = "商品数量")
+    private Integer productNumber;
+
+    @ApiModelProperty(value = "标记")
+    private String note;
+
+    @ApiModelProperty(value = "平台分账")
+    private BigDecimal adminProportion;
+
+    @ApiModelProperty(value = "一级分销商户id")
+    private Long agencyId;
+
+    @ApiModelProperty(value = "分账比例,中介分账")
+    private BigDecimal agencyProportion;
+
+    @ApiModelProperty(value = "分销逻辑")
+    private String altInfo;
+
+    @ApiModelProperty(value = "设备id")
+    private Long equipmentId;
+
+    @ApiModelProperty(value = "支付方式")
+    private String frpCode;
+
+    @ApiModelProperty(value = "二级分销商户id")
+    private Long merchantId;
+
+    @ApiModelProperty(value = "二级分销商分账比例")
+    private BigDecimal merchantProportion;
+
+    @ApiModelProperty(value = "三级分销商户id")
+    private Long personageId;
+
+    @ApiModelProperty(value = "三级分销商分账比例")
+    private BigDecimal personageProportion;
+
+    @ApiModelProperty(value = "商品id")
+    private Long productId;
+
+    @ApiModelProperty(value = "退款时间")
+    private Date refundDate;
+
+    @ApiModelProperty(value = "商品描述,{xxx,1个;xxx,2个}")
+    private String productDesc;
+
+    @ApiModelProperty(value = "支付流水号")
+    private String trxNo;
+
+    @ApiModelProperty(value = "退款编号rfd")
+    private String refundId;
+
+    @ApiModelProperty(value = "退款金额")
+    private BigDecimal refundAmount;
+
+    @ApiModelProperty(value = "分账详情,当分账方超过4方时,这个字段才启用")
+    private String proportionDesc;
+
+    @ApiModelProperty(value = "营销金额")
+    private BigDecimal marketingAmount;
+
+    @ApiModelProperty(value = "退款营销金额")
+    private BigDecimal refundMarketingAmount;
+
+    @ApiModelProperty(value = "订单状态;0:排队中;1:正在制作;2:已制作完成")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "货币")
+    private String currency;
+
+    @ApiModelProperty(value = "airwallex订单号,商品唯一订单id,类似于sn")
+    private String merchantOrderId;
+
+    @ApiModelProperty(value = "airwallex请求编号,商户唯一支付请求编号id")
+    private String requestId;
+
+    @ApiModelProperty(value = "airwallex交易编号")
+    private String paymentIntentId;
+
+    @ApiModelProperty(value = "商品数量,每笔订单中有几个商品")
+    private Integer productNum;
+
+    @ApiModelProperty(value = "公司平台,0或空为申泽,1为七云")
+    private String companyType;
+
+    @ApiModelProperty(value = "退款数量")
+    private Integer refundQuantity;
+
+    @ApiModelProperty(value = "是否为airwallex支付,0或null代表线下,1代表airwallex")
+    private String isAir;
+
+    @ApiModelProperty(value = "airwallex订单金额,币种为美元")
+    private BigDecimal amount;
+
+    private String ststus;
+
+
+}

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

@@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode;
  * </p>
  *
  * @author wuhs
- * @since 2023-10-17
+ * @since 2023-10-25
  */
 @Data
 @EqualsAndHashCode(callSuper = false)

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

@@ -0,0 +1,116 @@
+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 2023-10-18
+ */
+@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;
+
+    private Long adminId;
+
+    private BigDecimal adminProportion;
+
+    private Long agencyId;
+
+    private BigDecimal agencyProportion;
+
+    private String altInfo;
+
+    private String clientId;
+
+    private Long equipmentId;
+
+    private String frpCode;
+
+    private Long merchantId;
+
+    private BigDecimal merchantProportion;
+
+    private Date payDate;
+
+    private Long personageId;
+
+    private BigDecimal personageProportion;
+
+    private BigDecimal price;
+
+    private Long productId;
+
+    private String productDesc;
+
+    private String productName;
+
+    private String productNo;
+
+    private Date refundDate;
+
+    private String sn;
+
+    private Integer status;
+
+    private Integer type;
+
+    private String trxNo;
+
+    private String refundTrxNo;
+
+    private String es;
+
+    private BigDecimal refundAmount;
+
+    private String note;
+
+    @ApiModelProperty(value = "支付平台  0或null为汇聚,1为杉德支付")
+    private String payPlatform;
+
+    @ApiModelProperty(value = "是否结算 0或null为未结算,1已结算。仅杉德支付有这个")
+    private String isSettlement;
+
+    private Long wxId;
+
+    private String proportionDesc;
+
+    private BigDecimal marketingAmount;
+
+    private String coupons;
+
+    @ApiModelProperty(value = "商品数量")
+    private Integer productNumber;
+
+    @ApiModelProperty(value = "退款原因")
+    private Integer isInvoice;
+
+    @ApiModelProperty(value = "是否开发票,0为否,1为是,默认为0")
+    private String refundReason;
+
+    @ApiModelProperty(value = "公司平台,0或空为申泽,1为七云")
+    private String companyType;
+
+
+}

+ 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 2023-10-18
+ */
+public interface TCoinOrderService extends IService<TCoinOrder> {
+
+}

+ 1 - 1
src/main/java/com/szwl/service/TEquipmentService.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author wuhs
- * @since 2023-10-17
+ * @since 2023-10-25
  */
 public interface TEquipmentService extends IService<TEquipment> {
 

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

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

+ 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 2023-10-18
+ */
+@Service
+public class TCoinOrderServiceImpl extends ServiceImpl<TCoinOrderMapper, TCoinOrder> implements TCoinOrderService {
+
+}

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

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author wuhs
- * @since 2023-10-17
+ * @since 2023-10-25
  */
 @Service
 public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipment> implements TEquipmentService {

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

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

+ 88 - 0
src/main/java/com/szwl/util/IDGenerator.java

@@ -0,0 +1,88 @@
+package com.szwl.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class IDGenerator {
+    private static final AtomicLong seq = new AtomicLong(0);
+    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+    private static final SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+
+
+    /**
+     * 生成唯一的16位长整型ID --> admin,equipment等常用表
+     *
+     * @return 订单ID
+     */
+    public static synchronized long commonID() {
+        String timestamp = dateFormat1.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+
+        //huTool工具集的雪花算法 --> 生成19位id
+        //参数1为终端ID
+        //参数2为数据中心ID
+//        Snowflake snowflake = IdUtil.getSnowflake(1, 1);
+//        long id = snowflake.nextId();
+//        System.out.println("id***" + id);
+
+        return Long.parseLong(timestamp + String.format("%01d", threadId));
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于国内订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long orderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+
+        String s = "5"; // 表示国内订单
+        return Long.parseLong(s + timestamp + String.format("%01d", threadId) + randomNumber + String.format("%01d", nextSeq));
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于海外订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long coinOrderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+
+        String s = "1"; // 表示海外订单
+        return Long.parseLong(s + timestamp + String.format("%01d", threadId) + randomNumber + String.format("%01d", nextSeq));
+    }
+
+    /**
+     * 生成3位伪随机数
+     * 因为long类型范围是-9223372036854775808到9223372036854775807,无法容纳更大范围数字,可以将数据库字段类型改为无符号,或者使用varchar类型
+     * @return 随机数
+     */
+    private static String generateRandomNumber() {
+        Random random = new Random();
+        int nextInt = random.nextInt(1000);
+        // 格式化为3位数,并在不满三位的数字前面补零
+        return String.format("%03d", nextInt);
+    }
+}