瀏覽代碼

Merge branch 'test' into dev

# Conflicts:
#	src/main/resources/bootstrap.yml
Ritchie 1 年之前
父節點
當前提交
db8be30ee4

+ 2 - 0
README.md

@@ -28,6 +28,8 @@ ResponseCodesEnum 为错误码,其中 ALL_OK("00000","SUCCESS") 表示成功
 ## 使用 hutool 工具类
 参考文档 https://www.bookstack.cn/read/hutool/377f64112be7197a.md
 
+[新版本文档](https://www.bookstack.cn/read/hutool-5.6.0-zh/0ced75507d77392f.md)
+
 ## 配置文件参数使用
 推荐将配置文件的参数,放到数据库表 sys_properties 里面。
 参考 select * from sys_properties a where a.application ='szwl-server'

+ 5 - 0
src/main/java/com/szwl/config/MybatisPlusConfig.java

@@ -3,6 +3,7 @@ package com.szwl.config;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.szwl.utils.InsertBatchSomeColumnSqlInjector;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -20,4 +21,8 @@ public class MybatisPlusConfig {
         return interceptor;
     }
 
+    @Bean
+    public InsertBatchSomeColumnSqlInjector insertBatchSomeColumnSqlInjector() {
+        return new InsertBatchSomeColumnSqlInjector();
+    }
 }

+ 1 - 1
src/main/java/com/szwl/constant/AirwallexConstant.java

