供应商修改 同步

This commit is contained in:
wangw 2025-04-12 11:09:30 +08:00
parent 69ba9ec48c
commit ffb4a5eb46
4 changed files with 75 additions and 0 deletions

View File

@ -32,6 +32,7 @@ public class ShopVendor implements Serializable {
* 店铺Id
*/
private Long shopId;
private Long syncId;
/**
* 排序
*/

View File

@ -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);
}

View File

@ -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<Long, Long> conGroupMap = syncConsGroup(sourceShopId, targetShopId, mainMapList);
Map<Long, Long> 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<Long, Long> syncVendor(Long sourceShopId, Long pointShopId, List<Map<String, Object>> mainMapList) {
Map<Long, Long> vendorMap = new HashMap<>();
List<Long> pointShopVendor = vendorService.queryChain().select(ShopVendor::getSyncId)
.eq(ShopVendor::getShopId, pointShopId)
.isNotNull(ShopVendor::getSyncId)
.listAs(Long.class);
List<ShopVendor> 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<Long> shopIds = checkSourceShopInfo(sourceShopId, 2);
if (CollUtil.isEmpty(shopIds)) {
return;
}
ShopVendor mainVendor = vendorService.getById(vendorId);
AssertUtil.isNull(mainVendor, "需要同步的{}不存在", "单位");
List<ShopVendor> list = vendorService.queryChain().eq(ShopVendor::getSyncId, vendorId).in(ShopVendor::getShopId, shopIds).list();
Map<Long, ShopVendor> map = new HashMap<>();
if (CollUtil.isNotEmpty(list)) {
map = list.stream().collect(Collectors.toMap(ShopVendor::getShopId, t -> t));
}
Map<Long, ShopVendor> finalMap = map;
shopIds.forEach(shopId -> {
List<Map<String, Object>> mainMapList = new ArrayList<>();
Map<Long, String> 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));
});
}
/**
* 断言是否支持自动同步
*

View File

@ -0,0 +1,2 @@
ALTER TABLE `tb_shop_vendor`
ADD COLUMN `sync_id` bigint NULL DEFAULT NULL COMMENT '同步Id' AFTER `id`;