From 8ae03a86af4e4ce05e6fdc3b15d36b8deacf52b0 Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Wed, 28 Oct 2026 10:48:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8B=BC=E5=9B=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hiver-admin/test-output/test-report.html | 16 ++--- .../ReturnCommissionController.java | 20 ++++++ .../hiver/mall/controller/ShopController.java | 69 +++++++++++++++++++ 3 files changed, 97 insertions(+), 8 deletions(-) diff --git a/hiver-admin/test-output/test-report.html b/hiver-admin/test-output/test-report.html index 5cb27ab4..bc1699d2 100644 --- a/hiver-admin/test-output/test-report.html +++ b/hiver-admin/test-output/test-report.html @@ -35,7 +35,7 @@ Hiver
  • -ʮÔÂ 28, 2026 10:04:17 +ʮÔÂ 28, 2026 10:46:04
  • @@ -84,7 +84,7 @@

    passTest

    -

    10:04:18 ÉÏÎç / 0.023 secs

    +

    10:46:04 ÉÏÎç / 0.022 secs

    @@ -92,9 +92,9 @@
    #test-id=1
    passTest
    -10.28.2026 10:04:18 -10.28.2026 10:04:18 -0.023 secs +10.28.2026 10:46:04 +10.28.2026 10:46:04 +0.022 secs
    @@ -104,7 +104,7 @@ Pass - 10:04:18 + 10:46:04 Test passed @@ -128,13 +128,13 @@

    Started

    -

    ʮÔÂ 28, 2026 10:04:17

    +

    ʮÔÂ 28, 2026 10:46:04

    Ended

    -

    ʮÔÂ 28, 2026 10:04:18

    +

    ʮÔÂ 28, 2026 10:46:05

    diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java index 81b36c12..2db60bae 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java @@ -190,6 +190,10 @@ public class ReturnCommissionController { if (!isShopWalletWithdrawEnabled(shop)) { return ResultUtil.error("该店铺已设置不显示钱包余额且不可提现!"); } + final Result shopAliInfoValidateResult = validateShopAliInfo(returnCommission, shop); + if (shopAliInfoValidateResult != null) { + return shopAliInfoValidateResult; + } returnCommission.setRemark("商家" + shop.getShopName() + "提现"); final BigDecimal shopBalance = shop.getBalance() == null ? BigDecimal.ZERO : shop.getBalance(); if (shopBalance.compareTo(returnCommission.getCommission()) < 0) { @@ -522,6 +526,22 @@ public class ReturnCommissionController { return shop != null && !Integer.valueOf(0).equals(shop.getShowWalletWithdraw()); } + private Result validateShopAliInfo(ReturnCommission returnCommission, Shop shop) { + if (!equalsTrim(returnCommission.getAliAccount(), shop.getAliAccount()) + || !equalsTrim(returnCommission.getAliName(), shop.getAliName())) { + return ResultUtil.error("支付宝账号或户名与店铺绑定信息不一致,不可提现!"); + } + return null; + } + + private boolean equalsTrim(String left, String right) { + return trimToEmpty(left).equals(trimToEmpty(right)); + } + + private String trimToEmpty(String value) { + return value == null ? "" : value.trim(); + } + private boolean isValidAliAccount(String aliAccount) { final String account = aliAccount == null ? "" : aliAccount.trim(); return PHONE_PATTERN.matcher(account).matches() || EMAIL_PATTERN.matcher(account).matches(); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java index a38b2916..0022fa8b 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java @@ -60,6 +60,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -243,6 +244,57 @@ public class ShopController { return ResultUtil.success("编辑成功"); } + @RequestMapping(value = "/changeOwnerByMobile", method = RequestMethod.POST) + @ResponseBody + @Transactional + @ApiOperation("根据手机号换绑店铺商家账号") + public Result changeOwnerByMobile(@RequestParam String shopId, + @RequestParam String mobile) { + if (CharSequenceUtil.isBlank(shopId)) { + return ResultUtil.error("店铺id不能为空"); + } + mobile = mobile == null ? "" : mobile.trim(); + if (CharSequenceUtil.isBlank(mobile)) { + return ResultUtil.error("手机号不能为空"); + } + final Shop shop = shopService.get(shopId); + if (shop == null) { + return ResultUtil.error("店铺不存在"); + } + final User targetUser = userService.findByMobile(mobile); + if (targetUser == null) { + return ResultUtil.error("未找到该手机号对应的用户,请商家先登录小程序并授权手机号"); + } + + final String oldOwnerId = shop.getShopOwnerId(); + shop.setShopOwnerId(targetUser.getId()); + shop.setShopMangerId(targetUser.getId()); + shop.setContactPhone(mobile); + shopService.update(shop); + + if (CharSequenceUtil.isNotBlank(oldOwnerId) && !oldOwnerId.equals(targetUser.getId())) { + shopUserService.deleteAllByShopIdAndUserId(shop.getId(), oldOwnerId); + } + ShopUser shopUser = shopUserService.selectByUserIdAndShopId(targetUser.getId(), shop.getId()); + if (shopUser == null) { + shopUser = new ShopUser(); + shopUser.setUser(targetUser); + shopUser.setShop(shop); + } + shopUser.setUserName(targetUser.getUsername()); + shopUser.setShopName(shop.getShopName()); + shopUser.setType(ShopUserConstant.SHOP_ADMIN_COST[0]); + if (shopUser.getId() == null) { + shopUserService.save(shopUser); + } else { + shopUserService.update(shopUser); + } + + ensureShopUserType(targetUser); + shopService.refreshShopCache(shop.getId(), shop.getRegionId()); + return ResultUtil.success("换绑成功"); + } + @RequestMapping(value = "/bindPrinter", method = RequestMethod.POST) @ResponseBody @ApiOperation("绑定云打印机") @@ -1162,6 +1214,23 @@ public class ShopController { return ResultUtil.data(shop); } + private void ensureShopUserType(User user) { + if (user == null || hasUserType(user.getType(), UserConstant.USER_TYPE_NORMAL)) { + return; + } + user.setType(CharSequenceUtil.isBlank(user.getType()) + ? UserConstant.USER_TYPE_NORMAL + : user.getType() + "," + UserConstant.USER_TYPE_NORMAL); + userService.save(user); + } + + private boolean hasUserType(String userType, String targetType) { + if (CharSequenceUtil.isBlank(userType) || CharSequenceUtil.isBlank(targetType)) { + return false; + } + return Arrays.asList(userType.split(",")).contains(targetType); + } + @Data public static class CloudPrinterBindForm { private String shopId;