Browse Source

对接拼团数据1

master
wangfukang 2 weeks ago
parent
commit
8ae03a86af
  1. 16
      hiver-admin/test-output/test-report.html
  2. 20
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java
  3. 69
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ShopController.java

16
hiver-admin/test-output/test-report.html

@ -35,7 +35,7 @@
<a href="#"><span class="badge badge-primary">Hiver</span></a> <a href="#"><span class="badge badge-primary">Hiver</span></a>
</li> </li>
<li class="m-r-10"> <li class="m-r-10">
<a href="#"><span class="badge badge-primary">十月 28, 2026 10:04:17</span></a> <a href="#"><span class="badge badge-primary">十月 28, 2026 10:46:04</span></a>
</li> </li>
</ul> </ul>
</div> </div>
@ -84,7 +84,7 @@
<div class="test-detail"> <div class="test-detail">
<span class="meta text-white badge badge-sm"></span> <span class="meta text-white badge badge-sm"></span>
<p class="name">passTest</p> <p class="name">passTest</p>
<p class="text-sm"><span>10:04:18 上午</span> / <span>0.023 secs</span></p> <p class="text-sm"><span>10:46:04 上午</span> / <span>0.022 secs</span></p>
</div> </div>
<div class="test-contents d-none"> <div class="test-contents d-none">
<div class="detail-head"> <div class="detail-head">
@ -92,9 +92,9 @@
<div class="info"> <div class="info">
<div class='float-right'><span class='badge badge-default'>#test-id=1</span></div> <div class='float-right'><span class='badge badge-default'>#test-id=1</span></div>
<h5 class="test-status text-pass">passTest</h5> <h5 class="test-status text-pass">passTest</h5>
<span class='badge badge-success'>10.28.2026 10:04:18</span> <span class='badge badge-success'>10.28.2026 10:46:04</span>
<span class='badge badge-danger'>10.28.2026 10:04:18</span> <span class='badge badge-danger'>10.28.2026 10:46:04</span>
<span class='badge badge-default'>0.023 secs</span> <span class='badge badge-default'>0.022 secs</span>
</div> </div>
<div class="m-t-10 m-l-5"></div> <div class="m-t-10 m-l-5"></div>
</div> </div>
@ -104,7 +104,7 @@
<tbody> <tbody>
<tr class="event-row"> <tr class="event-row">
<td><span class="badge log pass-bg">Pass</span></td> <td><span class="badge log pass-bg">Pass</span></td>
<td>10:04:18</td> <td>10:46:04</td>
<td> <td>
Test passed Test passed
</td> </td>
@ -128,13 +128,13 @@
<div class="col-md-3"> <div class="col-md-3">
<div class="card"><div class="card-body"> <div class="card"><div class="card-body">
<p class="m-b-0">Started</p> <p class="m-b-0">Started</p>
<h3>十月 28, 2026 10:04:17</h3> <h3>十月 28, 2026 10:46:04</h3>
</div></div> </div></div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<div class="card"><div class="card-body"> <div class="card"><div class="card-body">
<p class="m-b-0">Ended</p> <p class="m-b-0">Ended</p>
<h3>十月 28, 2026 10:04:18</h3> <h3>十月 28, 2026 10:46:05</h3>
</div></div> </div></div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">

20
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/ReturnCommissionController.java

@ -190,6 +190,10 @@ public class ReturnCommissionController {
if (!isShopWalletWithdrawEnabled(shop)) { if (!isShopWalletWithdrawEnabled(shop)) {
return ResultUtil.error("该店铺已设置不显示钱包余额且不可提现!"); return ResultUtil.error("该店铺已设置不显示钱包余额且不可提现!");
} }
final Result shopAliInfoValidateResult = validateShopAliInfo(returnCommission, shop);
if (shopAliInfoValidateResult != null) {
return shopAliInfoValidateResult;
}
returnCommission.setRemark("商家" + shop.getShopName() + "提现"); returnCommission.setRemark("商家" + shop.getShopName() + "提现");
final BigDecimal shopBalance = shop.getBalance() == null ? BigDecimal.ZERO : shop.getBalance(); final BigDecimal shopBalance = shop.getBalance() == null ? BigDecimal.ZERO : shop.getBalance();
if (shopBalance.compareTo(returnCommission.getCommission()) < 0) { if (shopBalance.compareTo(returnCommission.getCommission()) < 0) {
@ -522,6 +526,22 @@ public class ReturnCommissionController {
return shop != null && !Integer.valueOf(0).equals(shop.getShowWalletWithdraw()); 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) { private boolean isValidAliAccount(String aliAccount) {
final String account = aliAccount == null ? "" : aliAccount.trim(); final String account = aliAccount == null ? "" : aliAccount.trim();
return PHONE_PATTERN.matcher(account).matches() || EMAIL_PATTERN.matcher(account).matches(); return PHONE_PATTERN.matcher(account).matches() || EMAIL_PATTERN.matcher(account).matches();

69
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.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -243,6 +244,57 @@ public class ShopController {
return ResultUtil.success("编辑成功"); return ResultUtil.success("编辑成功");
} }
@RequestMapping(value = "/changeOwnerByMobile", method = RequestMethod.POST)
@ResponseBody
@Transactional
@ApiOperation("根据手机号换绑店铺商家账号")
public Result<Object> 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) @RequestMapping(value = "/bindPrinter", method = RequestMethod.POST)
@ResponseBody @ResponseBody
@ApiOperation("绑定云打印机") @ApiOperation("绑定云打印机")
@ -1162,6 +1214,23 @@ public class ShopController {
return ResultUtil.data(shop); 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 @Data
public static class CloudPrinterBindForm { public static class CloudPrinterBindForm {
private String shopId; private String shopId;

Loading…
Cancel
Save