diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsGroup.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsGroup.java index b9462deed..12c4081c0 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsGroup.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsGroup.java @@ -28,6 +28,10 @@ public class ConsGroup implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 店铺id */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsInfo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsInfo.java index 02d68632a..8fdb6eb30 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsInfo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsInfo.java @@ -29,6 +29,10 @@ public class ConsInfo implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 耗材分组id */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdConsRelation.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdConsRelation.java index c6e8a7bdd..dc029cf8d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdConsRelation.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdConsRelation.java @@ -24,22 +24,20 @@ public class ProdConsRelation implements Serializable { @Serial private static final long serialVersionUID = 1L; - /** - * id - */ - @Id(keyType = KeyType.Auto) - private Long id; /** * 店铺id */ + @Id(keyType = KeyType.None) private Long shopId; /** * 商品id */ + @Id(keyType = KeyType.None) private Long productId; /** * 耗材id */ + @Id(keyType = KeyType.None) private Long consInfoId; /** * 单位消耗值 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdGroup.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdGroup.java index 6618ba841..a0ceb75c2 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdGroup.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdGroup.java @@ -29,6 +29,10 @@ public class ProdGroup implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 分组名称 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdSku.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdSku.java index e5be710e1..236e59984 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdSku.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ProdSku.java @@ -29,6 +29,10 @@ public class ProdSku implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 店铺id */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/Product.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/Product.java index 95f3a7390..91fdd421e 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/Product.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/Product.java @@ -30,6 +30,10 @@ public class Product implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 商品分类 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdCategory.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdCategory.java index ecd25265f..b0d2be6c1 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdCategory.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdCategory.java @@ -28,6 +28,10 @@ public class ShopProdCategory implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 分类名称 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdSpec.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdSpec.java index 353ddeda7..61b796e7e 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdSpec.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdSpec.java @@ -28,6 +28,10 @@ public class ShopProdSpec implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + private Long syncId; /** * 规格名称 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdUnit.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdUnit.java index 0dec8e2f9..3d917afe7 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdUnit.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ShopProdUnit.java @@ -28,6 +28,10 @@ public class ShopProdUnit implements Serializable { */ @Id(keyType = KeyType.Auto) private Long id; + /** + * 同步id + */ + 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 new file mode 100644 index 000000000..0cf8af1e2 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopSyncService.java @@ -0,0 +1,18 @@ +package com.czg.product.service; + +import java.util.Map; + +/** + * @author ww + * @description + */ +public interface ShopSyncService { + + /** + * 同步数据 将源店铺信息 同步到目标店铺(包括分组 分类 单位 规格 商品 SKU 耗材) + * @param sourceShopId 源店铺ID + * @param targetShopId 目标店铺ID + */ + void sync(Long sourceShopId, Long targetShopId); + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ProductGroupVo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ProductGroupVo.java index 2b98ab91e..9fd10e116 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ProductGroupVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ProductGroupVo.java @@ -40,7 +40,7 @@ public class ProductGroupVo implements Serializable { /** * 商品ID */ - private Integer proId; + private Long proId; /** * 商品名称 */ @@ -48,7 +48,7 @@ public class ProductGroupVo implements Serializable { /** * skuId */ - private Integer skuId; + private Long skuId; /** * sku名称 */ diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdConsRelationServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdConsRelationServiceImpl.java index d47681264..06c72cc9e 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdConsRelationServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdConsRelationServiceImpl.java @@ -38,7 +38,6 @@ public class ProdConsRelationServiceImpl extends ServiceImpl unitMap; + Map specMap; + Map categoryMap; + Map proMap = new HashMap<>(); + Map skuMap = new HashMap<>(); + checkShopInfo(sourceShopId, targetShopId); + //商品 + try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { + CompletableFuture> futureUnit = CompletableFuture.supplyAsync(() -> syncUnit(sourceShopId, targetShopId), executor); + CompletableFuture> futureSpec = CompletableFuture.supplyAsync(() -> syncSpec(sourceShopId, targetShopId), executor); + CompletableFuture> futureCategory = CompletableFuture.supplyAsync(() -> syncCategory(sourceShopId, targetShopId), executor); + + CompletableFuture allFutures = CompletableFuture.allOf(futureUnit, futureSpec, futureCategory); + allFutures.join(); + + unitMap = futureUnit.join(); + specMap = futureSpec.join(); + categoryMap = futureCategory.join(); + } catch (Exception e) { + log.error("同步异常", e); + throw new CzgException("同步失败"); + } + proMap = syncProduct(sourceShopId, targetShopId, unitMap, specMap, categoryMap); + skuMap = syncSku(sourceShopId, targetShopId, proMap); + syncGroup(sourceShopId, targetShopId, proMap); + syncProductPackage(targetShopId, proMap, skuMap); + + + //耗材 + Map conGroupMap = syncConsGroup(sourceShopId, targetShopId); + Map consInfoMap = syncConsInfo(sourceShopId, targetShopId, conGroupMap); + syncConsPro(sourceShopId, targetShopId, consInfoMap, proMap); + } + + public Map syncUnit(Long sourceShopId, Long pointShopId) { + Map unitMap = new HashMap<>(); + List pointShopUnits = unitService.queryChain().select(ShopProdUnit::getSyncId) + .eq(ShopProdUnit::getShopId, pointShopId) + .isNotNull(ShopProdUnit::getSyncId) + .listAs(Long.class); + List list = unitService.queryChain().eq(ShopProdUnit::getShopId, sourceShopId).list(); + list.forEach(tbShopUnit -> { + if (CollUtil.isEmpty(pointShopUnits) || !pointShopUnits.contains(tbShopUnit.getId())) { + ShopProdUnit unitNew = BeanUtil.copyProperties(tbShopUnit, ShopProdUnit.class); + unitNew.setId(null); + unitNew.setSyncId(tbShopUnit.getId()); + unitNew.setShopId(pointShopId); + unitService.save(unitNew); + unitMap.put(tbShopUnit.getId(), unitNew.getId()); + } + }); + log.info("单位同步,源{}个,已有{}个,同步{}个", list.size(), pointShopUnits.size(), unitMap.size()); + return unitMap; + } + + + //规格 + public Map syncSpec(Long sourceShopId, Long pointShopId) { + Map specMap = new HashMap<>(); + List pointShopSpecs = specService.queryChain().select(ShopProdSpec::getSyncId) + .eq(ShopProdSpec::getShopId, pointShopId) + .isNotNull(ShopProdSpec::getSyncId) + .listAs(Long.class); + List list = specService.queryChain().eq(ShopProdSpec::getShopId, sourceShopId.toString()).list(); + list.forEach(spec -> { + if (CollUtil.isEmpty(pointShopSpecs) || !pointShopSpecs.contains(spec.getId())) { + ShopProdSpec newSpec = BeanUtil.copyProperties(spec, ShopProdSpec.class); + newSpec.setId(null); + newSpec.setSyncId(spec.getId()); + newSpec.setShopId(pointShopId); + specService.save(newSpec); + specMap.put(spec.getId(), newSpec.getId()); + } + }); + log.info("规格同步,源{}个,已有{}个,同步{}个", list.size(), pointShopSpecs.size(), specMap.size()); + return specMap; + } + + // 分类 + public Map syncCategory(Long sourceShopId, Long pointShopId) { + Map categoryMap = new HashMap<>(); + List pointShopCateGory = categoryService.queryChain().select(ShopProdCategory::getSyncId) + .eq(ShopProdCategory::getShopId, pointShopId) + .isNotNull(ShopProdCategory::getSyncId) + .listAs(Long.class); + List tbShopCategories = categoryService.queryChain() + .eq(ShopProdCategory::getShopId, sourceShopId) + .eq(ShopProdCategory::getPid, 0) + .list(); + List treeIds = new ArrayList<>(); + for (ShopProdCategory shopProdCategory : tbShopCategories) { + treeIds.add(shopProdCategory.getId()); + if (CollUtil.isEmpty(pointShopCateGory) || !pointShopCateGory.contains(shopProdCategory.getId())) { + ShopProdCategory tbShopCategoryNew = BeanUtil.copyProperties(shopProdCategory, ShopProdCategory.class); + tbShopCategoryNew.setId(null); + tbShopCategoryNew.setShopId(pointShopId); + tbShopCategoryNew.setSyncId(shopProdCategory.getId()); + categoryService.save(tbShopCategoryNew); + categoryMap.put(shopProdCategory.getId(), tbShopCategoryNew.getId()); + } + } + int childrenSize = 0; + int syncSize = categoryMap.size(); + if (CollectionUtil.isNotEmpty(treeIds)) { + List children = categoryService.queryChain() + .eq(ShopProdCategory::getShopId, sourceShopId) + .in(ShopProdCategory::getPid, treeIds) + .list(); + childrenSize = children.size(); + for (ShopProdCategory child : children) { + if (CollUtil.isEmpty(pointShopCateGory) || !pointShopCateGory.contains(child.getId())) { + ShopProdCategory tbShopCategoryNew = BeanUtil.copyProperties(child, ShopProdCategory.class); + tbShopCategoryNew.setId(null); + tbShopCategoryNew.setShopId(pointShopId); + tbShopCategoryNew.setSyncId(child.getId()); + tbShopCategoryNew.setPid(categoryMap.get(child.getPid())); + categoryService.save(tbShopCategoryNew); + categoryMap.put(child.getId(), tbShopCategoryNew.getId()); + } + } + } + log.info("分类同步,源 父类分类{}个,同步{}个", tbShopCategories.size(), syncSize); + log.info("分类同步,源 子类分类{}个,同步{}个", childrenSize, categoryMap.size() - syncSize); + return categoryMap; + } + + public Map syncProduct(Long sourceShopId, Long pointShopId, Map unitMap, + Map specMap, Map cateGoryMap) { + List pointProducts = productService.queryChain() + .eq(Product::getShopId, pointShopId) + .isNotNull(Product::getSyncId) + .listAs(Long.class); + Map proMap = new HashMap<>(); + List products = productService.queryChain().eq(Product::getShopId, sourceShopId).list(); + if (CollectionUtil.isNotEmpty(products)) { + for (Product tbProduct : products) { + if (CollUtil.isEmpty(pointProducts) || !pointProducts.contains(tbProduct.getId())) { + Product tbProductNew = BeanUtil.copyProperties(tbProduct, Product.class); + tbProductNew.setId(null); + tbProductNew.setSyncId(tbProduct.getId()); + tbProductNew.setShopId(pointShopId); + tbProductNew.setCategoryId(tbProduct.getCategoryId() != null ? cateGoryMap.get(tbProduct.getSpecId()) : null); + tbProductNew.setSpecId(tbProduct.getSpecId() != null ? specMap.get(tbProduct.getSpecId()) : null); + tbProductNew.setUnitId(tbProduct.getUnitId() != null ? unitMap.get(tbProduct.getUnitId()) : null); + tbProductNew.setStockNumber(0); + if (CollUtil.isNotEmpty(pointProducts)) { + tbProductNew.setIsSale(0); + } + productService.save(tbProductNew); + proMap.put(tbProduct.getId(), tbProductNew.getId()); + } + } + } + log.info("商品同步,源{}个,已有{}个,同步{}个", products.size(), pointProducts.size(), proMap.size()); + return proMap; + } + + public Map syncGroup(Long sourceShopId, Long pointShopId, Map pros) { + Map groupMap = new HashMap<>(); + List pointGroup = groupService.queryChain().select(ProdGroup::getSyncId).eq(ProdGroup::getShopId, pointShopId) + .isNotNull(ProdGroup::getSyncId).listAs(Long.class); + List list = groupService.queryChain().eq(ProdGroup::getShopId, sourceShopId).list(); + for (ProdGroup prodGroup : list) { + if (CollUtil.isEmpty(pointGroup) || !pointGroup.contains(prodGroup.getId())) { + ProdGroup tbProductGroupNew = BeanUtil.copyProperties(prodGroup, ProdGroup.class); + tbProductGroupNew.setId(null); + tbProductGroupNew.setSyncId(prodGroup.getId()); + tbProductGroupNew.setShopId(pointShopId); + groupService.save(tbProductGroupNew); + groupMap.put(prodGroup.getId(), tbProductGroupNew.getId()); + } + } + List groupRelations = prodGroupRelationService.queryChain().in(ProdGroupRelation::getProdGroupId, groupMap.keySet()).list(); + for (ProdGroupRelation prodGroupRelation : groupRelations) { + prodGroupRelation.setProdGroupId(groupMap.get(prodGroupRelation.getProdGroupId())); + prodGroupRelation.setProductId(pros.get(prodGroupRelation.getProductId())); + } + prodGroupRelationService.saveOrUpdateBatch(groupRelations, 100); + log.info("分组同步,源{}个,已有{}个,同步{}个", list.size(), pointGroup.size(), groupMap.size()); + return groupMap; + } + + //分组 + public void syncProductPackage(Long shopId, Map pros, Map skus) { + List list = productService.queryChain() + .eq(Product::getShopId, shopId) + .and(column(Product::getType).eq("weight").or(column(Product::getType).eq("coupon"))) + .list(); + for (Product product : list) { + if (StrUtil.isNotBlank(product.getGroupSnap()) && product.getGroupSnap().length() > 5) { + ProductGroupVo proGroupVo = JSONObject.parseObject(product.getGroupSnap(), ProductGroupVo.class); + List goodList = new ArrayList<>(); + for (ProductGroupVo.Food goods : proGroupVo.getGoods()) { + if (pros.containsKey(goods.getProId())) { + if (goods.getSkuId() != null && skus.containsKey(goods.getSkuId())) { + goods.setProId(pros.get(goods.getProId())); + goods.setSkuId(skus.get(goods.getSkuId())); + } else { + goods.setProId(pros.get(goods.getProId())); + } + goodList.add(goods); + } + } + proGroupVo.setCount(goodList.size()); + proGroupVo.setGoods(goodList); + if (proGroupVo.getNumber() != null && proGroupVo.getNumber() > 0) { + if (proGroupVo.getNumber() > proGroupVo.getCount()) { + proGroupVo.setNumber(proGroupVo.getCount()); + } + } + } + } + } + + //分组 + public Map syncSku(Long sourceShopId, Long pointShopId, Map prods) { + Map skuMap = new HashMap<>(); + List pointSkus = skuService.queryChain().select(ProdSku::getSyncId) + .eq(ProdSku::getShopId, pointShopId) + .isNotNull(ProdSku::getSyncId) + .listAs(Long.class); + List list = skuService.queryChain().eq(ProdSku::getShopId, sourceShopId).list(); + for (ProdSku prodSku : list) { + if (prods.containsKey(prodSku.getProductId()) && (CollUtil.isEmpty(pointSkus) || !pointSkus.contains(prodSku.getId()))) { + ProdSku newSku = BeanUtil.copyProperties(prodSku, ProdSku.class); + newSku.setId(null); + newSku.setShopId(pointShopId); + newSku.setProductId(prods.get(prodSku.getProductId())); + newSku.setSyncId(prodSku.getId()); + skuService.save(newSku); + skuMap.put(prodSku.getId(), newSku.getId()); + } + } + log.info("商品SKU同步,源{}个,已有{}个,同步{}个", list.size(), pointSkus.size(), skuMap.size()); + return skuMap; + } + + public Map syncConsGroup(Long sourceShopId, Long pointShopId) { + Map consGroupMap = new HashMap<>(); + List pointConsGroup = consGroupService.queryChain().select(ConsGroup::getSyncId) + .eq(ConsGroup::getShopId, pointShopId) + .isNotNull(ConsGroup::getSyncId) + .listAs(Long.class); + List list = consGroupService.queryChain().eq(ConsGroup::getShopId, sourceShopId).list(); + for (ConsGroup consGroup : list) { + if (CollUtil.isEmpty(pointConsGroup) || !pointConsGroup.contains(consGroup.getId())) { + ConsGroup newConsGroup = BeanUtil.copyProperties(consGroup, ConsGroup.class); + newConsGroup.setId(null); + newConsGroup.setSyncId(consGroup.getId()); + newConsGroup.setShopId(pointShopId); + consGroupService.save(newConsGroup); + consGroupMap.put(consGroup.getId(), newConsGroup.getId()); + } + } + log.info("耗材分组同步,源{}个,已有{}个,同步{}个", list.size(), pointConsGroup.size(), consGroupMap.size()); + return consGroupMap; + } + + // 耗材 + public Map syncConsInfo(Long sourceShopId, Long pointShopId, Map consGroupMap) { + Map consMap = new HashMap<>(); + List pointConsInfo = consInfoService.queryChain().select(ConsInfo::getSyncId) + .eq(ConsInfo::getShopId, pointShopId) + .isNotNull(ConsInfo::getSyncId) + .listAs(Long.class); + List list = consInfoService.queryChain().eq(ConsInfo::getShopId, sourceShopId).list(); + for (ConsInfo cons : list) { + if (CollUtil.isEmpty(pointConsInfo) || !pointConsInfo.contains(cons.getId())) { + ConsInfo conInfo = BeanUtil.copyProperties(cons, ConsInfo.class); + conInfo.setId(null); + conInfo.setShopId(pointShopId); + conInfo.setSyncId(cons.getId()); + conInfo.setConsGroupId(consGroupMap.get(conInfo.getConsGroupId())); + conInfo.setStockNumber(BigDecimal.ZERO); + consInfoService.save(conInfo); + consMap.put(cons.getId(), conInfo.getId()); + } + } + log.info("耗材同步,源{}个,已有{}个,同步{}个", list.size(), pointConsInfo.size(), consMap.size()); + return consMap; + } + + public void syncConsPro(Long sourceShopId, Long pointShopId, Map consMap, Map proMap) { + List list = prodConsRelationService.queryChain().eq(ProdConsRelation::getShopId, sourceShopId).list(); + for (ProdConsRelation prodConsRelation : list) { + prodConsRelation.setShopId(pointShopId); + prodConsRelation.setProductId(proMap.get(prodConsRelation.getProductId())); + prodConsRelation.setConsInfoId(consMap.get(prodConsRelation.getConsInfoId())); + } + prodConsRelationService.saveOrUpdateBatch(list, 100); + log.info("耗材与商品关联关系,同步{}个", list.size()); + + } +} diff --git a/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SqlScriptServiceImpl.java b/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SqlScriptServiceImpl.java index 7a189c6f0..3c843357a 100644 --- a/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SqlScriptServiceImpl.java +++ b/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SqlScriptServiceImpl.java @@ -109,7 +109,7 @@ public class SqlScriptServiceImpl extends ServiceImpl sqlList = Arrays.asList(sqls.split("\\r?\\n")); + List sqlList = Arrays.asList(sqls.split(";")); for (String sql : sqlList) { if (!sql.trim().isEmpty()) { jdbcTemplate.execute(sql); diff --git a/sqls/250327/cash.sql b/sqls/250327/cash.sql deleted file mode 100644 index c5473a39b..000000000 --- a/sqls/250327/cash.sql +++ /dev/null @@ -1 +0,0 @@ -select * from tb_cashier_cart; \ No newline at end of file diff --git a/sqls/250403/tb_cons_group.sql b/sqls/250403/tb_cons_group.sql new file mode 100644 index 000000000..b8d8561ef --- /dev/null +++ b/sqls/250403/tb_cons_group.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_cons_group` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; diff --git a/sqls/250403/tb_cons_info.sql b/sqls/250403/tb_cons_info.sql new file mode 100644 index 000000000..cc6bfcb15 --- /dev/null +++ b/sqls/250403/tb_cons_info.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_cons_info` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; diff --git a/sqls/250403/tb_prod_cons_relation.sql b/sqls/250403/tb_prod_cons_relation.sql new file mode 100644 index 000000000..d427c5c1c --- /dev/null +++ b/sqls/250403/tb_prod_cons_relation.sql @@ -0,0 +1,4 @@ +ALTER TABLE `tb_prod_cons_relation` + DROP COLUMN `id`, + DROP PRIMARY KEY, + ADD PRIMARY KEY (`shop_id`, `product_id`, `cons_info_id`) USING BTREE; \ No newline at end of file diff --git a/sqls/250403/tb_prod_group.sql b/sqls/250403/tb_prod_group.sql new file mode 100644 index 000000000..cebf3f341 --- /dev/null +++ b/sqls/250403/tb_prod_group.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_prod_sku` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; diff --git a/sqls/250403/tb_prod_sku.sql b/sqls/250403/tb_prod_sku.sql new file mode 100644 index 000000000..b6cd05d22 --- /dev/null +++ b/sqls/250403/tb_prod_sku.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_product` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; diff --git a/sqls/250403/tb_product.sql b/sqls/250403/tb_product.sql new file mode 100644 index 000000000..b6cd05d22 --- /dev/null +++ b/sqls/250403/tb_product.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_product` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; diff --git a/sqls/250403/cash.sql b/sqls/250403/tb_shop_info.sql similarity index 100% rename from sqls/250403/cash.sql rename to sqls/250403/tb_shop_info.sql diff --git a/sqls/250403/tb_shop_prod_category.sql b/sqls/250403/tb_shop_prod_category.sql new file mode 100644 index 000000000..c370ba632 --- /dev/null +++ b/sqls/250403/tb_shop_prod_category.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_shop_prod_category` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; \ No newline at end of file diff --git a/sqls/250403/tb_shop_prod_spec.sql b/sqls/250403/tb_shop_prod_spec.sql new file mode 100644 index 000000000..e2a65204d --- /dev/null +++ b/sqls/250403/tb_shop_prod_spec.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_shop_prod_spec` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; \ No newline at end of file diff --git a/sqls/250403/tb_shop_prod_unit.sql b/sqls/250403/tb_shop_prod_unit.sql new file mode 100644 index 000000000..f0b5506ad --- /dev/null +++ b/sqls/250403/tb_shop_prod_unit.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_shop_prod_unit` ADD COLUMN `sync_id` bigint NULL COMMENT '同步ID' AFTER `id`; \ No newline at end of file