Browse Source

feat: 推送erp速度优化

xdd 1 month ago
parent
commit
f7246ba21e

+ 12 - 0
fs-service-system/src/main/java/com/fs/store/cache/IFsExpressCacheService.java

@@ -0,0 +1,12 @@
+package com.fs.store.cache;
+
+import com.fs.store.domain.FsExpress;
+
+public interface IFsExpressCacheService {
+    /**
+     * 根据omsCode查询快递信息
+     * @param omsCode 快递编码
+     * @return 快递信息
+     */
+    FsExpress selectFsExpressByOmsCode(String omsCode);
+}

+ 12 - 0
fs-service-system/src/main/java/com/fs/store/cache/IFsStoreProductAttrValueCacheService.java

@@ -0,0 +1,12 @@
+package com.fs.store.cache;
+
+import com.fs.store.domain.FsStoreProductAttrValue;
+
+public interface IFsStoreProductAttrValueCacheService {
+    /**
+     * 根据ID查询商品属性值信息
+     * @param id 商品属性值ID
+     * @return 商品属性值信息
+     */
+    FsStoreProductAttrValue selectFsStoreProductAttrValueById(Long id);
+}

+ 42 - 0
fs-service-system/src/main/java/com/fs/store/cache/impl/FsExpressCacheServiceImpl.java

@@ -0,0 +1,42 @@
+package com.fs.store.cache.impl;
+
+import com.fs.store.cache.IFsExpressCacheService;
+import com.fs.store.domain.FsExpress;
+import com.fs.store.service.IFsExpressService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class FsExpressCacheServiceImpl implements IFsExpressCacheService {
+
+    private final RedisTemplate<String, Object> redisTemplate;
+    private final IFsExpressService fsExpressService;
+
+    @Override
+    public FsExpress selectFsExpressByOmsCode(String omsCode) {
+        if (omsCode == null || omsCode.trim().isEmpty()) {
+            throw new IllegalArgumentException("快递编码不能为空!");
+        }
+
+        // 尝试从缓存获取
+        try {
+            String redisKey = String.format("fs:express:%s", omsCode);
+            FsExpress fsExpress = (FsExpress) redisTemplate.opsForValue().get(redisKey);
+            if (fsExpress != null) {
+                log.debug("缓存命中快递信息, omsCode: {}", omsCode);
+                return fsExpress;
+            }
+        } catch (Exception e) {
+            log.error("获取快递缓存异常, omsCode: {}, 异常信息: {}", omsCode, e.getMessage(), e);
+        }
+
+        log.debug("缓存未命中快递信息, omsCode: {}, 从数据库查询", omsCode);
+        FsExpress fsExpress = fsExpressService.selectFsExpressByOmsCode(omsCode);
+
+        return fsExpress;
+    }
+}

+ 42 - 0
fs-service-system/src/main/java/com/fs/store/cache/impl/FsStoreProductAttrValueCacheServiceImpl.java

@@ -0,0 +1,42 @@
+package com.fs.store.cache.impl;
+
+import com.fs.store.cache.IFsStoreProductAttrValueCacheService;
+import com.fs.store.domain.FsStoreProductAttrValue;
+import com.fs.store.service.IFsStoreProductAttrValueService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class FsStoreProductAttrValueCacheServiceImpl implements IFsStoreProductAttrValueCacheService {
+
+    private final RedisTemplate<String, Object> redisTemplate;
+    private final IFsStoreProductAttrValueService productAttrValueService;
+
+    @Override
+    public FsStoreProductAttrValue selectFsStoreProductAttrValueById(Long id) {
+        if (id == null) {
+            throw new IllegalArgumentException("商品属性值ID不能为空!");
+        }
+
+        // 尝试从缓存获取
+        try {
+            String redisKey = String.format("fs:store:product:attr:value:%d", id);
+            FsStoreProductAttrValue productAttrValue = (FsStoreProductAttrValue) redisTemplate.opsForValue().get(redisKey);
+            if (productAttrValue != null) {
+                log.debug("缓存命中商品属性值信息, id: {}", id);
+                return productAttrValue;
+            }
+        } catch (Exception e) {
+            log.error("获取商品属性值缓存异常, id: {}, 异常信息: {}", id, e.getMessage(), e);
+        }
+
+        log.debug("缓存未命中商品属性值信息, id: {}, 从数据库查询", id);
+        FsStoreProductAttrValue productAttrValue = productAttrValueService.selectFsStoreProductAttrValueById(id);
+
+        return productAttrValue;
+    }
+}

+ 5 - 77
fs-service-system/src/main/java/com/fs/store/domain/FsExpress.java

@@ -2,15 +2,19 @@ package com.fs.store.domain;
 
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 快递公司对象 fs_express
- * 
+ *
  * @author fs
  * @date 2022-03-15
  */
+@EqualsAndHashCode(callSuper = true)
+@Data
 public class FsExpress extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -42,80 +46,4 @@ public class FsExpress extends BaseEntity
     @Excel(name = "OMS编号")
     private String omsCode;
 
-    public String getOmsCode() {
-        return omsCode;
-    }
-
-    public void setOmsCode(String omsCode) {
-        this.omsCode = omsCode;
-    }
-
-    public void setId(Long id)
-    {
-        this.id = id;
-    }
-
-    public Long getId() 
-    {
-        return id;
-    }
-    public void setCode(String code) 
-    {
-        this.code = code;
-    }
-
-    public String getCode() 
-    {
-        return code;
-    }
-    public void setName(String name) 
-    {
-        this.name = name;
-    }
-
-    public String getName() 
-    {
-        return name;
-    }
-    public void setSort(Long sort) 
-    {
-        this.sort = sort;
-    }
-
-    public Long getSort() 
-    {
-        return sort;
-    }
-    public void setIsShow(Integer isShow) 
-    {
-        this.isShow = isShow;
-    }
-
-    public Integer getIsShow() 
-    {
-        return isShow;
-    }
-    public void setIsDel(Integer isDel) 
-    {
-        this.isDel = isDel;
-    }
-
-    public Integer getIsDel() 
-    {
-        return isDel;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("code", getCode())
-            .append("name", getName())
-            .append("sort", getSort())
-            .append("isShow", getIsShow())
-            .append("createTime", getCreateTime())
-            .append("updateTime", getUpdateTime())
-            .append("isDel", getIsDel())
-            .toString();
-    }
 }

+ 24 - 25
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -62,6 +62,8 @@ 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.store.cache.IFsExpressCacheService;
+import com.fs.store.cache.IFsStoreProductAttrValueCacheService;
 import com.fs.store.cache.IFsUserCacheService;
 import com.fs.store.cache.impl.IFsStoreProductCacheServiceImpl;
 import com.fs.store.config.StoreConfig;
@@ -141,9 +143,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private IFsUserService userService;
 
-    @Autowired
-    private IFsUserCacheService fsUserCacheService;
-
     @Autowired
     private IFsUserBillService billService;
 
@@ -164,6 +163,8 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
     @Autowired
     private IFsExpressService expressService;
+    @Autowired
+    private IFsExpressCacheService fsExpressCacheService;
 
     @Autowired
     private FSSysConfig sysConfig;
@@ -177,8 +178,9 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
     @Autowired
     private ICompanyUserService companyUserService;
+
     @Autowired
-    private IFsStoreProductAttrValueService attrValueService;
+    private IFsStoreProductAttrValueCacheService fsStoreProductAttrValueCacheService;
     @Autowired
     private IFsStoreProductService storeProductService;
 
@@ -253,9 +255,6 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private IFsStorePaymentService fsStorePaymentService;
 
-    @Autowired
-    private FsStoreDeliversCacheService fsStoreDeliversCacheService;
-
     @Autowired
     private FsWxExpressTaskMapper fsWxExpressTaskMapper;
 
@@ -1169,7 +1168,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
 
             // 多运单号适配
