diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/controller/TaoBaoController.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/controller/TaoBaoController.java new file mode 100644 index 0000000..60acf63 --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/controller/TaoBaoController.java @@ -0,0 +1,47 @@ +package org.dromara.zhishu.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.web.core.BaseController; +import org.dromara.zhishu.domain.vo.TaoBaoShopInfoVo; +import org.dromara.zhishu.domain.vo.TaoBaoTemplateInfoVo; +import org.dromara.zhishu.service.ITaoBaoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 淘宝店铺对外接口(供 Go 分销系统调用) + */ +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/taobao") +public class TaoBaoController extends BaseController { + + @Autowired + private final ITaoBaoService taoBaoService; + + /** + * 根据淘宝 UserID(mallId)获取 ERP 店铺 ID + */ + @SaIgnore + @GetMapping("/getShopId") + public R getShopId(@NotNull(message = "mallId不能为空") @RequestParam Long mallId) { + return R.ok(taoBaoService.getShopByMallId(mallId)); + } + + /** + * 根据 ERP 店铺 ID 获取运费模板 ID (还未联调) + */ + @SaIgnore + @GetMapping("/getTemplateId") + public R getTemplateId(@NotNull(message = "shopId不能为空") @RequestParam Long shopId) { + return R.ok(taoBaoService.getTemplateByShopId(shopId)); + } +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoShopInfoVo.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoShopInfoVo.java new file mode 100644 index 0000000..b26d71b --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoShopInfoVo.java @@ -0,0 +1,31 @@ +package org.dromara.zhishu.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 淘宝店铺信息(供 Go 分销系统) + */ +@Data +public class TaoBaoShopInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ERP 店铺 ID + */ + private Long shopId; + + /** + * 淘宝 UserID + */ + private Long mallId; + + /** + * 店铺 Token + */ + private String token; +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoTemplateInfoVo.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoTemplateInfoVo.java new file mode 100644 index 0000000..cff51a3 --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/domain/vo/TaoBaoTemplateInfoVo.java @@ -0,0 +1,31 @@ +package org.dromara.zhishu.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 淘宝运费模板信息(供 Go 分销系统) + */ +@Data +public class TaoBaoTemplateInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ERP 店铺 ID + */ + private Long shopId; + + /** + * 运费模板 ID + */ + private Long templateId; + + /** + * 店铺 Token + */ + private String token; +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/mapper/TaoBaoMapper.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/mapper/TaoBaoMapper.java new file mode 100644 index 0000000..4c38e33 --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/mapper/TaoBaoMapper.java @@ -0,0 +1,23 @@ +package org.dromara.zhishu.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.dromara.zhishu.domain.vo.TaoBaoShopInfoVo; +import org.dromara.zhishu.domain.vo.TaoBaoTemplateInfoVo; + +/** + * 淘宝店铺 Mapper + */ +@Mapper +public interface TaoBaoMapper { + + /** + * 根据淘宝 UserID 查询店铺信息 + */ + TaoBaoShopInfoVo selectShopByMallId(@Param("mallId") Long mallId, @Param("shopType") String shopType); + + /** + * 根据 ERP 店铺 ID 查询运费模板信息 + */ + TaoBaoTemplateInfoVo selectTemplateByShopId(@Param("shopId") Long shopId, @Param("shopType") String shopType); +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/ITaoBaoService.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/ITaoBaoService.java new file mode 100644 index 0000000..d157d8f --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/ITaoBaoService.java @@ -0,0 +1,20 @@ +package org.dromara.zhishu.service; + +import org.dromara.zhishu.domain.vo.TaoBaoShopInfoVo; +import org.dromara.zhishu.domain.vo.TaoBaoTemplateInfoVo; + +/** + * 淘宝店铺 Service + */ +public interface ITaoBaoService { + + /** + * 根据淘宝 UserID 获取 ERP 店铺信息 + */ + TaoBaoShopInfoVo getShopByMallId(Long mallId); + + /** + * 根据 ERP 店铺 ID 获取运费模板信息 + */ + TaoBaoTemplateInfoVo getTemplateByShopId(Long shopId); +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/ShopServiceImpl.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/ShopServiceImpl.java index 39c61f5..04e43c6 100644 --- a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/ShopServiceImpl.java +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/ShopServiceImpl.java @@ -597,6 +597,30 @@ public class ShopServiceImpl implements IShopService { * 同步孔夫子/闲鱼/淘宝等店铺的订阅状态(统一走 Go 接口) */ private void syncShopSubscriptionStatus(ShopVo shopVo) { + if (isTaobaoShopType(shopVo.getShopType())) { + syncTaobaoShopSubscriptionStatus(shopVo); + return; + } + applyGoSubscriptionSync(shopVo); + } + + /** + * 淘宝店铺:未订阅时保持本地状态,避免 Go 孔夫子接口误标为已订阅; + * 仅在已订阅/已到期后走 Go 同步续期信息。 + */ + private void syncTaobaoShopSubscriptionStatus(ShopVo shopVo) { + String currentStatus = StringUtils.isBlank(shopVo.getIsExpiration()) ? "0" : shopVo.getIsExpiration(); + if ("0".equals(currentStatus)) { + if (StringUtils.isBlank(shopVo.getIsExpiration())) { + updateShopSubscribeStatusQuietly(shopVo.getId(), null, "0", null); + } + shopVo.setIsExpiration("0"); + return; + } + applyGoSubscriptionSync(shopVo); + } + + private void applyGoSubscriptionSync(ShopVo shopVo) { String result2 = InterfaceUtils.getInterface(UrlUtil.getServiceGoUrl(), "/api/user/getKfzUserRecbusiness?userId=" + shopVo.getId()); Map resultMap = JSONObject.parseObject(result2, Map.class); diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/TaoBaoServiceImpl.java b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/TaoBaoServiceImpl.java new file mode 100644 index 0000000..be0c438 --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/java/org/dromara/zhishu/service/impl/TaoBaoServiceImpl.java @@ -0,0 +1,44 @@ +package org.dromara.zhishu.service.impl; + +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.zhishu.domain.vo.TaoBaoShopInfoVo; +import org.dromara.zhishu.domain.vo.TaoBaoTemplateInfoVo; +import org.dromara.zhishu.mapper.TaoBaoMapper; +import org.dromara.zhishu.service.ITaoBaoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 淘宝店铺 Service 实现 + */ +@RequiredArgsConstructor +@Service +public class TaoBaoServiceImpl implements ITaoBaoService { + + private static final String TB_SHOP_TYPE = "6"; + + @Autowired + private final TaoBaoMapper taoBaoMapper; + + @Override + public TaoBaoShopInfoVo getShopByMallId(Long mallId) { + TaoBaoShopInfoVo shopInfo = taoBaoMapper.selectShopByMallId(mallId, TB_SHOP_TYPE); + if (shopInfo == null || shopInfo.getShopId() == null) { + throw new ServiceException("未查询到淘宝店铺"); + } + return shopInfo; + } + + @Override + public TaoBaoTemplateInfoVo getTemplateByShopId(Long shopId) { + TaoBaoTemplateInfoVo templateInfo = taoBaoMapper.selectTemplateByShopId(shopId, TB_SHOP_TYPE); + if (templateInfo == null || templateInfo.getShopId() == null) { + throw new ServiceException("未查询到淘宝店铺"); + } + if (templateInfo.getTemplateId() == null) { + throw new ServiceException("店铺未设置运费模板"); + } + return templateInfo; + } +} diff --git a/ruoyi-modules/ruoyi-zhishu/src/main/resources/mapper/zhishu/TaoBaoMapper.xml b/ruoyi-modules/ruoyi-zhishu/src/main/resources/mapper/zhishu/TaoBaoMapper.xml new file mode 100644 index 0000000..492d85c --- /dev/null +++ b/ruoyi-modules/ruoyi-zhishu/src/main/resources/mapper/zhishu/TaoBaoMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + +