Quellcode durchsuchen

fix: 解决雪花算法生成重复的问题

xdd vor 2 Wochen
Ursprung
Commit
92bd1b1c9b

+ 3 - 2
fs-admin/src/main/java/com/fs/company/controller/CompanyController.java

@@ -26,6 +26,7 @@ import com.fs.company.vo.CompanyVoiceCallerListVO;
 import com.fs.core.security.LoginUser;
 import com.fs.core.security.SecurityUtils;
 import com.fs.core.web.service.TokenService;
+import com.fs.system.config.SnowflakeUtils;
 import lombok.Synchronized;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -212,7 +213,7 @@ public class CompanyController extends BaseController
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         CompanyRecharge recharge=new CompanyRecharge();
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         recharge.setRechargeNo(orderSn);
         recharge.setCompanyId(param.getCompanyId());
         recharge.setMoney(param.getMoney());
@@ -235,7 +236,7 @@ public class CompanyController extends BaseController
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         CompanyDeduct deduct=new CompanyDeduct();
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         deduct.setDeductNo(orderSn);
         deduct.setCompanyId(param.getCompanyId());
         deduct.setMoney(param.getMoney());

+ 3 - 2
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreAfterSalesServiceImpl.java

@@ -35,6 +35,7 @@ import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.store.mapper.FsStoreDeliversMapper;
 import com.fs.store.mapper.FsWarehousesMapper;
+import com.fs.system.config.SnowflakeUtils;
 import com.fs.tzBank.TzBankService;
 import com.fs.pay.pay.domain.RefundResult;
 import com.fs.pay.pay.service.PayService;
@@ -414,7 +415,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
         if (storeAfterSales.getOrderStatus().equals(OrderInfoEnum.STATUS_1.getValue()) ) {
             if(StringUtils.isNotEmpty(order.getExtendOrderId())){
                 //更新订单code
-                String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+                String orderSn = SnowflakeUtils.nextId();
                 FsStoreOrder orderMap=new FsStoreOrder();
                 orderMap.setId(order.getId());
                 orderMap.setOrderCode(orderSn);
@@ -816,7 +817,7 @@ public class FsStoreAfterSalesServiceImpl implements IFsStoreAfterSalesService
             if (storeAfterSales.getOrderStatus().equals(OrderInfoEnum.STATUS_1.getValue()) ) {
                 if(StringUtils.isNotEmpty(order.getExtendOrderId())){
                     //更新订单code
-                    String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+                    String orderSn = SnowflakeUtils.nextId();
                     FsStoreOrder orderMap=new FsStoreOrder();
                     orderMap.setId(order.getId());
                     orderMap.setOrderCode(orderSn);

+ 14 - 9
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -53,10 +53,8 @@ import com.fs.erp.utils.ErpContextHolder;
 import com.fs.express.FsStoreDeliversService;
 import com.fs.express.cache.FsStoreDeliversCacheService;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
-import com.fs.huifuPay.domain.HuiFuRefundResult;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.dto.*;
-import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.pay.pay.domain.CreateWxOrderResult;
 import com.fs.pay.pay.domain.RefundResult;
@@ -64,7 +62,6 @@ import com.fs.pay.pay.dto.OrderQueryDTO;
 import com.fs.pay.pay.dto.RefundDTO;
 import com.fs.pay.pay.dto.WxJspayDTO;
 import com.fs.pay.pay.service.PayService;
-import com.fs.pay.pay.util.PayUtil;
 import com.fs.store.cache.IFsUserCacheService;
 import com.fs.store.cache.impl.IFsStoreProductCacheServiceImpl;
 import com.fs.store.config.StoreConfig;
@@ -82,6 +79,7 @@ import com.fs.store.service.channel.param.PayProcessContext;
 import com.fs.store.strategy.ShippingOrder;
 import com.fs.store.strategy.ShippingTemplateManager;
 import com.fs.store.vo.*;
+import com.fs.system.config.SnowflakeUtils;
 import com.fs.system.service.ISysConfigService;
 import com.fs.tzBank.TzBankService;
 import com.fs.tzBank.utils.TzConfigUtils;
@@ -273,6 +271,12 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private FsUserMapper fsUserMapper;
 
+    @Value("${snowflake.worker-id:1}")
+    private long workerId;
+
+    @Value("${snowflake.datacenter-id:1}")
+    private long datacenterId;
+
     @Override
     public void syncExpressToWx() {
         List<FsWxExpressTask> fsWxExpressTasks = fsWxExpressTaskMapper.selectPendingData();
@@ -437,7 +441,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 }
                 orderService.updateFsStoreOrder(order);
             }
-            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String payCode = SnowflakeUtils.nextId();
 
             if(order.getPayType().equals("1")||order.getPayType().equals("2")){
                 String json = configService.selectConfigByKey("store.pay");
@@ -807,7 +811,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 }
             }
             //生成分布式唯一值
-            String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String orderSn = SnowflakeUtils.nextId();
+
             //是否使用积分
             Boolean isIntegral=false;
             //组合数据
@@ -1546,7 +1551,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 }
             }
             //生成分布式唯一值
-            String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String orderSn = SnowflakeUtils.nextId();
             //组合数据
             CompanyUser user= companyUserService.selectCompanyUserById(param.getCompanyUserId());
             FsStoreOrder storeOrder = new FsStoreOrder();
@@ -3134,7 +3139,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             }
 
 
-            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String payCode = SnowflakeUtils.nextId();
             String json = configService.selectConfigByKey("store.pay");
             FsPayConfig fsPayConfig = JSON.parseObject(json, FsPayConfig.class);
             List<FsStorePayment> fsStorePayments = fsStorePaymentMapper.selectFsStorePaymentByOrderIdNew(order.getId());
@@ -3235,7 +3240,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             if(!order.getIsPayRemain().equals(0)){
                 return R.error("此订单已支付");
             }
-            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String payCode = SnowflakeUtils.nextId();
             //易宝支付
             String json = configService.selectConfigByKey("store.pay");
             FsPayConfig fsPayConfig = JSON.parseObject(json, FsPayConfig.class);
@@ -3640,7 +3645,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         }
         FsUser user=userService.selectFsUserById(order.getUserId());
         if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())){
-            String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
+            String payCode = SnowflakeUtils.nextId();
             String json = configService.selectConfigByKey("store.pay");
             FsPayConfig fsPayConfig = JSON.parseObject(json, FsPayConfig.class);
 

+ 2 - 1
fs-service-system/src/main/java/com/fs/store/service/impl/FsStorePaymentServiceImpl.java

@@ -25,6 +25,7 @@ import com.fs.store.service.IFsStoreOrderService;
 import com.fs.store.service.channel.PaymentHandler;
 import com.fs.store.service.channel.PaymentHandlerHolder;
 import com.fs.store.service.channel.param.PayProcessContext;
+import com.fs.system.config.SnowflakeUtils;
 import com.fs.tzBank.TzBankService;
 import com.fs.store.param.FsStoreStatisticsParam;
 import com.fs.store.service.IFsCouponScheduleService;
@@ -166,7 +167,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
             return R.error("支付金额必须大于0");
         }
 
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
 
         CompanyUser companyUser=companyUserService.selectCompanyUserById(payment.getCompanyUserId());
         FsUser user=userService.selectFsUserById(payment.getUserId());

+ 21 - 0
fs-service-system/src/main/java/com/fs/system/config/SnowflakeConfig.java

@@ -0,0 +1,21 @@
+package com.fs.system.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+@Configuration
+public class SnowflakeConfig {
+
+    @Value("${snowflake.worker-id:1}")
+    private long workerId;
+
+    @Value("${snowflake.datacenter-id:1}")
+    private long datacenterId;
+
+    @PostConstruct
+    public void init() {
+        SnowflakeUtils.init(workerId, datacenterId);
+    }
+}

+ 31 - 0
fs-service-system/src/main/java/com/fs/system/config/SnowflakeUtils.java

@@ -0,0 +1,31 @@
+package com.fs.system.config;
+
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.IdUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+public class SnowflakeUtils {
+
+    private static Snowflake snowflake;
+
+    public static void init(long workerId, long datacenterId){
+        snowflake = IdUtil.getSnowflake(workerId, datacenterId);
+    }
+
+    public static String nextId() {
+        if (snowflake == null) {
+            throw new IllegalStateException("SnowflakeUtils not initialized");
+        }
+        return snowflake.nextIdStr();
+    }
+
+    public static long nextIdLong() {
+        if (snowflake == null) {
+            throw new IllegalStateException("SnowflakeUtils not initialized");
+        }
+        return snowflake.nextId();
+    }
+}

+ 4 - 3
fs-service-system/src/main/java/com/fs/voice/service/impl/VoiceServiceImpl.java

@@ -18,6 +18,7 @@ import com.fs.crm.service.ICrmCustomerContactsService;
 import com.fs.crm.service.ICrmCustomerService;
 import com.fs.store.domain.FsStoreOrder;
 import com.fs.store.service.IFsStoreOrderService;
+import com.fs.system.config.SnowflakeUtils;
 import com.fs.system.config.SystemVoiceConfig;
 import com.fs.system.service.ISysConfigService;
 import com.fs.voice.service.IVoiceService;
@@ -161,7 +162,7 @@ public class VoiceServiceImpl implements IVoiceService
                 }
             }
         }
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         Long time=new Date().getTime();
         String seq=time.toString();
         Call call=new Call();
@@ -387,7 +388,7 @@ public class VoiceServiceImpl implements IVoiceService
                 }
             }
         }
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         //写入SESSION
         CompanyVoiceLogs logs=new CompanyVoiceLogs();
         logs.setCompanyId(companyId);
@@ -507,7 +508,7 @@ public class VoiceServiceImpl implements IVoiceService
                 }
             }
         }
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         //写入SESSION
         CompanyVoiceLogs logs=new CompanyVoiceLogs();
         logs.setCompanyId(companyId);

+ 3 - 1
fs-service-system/src/main/resources/application-config.yml

@@ -108,7 +108,9 @@ aifabu:  #爱链接
 #  润天极光推送 AppKey:cc9a0120a3e4270c9cba340d   Secret :cfc2575d3cd7470d584c990c
 #  医药系统演示 AppKey:0415b52c234d6cea1f25e2cd   Secret :50375b02407f27e9417e5d97
 
-
+snowflake:
+  worker-id: 50
+  datacenter-id: 60
 
 
 

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/controller/CouponController.java

@@ -12,6 +12,7 @@ import com.fs.store.domain.FsStoreCouponUser;
 import com.fs.store.param.*;
 import com.fs.store.service.*;
 import com.fs.store.vo.FsStoreCouponIssueVO;
+import com.fs.system.config.SnowflakeUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -92,7 +93,7 @@ public class CouponController extends AppBaseController {
     @ApiOperation("获取销售可用套餐卷")
     @GetMapping("/getCouponIssueById")
     public R getCouponIssueById(@RequestParam(value="id") Long id){
-        String code = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String code = SnowflakeUtils.nextId();
         redisCache.setCacheObject("coupon:"+code,id.toString(),10, TimeUnit.MINUTES);
         FsStoreCouponIssueVO couponIssue=fsStoreCouponIssueService.selectFsStoreCouponIssueVOById(id);
         return R.ok().put("data",couponIssue).put("code",code);

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/controller/TestController.java

@@ -17,6 +17,7 @@ import com.fs.store.param.FsTestTempItemListUParam;
 import com.fs.store.service.*;
 import com.fs.store.utils.TestReportUtil;
 import com.fs.store.vo.FsTestTempItemListUVO;
+import com.fs.system.config.SnowflakeUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -83,7 +84,7 @@ public class TestController extends  AppBaseController {
     @PostMapping("/doReport")
     @RepeatSubmit
     public R doReport(@Validated  @RequestBody FsTestDoReportParam param, HttpServletRequest request){
-        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        String orderSn = SnowflakeUtils.nextId();
         FsTestReport testReport = new FsTestReport();
         testReport.setUserId(Long.parseLong(getUserId()));
         testReport.setPatientId(param.getPatientId());

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/pay/controller/AliPayController.java

@@ -16,6 +16,7 @@ import com.fs.store.domain.FsStorePayment;
 import com.fs.store.mapper.FsStorePaymentMapper;
 import com.fs.store.param.FsStorePaymentPayParam;
 import com.fs.store.service.IFsStorePaymentService;
+import com.fs.system.config.SnowflakeUtils;
 import com.ijpay.alipay.AliPayApi;
 import com.ijpay.alipay.AliPayApiConfig;
 import com.ijpay.alipay.AliPayApiConfigKit;
@@ -112,7 +113,7 @@ public class AliPayController extends AliPayApiController {
 	public R wapPay(@Validated @RequestBody FsStorePaymentPayParam param, HttpServletRequest request){
 		try {
 			CompanyUser companyUser=companyUserService.selectCompanyUserById(param.getCompanyUserId());
-			String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+			String orderSn = SnowflakeUtils.nextId();
 			AliPayApiConfig aliPayApiConfig = AliPayApiConfigKit.getAliPayApiConfig();
 			Map<String, String> paramsMap = new HashMap<>();
 			paramsMap.put("app_id", aliPayApiConfig.getAppId());