-            FsExpress express=expressService.selectFsExpressByOmsCode(deliverCode);
+            FsExpress express=fsExpressCacheService.selectFsExpressByOmsCode(deliverCode);
             if(ObjectUtil.isNotNull(express)) {
                 FsStoreDelivers fsStoreDeliver = new FsStoreDelivers();
                 fsStoreDeliver.setOrderId(order.getId());
@@ -1260,7 +1259,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     public void updateDeliveryOrder(Long id, String deliveryId, String deliverCode, String deliverName) {
         FsStoreOrder order = fsStoreOrderMapper.selectFsStoreOrderById(id);
         if (order != null) {
-            FsExpress express = expressService.selectFsExpressByOmsCode(deliverCode);
+            FsExpress express = fsExpressCacheService.selectFsExpressByOmsCode(deliverCode);
             if (express != null) {
                 order.setDeliveryName(deliverName);
                 order.setDeliverySn(express.getCode());
@@ -1566,7 +1565,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             int ydspHouse = 0;
             List<FsStoreCartQueryVO> carts=new ArrayList<>();
             for (StorePackageProductDTO goods : goodsList) {
-                FsStoreProductAttrValue attrValue=attrValueService.selectFsStoreProductAttrValueById(goods.getId());
+                FsStoreProductAttrValue attrValue=fsStoreProductAttrValueCacheService.selectFsStoreProductAttrValueById(goods.getId());
                 if(attrValue!=null&&attrValue.getProductId()!=null){
                     FsStoreProduct product=storeProductService.selectFsStoreProductById(attrValue.getProductId());
                     if(product!=null){
@@ -1983,7 +1982,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         //5.全款支付且应付金额小于等于100元,快递方式默认中通小件455 ZTO 中通小件 CQRXSF.0235487868_241231
         if(order.getCompanyId()!=null&&order.getStoreHouseCode()!=null&&order.getStoreHouseCode().equals("WHSP001")){
             //杭州家有仙妻实业有限公司 全部订单快递方式设置为商城德邦快递
-            FsExpress express=expressService.selectFsExpressByOmsCode("SF-WHC");
+            FsExpress express=fsExpressCacheService.selectFsExpressByOmsCode("SF-WHC");
             erpOrder.setExpress_code(express.getOmsCode());
             order.setDeliveryName(express.getName());
             order.setDeliverySn(express.getCode());
@@ -2005,15 +2004,15 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 FsExpress express = new FsExpress();
                 //express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
                 if(order.getPayPrice().compareTo(new BigDecimal(100))<=0){
-                    express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                    express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                 }
                 else{
                     boolean found = containsAddress(order.getUserAddress());
                     if(found){
-                        express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                        express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                     }
                     else{
-                        express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                        express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                     }
                 }
                 Asserts.notNull(express,"快递没有找到!");
@@ -2026,16 +2025,16 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 boolean found = containsAddress(order.getUserAddress());
                 if(found){
                     if(StringUtils.isNotEmpty(company.getOmsCode())){
-                        express = expressService.selectFsExpressByOmsCode(company.getOmsCode());
+                        express = fsExpressCacheService.selectFsExpressByOmsCode(company.getOmsCode());
                     }else{
-                        express=expressService.selectFsExpressByOmsCode("EMS.1");
+                        express=fsExpressCacheService.selectFsExpressByOmsCode("EMS.1");
                     }
                 }
                 else{
                     if(StringUtils.isNotEmpty(company.getOmsCode())){
-                        express = expressService.selectFsExpressByOmsCode(company.getOmsCode());
+                        express = fsExpressCacheService.selectFsExpressByOmsCode(company.getOmsCode());
                     }else{
-                        express = expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                        express = fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                     }
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
@@ -2053,14 +2052,14 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
             if(order.getPayDelivery().compareTo(new BigDecimal(0))==0){  //没有物流代收(全款订单)
                 FsExpress express=new FsExpress();
                 if(order.getPayPrice().compareTo(new BigDecimal(100))<=0){
-                    express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                    express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                 }else{
                     boolean found = containsAddress(order.getUserAddress());
                     if(found){
-                        express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                        express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                     }
                     else{
-                        express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                        express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                     }
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
@@ -2076,10 +2075,10 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 FsExpress express=new FsExpress();
                 boolean found = containsAddress(order.getUserAddress());
                 if(found){
-                    express=expressService.selectFsExpressByOmsCode("EMS.1");
+                    express=fsExpressCacheService.selectFsExpressByOmsCode("EMS.1");
                 }
                 else {
-                    express=expressService.selectFsExpressByOmsCode(deliverOmsCode);
+                    express=fsExpressCacheService.selectFsExpressByOmsCode(deliverOmsCode);
                 }
                 erpOrder.setExpress_code(express.getOmsCode());
                 order.setDeliveryName(express.getName());
@@ -2144,7 +2143,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                     List<StoreProductGroupDTO> productGroupDTOS=JSONUtil.toList(jsonArray, StoreProductGroupDTO.class);
                     if(productGroupDTOS!=null){
                         for(StoreProductGroupDTO dto:productGroupDTOS){
-                            FsStoreProductAttrValue attrValue=attrValueService.selectFsStoreProductAttrValueById(dto.getId());
+                            FsStoreProductAttrValue attrValue=fsStoreProductAttrValueCacheService.selectFsStoreProductAttrValueById(dto.getId());
 
                             ErpOrderItem item=new ErpOrderItem();
                             item.setItem_code(attrValue.getBarCode());
@@ -2228,7 +2227,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
             JSONObject jsonObject1 = objects.getJSONObject(0);
             Long id = jsonObject1.getLong("id");
-            FsStoreProductAttrValue attrValue=attrValueService.selectFsStoreProductAttrValueById(id);
+            FsStoreProductAttrValue attrValue=fsStoreProductAttrValueCacheService.selectFsStoreProductAttrValueById(id);
             if(attrValue!=null) {
                 // 根据产品id找仓库id
                 String warehouseCode = fsStoreProductCacheService.getWarehouseCodeByProductId(attrValue.getProductId());

+ 33 - 0
fs-sync/src/main/java/com/fs/fssync/sink/impl/FsExpressSinkStrategy.java

@@ -0,0 +1,33 @@
+package com.fs.fssync.sink.impl;
+
+import com.fs.fssync.sink.AbstractCdcSinkStrategy;
+import com.fs.store.domain.FsExpress;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+
+@Slf4j
+@Component
+public class FsExpressSinkStrategy extends AbstractCdcSinkStrategy<FsExpress> implements Serializable {
+
+    @Override
+    public boolean canHandle(String table) {
+        return "fs_express".equals(table);
+    }
+
+    @Override
+    public Class<FsExpress> getEntityClass() {
+        return FsExpress.class;
+    }
+
+    @Override
+    public String getKeyPrefix() {
+        return "fs:express:";
+    }
+
+    @Override
+    protected String getIdField() {
+        return "omsCode";
+    }
+}