From ffb4a5eb46e9e14a78515a8fa443ff055886623d Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Sat, 12 Apr 2025 11:09:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/czg/product/entity/ShopVendor.java | 1 + .../czg/product/service/ShopSyncService.java | 8 +++ .../service/impl/ShopSyncServiceImpl.java | 64 +++++++++++++++++++ sqls/250403/tb_shop_vendor.sql | 2 + 4 files changed, 75 insertions(+) create mode 100644 sqls/250403/tb_shop_vendor.sql diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopVendor.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopVendor.java index e419707c..4aa4297d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopVendor.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopVendor.java @@ -32,6 +32,7 @@ public class ShopVendor implements Serializable { * 店铺Id */ private Long shopId; + private Long syncId; /** * 排序 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopSyncService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopSyncService.java index bb78ac19..f1620def 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopSyncService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopSyncService.java @@ -77,4 +77,12 @@ public interface ShopSyncService { * @param sourceProdId 主店商品ID */ void syncConsProBySourceShop(Long sourceShopId, Long sourceProdId, Long sysUserId); + + /** + * 同步供应商 开了同步耗材开关的子店铺 + * + * @param sourceShopId 主店ID + * @param vendorId 供应商Id + */ + void syncVendorBySourceShop(Long sourceShopId, Long vendorId, Long sysUserId); } diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopSyncServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopSyncServiceImpl.java index 5c6b3183..ca2b980e 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopSyncServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopSyncServiceImpl.java @@ -69,6 +69,8 @@ public class ShopSyncServiceImpl implements ShopSyncService { private ProdConsRelationService prodConsRelationService; @Resource private ShopUserService shopUserService; + @Resource + private ShopVendorService vendorService; @DubboReference private SyncNoticeService syncNoticeService; @@ -154,6 +156,7 @@ public class ShopSyncServiceImpl implements ShopSyncService { Map conGroupMap = syncConsGroup(sourceShopId, targetShopId, mainMapList); Map consInfoMap = syncConsInfo(sourceShopId, targetShopId, conGroupMap, mainMapList); syncConsPro(sourceShopId, targetShopId, consInfoMap, proMap); + syncVendor(sourceShopId, targetShopId, mainMapList); syncNoticeService.addNotice(targetShopId, sysUserId, "数据同步", JSON.toJSONString(mainMapList), null); } catch (Exception e) { log.error("同步异常", e); @@ -1017,6 +1020,67 @@ public class ShopSyncServiceImpl implements ShopSyncService { } } + public Map syncVendor(Long sourceShopId, Long pointShopId, List> mainMapList) { + Map vendorMap = new HashMap<>(); + List pointShopVendor = vendorService.queryChain().select(ShopVendor::getSyncId) + .eq(ShopVendor::getShopId, pointShopId) + .isNotNull(ShopVendor::getSyncId) + .listAs(Long.class); + + List list = vendorService.queryChain().eq(ShopVendor::getShopId, sourceShopId).list(); + list.forEach(vendor -> { + if (CollUtil.isEmpty(pointShopVendor) || !pointShopVendor.contains(vendor.getId())) { + ShopVendor vendorNew = BeanUtil.copyProperties(vendor, ShopVendor.class); + vendorNew.setId(null); + vendorNew.setSyncId(vendor.getId()); + vendorNew.setShopId(pointShopId); + vendorService.save(vendorNew); + vendorMap.put(vendor.getId(), vendorNew.getId()); + } + }); + buildNotice(mainMapList, "单位同步", vendorMap.size(), null, null); + log.info("供应商同步,源{}个,已有{}个,同步{}个", list.size(), pointShopVendor.size(), vendorMap.size()); + return vendorMap; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void syncVendorBySourceShop(Long sourceShopId, Long vendorId, Long sysUserId) { + assertAutoSync(sourceShopId); + AssertUtil.isNull(vendorId, "{}不能为空", "供应商ID"); + Set shopIds = checkSourceShopInfo(sourceShopId, 2); + if (CollUtil.isEmpty(shopIds)) { + return; + } + ShopVendor mainVendor = vendorService.getById(vendorId); + AssertUtil.isNull(mainVendor, "需要同步的{}不存在", "单位"); + List list = vendorService.queryChain().eq(ShopVendor::getSyncId, vendorId).in(ShopVendor::getShopId, shopIds).list(); + Map map = new HashMap<>(); + if (CollUtil.isNotEmpty(list)) { + map = list.stream().collect(Collectors.toMap(ShopVendor::getShopId, t -> t)); + } + Map finalMap = map; + shopIds.forEach(shopId -> { + List> mainMapList = new ArrayList<>(); + Map vendorDataMap = new HashMap<>(); + ShopVendor newVendor = BeanUtil.copyProperties(mainVendor, ShopVendor.class); + + newVendor.setSyncId(mainVendor.getId()); + newVendor.setShopId(shopId); + if (finalMap.containsKey(shopId)) { + ShopVendor vendor = finalMap.get(shopId); + newVendor.setId(vendor.getId()); + vendorService.updateById(newVendor); + } else { + newVendor.setId(null); + vendorService.save(newVendor); + } + vendorDataMap.put(newVendor.getId(), newVendor.getName()); + buildNotice(mainMapList, "供应商变动", 1, "vendor", vendorDataMap); + syncNoticeService.addNotice(shopId, sysUserId, "数据变动", JSON.toJSONString(mainMapList), JSON.toJSONString(newVendor)); + }); + } + /** * 断言是否支持自动同步 * diff --git a/sqls/250403/tb_shop_vendor.sql b/sqls/250403/tb_shop_vendor.sql new file mode 100644 index 00000000..4979c7f0 --- /dev/null +++ b/sqls/250403/tb_shop_vendor.sql @@ -0,0 +1,2 @@ +ALTER TABLE `tb_shop_vendor` + ADD COLUMN `sync_id` bigint NULL DEFAULT NULL COMMENT '同步Id' AFTER `id`; \ No newline at end of file