From 63e608a2082c42a8646c1623f5e4d81ec1c08dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Thu, 10 Apr 2025 15:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=BA=97=E9=93=BA=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=20=E2=88=9A=20=E4=B8=8B=E5=8D=95=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E4=BC=9A=E5=91=98=20=E2=88=9A=20=E6=B3=A8=E5=86=8C=E4=BC=9A?= =?UTF-8?q?=E5=91=98=20=E2=88=9A=20=E5=AE=8C=E5=96=84=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=20=E2=88=9A=20=E4=BC=9A=E5=91=98=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=90=8C=E6=AD=A5=20=E2=88=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/ShopUserController.java | 16 ++++----- .../controller/user/UShopUserController.java | 12 ++----- .../czg/controller/user/UserController.java | 6 +--- .../controller/admin/ConsGroupController.java | 18 ++++++++++ .../controller/admin/ConsInfoController.java | 19 +++++++++- .../controller/admin/ProdGroupController.java | 17 +++++++++ .../controller/admin/ProductController.java | 25 +++++++++++++ .../admin/ShopProdCategoryController.java | 18 ++++++++++ .../admin/ShopProdSpecController.java | 36 ++++++++++++++++--- .../admin/ShopProdUnitController.java | 24 ++++++++++--- cash-common/cash-common-sa-token/pom.xml | 5 +++ .../src/main/java/com/czg/sa/MyStpLogic.java | 30 +++++++++++----- .../com/czg/product/dto/ShopProdSpecDTO.java | 7 +++- .../product/service/ShopProdUnitService.java | 5 ++- .../service/impl/ShopBranchServiceImpl.java | 13 +++---- .../service/impl/ShopUserServiceImpl.java | 22 ++++++++++-- .../service/impl/ShopUserSyncServiceImpl.java | 24 +++++++++++++ .../order/service/impl/PayServiceImpl.java | 4 +-- .../service/impl/ConsGroupServiceImpl.java | 1 + .../service/impl/ConsInfoServiceImpl.java | 1 + .../service/impl/ProdGroupServiceImpl.java | 3 +- .../service/impl/ProductServiceImpl.java | 1 + .../impl/ShopProdCategoryServiceImpl.java | 1 + .../service/impl/ShopProdUnitServiceImpl.java | 3 +- .../impl/ShopProductSpecServiceImpl.java | 13 ++++++- .../service/impl/ShopSyncServiceImpl.java | 3 -- 26 files changed, 263 insertions(+), 64 deletions(-) diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopUserController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopUserController.java index 299e37c4..5a47f29c 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopUserController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopUserController.java @@ -1,9 +1,7 @@ package com.czg.controller.admin; -import cn.hutool.core.util.StrUtil; import com.czg.account.dto.shopuser.*; import com.czg.account.entity.ShopUser; -import com.czg.account.entity.ShopUserFlow; import com.czg.account.service.ShopUserFlowService; import com.czg.account.service.ShopUserService; import com.czg.account.vo.ShopUserFlowVO; @@ -12,9 +10,7 @@ import com.czg.annotation.SaStaffCheckPermission; import com.czg.enums.ShopUserFlowBizEnum; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; -import com.czg.utils.PageUtil; import com.mybatisflex.core.paginate.Page; -import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import org.springframework.validation.annotation.Validated; @@ -47,7 +43,7 @@ public class ShopUserController { @GetMapping("/summary") @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi") public CzgResult summary(Integer isVip) { - return CzgResult.success(shopUserService.getSummary(StpKit.USER.getShopId(), isVip)); + return CzgResult.success(shopUserService.getSummary(StpKit.USER.getHeadShopId(), isVip)); } /** @@ -71,7 +67,7 @@ public class ShopUserController { @GetMapping("/flow") @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi") public CzgResult> flow(Integer userId, String bizCode, String startTime, String endTime) { - return CzgResult.success(shopUserFlowService.pageInfo(StpKit.USER.getShopId(), userId, bizCode, startTime, endTime)); + return CzgResult.success(shopUserFlowService.pageInfo(StpKit.USER.getHeadShopId(), userId, bizCode, startTime, endTime)); } /** @@ -87,7 +83,7 @@ public class ShopUserController { @GetMapping("/flow/download") @SaStaffCheckPermission("yun_xu_guan_li_hui_yuan_xin_xi") public void flowDownload(Integer userId, String bizCode, String startTime, String endTime, HttpServletResponse response) throws IOException { - shopUserFlowService.flowDownload(StpKit.USER.getShopId(), userId, bizCode, startTime, endTime, response); + shopUserFlowService.flowDownload(StpKit.USER.getHeadShopId(), userId, bizCode, startTime, endTime, response); } /** @@ -129,7 +125,7 @@ public class ShopUserController { @SaAdminCheckPermission(value = "shopUser:add", name = "店铺用户添加") @PostMapping public CzgResult add(@RequestBody @Validated ShopUserAddDTO shopUserAddDTO) { - return CzgResult.success(shopUserService.add(StpKit.USER.getShopId(), shopUserAddDTO)); + return CzgResult.success(shopUserService.add(StpKit.USER.getHeadShopId(), shopUserAddDTO)); } /** @@ -141,7 +137,7 @@ public class ShopUserController { @SaAdminCheckPermission(value = "shopUser:edit", name = "店铺用户修改") @PutMapping public CzgResult edit(@RequestBody @Validated ShopUserEditDTO shopUserEditDTO) { - return CzgResult.success(shopUserService.updateInfo(StpKit.USER.getShopId(), shopUserEditDTO)); + return CzgResult.success(shopUserService.updateInfo(StpKit.USER.getHeadShopId(), shopUserEditDTO)); } /** @@ -154,7 +150,7 @@ public class ShopUserController { @PutMapping("/money") public CzgResult editMoney(@RequestBody @Validated ShopUserMoneyEditDTO shopUserMoneyEditDTO) { shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.ADMIN_IN); - return CzgResult.success(shopUserService.updateMoney(StpKit.USER.getShopId(), shopUserMoneyEditDTO) > 0L); + return CzgResult.success(shopUserService.updateMoney(StpKit.USER.getHeadShopId(), shopUserMoneyEditDTO) > 0L); } } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java index 2d0f4e8f..de9e4e5a 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UShopUserController.java @@ -4,7 +4,6 @@ import com.czg.account.dto.shopuser.ShopUserAddDTO; import com.czg.account.dto.shopuser.ShopUserDetailDTO; import com.czg.account.dto.shopuser.ShopUserVipCardDTO; import com.czg.account.entity.MemberPointsLog; -import com.czg.account.entity.PointsExchangeRecord; import com.czg.account.entity.ShopUser; import com.czg.account.entity.ShopUserFlow; import com.czg.account.service.MemberPointsLogService; @@ -18,14 +17,9 @@ import com.czg.utils.PageUtil; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; -import lombok.Data; -import lombok.EqualsAndHashCode; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.HashSet; -import java.util.Objects; - /** * 店铺会员相关 * @@ -51,7 +45,7 @@ public class UShopUserController { */ @GetMapping public CzgResult get(Long shopId) { - return CzgResult.success(shopUserService.getInfo(shopId == null ? StpKit.USER.getShopId() : shopId, StpKit.USER.getLoginIdAsLong())); + return CzgResult.success(shopUserService.getInfo(shopId == null ? StpKit.USER.getHeadShopId() : shopId, StpKit.USER.getLoginIdAsLong())); } /** @@ -71,7 +65,7 @@ public class UShopUserController { */ @GetMapping("/code") public CzgResult code(Long shopId) { - return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), shopId == null ? StpKit.USER.getShopId() : shopId); + return shopUserService.getCode(StpKit.USER.getLoginIdAsLong(), shopId == null ? StpKit.USER.getHeadShopId() : shopId); } /** @@ -82,7 +76,7 @@ public class UShopUserController { @PostMapping @Debounce("#shopUserAddDTO.phone") public CzgResult join(@RequestBody @Validated ShopUserAddDTO shopUserAddDTO) { - return CzgResult.success(shopUserService.join(StpKit.USER.getShopId(), StpKit.USER.getLoginIdAsLong(), shopUserAddDTO)); + return CzgResult.success(shopUserService.join(StpKit.USER.getHeadShopId(), StpKit.USER.getLoginIdAsLong(), shopUserAddDTO)); } diff --git a/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java b/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java index cc422f9a..34e5d5c9 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/user/UserController.java @@ -1,15 +1,11 @@ package com.czg.controller.user; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.bean.BeanUtil; import com.czg.account.dto.user.userinfo.UserInfoDTO; import com.czg.account.dto.user.userinfo.UserInfoEditDTO; import com.czg.account.dto.user.userinfo.UserInfoPwdEditDTO; -import com.czg.account.entity.UserInfo; import com.czg.account.service.UserInfoService; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; -import com.mybatisflex.core.query.QueryWrapper; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -38,7 +34,7 @@ public class UserController { */ @PutMapping public CzgResult update(@RequestBody UserInfoEditDTO userInfoEditDTO) { - return CzgResult.success(userInfoService.updateInfo(StpKit.USER.getShopId(-1L), StpKit.USER.getLoginIdAsLong(), userInfoEditDTO)); + return CzgResult.success(userInfoService.updateInfo(StpKit.USER.getHeadShopId(), StpKit.USER.getLoginIdAsLong(), userInfoEditDTO)); } /** diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsGroupController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsGroupController.java index e7c5d902..99893966 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsGroupController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsGroupController.java @@ -1,14 +1,18 @@ package com.czg.controller.admin; +import cn.hutool.core.thread.ThreadUtil; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ConsGroupDTO; import com.czg.product.service.ConsGroupService; +import com.czg.product.service.ShopSyncService; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -27,6 +31,8 @@ import java.util.List; @RequestMapping("/admin/product/consGroup") public class ConsGroupController { private final ConsGroupService consGroupService; + @Resource + private ShopSyncService shopSyncService; /** * 分页 @@ -72,6 +78,7 @@ public class ConsGroupController { //@SaAdminCheckPermission("consGroup:add") public CzgResult addConsGroup(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) ConsGroupDTO dto) { consGroupService.addConsGroup(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -83,6 +90,7 @@ public class ConsGroupController { //@SaAdminCheckPermission("consGroup:update") public CzgResult updateConsGroup(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ConsGroupDTO dto) { consGroupService.updateConsGroup(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -98,6 +106,7 @@ public class ConsGroupController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); consGroupService.disableConsGroup(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -113,6 +122,15 @@ public class ConsGroupController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); consGroupService.enableConsGroup(id); + asyncToBranchShop(id); return CzgResult.success(); } + + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncConsGroupBySourceShop(shopId, id, sysUserId); + }); + } } \ No newline at end of file diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java index 8b86a7ba..b4d56b90 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java @@ -1,12 +1,13 @@ package com.czg.controller.admin; +import cn.hutool.core.thread.ThreadUtil; import com.czg.enums.CrudEnum; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ConsInfoDTO; import com.czg.product.param.ConsInfoParam; -import com.czg.product.param.ConsReportDamageParam; import com.czg.product.param.ConsSubUnitParam; import com.czg.product.service.ConsInfoService; +import com.czg.product.service.ShopSyncService; import com.czg.product.vo.ConsStatisticsVo; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; @@ -16,6 +17,7 @@ import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -34,6 +36,8 @@ import java.util.List; @RequestMapping("/admin/product/cons") public class ConsInfoController { private final ConsInfoService consInfoService; + @Resource + private ShopSyncService shopSyncService; /** * 分页 @@ -79,6 +83,7 @@ public class ConsInfoController { //@SaAdminCheckPermission("consInfo:add") public CzgResult addConsInfo(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) ConsInfoDTO dto) { consInfoService.addConsInfo(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -90,6 +95,7 @@ public class ConsInfoController { //@SaAdminCheckPermission("consInfo:update") public CzgResult updateConsInfo(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ConsInfoDTO dto) { consInfoService.updateConsInfo(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -120,6 +126,7 @@ public class ConsInfoController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); consInfoService.disableConsInfo(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -135,6 +142,7 @@ public class ConsInfoController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); consInfoService.enableConsInfo(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -167,6 +175,7 @@ public class ConsInfoController { ValidatorUtil.validateEntity(param, InsertGroup.class); } consInfoService.modifySubUnit(param); + asyncToBranchShop(param.getId()); return CzgResult.success(); } @@ -183,4 +192,12 @@ public class ConsInfoController { return CzgResult.success(data); } + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncConsInfoBySourceShop(shopId, id, sysUserId); + }); + } + } diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProdGroupController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProdGroupController.java index 10c9fbab..bdd88e82 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProdGroupController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProdGroupController.java @@ -6,6 +6,7 @@ import com.czg.config.RabbitPublisher; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ProdGroupDTO; import com.czg.product.service.ProdGroupService; +import com.czg.product.service.ShopSyncService; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; @@ -13,6 +14,7 @@ import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -32,6 +34,8 @@ import java.util.List; public class ProdGroupController { private final ProdGroupService prodGroupService; private final RabbitPublisher rabbitPublisher; + @Resource + private ShopSyncService shopSyncService; /** * 分页 @@ -79,6 +83,7 @@ public class ProdGroupController { Long shopId = StpKit.USER.getShopId(0L); dto.setShopId(shopId); prodGroupService.addProdGroup(dto); + asyncToBranchShop(dto.getId()); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -95,6 +100,7 @@ public class ProdGroupController { Long shopId = StpKit.USER.getShopId(0L); dto.setShopId(shopId); prodGroupService.updateProdGroup(dto,true); + asyncToBranchShop(dto.getId()); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -111,6 +117,7 @@ public class ProdGroupController { Long shopId = StpKit.USER.getShopId(0L); dto.setShopId(shopId); prodGroupService.updateProdGroup(dto,false); + asyncToBranchShop(dto.getId()); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -145,6 +152,7 @@ public class ProdGroupController { AssertUtil.isNull(id, "{}不能为空", "id"); Long shopId = StpKit.USER.getShopId(0L); prodGroupService.disableProdGroup(shopId, id); + asyncToBranchShop(id); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -162,9 +170,18 @@ public class ProdGroupController { AssertUtil.isNull(id, "{}不能为空", "id"); Long shopId = StpKit.USER.getShopId(0L); prodGroupService.enableProdGroup(shopId, id); + asyncToBranchShop(id); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); return CzgResult.success(); } + + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncGroupBySourceShop(shopId, id, sysUserId); + }); + } } \ No newline at end of file diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java index 1a26a0c4..94cc6220 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java @@ -15,6 +15,7 @@ import com.czg.product.entity.ProductStockFlow; import com.czg.product.param.*; import com.czg.product.service.ProdConsRelationService; import com.czg.product.service.ProductService; +import com.czg.product.service.ShopSyncService; import com.czg.product.vo.ProductStatisticsVo; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; @@ -24,6 +25,7 @@ import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -44,6 +46,8 @@ public class ProductController { private final ProductService productService; private final ProdConsRelationService prodConsRelationService; private final RabbitPublisher rabbitPublisher; + @Resource + private ShopSyncService shopSyncService; /** * 商品-分页 @@ -109,6 +113,7 @@ public class ProductController { Long shopId = StpKit.USER.getShopId(0L); dto.setShopId(shopId); productService.addProduct(dto); + asyncToBranchShop(dto.getId()); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -137,6 +142,7 @@ public class ProductController { Long shopId = StpKit.USER.getShopId(0L); dto.setShopId(shopId); productService.updateProduct(dto); + asyncToBranchShop(dto.getId()); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -168,6 +174,7 @@ public class ProductController { AssertUtil.isNull(id, "{}不能为空", "id"); Long shopId = StpKit.USER.getShopId(0L); productService.deleteProduct(shopId, id); + asyncToBranchShop(id); ThreadUtil.execAsync(() -> { rabbitPublisher.sendProductInfoChangeMsg(Convert.toStr(shopId)); }); @@ -216,6 +223,7 @@ public class ProductController { //@SaAdminCheckPermission("product:bind") public CzgResult bindCons(@RequestBody @Validated({DefaultGroup.class}) ProdConsBindDTO param) { prodConsRelationService.saveProdConsRelation(param); + asyncToBranchShop2(param.getId()); return CzgResult.success(); } @@ -227,6 +235,7 @@ public class ProductController { //@SaAdminCheckPermission("product:update") public CzgResult refundToStock(@RequestBody @Validated({DefaultGroup.class}) ProdRefundToStockParam param) { productService.refundToStock(param); + asyncToBranchShop(param.getId()); return CzgResult.success(); } @@ -282,4 +291,20 @@ public class ProductController { return CzgResult.success(data); } + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncProductBySourceShop(shopId, id, sysUserId); + }); + } + + private void asyncToBranchShop2(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncConsProBySourceShop(shopId, id, sysUserId); + }); + } + } diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java index 2c9a1e1c..d4019b03 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdCategoryController.java @@ -1,14 +1,18 @@ package com.czg.controller.admin; +import cn.hutool.core.thread.ThreadUtil; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ShopProdCategoryDTO; import com.czg.product.service.ShopProdCategoryService; +import com.czg.product.service.ShopSyncService; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -27,6 +31,8 @@ import java.util.List; @RequestMapping("/admin/prod/category") public class ShopProdCategoryController { private final ShopProdCategoryService shopProdCategoryService; + @Resource + private ShopSyncService shopSyncService; @GetMapping("page") @OperationLog("商品分类-分页") @@ -58,6 +64,7 @@ public class ShopProdCategoryController { //@SaAdminCheckPermission("shopProdCategory:add") public CzgResult addShopProdCategory(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) ShopProdCategoryDTO dto) { shopProdCategoryService.addShopProdCategory(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -66,6 +73,7 @@ public class ShopProdCategoryController { //@SaAdminCheckPermission("shopProdCategory:update") public CzgResult updateShopProdCategory(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ShopProdCategoryDTO dto) { shopProdCategoryService.updateShopProdCategory(dto); + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -86,6 +94,7 @@ public class ShopProdCategoryController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdCategoryService.disableShopProdCategory(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -96,7 +105,16 @@ public class ShopProdCategoryController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdCategoryService.enableShopProdCategory(id); + asyncToBranchShop(id); return CzgResult.success(); } + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncCategoryBySourceShop(shopId, id, sysUserId); + }); + } + } \ No newline at end of file diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdSpecController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdSpecController.java index 8c234422..1aac3d21 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdSpecController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdSpecController.java @@ -1,14 +1,19 @@ package com.czg.controller.admin; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.thread.ThreadUtil; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ShopProdSpecDTO; import com.czg.product.service.ShopProdSpecService; +import com.czg.product.service.ShopSyncService; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.ValidatorUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -26,6 +31,9 @@ import java.util.List; @RequestMapping("/admin/prod/spec") public class ShopProdSpecController { private final ShopProdSpecService shopProdSpecService; + @Resource + private ShopSyncService shopSyncService; + @GetMapping("list") @OperationLog("商品规格-列表") @@ -50,9 +58,8 @@ public class ShopProdSpecController { public CzgResult addShopProdSpec(@RequestBody ShopProdSpecDTO dto) { //效验数据 ValidatorUtil.validateEntity(dto, InsertGroup.class, DefaultGroup.class); - shopProdSpecService.addShopProdSpec(dto); - + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -62,9 +69,11 @@ public class ShopProdSpecController { public CzgResult updateShopProdSpec(@RequestBody ShopProdSpecDTO dto) { //效验数据 ValidatorUtil.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); - shopProdSpecService.updateShopProdSpec(dto); - + List affectedIdList = dto.getAffectedIdList(); + if (CollUtil.isNotEmpty(affectedIdList)) { + affectedIdList.parallelStream().forEach(this::asyncToBranchShop); + } return CzgResult.success(); } @@ -85,6 +94,7 @@ public class ShopProdSpecController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdSpecService.disableShopProdSpec(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -95,6 +105,7 @@ public class ShopProdSpecController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdSpecService.enableShopProdSpec(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -103,6 +114,10 @@ public class ShopProdSpecController { //@SaAdminCheckPermission("shopProductSpec:add") public CzgResult quickAddShopProdSpec(@RequestBody ShopProdSpecDTO dto) { shopProdSpecService.quickAddShopProdSpec(dto); + List affectedIdList = dto.getAffectedIdList(); + if (CollUtil.isNotEmpty(affectedIdList)) { + affectedIdList.parallelStream().forEach(this::asyncToBranchShop); + } return CzgResult.success(); } @@ -120,6 +135,19 @@ public class ShopProdSpecController { //@SaAdminCheckPermission("shopProductSpec:update") public CzgResult quickUpdateShopProdSpec(@RequestBody ShopProdSpecDTO dto) { shopProdSpecService.quickUpdateShopProdSpec(dto); + List affectedIdList = dto.getAffectedIdList(); + if (CollUtil.isNotEmpty(affectedIdList)) { + affectedIdList.parallelStream().forEach(this::asyncToBranchShop); + } return CzgResult.success(); } + + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + ThreadUtil.safeSleep(1000L); + shopSyncService.syncSpecBySourceShop(shopId, id, sysUserId); + }); + } } \ No newline at end of file diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java index 6dc647ea..acd74e9e 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopProdUnitController.java @@ -1,14 +1,18 @@ package com.czg.controller.admin; +import cn.hutool.core.thread.ThreadUtil; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ShopProdUnitDTO; import com.czg.product.service.ShopProdUnitService; +import com.czg.product.service.ShopSyncService; import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; import com.czg.validator.group.UpdateGroup; import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -28,6 +32,9 @@ import java.util.List; public class ShopProdUnitController { private final ShopProdUnitService shopProdUnitService; + @Resource + private ShopSyncService shopSyncService; + @GetMapping("page") @OperationLog("商品单位-分页") @@ -58,9 +65,8 @@ public class ShopProdUnitController { @OperationLog("商品单位-新增") //@SaAdminCheckPermission("shopProdUnit:add") public CzgResult addShopProdUnit(@RequestBody @Validated({InsertGroup.class, DefaultGroup.class}) ShopProdUnitDTO dto) { - - shopProdUnitService.addShopProdUnit(dto); - + Long id = shopProdUnitService.addShopProdUnit(dto); + asyncToBranchShop(id); return CzgResult.success(); } @@ -68,9 +74,8 @@ public class ShopProdUnitController { @OperationLog("商品单位-修改") //@SaAdminCheckPermission("shopProdUnit:update") public CzgResult updateShopProdUnit(@RequestBody @Validated({UpdateGroup.class, DefaultGroup.class}) ShopProdUnitDTO dto) { - shopProdUnitService.updateShopProdUnit(dto); - + asyncToBranchShop(dto.getId()); return CzgResult.success(); } @@ -91,6 +96,7 @@ public class ShopProdUnitController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdUnitService.disableShopProdUnit(id); + asyncToBranchShop(id); return CzgResult.success(); } @@ -101,8 +107,16 @@ public class ShopProdUnitController { //效验数据 AssertUtil.isNull(id, "{}不能为空", "id"); shopProdUnitService.enableShopProdUnit(id); + asyncToBranchShop(id); return CzgResult.success(); } + private void asyncToBranchShop(Long id) { + long shopId = StpKit.USER.getShopId(0L); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + shopSyncService.syncUnitBySourceShop(shopId, id, sysUserId); + }); + } } \ No newline at end of file diff --git a/cash-common/cash-common-sa-token/pom.xml b/cash-common/cash-common-sa-token/pom.xml index b0180a36..ee53baa5 100644 --- a/cash-common/cash-common-sa-token/pom.xml +++ b/cash-common/cash-common-sa-token/pom.xml @@ -28,6 +28,11 @@ cn.dev33 sa-token-spring-boot3-starter + + com.mybatis-flex + mybatis-flex-spring-boot3-starter + provided + org.apache.tomcat.embed tomcat-embed-core diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java index 7da6cfaa..d341618f 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java @@ -16,6 +16,7 @@ import cn.dev33.satoken.stp.StpLogic; import cn.hutool.core.util.StrUtil; import com.czg.exception.ApiNotPrintException; import com.czg.exception.CzgException; +import com.mybatisflex.core.row.DbChain; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -57,12 +58,13 @@ public class MyStpLogic { /** * 身份切换 - * @param id 用户id - * @param account 账户名 - * @param shopId 店铺id - * @param shopName 店铺名称 + * + * @param id 用户id + * @param account 账户名 + * @param shopId 店铺id + * @param shopName 店铺名称 * @param loginType 登录类型 - * @param isAdmin 是否管理员 + * @param isAdmin 是否管理员 */ public void switchTo(boolean isMain, Long id, String account, Long shopId, String shopName, LoginType loginType, boolean isAdmin) { StpLogic logic = getLogic(); @@ -113,7 +115,6 @@ public class MyStpLogic { } - /** * 获取当前登录账号名称 管理端为用户账号 客户端为openId * @@ -137,6 +138,7 @@ public class MyStpLogic { /** * 获取主店铺id + * * @return id */ public Long getHeadId() { @@ -200,6 +202,19 @@ public class MyStpLogic { return shopId == null ? defaultVal : shopId; } + /** + * 获取主店id + * @return 主店id + */ + public Long getHeadShopId() { + Long shopId = getShopId(0L); + Long mainId = DbChain.table("tb_shop_config").select("main_id").where("id = ? and is_enable_vip_sync = ?", shopId, 1).objAs(Long.class); + if (mainId != null) { + return mainId; + } + return shopId; + } + /** * 校验是否为管理端登录 */ @@ -941,9 +956,6 @@ public class MyStpLogic { } - - - public void endSwitch() { getLogic().endSwitch(); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopProdSpecDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopProdSpecDTO.java index 185fcdc9..8630358d 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopProdSpecDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopProdSpecDTO.java @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; import java.io.Serial; import java.io.Serializable; import java.time.LocalDateTime; +import java.util.List; /** * 商品规格 @@ -81,5 +82,9 @@ public class ShopProdSpecDTO extends TreeNode implements Serial */ @JSONField(format = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; - + /** + * 受影响的规格id列表 + */ + @JSONField(serialize = false) + private List affectedIdList; } \ No newline at end of file diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java index be9b3989..c45f856e 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopProdUnitService.java @@ -25,6 +25,7 @@ public interface ShopProdUnitService extends IService { /** * 获取商品单位列表 + * * @param param 查询参数 * @return 商品单位列表数据 */ @@ -32,6 +33,7 @@ public interface ShopProdUnitService extends IService { /** * 获取商品单位详情 + * * @param id 商品单位ID * @return 商品单位详情数据 */ @@ -41,8 +43,9 @@ public interface ShopProdUnitService extends IService { * 新增商品单位 * * @param dto 商品单位数据 + * @return 新增商品单位ID */ - void addShopProdUnit(ShopProdUnitDTO dto); + Long addShopProdUnit(ShopProdUnitDTO dto); /** * 更新商品单位 diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopBranchServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopBranchServiceImpl.java index 1e267f7e..c49f1664 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopBranchServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopBranchServiceImpl.java @@ -2,7 +2,6 @@ package com.czg.service.account.service.impl; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjUtil; -import cn.hutool.log.Log; import com.czg.account.dto.ShopBranchDTO; import com.czg.account.entity.ShopConfig; import com.czg.account.entity.ShopInfo; @@ -109,12 +108,14 @@ public class ShopBranchServiceImpl implements ShopBranchService { branchConfig.setIsEnableConsSync(YesNoEnum.YES.value()); branchConfig.setIsEnableVipSync(YesNoEnum.YES.value()); shopConfigMapper.update(branchConfig); -// ThreadUtil.execAsync(() -> { - log.info("开始同步,店铺id:{},分店id:{} 操作人Id:{}", shopId, branchShop.getId(), StpKit.USER.getLoginIdAsLong()); + long sysUserId = StpKit.USER.getLoginIdAsLong(); + ThreadUtil.execAsync(() -> { + ThreadUtil.safeSleep(3000L); + log.info("开始同步,店铺id:{},分店id:{} 操作人Id:{}", shopId, branchShop.getId(), sysUserId); // 同步商品和耗材 - shopSyncService.sync(shopId, branchShop.getId(), StpKit.USER.getLoginIdAsLong()); - log.info("同步结束,店铺id:{},分店id:{} 操作人Id:{}", shopId, branchShop.getId(), StpKit.USER.getLoginIdAsLong()); -// }); + shopSyncService.sync(shopId, branchShop.getId(), sysUserId); + log.info("同步结束,店铺id:{},分店id:{} 操作人Id:{}", shopId, branchShop.getId(), sysUserId); + }); ThreadUtil.execAsync(() -> { // 同步会员信息 shopUserSyncService.syncMergeShopUser(shopId, branchShop.getId()); diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java index bf94f7ff..e5dad43a 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserServiceImpl.java @@ -9,6 +9,7 @@ import com.czg.account.entity.*; import com.czg.account.service.*; import com.czg.config.RedisCst; import com.czg.enums.ShopUserFlowBizEnum; +import com.czg.enums.YesNoEnum; import com.czg.exception.ApiNotPrintException; import com.czg.order.entity.OrderInfo; import com.czg.order.service.OrderDetailService; @@ -16,6 +17,7 @@ import com.czg.order.service.OrderInfoService; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; import com.czg.service.RedisService; +import com.czg.service.account.mapper.ShopConfigMapper; import com.czg.service.account.mapper.ShopInfoMapper; import com.czg.service.account.mapper.ShopUserMapper; import com.czg.system.entity.SysParams; @@ -67,6 +69,8 @@ public class ShopUserServiceImpl extends ServiceImpl i private ShopExtendService shopExtendService; @Resource private FreeDineConfigService freeDineConfigService; + @Resource + private ShopConfigMapper shopConfigMapper; private ShopUser getUserInfo(Long shopId, Long shopUserId) { ShopUser shopUser = queryChain().eq(ShopUser::getShopId, shopId).eq(ShopUser::getId, shopUserId).one(); @@ -80,7 +84,7 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public Page getPage(String key, Integer isVip, BigDecimal amount) { PageHelper.startPage(PageUtil.buildPageHelp()); - return PageUtil.convert(new PageInfo<>(mapper.selectPageByKeyAndIsVip(StpKit.USER.getShopId(), isVip, key, amount))); + return PageUtil.convert(new PageInfo<>(mapper.selectPageByKeyAndIsVip(StpKit.USER.getHeadShopId(), isVip, key, amount))); } @Override @@ -148,6 +152,10 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public ShopUser getShopUserInfo(Long shopId, long userId) { + ShopConfig shopConfig = shopConfigMapper.selectOneById(shopId); + if (shopConfig != null && shopConfig.getIsEnableVipSync() == YesNoEnum.YES.value() && shopConfig.getMainId() != null) { + shopId = shopConfig.getMainId(); + } ShopUser shopUser = queryChain().eq(ShopUser::getShopId, shopId).eq(ShopUser::getUserId, userId).one(); if (shopUser == null) { shopUser = new ShopUser(); @@ -185,6 +193,10 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public CzgResult getCode(long userInfoId, long shopId) { + ShopConfig shopConfig = shopConfigMapper.selectOneById(shopId); + if (shopConfig != null && shopConfig.getIsEnableVipSync() == YesNoEnum.YES.value() && shopConfig.getMainId() != null) { + shopId = shopConfig.getMainId(); + } ShopUser shopUser = queryChain().eq(ShopUser::getShopId, shopId).eq(ShopUser::getUserId, userInfoId).one(); AssertUtil.isNull(shopUser, "会员信息不存在"); if (shopUser.getIsVip().equals(0)) { @@ -300,6 +312,10 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public ShopUserDetailDTO getInfo(Long shopId, long userId) { + ShopConfig shopConfig = shopConfigMapper.selectOneById(shopId); + if (shopConfig != null && shopConfig.getIsEnableVipSync() == YesNoEnum.YES.value() && shopConfig.getMainId() != null) { + shopId = shopConfig.getMainId(); + } ShopUser shopUser = getOne(new QueryWrapper().eq(ShopUser::getShopId, shopId).eq(ShopUser::getUserId, userId)); UserInfo userInfo = userInfoService.getById(userId); if (userInfo == null) { @@ -336,11 +352,11 @@ public class ShopUserServiceImpl extends ServiceImpl i @Override public ShopUser getDetail(Integer id, Integer userId) { - ShopUser shopUser = getOne(new QueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getShopId()).eq(ShopUser::getId, id).eq(ShopUser::getUserId, userId)); + ShopUser shopUser = getOne(new QueryWrapper().eq(ShopUser::getShopId, StpKit.USER.getHeadShopId()).eq(ShopUser::getId, id).eq(ShopUser::getUserId, userId)); long count = shopActivateCouponRecordService.count(new QueryWrapper().eq(ShopActivateCouponRecord::getShopUserId, shopUser.getId()).eq(ShopActivateCouponRecord::getStatus, 0)); ShopUserDTO shopUserDTO = BeanUtil.copyProperties(shopUser, ShopUserDTO.class); shopUserDTO.setCouponNum(count); - shopUserDTO.setOrderNumber(orderInfoService.count(new QueryWrapper().eq(OrderInfo::getUserId, userId).eq(OrderInfo::getShopId, shopUser.getShopId()).eq(OrderInfo::getStatus, "done"))); + shopUserDTO.setOrderNumber(orderInfoService.count(new QueryWrapper().eq(OrderInfo::getUserId, userId).eq(OrderInfo::getShopId, StpKit.USER.getShopId(0L)).eq(OrderInfo::getStatus, "done"))); return shopUserDTO; } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserSyncServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserSyncServiceImpl.java index 2f8dac7f..f7719204 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserSyncServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopUserSyncServiceImpl.java @@ -9,9 +9,11 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONWriter; import com.czg.account.entity.ShopUser; +import com.czg.account.entity.ShopUserFlow; import com.czg.account.service.ShopUserSyncService; import com.czg.service.account.mapper.ShopUserMapper; import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.update.UpdateChain; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -56,12 +58,20 @@ public class ShopUserSyncServiceImpl implements ShopUserSyncService { })); // 分店没有绑定手机号的会员 for (ShopUser shopUser : branchShopNotPhoneUserList) { + Long historyShopId = shopUser.getShopId(); + Long historyUserId = shopUser.getUserId(); JSONObject branch = JSONObject.from(shopUser, JSONWriter.Feature.WriteMapNullValue); JSONArray objects = new JSONArray(); objects.add(branch); shopUser.setShopId(headShopId); shopUser.setMergedUsers(objects.toJSONString(JSONWriter.Feature.WriteMapNullValue)); shopUserMapper.update(shopUser); + // 更新会员流水记录到主店 + UpdateChain.of(ShopUserFlow.class) + .set(ShopUserFlow::getShopId, headShopId) + .eq(ShopUserFlow::getShopId, historyShopId) + .eq(ShopUserFlow::getUserId, historyUserId) + .update(); } List headShopUserList = shopUserMapper.selectListByQuery(QueryWrapper.create().eq(ShopUser::getShopId, headShopId).isNotNull(ShopUser::getPhone)); List branchShopUserList = shopUserMapper.selectListByQuery(QueryWrapper.create().eq(ShopUser::getShopId, branchShopId).isNotNull(ShopUser::getPhone)); @@ -114,6 +124,12 @@ public class ShopUserSyncServiceImpl implements ShopUserSyncService { objects.add(JSONObject.from(branchShopUser, JSONWriter.Feature.WriteMapNullValue)); headShopUser.setMergedUsers(JSON.toJSONString(objects, JSONWriter.Feature.WriteMapNullValue)); shopUserMapper.update(headShopUser); + // 更新会员流水记录到主店 + UpdateChain.of(ShopUserFlow.class) + .set(ShopUserFlow::getShopId, headShopUser.getShopId()) + .eq(ShopUserFlow::getShopId, branchShopUser.getShopId()) + .eq(ShopUserFlow::getUserId, branchShopUser.getUserId()) + .update(); shopUserMapper.delete(branchShopUser); } @@ -135,12 +151,20 @@ public class ShopUserSyncServiceImpl implements ShopUserSyncService { */ public void toMergeCase3(Long headShopId, ShopUser branchShopUser) { // 合并逻辑3:(主店没有、分店有)把shop_id改为主店shop_id,把分店会员信息jsonArray格式化存储至merged_users字段中 + Long historyShopId = branchShopUser.getShopId(); + Long historyUserId = branchShopUser.getUserId(); JSONObject branch = JSONObject.from(branchShopUser, JSONWriter.Feature.WriteMapNullValue); JSONArray objects = new JSONArray(); objects.add(branch); branchShopUser.setShopId(headShopId); branchShopUser.setMergedUsers(objects.toJSONString(JSONWriter.Feature.WriteMapNullValue)); shopUserMapper.update(branchShopUser); + // 更新会员流水记录到主店 + UpdateChain.of(ShopUserFlow.class) + .set(ShopUserFlow::getShopId, headShopId) + .eq(ShopUserFlow::getShopId, historyShopId) + .eq(ShopUserFlow::getUserId, historyUserId) + .update(); } } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java index b6016be9..4d6aa3af 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/PayServiceImpl.java @@ -6,7 +6,6 @@ import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.czg.account.dto.shopuser.ShopUserMoneyEditDTO; import com.czg.account.entity.*; @@ -43,7 +42,6 @@ import com.czg.system.service.SysParamsService; import com.czg.utils.AssertUtil; import com.czg.utils.MD5Util; import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.core.update.UpdateChain; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotBlank; import lombok.NonNull; @@ -656,7 +654,7 @@ public class PayServiceImpl implements PayService { .setType(1) .setRelationId(orderInfo.getId()) .setBizEnum(ShopUserFlowBizEnum.ORDER_REFUND); - shopUserService.updateMoney(orderInfo.getShopId(), shopUserMoneyEditDTO); + shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO); } else if (orderInfo.getPayType().equals(PayEnums.CREDIT_PAY.getValue())) { AssertUtil.isNull(orderInfo.getCreditBuyerId(), "挂账单退款失败,未查询到挂账人"); buyerOrderService.partRefund(orderInfo.getCreditBuyerId().toString(), orderInfo.getId(), param.getRefundAmount()); diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsGroupServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsGroupServiceImpl.java index 6f71104f..abae61d6 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsGroupServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsGroupServiceImpl.java @@ -82,6 +82,7 @@ public class ConsGroupServiceImpl extends ServiceImpl i entity.setIsStock(YesNoEnum.NO.value()); entity.setShopId(shopId); super.save(entity); + dto.setId(entity.getId()); return true; } diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdGroupServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdGroupServiceImpl.java index bf9adb21..d8b1bfc0 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdGroupServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProdGroupServiceImpl.java @@ -31,8 +31,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; -import static com.czg.constant.CacheConstant.ADMIN_CLIENT_PRODUCT_LIST; - /** * 商品分组 * @@ -98,6 +96,7 @@ public class ProdGroupServiceImpl extends ServiceImpl impl flow.setInOutType(InOutTypeEnum.IN.value()); flow.setInOutItem(InOutItemEnum.WIN_IN.value()); productStockFlowService.saveFlow(flow); + dto.setId(entity.getId()); } @Override diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java index a36c82aa..c41f365a 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopProdCategoryServiceImpl.java @@ -74,6 +74,7 @@ public class ShopProdCategoryServiceImpl extends ServiceImpl { @@ -88,6 +88,7 @@ public class ShopProdUnitServiceImpl extends ServiceImpl implements ShopProdSpecService { - private QueryWrapper buildQueryWrapper(ShopProdSpecDTO param) { QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper(); if (ObjUtil.isNotNull(param.getPid())) { @@ -110,6 +111,7 @@ public class ShopProductSpecServiceImpl extends ServiceImpl affectedIdList = new ArrayList<>(); //上级规格不能为自身 if (dto.getId().equals(dto.getPid())) { throw new CzgException("上级规格不能为自身"); @@ -142,6 +144,10 @@ public class ShopProductSpecServiceImpl extends ServiceImpl ids = DbChain.table("tb_shop_prod_spec").select("id").where("pids like concat('%,',?,',%') and shop_id = ?", entity.getId(), entity.getShopId()).listAs(Long.class); + affectedIdList.addAll(ids); + dto.setAffectedIdList(affectedIdList); } @Override @@ -174,6 +180,7 @@ public class ShopProductSpecServiceImpl extends ServiceImpl affectedIdList = new ArrayList<>(); String name = dto.getName(); AssertUtil.isBlank(name, "1级规格名称不能为空"); List level2List = dto.getChildren(); @@ -201,6 +208,7 @@ public class ShopProductSpecServiceImpl extends ServiceImpl level3List = level2Dto.getChildren(); int yIndex = 0; for (ShopProdSpecDTO level3Dto : level3List) { @@ -216,8 +225,10 @@ public class ShopProductSpecServiceImpl extends ServiceImpl