@@ -18,7 +18,7 @@ public class AirwallexConstant {
 //    public final static String WEBHOOKS = "/webhook/paymentIntent";
 
     public final static String QR_URL = "http://localhost:8080/shenze/#/hpp";
-
+//    public final static String QR_URL = "http://szwltest.sunzee.com.cn/shenze/#/hpp";
 //    public final static String QR_URL = "http://szwlh.sunzee.com.cn/shenze/#/hpp";
 
 

+ 3 - 2
src/main/java/com/szwl/controller/AirwallexPayController.java

@@ -21,11 +21,11 @@ import com.szwl.model.dto.*;
 import com.szwl.model.entity.*;
 import com.szwl.model.utils.AccessTokenThreadUtil;
 import com.szwl.service.*;
+import com.szwl.utils.IDGenerator;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 
@@ -192,6 +192,7 @@ public class AirwallexPayController {
 
         // 创建订单
         TCoinOrder tCoinOrder = new TCoinOrder();
+        tCoinOrder.setId(IDGenerator.coinOrderID());
         tCoinOrder.setAdminId(adminById.getId());
 
         if (StringUtils.isNotEmpty(createDate)) {
@@ -324,7 +325,7 @@ public class AirwallexPayController {
 //        String mode = AirwallexConstant.MODE;
 //        String locale = "it";
         String qrUrl = AirwallexConstant.QR_URL;
-        String QR = qrUrl + "?intent_id=" + paymentIntentId + "&client_secret=" + clientSecret + "&currency=" + currency;
+        String QR = qrUrl + "?intent_id=" + paymentIntentId + "&client_secret=" + clientSecret + "&currency=" + currency + "&productName=" + productName + "&productsNum=" + productNumber + "&totalPrice=" + amount;
 
         // 将订单存入数据库
         tCoinOrderService.save(tCoinOrder);

+ 92 - 0
src/main/java/com/szwl/controller/SyncOldCoinOrderController.java

@@ -0,0 +1,92 @@
+package com.szwl.controller;
+
+import com.szwl.feign.bean.SyncOldFeign;
+import com.szwl.mapper.TCoinOrderMapper;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.service.TCoinOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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 javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Api(value = "/syncCoinOrder", tags = {"同步旧系统的coinOrder数据"})
+@RestController
+@RequestMapping("/syncCoinOrder")
+public class SyncOldCoinOrderController {
+
+    SyncOldFeign syncOldFeign;
+    @Resource
+    TCoinOrderMapper coinOrderMapper;
+
+    TCoinOrderService coinOrderService;
+
+    public SyncOldCoinOrderController(SyncOldFeign syncOldFeign, TCoinOrderService coinOrderService) {
+        this.syncOldFeign = syncOldFeign;
+        this.coinOrderService = coinOrderService;
+    }
+
+    // 真批量同步
+    @ApiOperation(value = "同步海外某客户的某一设备某一时间段内的 coinOrder 订单")
+    @PostMapping("/syncCoinOrderByCAT")
+    public ResponseModel<?> syncCoinOrderByCAT(String adminId, String clientId, String startTime, String endTime) {
+
+        if (adminId != null && StringUtils.isNotEmpty(clientId) && StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            long l = Long.parseLong(adminId);
+
+            List<TCoinOrder> coinOrderList = R.getDataIfSuccess(syncOldFeign.getCoinOrderByACT(l, clientId, startTime, endTime));
+
+            if (coinOrderList.size() == 0) {
+                return R.fail("未查询到订单信息");
+            }
+
+            if (coinOrderList.size() > 10000) {
+                return R.fail("数据量过大,请缩短时间范围");
+            }
+
+//        coinOrderService.saveBatch(coinOrderList);
+
+            int i = coinOrderMapper.insertBatchSomeColumn(coinOrderList);
+            return R.ok("批量插入 coinOrder " + i + "条记录");
+
+        } else {
+            return R.ok("参数不能为空");
+        }
+    }
+
+    // 伪批量同步
+//    @ApiOperation(value = "同步海外某客户的某一设备某一时间段内的 coinOrder 订单")
+//    @PostMapping("/syncCoinOrderByCAT")
+//    public ResponseModel<?> syncCoinOrderByCAT(String adminId, String clientId, String startTime, String endTime) {
+//        if (StringUtils.isNotEmpty(adminId) && StringUtils.isNotEmpty(clientId) && StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+//            long l = Long.parseLong(adminId);
+//
+//            List<TCoinOrder> coinOrderList = R.getDataIfSuccess(syncOldFeign.getCoinOrderByACT(l, clientId, startTime, endTime));
+//
+//
+//            if (coinOrderList.size()>1000) {
+//                return R.fail("数据量过大,请缩短时间范围");
+//            }
+////            coinOrderService.saveBatch(coinOrderList);
+//
+//            for (TCoinOrder coinOrder : coinOrderList) {
+////                System.out.println("coinOrder》》" + coinOrder);
+//                coinOrderService.save(coinOrder);
+//            }
+//
+//            return R.ok(adminId + "同步设备" + clientId + "从" + startTime + "至" + endTime + "的 coinOrder 信息成功");
+//        } else {
+//            return R.fail("参数不能为空");
+//        }
+//    }
+
+
+}

+ 77 - 0
src/main/java/com/szwl/controller/SyncOldOrderController.java

@@ -0,0 +1,77 @@
+package com.szwl.controller;
+
+import com.szwl.feign.bean.SyncOldFeign;
+import com.szwl.mapper.TCoinOrderMapper;
+import com.szwl.mapper.TOrderMapper;
+import com.szwl.model.bo.R;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.model.entity.TOrder;
+import com.szwl.service.TCoinOrderService;
+import com.szwl.service.TOrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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 javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Api(value = "/syncOrder", tags = {"同步旧系统的order数据"})
+@RestController
+@RequestMapping("/syncOrder")
+public class SyncOldOrderController {
+
+
+    TOrderService orderService;
+    SyncOldFeign syncOldFeign;
+
+    @Resource
+    TOrderMapper orderMapper;
+
+    public SyncOldOrderController(TOrderService orderService, SyncOldFeign syncOldFeign) {
+        this.orderService = orderService;
+        this.syncOldFeign = syncOldFeign;
+    }
+
+    @ApiOperation(value = "同步国内某客户的某一设备某一时间段内的 order 订单")
+    @PostMapping("/syncOrderByCAT")
+    public ResponseModel<?> syncOrderByCAT(String adminId, String clientId, String startTime, String endTime) {
+        if (StringUtils.isNotEmpty(adminId) && StringUtils.isNotEmpty(clientId) && StringUtils.isNotEmpty(startTime) && StringUtils.isNotEmpty(endTime)) {
+            long l = Long.parseLong(adminId);
+//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//            Date start = sdf.parse(startTime);
+//            Date end = sdf.parse(endTime);
+
+            List<TOrder> orderList = R.getDataIfSuccess(syncOldFeign.getOrderByACT(l, clientId, startTime, endTime));
+
+            if (orderList.size() == 0) {
+                return R.fail("未查询到订单信息");
+            }
+
+            if (orderList.size() > 10000) {
+                return R.fail("数据量过大,请缩短时间范围");
+            }
+
+            // 3中批量插入方式
+//            for (TOrder order : orderList) {
+////                System.out.println("order》》" + order);
+//                orderService.save(order);
+//
+//            }
+//            orderService.saveBatch(orderList);
+            orderMapper.insertBatchSomeColumn(orderList);
+
+
+            return R.ok(adminId + "同步设备" + clientId + "从" + startTime + "至" + endTime + "的 order 信息成功");
+        } else {
+            return R.fail("参数不能为空");
+        }
+    }
+
+
+}

+ 18 - 7
src/main/java/com/szwl/controller/TCoinOrderController.java

@@ -15,12 +15,14 @@ import com.szwl.constant.AirwallexConstant;
 import com.szwl.constant.HuifuConstant;
 import com.szwl.feign.bean.SzwlFeign;
 import com.szwl.model.bo.R;
-import com.szwl.model.entity.TAirwallexMch;
-import com.szwl.model.entity.TAirwallexWallet;
-import com.szwl.model.entity.THuifuMch;
-import com.szwl.model.entity.TProportion;
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.*;
 import com.szwl.service.TAirwallexMchService;
 import com.szwl.service.TAirwallexWalletService;
+import com.szwl.service.TCoinOrderService;
+import io.swagger.annotations.ApiOperation;
+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;
@@ -41,13 +43,22 @@ import java.util.Iterator;
 @RequestMapping("/tCoinOrder")
 public class TCoinOrderController {
 
+    TCoinOrderService coinOrderService;
     SzwlFeign szwlFeign;
-
     TAirwallexWalletService airwallexWalletService;
 
-    public TCoinOrderController(TAirwallexWalletService airwallexWalletService, SzwlFeign szwlFeign) {
-        this.airwallexWalletService = airwallexWalletService;
+    public TCoinOrderController(TCoinOrderService coinOrderService, SzwlFeign szwlFeign, TAirwallexWalletService airwallexWalletService) {
+        this.coinOrderService = coinOrderService;
         this.szwlFeign = szwlFeign;
+        this.airwallexWalletService = airwallexWalletService;
+    }
+
+
+    @ApiOperation(value = "添加海外订单")
+    @PostMapping("/addCoinOrder")
+    public ResponseModel<?> addCoinOrder(@RequestBody TCoinOrder coinOrder) {
+        boolean save = coinOrderService.save(coinOrder);
+        return R.ok(save);
     }
 
 

+ 78 - 31
src/main/java/com/szwl/controller/TOrderController.java

@@ -29,6 +29,7 @@ import com.szwl.model.utils.*;
 import com.szwl.service.*;
 import com.szwl.service.es.EsTOrderService;
 import com.szwl.utils.HuifuUtils;
+import com.szwl.utils.IDGenerator;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -260,6 +261,7 @@ public class TOrderController {
         }
         Integer productNumber = 1;
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());
@@ -526,6 +528,7 @@ public class TOrderController {
         BigDecimal marketingAmount = null;
 
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());
@@ -640,12 +643,12 @@ public class TOrderController {
      *
      * @param clientId    设备client id
      * @param productName 商品名称
-     * @param
+     * @param pri DIY花型价格
      * @return
      */
     @ApiOperation(value = "请求在线支付 二码合一")
     @GetMapping("/twoPayCode")
-    public Object twoPayCode(String code, String clientId, String productName) {
+    public Object twoPayCode(String code, String clientId, String productName, String pri) {
         TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
         if(equipment==null||equipment.getId()==null){
             return JsonMessage.error("找不到设备");
@@ -704,17 +707,27 @@ public class TOrderController {
 
         Long equipmentId = equipment.getId();
         //查找商品
-        TProduct product =  R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
-        if (product == null) {
-            return JsonMessage.error("找不到商品");
+        BigDecimal price;
+        Long productId = null;
+        // A99:DIY花型
+        String productNo = "A99";
+        if (StringUtils.isEmpty(pri)) {
+            TProduct product =  R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
+            if (product == null) {
+                return JsonMessage.error("找不到商品");
+            }
+            price = product.getRmbPrice();
+            productId = product.getId();
+            productNo = product.getNo();
+            if (BigDecimal.ZERO.compareTo(price) >= 0) {
+                return JsonMessage.error("商品价格异常");
+            }
+        } else {
+            price = new BigDecimal(pri);
         }
-        BigDecimal price = product.getRmbPrice();
         if(StringUtils.isNotEmpty(code)){
             BigDecimal discount = BigDecimal.valueOf(promoCode.getDiscount());
-            price = product.getRmbPrice().multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
-        }
-        if (BigDecimal.ZERO.compareTo(price) >= 0) {
-            return JsonMessage.error("商品价格异常");
+            price = price.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
         }
         String sn1 = orderService.initSn(equipmentId);
         String sn2 = orderService.initSn(equipmentId);
@@ -765,12 +778,13 @@ public class TOrderController {
         Integer productNumber = 1;
 
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());
         order.setSn(sn1);
-        order.setProductId(product.getId());
-        order.setProductNo(product.getNo());
+        order.setProductId(productId);
+        order.setProductNo(productNo);
         order.setProductName(productName);
         order.setProductNumber(productNumber);
         order.setPrice(price);
@@ -808,12 +822,13 @@ public class TOrderController {
             order.setIsSettlement("0");
         }
         TOrder order2 = new TOrder();
+        order2.setId(IDGenerator.orderID());
         order2.setCreateDate(new Date());
         order2.setModifyDate(new Date());
         order2.setAdminId(admin.getId());
         order2.setSn(sn2);
-        order2.setProductId(product.getId());
-        order2.setProductNo(product.getNo());
+        order2.setProductId(productId);
+        order2.setProductNo(productNo);
         order2.setProductName(productName);
         order2.setProductNumber(productNumber);
         order2.setPrice(price);
@@ -857,7 +872,7 @@ public class TOrderController {
         orderDetails.setCreateDate(new Date());
         orderDetails.setPrice(price);
         orderDetails.setProductName(productName);
-        orderDetails.setProductNo(product.getNo());
+        orderDetails.setProductNo(productNo);
         orderDetails.setProductNumber(productNumber);
         orderDetails.setAmount(price);
         orderDetails.setCompanyType(companyType);
@@ -1182,6 +1197,7 @@ public class TOrderController {
         String frpCode2 = "ALIPAY_NATIVE";
 
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());
@@ -1231,6 +1247,7 @@ public class TOrderController {
         }
         order.setNote(note.toString());
         TOrder order2 = new TOrder();
+        order2.setId(IDGenerator.orderID());
         order2.setCreateDate(new Date());
         order2.setModifyDate(new Date());
         order2.setAdminId(admin.getId());
@@ -1689,6 +1706,7 @@ public class TOrderController {
         String frpCode1 = "WEIXIN_XCX";
         BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());
@@ -2013,8 +2031,12 @@ public class TOrderController {
                     }
                 }
             }else {
-                equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
-            }
+                if (!order.getIsNotified().equals("1")) {
+                    String paySuccess = equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
+                    if (paySuccess.equals("success")) {
+                        order.setIsNotified("1");
+                    }
+                }            }
             orderService.updateById(order);
 //            equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
             try {
@@ -2025,14 +2047,19 @@ public class TOrderController {
             }catch (Exception e) {
                 e.printStackTrace();
             }
-            try {
+            //            try {
+            LambdaQueryWrapper<TOrderTask> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(TOrderTask::getSn, sn);
+            TOrderTask oldOrderTask = orderTaskService.getOne(queryWrapper);
+            if (oldOrderTask == null) {
                 TOrderTask orderTask = new TOrderTask();
                 BeanUtils.copyPropertiesIgnoreNull(order, orderTask, true);
                 orderTask.setAgencyId(order.getId());
                 orderTaskService.save(orderTask);
-            }catch (Exception e) {
-                e.printStackTrace();
             }
+//            }catch (Exception e) {
+//                e.printStackTrace();
+//            }
             //传送数据
             sentJingZhun(order);
             return R.ok("支付成功");
@@ -2041,8 +2068,12 @@ public class TOrderController {
             String gtClientId = equipment.getGtClientId();
             JSONObject kindData = new JSONObject();
             kindData.put("sn", order.getSn());
-            equipmentService.sentMessage(equipment.getClientId(),PushUtils.buildJson("pay_faile", kindData.toString()).toString());
-            order.setNote(gtClientId + "支付失败");
+            if (!order.getIsNotified().equals("2")) {
+                String payFail = equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_faile", kindData.toString()).toString());
+                if (payFail.equals("success")) {
+                    order.setIsNotified("2");
+                }
+            }            order.setNote(gtClientId + "支付失败");
             orderService.updateById(order);
             return R.fail(ResponseCodesEnum.A0001,"支付失败");
         }
@@ -2055,7 +2086,7 @@ public class TOrderController {
      */
     @RequestMapping(value = "/notify", method = RequestMethod.GET)
     @ResponseBody
-    public Object refund(HttpServletRequest request) {
+    public String notify(HttpServletRequest request) {
 
         String r6_Status = request.getParameter("r6_Status");
 
@@ -2144,7 +2175,12 @@ public class TOrderController {
                     }
                 }
             }else {
-                equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
+                if (!order.getIsNotified().equals("1")) {
+                    String paySuccess = equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
+                    if (paySuccess.equals("success")) {
+                        order.setIsNotified("1");
+                    }
+                }
             }
             orderService.updateById(order);
 
@@ -2156,14 +2192,19 @@ public class TOrderController {
             }catch (Exception e) {
                 e.printStackTrace();
             }
-            try {
+//            try {
+            LambdaQueryWrapper<TOrderTask> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(TOrderTask::getSn, sn);
+            TOrderTask oldOrderTask = orderTaskService.getOne(queryWrapper);
+            if (oldOrderTask == null) {
                 TOrderTask orderTask = new TOrderTask();
                 BeanUtils.copyPropertiesIgnoreNull(order, orderTask, true);
                 orderTask.setAgencyId(order.getId());
                 orderTaskService.save(orderTask);
-            }catch (Exception e) {
-                e.printStackTrace();
             }
+//            }catch (Exception e) {
+//                e.printStackTrace();
+//            }
             //传送数据
             sentJingZhun(order);
             return "success";
@@ -2172,13 +2213,18 @@ public class TOrderController {
             String gtClientId = byClientId.getGtClientId();
             JSONObject kindData = new JSONObject();
             kindData.put("sn", order.getSn());
-            equipmentService.sentMessage(byClientId.getClientId(),PushUtils.buildJson("pay_faile", kindData.toString()).toString());
+            if (!order.getIsNotified().equals("2")) {
+                String payFail = equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_faile", kindData.toString()).toString());
+                if (payFail.equals("success")) {
+                    order.setIsNotified("2");
+                }
+            }
             order.setNote(gtClientId + "支付失败");
             orderService.updateById(order);
+            return "success";
         }
-
-        return "success";
     }
+
     //发送两次mq
     private void sendMqTwo(String clientId, String kind) {
         // 定时任务1
@@ -2844,7 +2890,7 @@ public class TOrderController {
         return "success";
     }
 
-    @ApiOperation(value = "添加订单")
+    @ApiOperation(value = "添加国内订单")
     @PostMapping("/addOrder")
     public ResponseModel<?> addOrder(@RequestBody TOrder order) {
         boolean save = orderService.save(order);
@@ -3090,6 +3136,7 @@ public class TOrderController {
 
         TProduct product =  R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());

+ 2 - 0
src/main/java/com/szwl/controller/TWeixinPayController.java

@@ -17,6 +17,7 @@ import com.szwl.model.utils.PushUtils;
 import com.szwl.service.TEquipmentService;
 import com.szwl.service.TOrderService;
 import com.szwl.service.TWeixinPayConfigService;
+import com.szwl.utils.IDGenerator;
 import com.szwl.weixin.refund.model.CreateRequest;
 import com.szwl.weixin.util.HttpUtils;
 import com.wechat.pay.java.service.refund.model.AmountReq;
@@ -252,6 +253,7 @@ public class TWeixinPayController {
         String notifyUrl = JoinpayConstant.Notify_Url;
         String frpCode1 = "WEIXIN_NATIVE";
         TOrder order = new TOrder();
+        order.setId(IDGenerator.orderID());
         order.setCreateDate(new Date());
         order.setModifyDate(new Date());
         order.setAdminId(admin.getId());

+ 37 - 0
src/main/java/com/szwl/feign/bean/SyncOldFeign.java

@@ -0,0 +1,37 @@
+package com.szwl.feign.bean;
+
+import com.szwl.model.bo.ResponseModel;
+import com.szwl.model.entity.TCoinOrder;
+import com.szwl.model.entity.TOrder;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(name = "syncOld-server")
+//@FeignClient(name = "syncOld-server", url = "http://127.0.0.1:49015")
+public interface SyncOldFeign {
+    /**
+     * syncOrder 同步 order 表
+     * @param adminId
+     * @param clientId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    @PostMapping("/oldOrder/getOrderByACT")
+    ResponseModel<List<TOrder>> getOrderByACT(@RequestParam Long adminId, @RequestParam String clientId, @RequestParam String startTime, @RequestParam String endTime);
+
+    /**
+     * syncOrder 同步 coinOrder 表
+     * @param adminId
+     * @param clientId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    @PostMapping("/oldCoinOrder/getCoinOrderByACT")
+    ResponseModel<List<TCoinOrder>> getCoinOrderByACT(@RequestParam Long adminId, @RequestParam String clientId, @RequestParam String startTime, @RequestParam String endTime);
+
+}

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

@@ -3,6 +3,8 @@ package com.szwl.mapper;
 import com.szwl.model.entity.TCoinOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -13,4 +15,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TCoinOrderMapper extends BaseMapper<TCoinOrder> {
 
+    int insertBatchSomeColumn(List<TCoinOrder> entityList);
+
 }

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

@@ -3,6 +3,8 @@ package com.szwl.mapper;
 import com.szwl.model.entity.TOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -13,4 +15,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TOrderMapper extends BaseMapper<TOrder> {
 
+    int insertBatchSomeColumn(List<TOrder> entityList);
+
 }

File diff suppressed because it is too large
+ 2 - 1
src/main/java/com/szwl/mapper/xml/TOrderMapper.xml


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

@@ -28,6 +28,7 @@ public class TAdmin implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     private Date createDate;

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

@@ -25,7 +25,8 @@ public class TCoinOrder implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "订单创建时间")

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

@@ -25,7 +25,8 @@ public class TEquipment implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     private Date createDate;

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

@@ -26,7 +26,8 @@ public class TOrder implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "订单唯一ID")
-    @TableId(value = "id", type = IdType.AUTO)
+//    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "创建时间")
@@ -156,5 +157,8 @@ public class TOrder implements Serializable {
     @ApiModelProperty(value = "设备类型,0:棉花糖,1,爆米花")
     private String machineType;
 
+    @ApiModelProperty(value = "是否通知MQ,0:未通知,1:通知支付成功做糖,2:通知支付失败")
+    private String isNotified;
+
 
 }

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

@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 import java.util.Random;
 
 /**

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

@@ -45,6 +45,7 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
         if(StringUtils.isEmpty(channel)||channel.equals("1")||StringUtils.isEmpty(equimentType)){
             //用个推
             PushUtils.push(equipment.getGtClientId(), "", "", json);
+            return "success";
         }
         if(StringUtils.isNotEmpty(channel)&&channel.equals("2")&&StringUtils.isNotEmpty(equimentType)){
             //用Mq
@@ -54,8 +55,10 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
             org.springframework.amqp.core.Message message = new org.springframework.amqp.core.Message(json.getBytes(), messageProperties);
             amqpTemplate.send(equimentType, clientId, message);
             System.out.println("mq发送成功,clientId="+clientId+"&json="+json);
+
+            return "success";
         }
-        return "success";
+        return "error";
     }
 
 }

+ 2 - 0
src/main/java/com/szwl/service/impl/THuifuMchServiceImpl.java

@@ -20,6 +20,7 @@ import com.szwl.service.THuifuTempOrderService;
 import com.szwl.service.TOrderDetailsService;
 import com.szwl.service.TOrderService;
 import com.szwl.utils.HuifuUtils;
+import com.szwl.utils.IDGenerator;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -204,6 +205,7 @@ public class THuifuMchServiceImpl extends ServiceImpl<THuifuMchMapper, THuifuMch
         TOrder tOrder = new TOrder();
         String[] ignoreProperties = {"id", "createDate","sn"};
         BeanUtil.copyProperties(huifuTempOrder, tOrder, ignoreProperties);
+        tOrder.setId(IDGenerator.orderID());
         tOrder.setSn(sn);
         tOrder.setCreateDate(new Date());
         tOrder.setModifyDate(new Date());

+ 93 - 0
src/main/java/com/szwl/utils/IDGenerator.java

@@ -0,0 +1,93 @@
+package com.szwl.utils;
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.IdUtil;
+
+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 --> equipment 等常用表
+     *
+     * @return 订单ID
+     */
+    public static synchronized long commonID() {
+        String timestamp = dateFormat1.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        return Long.parseLong(timestamp + c);
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于国内订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long orderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+        String s2 = String.valueOf(nextSeq);
+        char c1 = s2.charAt(s2.length() - 1);
+
+        String s = "5"; // 表示国内订单
+        return Long.parseLong(s + timestamp + c + randomNumber + c1);
+    }
+
+    /**
+     * 生成唯一的18位长整型ID --> 用于海外订单
+     *
+     * @return 订单ID
+     */
+    public static synchronized long coinOrderID() {
+        String timestamp = dateFormat.format(new Date()).substring(2);
+        long threadId = Thread.currentThread().getId();
+        String s1 = String.valueOf(threadId);
+        char c = s1.charAt(s1.length() - 1);
+        String randomNumber = generateRandomNumber();
+
+        // 乐观锁部分
+        long currentSeq;
+        long nextSeq;
+        do {
+            currentSeq = seq.get();
+            nextSeq = (currentSeq >= 999) ? 0 : currentSeq + 1;
+        } while (!seq.compareAndSet(currentSeq, nextSeq));
+        String s2 = String.valueOf(nextSeq);
+        char c1 = s2.charAt(s2.length() - 1);
+
+        String s = "1"; // 表示海外订单
+        return Long.parseLong(s + timestamp + c + randomNumber + c1);
+    }
+
+    /**
+     * 生成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);
+    }
+}

+ 16 - 0
src/main/java/com/szwl/utils/InsertBatchSomeColumnSqlInjector.java

@@ -0,0 +1,16 @@
+package com.szwl.utils;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
+
+import java.util.List;
+
+public class InsertBatchSomeColumnSqlInjector extends DefaultSqlInjector {
+    @Override
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
+        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
+        methodList.add(new InsertBatchSomeColumn());
+        return methodList;
+    }
+}

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

@@ -31,8 +31,8 @@ logging:
 oauth:
   wx:
     #测试帐号
-#     appID: wx6959f112e9ffbfa3
-#     appSecret: 32f6fdf12bc25361110e1786f386eaab
+#    appID: wx6959f112e9ffbfa3
+#    appSecret: 32f6fdf12bc25361110e1786f386eaab
     #正式账户
     appID: wxcd5b1b2636c9f611
     appSecret: e2854aa99f8279f33b4f065b2ffb75b1
@@ -56,7 +56,7 @@ eureka:
     serviceUrl:
       defaultZone: http://120.25.151.99:49001/eureka/
     register-with-eureka: true
-#    register-with-eureka: false
+  #    register-with-eureka: false
   instance:
     prefer-ip-address: true
     ip-address: 120.25.151.99