| Pass |
- 16:55:31 |
+ 14:41:23 |
Test passed
|
@@ -128,13 +128,13 @@
Started
-
ÁùÔÂ 23, 2026 16:55:30
+
ÁùÔÂ 24, 2026 14:41:22
Ended
-
ÁùÔÂ 23, 2026 16:55:31
+
ÁùÔÂ 24, 2026 14:41:23
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 1caa674c..df70e116 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
@@ -3,6 +3,7 @@ package cc.hiver.mall.controller;
import cc.hiver.core.common.constant.DealingsRecordConstant;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
+import cc.hiver.core.common.utils.SnowFlakeUtil;
import cc.hiver.core.common.utils.StringUtils;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.entity.User;
@@ -24,19 +25,24 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.TimeUnit;
@Slf4j
@RestController
-@Api(tags = "店铺æçŽ°æŽ¥å£")
+@Api(tags = "æçŽ°æŽ¥å£")
@RequestMapping("/hiver/app/returnCommission/")
@Transactional
public class ReturnCommissionController {
+ private static final long WITHDRAW_REQUEST_LOCK_MINUTES = 30L;
+ private static final long WITHDRAW_ACCOUNT_LOCK_SECONDS = 120L;
+
@Autowired
private ReturnCommissionService returnCommissionService;
@@ -55,6 +61,9 @@ public class ReturnCommissionController {
@Autowired
private DealingsRecordService dealingsRecordService;
+ @Autowired
+ private StringRedisTemplate stringRedisTemplate;
+
@RequestMapping(value = "/save", method = RequestMethod.POST)
@ApiOperation("新增店铺æçް")
public Result save(ReturnCommission returnCommission) {
@@ -113,87 +122,109 @@ public class ReturnCommissionController {
@Transactional
@RequestMapping(value = "/handleReturn", method = RequestMethod.POST)
- @ApiOperation("æçް处ç†")
+ @ApiOperation("店铺æçް处ç†")
public Result handleReturn(@RequestBody ReturnCommission returnCommission) {
//final String shopId = securityUtil.getShopId();
- if(returnCommission.getCommission() == null ){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸ºç©ºï¼");
- }
- if(returnCommission.getCommission().compareTo(BigDecimal.ZERO) == 0){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸º0ï¼");
+ final Result validateResult = validateReturnCommission(returnCommission);
+ if (validateResult != null) {
+ return validateResult;
}
- if(StringUtils.isEmpty(returnCommission.getAliName())){
- return ResultUtil.error("支付å®å®žååç§°ä¸èƒ½ä¸ºç©ºï¼");
+ if (StringUtils.isEmpty(returnCommission.getShopId())) {
+ return ResultUtil.error("商铺idä¸èƒ½ä¸ºç©ºï¼");
}
- if(StringUtils.isEmpty(returnCommission.getAliAccount())){
- return ResultUtil.error("æ”¯ä»˜å®æ‰‹æœºå·ä¸èƒ½ä¸ºç©ºï¼");
+ final String withdrawId = ensureWithdrawId(returnCommission);
+ final String requestLockKey = buildRequestLockKey(withdrawId);
+ if (!tryLock(requestLockKey, WITHDRAW_REQUEST_LOCK_MINUTES, TimeUnit.MINUTES)) {
+ return ResultUtil.error("æçް处ç†ä¸ï¼Œè¯·å‹¿é‡å¤æäº¤ï¼");
}
-
- boolean result = false;
- String aliResult = "";
- final Shop shop = shopService.findById(returnCommission.getShopId());
- returnCommission.setRemark("商家" + shop.getShopName() + "æçް");
- if (shop.getBalance().compareTo(returnCommission.getCommission()) < 0) {
- // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
- }
- //æ”¯ä»˜å®æˆ·å(姓å)
- final String name = returnCommission.getAliName(); //shop.getAliName();
- //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
- final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
- // æçް金é¢
- final BigDecimal commission = returnCommission.getCommission();
- // 店铺当å‰è¿”佣余é¢
- //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
- // 店铺当å‰è¿”佣余é¢
- /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
- if (shopBefRebateAmount.compareTo(commission) < 0) {
- // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
- }*/
+ String accountLockKey = null;
+ boolean keepRequestLock = false;
try {
- final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
- if ("SUCCESS".equals(payResult.getStatus())) {
- returnCommission.setStatus("1");
- aliResult = "支付å®è½¬è´¦æˆåŠŸ";
-
- //.setShopBefRebateAmount(shopBefRebateAmount);
- //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
- // 3. 更新店铺返佣金é¢
- //shop.setRebateAmount(shopAfterRebateAmount);
- shop.setBalance(shop.getBalance().subtract(commission));
- shopService.update(shop);
-
- //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
- DealingsRecord dealingsRecord = new DealingsRecord();
- dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[3]);
- dealingsRecord.setAmount(commission);
- dealingsRecord.setLinkUserId(shop.getId());
- dealingsRecord.setDealingsTime(new Date());
- dealingsRecord.setLinkId(returnCommission.getId());
- dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[2]);
- dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
- dealingsRecord.setCreateBy(shop.getId());
- dealingsRecordService.save(dealingsRecord);
- } else {
+ if (returnCommissionService.getById(withdrawId) != null) {
+ keepRequestLock = true;
+ return ResultUtil.error("请勿é‡å¤æäº¤æçŽ°ç”³è¯·ï¼");
+ }
+ accountLockKey = buildAccountLockKey("shop", returnCommission.getShopId());
+ if (!tryLock(accountLockKey, WITHDRAW_ACCOUNT_LOCK_SECONDS, TimeUnit.SECONDS)) {
+ return ResultUtil.error("当å‰è´¦æˆ·å·²æœ‰æçް处ç†ä¸ï¼Œè¯·ç¨åŽå†è¯•ï¼");
+ }
+
+ boolean result = false;
+ String aliResult = "";
+ final Shop shop = shopService.findById(returnCommission.getShopId());
+ if (shop == null) {
+ return ResultUtil.error("商铺ä¸å˜åœ¨ï¼");
+ }
+ returnCommission.setRemark("商家" + shop.getShopName() + "æçް");
+ if (shop.getBalance().compareTo(returnCommission.getCommission()) < 0) {
+ // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }
+ //æ”¯ä»˜å®æˆ·å(姓å)
+ final String name = returnCommission.getAliName(); //shop.getAliName();
+ //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
+ final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
+ // æçް金é¢
+ final BigDecimal commission = returnCommission.getCommission();
+ // 店铺当å‰è¿”佣余é¢
+ //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
+ // 店铺当å‰è¿”佣余é¢
+ /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
+ if (shopBefRebateAmount.compareTo(commission) < 0) {
+ // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }*/
+ try {
+ keepRequestLock = true;
+ final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
+ if ("SUCCESS".equals(payResult.getStatus())) {
+ returnCommission.setStatus("1");
+ aliResult = "支付å®è½¬è´¦æˆåŠŸ";
+
+ //.setShopBefRebateAmount(shopBefRebateAmount);
+ //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
+ // 3. 更新店铺返佣金é¢
+ //shop.setRebateAmount(shopAfterRebateAmount);
+ shop.setBalance(shop.getBalance().subtract(commission));
+ shopService.update(shop);
+
+ //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
+ DealingsRecord dealingsRecord = new DealingsRecord();
+ dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[3]);
+ dealingsRecord.setAmount(commission);
+ dealingsRecord.setLinkUserId(shop.getId());
+ dealingsRecord.setDealingsTime(new Date());
+ dealingsRecord.setLinkId(returnCommission.getId());
+ dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[2]);
+ dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
+ dealingsRecord.setCreateBy(shop.getId());
+ dealingsRecordService.save(dealingsRecord);
+ } else {
+ returnCommission.setStatus("2");
+ returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
+ returnCommission.setRemark(payResult.getSubMsg());
+ aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
+ }
+ } catch (AlipayApiException e) {
returnCommission.setStatus("2");
returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(payResult.getSubMsg());
+ returnCommission.setRemark(e.getErrMsg());
aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
}
- } catch (AlipayApiException e) {
- returnCommission.setStatus("2");
- returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(e.getErrMsg());
- aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
- }
- //2.修改æçŽ°è®°å½•
- result = returnCommissionService.save(returnCommission);
- if (result) {
- return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
- } else {
- return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+ //2.修改æçŽ°è®°å½•
+ result = returnCommissionService.save(returnCommission);
+ if (result) {
+ keepRequestLock = true;
+ return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
+ } else {
+ return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+ }
+ } finally {
+ releaseLock(accountLockKey);
+ if (!keepRequestLock) {
+ releaseLock(requestLockKey);
+ }
}
}
@@ -204,83 +235,105 @@ public class ReturnCommissionController {
public Result handleReturnUser(@RequestBody ReturnCommission returnCommission) {
//final String shopId = securityUtil.getShopId();
- if(returnCommission.getCommission() == null ){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸ºç©ºï¼");
- }
- if(returnCommission.getCommission().compareTo(BigDecimal.ZERO) == 0){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸º0ï¼");
- }
- if(StringUtils.isEmpty(returnCommission.getAliName())){
- return ResultUtil.error("支付å®å®žååç§°ä¸èƒ½ä¸ºç©ºï¼");
+ final Result validateResult = validateReturnCommission(returnCommission);
+ if (validateResult != null) {
+ return validateResult;
}
- if(StringUtils.isEmpty(returnCommission.getAliAccount())){
- return ResultUtil.error("æ”¯ä»˜å®æ‰‹æœºå·ä¸èƒ½ä¸ºç©ºï¼");
+ if (StringUtils.isEmpty(returnCommission.getUserId())) {
+ return ResultUtil.error("用户idä¸èƒ½ä¸ºç©ºï¼");
}
-
- boolean result = false;
- String aliResult = "";
- final User user = userService.findById(returnCommission.getUserId());
- returnCommission.setRemark("用户" + user.getUsername() + "æçް");
- if (user.getDepoBal().compareTo(returnCommission.getCommission()) < 0) {
- // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ final String withdrawId = ensureWithdrawId(returnCommission);
+ final String requestLockKey = buildRequestLockKey(withdrawId);
+ if (!tryLock(requestLockKey, WITHDRAW_REQUEST_LOCK_MINUTES, TimeUnit.MINUTES)) {
+ return ResultUtil.error("æçް处ç†ä¸ï¼Œè¯·å‹¿é‡å¤æäº¤ï¼");
}
- //æ”¯ä»˜å®æˆ·å(姓å)
- final String name = returnCommission.getAliName(); //shop.getAliName();
- //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
- final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
- // æçް金é¢
- final BigDecimal commission = returnCommission.getCommission();
- // 店铺当å‰è¿”佣余é¢
- //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
- // 店铺当å‰è¿”佣余é¢
- /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
- if (shopBefRebateAmount.compareTo(commission) < 0) {
- // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
- }*/
+ String accountLockKey = null;
+ boolean keepRequestLock = false;
try {
- final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
- if ("SUCCESS".equals(payResult.getStatus())) {
- returnCommission.setStatus("1");
- aliResult = "支付å®è½¬è´¦æˆåŠŸ";
-
- //.setShopBefRebateAmount(shopBefRebateAmount);
- //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
- // 3. 更新店铺返佣金é¢
- //shop.setRebateAmount(shopAfterRebateAmount);
- user.setDepoBal(user.getDepoBal().subtract(commission));
- userService.update(user);
-
- //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
- DealingsRecord dealingsRecord = new DealingsRecord();
- dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[7]);
- dealingsRecord.setAmount(commission);
- dealingsRecord.setLinkUserId(user.getId());
- dealingsRecord.setDealingsTime(new Date());
- dealingsRecord.setLinkId(returnCommission.getId());
- dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[0]);
- dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
- dealingsRecord.setCreateBy(user.getId());
- dealingsRecordService.save(dealingsRecord);
- } else {
+ if (returnCommissionService.getById(withdrawId) != null) {
+ keepRequestLock = true;
+ return ResultUtil.error("请勿é‡å¤æäº¤æçŽ°ç”³è¯·ï¼");
+ }
+ accountLockKey = buildAccountLockKey("user", returnCommission.getUserId());
+ if (!tryLock(accountLockKey, WITHDRAW_ACCOUNT_LOCK_SECONDS, TimeUnit.SECONDS)) {
+ return ResultUtil.error("当å‰è´¦æˆ·å·²æœ‰æçް处ç†ä¸ï¼Œè¯·ç¨åŽå†è¯•ï¼");
+ }
+
+ boolean result = false;
+ String aliResult = "";
+ final User user = userService.findById(returnCommission.getUserId());
+ if (user == null) {
+ return ResultUtil.error("用户ä¸å˜åœ¨ï¼");
+ }
+ returnCommission.setRemark("用户" + user.getUsername() + "æçް");
+ if (user.getDepoBal().compareTo(returnCommission.getCommission()) < 0) {
+ // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }
+ //æ”¯ä»˜å®æˆ·å(姓å)
+ final String name = returnCommission.getAliName(); //shop.getAliName();
+ //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
+ final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
+ // æçް金é¢
+ final BigDecimal commission = returnCommission.getCommission();
+ // 店铺当å‰è¿”佣余é¢
+ //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
+ // 店铺当å‰è¿”佣余é¢
+ /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
+ if (shopBefRebateAmount.compareTo(commission) < 0) {
+ // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }*/
+ try {
+ keepRequestLock = true;
+ final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
+ if ("SUCCESS".equals(payResult.getStatus())) {
+ returnCommission.setStatus("1");
+ aliResult = "支付å®è½¬è´¦æˆåŠŸ";
+
+ //.setShopBefRebateAmount(shopBefRebateAmount);
+ //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
+ // 3. 更新店铺返佣金é¢
+ //shop.setRebateAmount(shopAfterRebateAmount);
+ user.setDepoBal(user.getDepoBal().subtract(commission));
+ userService.update(user);
+
+ //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
+ DealingsRecord dealingsRecord = new DealingsRecord();
+ dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[7]);
+ dealingsRecord.setAmount(commission);
+ dealingsRecord.setLinkUserId(user.getId());
+ dealingsRecord.setDealingsTime(new Date());
+ dealingsRecord.setLinkId(returnCommission.getId());
+ dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[0]);
+ dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
+ dealingsRecord.setCreateBy(user.getId());
+ dealingsRecordService.save(dealingsRecord);
+ } else {
+ returnCommission.setStatus("2");
+ returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
+ returnCommission.setRemark(payResult.getSubMsg());
+ aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
+ }
+ } catch (AlipayApiException e) {
returnCommission.setStatus("2");
returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(payResult.getSubMsg());
+ returnCommission.setRemark(e.getErrMsg());
aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
}
- } catch (AlipayApiException e) {
- returnCommission.setStatus("2");
- returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(e.getErrMsg());
- aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
- }
- //2.修改æçŽ°è®°å½•
- result = returnCommissionService.save(returnCommission);
- if (result) {
- return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
- } else {
- return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+ //2.修改æçŽ°è®°å½•
+ result = returnCommissionService.save(returnCommission);
+ if (result) {
+ keepRequestLock = true;
+ return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
+ } else {
+ return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+ }
+ } finally {
+ releaseLock(accountLockKey);
+ if (!keepRequestLock) {
+ releaseLock(requestLockKey);
+ }
}
}
@@ -291,85 +344,151 @@ public class ReturnCommissionController {
public Result handleReturnWorker(@RequestBody ReturnCommission returnCommission) {
//final String shopId = securityUtil.getShopId();
- if(returnCommission.getCommission() == null ){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸ºç©ºï¼");
- }
- if(returnCommission.getCommission().compareTo(BigDecimal.ZERO) == 0){
- return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸º0ï¼");
+ final Result validateResult = validateReturnCommission(returnCommission);
+ if (validateResult != null) {
+ return validateResult;
}
- if(StringUtils.isEmpty(returnCommission.getAliName())){
- return ResultUtil.error("支付å®å®žååç§°ä¸èƒ½ä¸ºç©ºï¼");
- }
- if(StringUtils.isEmpty(returnCommission.getAliAccount())){
- return ResultUtil.error("æ”¯ä»˜å®æ‰‹æœºå·ä¸èƒ½ä¸ºç©ºï¼");
+ if (StringUtils.isEmpty(returnCommission.getWorkerId())) {
+ return ResultUtil.error("é…é€å‘˜idä¸èƒ½ä¸ºç©ºï¼");
}
-
- boolean result = false;
- String aliResult = "";
- Worker worker = workerServiceImpl.findByWorkerId(returnCommission.getWorkerId());
- returnCommission.setRemark("é…é€å‘˜" + worker.getWorkerName() + "æçް");
- if (worker.getDepoBalRel().compareTo(returnCommission.getCommission()) < 0) {
- // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ final String withdrawId = ensureWithdrawId(returnCommission);
+ final String requestLockKey = buildRequestLockKey(withdrawId);
+ if (!tryLock(requestLockKey, WITHDRAW_REQUEST_LOCK_MINUTES, TimeUnit.MINUTES)) {
+ return ResultUtil.error("æçް处ç†ä¸ï¼Œè¯·å‹¿é‡å¤æäº¤ï¼");
}
- //æ”¯ä»˜å®æˆ·å(姓å)
- final String name = returnCommission.getAliName(); //shop.getAliName();
- //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
- final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
- // æçް金é¢
- final BigDecimal commission = returnCommission.getCommission();
- // 店铺当å‰è¿”佣余é¢
- //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
- // 店铺当å‰è¿”佣余é¢
- /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
- if (shopBefRebateAmount.compareTo(commission) < 0) {
- // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
- return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
- }*/
+ String accountLockKey = null;
+ boolean keepRequestLock = false;
try {
- final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
- if ("SUCCESS".equals(payResult.getStatus())) {
- returnCommission.setStatus("1");
- aliResult = "支付å®è½¬è´¦æˆåŠŸ";
-
- //.setShopBefRebateAmount(shopBefRebateAmount);
- //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
- // 3. 更新店铺返佣金é¢
- //shop.setRebateAmount(shopAfterRebateAmount);
- worker.setDepoBalRel(worker.getDepoBalRel().subtract(commission));
- workerServiceImpl.update(worker);
-
- //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
- DealingsRecord dealingsRecord = new DealingsRecord();
- dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[4]);
- dealingsRecord.setAmount(commission);
- dealingsRecord.setLinkUserId(worker.getWorkerId());
- dealingsRecord.setDealingsTime(new Date());
- dealingsRecord.setLinkId(returnCommission.getId());
- dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[1]);
- dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
- dealingsRecord.setCreateBy(worker.getWorkerId());
- dealingsRecordService.save(dealingsRecord);
- } else {
+ if (returnCommissionService.getById(withdrawId) != null) {
+ keepRequestLock = true;
+ return ResultUtil.error("请勿é‡å¤æäº¤æçŽ°ç”³è¯·ï¼");
+ }
+ accountLockKey = buildAccountLockKey("worker", returnCommission.getWorkerId());
+ if (!tryLock(accountLockKey, WITHDRAW_ACCOUNT_LOCK_SECONDS, TimeUnit.SECONDS)) {
+ return ResultUtil.error("当å‰è´¦æˆ·å·²æœ‰æçް处ç†ä¸ï¼Œè¯·ç¨åŽå†è¯•ï¼");
+ }
+
+ boolean result = false;
+ String aliResult = "";
+ Worker worker = workerServiceImpl.findByWorkerId(returnCommission.getWorkerId());
+ if (worker == null) {
+ return ResultUtil.error("é…é€å‘˜ä¸å˜åœ¨ï¼");
+ }
+ returnCommission.setRemark("é…é€å‘˜" + worker.getWorkerName() + "æçް");
+ if (worker.getDepoBalRel().compareTo(returnCommission.getCommission()) < 0) {
+ // 如果æçް金é¢å¤§äºŽä½™é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }
+ //æ”¯ä»˜å®æˆ·å(姓å)
+ final String name = returnCommission.getAliName(); //shop.getAliName();
+ //支付å®è´¦å·ï¼ˆæ‰‹æœºå·ï¼‰
+ final String phoneNumber = returnCommission.getAliAccount();// shop.getAliAccount();
+ // æçް金é¢
+ final BigDecimal commission = returnCommission.getCommission();
+ // 店铺当å‰è¿”佣余é¢
+ //final BigDecimal shopBefRebateAmount = shop.getRebateAmount();
+ // 店铺当å‰è¿”佣余é¢
+ /* final BigDecimal shopAfterRebateAmount = shopBefRebateAmount.subtract(commission);
+ if (shopBefRebateAmount.compareTo(commission) < 0) {
+ // 如果æçް金é¢å¤§äºŽè¿”佣余é¢ï¼Œåˆ™ä¸å…许æçް
+ return ResultUtil.error("æçް金é¢ä¸å¯å¤§äºŽä½£é‡‘ä½™é¢ï¼");
+ }*/
+ try {
+ keepRequestLock = true;
+ final AlipayFundTransUniTransferResponse payResult = AliPayNewUtil.pay(phoneNumber, name, String.valueOf(commission), returnCommission.getId());
+ if ("SUCCESS".equals(payResult.getStatus())) {
+ returnCommission.setStatus("1");
+ aliResult = "支付å®è½¬è´¦æˆåŠŸ";
+
+ //.setShopBefRebateAmount(shopBefRebateAmount);
+ //returnCommission.setShopAfterRebateAmount(shopAfterRebateAmount);
+ // 3. 更新店铺返佣金é¢
+ //shop.setRebateAmount(shopAfterRebateAmount);
+ worker.setDepoBalRel(worker.getDepoBalRel().subtract(commission));
+ workerServiceImpl.update(worker);
+
+ //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
+ DealingsRecord dealingsRecord = new DealingsRecord();
+ dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[4]);
+ dealingsRecord.setAmount(commission);
+ dealingsRecord.setLinkUserId(worker.getWorkerId());
+ dealingsRecord.setDealingsTime(new Date());
+ dealingsRecord.setLinkId(returnCommission.getId());
+ dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[1]);
+ dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[1]);
+ dealingsRecord.setCreateBy(worker.getWorkerId());
+ dealingsRecordService.save(dealingsRecord);
+ } else {
+ returnCommission.setStatus("2");
+ returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
+ returnCommission.setRemark(payResult.getSubMsg());
+ aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
+ }
+ } catch (AlipayApiException e) {
returnCommission.setStatus("2");
returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(payResult.getSubMsg());
+ returnCommission.setRemark(e.getErrMsg());
aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
}
- } catch (AlipayApiException e) {
- returnCommission.setStatus("2");
- returnCommission.setFailMessage("支付å®è½¬è´¦å¤±è´¥");
- returnCommission.setRemark(e.getErrMsg());
- aliResult = "支付å®è½¬è´¦å¤±è´¥ï¼Œè¯·è”系管ç†å‘˜ï¼";
+ //2.修改æçŽ°è®°å½•
+ result = returnCommissionService.save(returnCommission);
+ if (result) {
+ keepRequestLock = true;
+ return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
+ } else {
+ return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+ }
+ } finally {
+ releaseLock(accountLockKey);
+ if (!keepRequestLock) {
+ releaseLock(requestLockKey);
+ }
}
- //2.修改æçŽ°è®°å½•
- result = returnCommissionService.save(returnCommission);
- if (result) {
- return ResultUtil.success("处ç†å®Œæˆ," + aliResult);
- } else {
- return ResultUtil.error("修改æçŽ°æ•°æ®å¤±è´¥," + aliResult);
+
+ }
+
+ private Result validateReturnCommission(ReturnCommission returnCommission) {
+ if (returnCommission == null) {
+ return ResultUtil.error("æçް傿•°ä¸èƒ½ä¸ºç©ºï¼");
+ }
+ if (returnCommission.getCommission() == null) {
+ return ResultUtil.error("æçް金é¢ä¸èƒ½ä¸ºç©ºï¼");
+ }
+ if (returnCommission.getCommission().compareTo(BigDecimal.ZERO) <= 0) {
+ return ResultUtil.error("æçް金é¢å¿…须大于0ï¼");
+ }
+ if (StringUtils.isEmpty(returnCommission.getAliName())) {
+ return ResultUtil.error("支付å®å®žååç§°ä¸èƒ½ä¸ºç©ºï¼");
+ }
+ if (StringUtils.isEmpty(returnCommission.getAliAccount())) {
+ return ResultUtil.error("æ”¯ä»˜å®æ‰‹æœºå·ä¸èƒ½ä¸ºç©ºï¼");
}
+ return null;
+ }
+ private String ensureWithdrawId(ReturnCommission returnCommission) {
+ if (StringUtils.isEmpty(returnCommission.getId())) {
+ returnCommission.setId(SnowFlakeUtil.nextId().toString());
+ }
+ return returnCommission.getId();
+ }
+
+ private String buildRequestLockKey(String withdrawId) {
+ return "return_commission:request:" + withdrawId;
+ }
+
+ private String buildAccountLockKey(String accountType, String accountId) {
+ return "return_commission:account:" + accountType + ":" + accountId;
+ }
+
+ private boolean tryLock(String key, long timeout, TimeUnit timeUnit) {
+ return Boolean.TRUE.equals(stringRedisTemplate.opsForValue().setIfAbsent(key, "1", timeout, timeUnit));
+ }
+
+ private void releaseLock(String key) {
+ if (!StringUtils.isEmpty(key)) {
+ stringRedisTemplate.delete(key);
+ }
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
index e55b37b2..8eb0c543 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java
@@ -41,6 +41,7 @@ import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -65,6 +66,7 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl uw = new LambdaUpdateWrapper<>();
- uw.eq(MallDeliveryOrder::getId, deliveryId)
- .set(MallDeliveryOrder::getStatus, STATUS_DONE)
- .set(MallDeliveryOrder::getFinishTime, new Date());
- this.update(uw);
+ String completeLockKey = buildCompleteLockKey(deliveryId);
+ if (!tryCompleteLock(completeLockKey)) {
+ throw new RuntimeException("é€è¾¾å¤„ç†ä¸ï¼Œè¯·å‹¿é‡å¤æäº¤");
+ }
+ try {
+ MallDeliveryOrder delivery = checkWorkerAndStatus(deliveryId, workerId, STATUS_DELIVERING);
- Boolean isFantuan = true;
- int freeOrderCount = 0;
- List completedOrders = new ArrayList<>();
+ LambdaUpdateWrapper uw = new LambdaUpdateWrapper<>();
+ uw.eq(MallDeliveryOrder::getId, deliveryId)
+ .eq(MallDeliveryOrder::getWorkerId, workerId)
+ .eq(MallDeliveryOrder::getStatus, STATUS_DELIVERING)
+ .set(MallDeliveryOrder::getStatus, STATUS_DONE)
+ .set(MallDeliveryOrder::getFinishTime, new Date());
+ int updated = this.baseMapper.update(null, uw);
+ if (updated <= 0) {
+ throw new RuntimeException("订å•å·²é€è¾¾ï¼Œè¯·å‹¿é‡å¤æ“作");
+ }
- //如果是有groupIdè¯æ˜Žæ˜¯é¢å¯¹é¢é…é€ï¼Œéœ€è¦æ›´æ–°æ‰€æœ‰å订å•状æ€ä¸ºå®Œæˆ
- if(StringUtils.isNotBlank(delivery.getGroupId())){
- MallOrderGroup group = mallOrderGroupMapper.selectById(delivery.getGroupId());
- if(group.getIsFace() == 1){
- List orderIdList = Arrays.stream(group.getGroupOrderIds().split(","))
- .filter(StringUtils::isNotBlank)
- .collect(Collectors.toList());
- List orderInnerList = mallOrderService.listByIds(orderIdList);
- completedOrders = orderInnerList.stream()
- .filter(order -> order != null && order.getStatus() == ORDER_STATUS_DELIVERING)
- .collect(Collectors.toList());
- List completedOrderIds = completedOrders.stream()
- .map(MallOrder::getId)
- .collect(Collectors.toList());
- if (!completedOrderIds.isEmpty()) {
- LambdaUpdateWrapper oqw = new LambdaUpdateWrapper<>();
- oqw.in(MallOrder::getId, completedOrderIds).set(MallOrder::getStatus,ORDER_STATUS_DONE);
- mallOrderService.update(oqw);
-
- //æ›´æ–°ä¼˜æƒ åˆ¸å·²ä½¿ç”¨
- LambdaUpdateWrapper oqwCoupon = new LambdaUpdateWrapper<>();
- oqwCoupon.in(MallUserCoupon::getOrderId, completedOrderIds).set(MallUserCoupon::getStatus,2);
- mallUserCouponService.update(oqwCoupon);
- freeOrderCount = completedOrderIds.size();
+ Boolean isFantuan = true;
+ int freeOrderCount = 0;
+ List completedOrders = new ArrayList<>();
+
+ //如果是有groupIdè¯æ˜Žæ˜¯é¢å¯¹é¢é…é€ï¼Œéœ€è¦æ›´æ–°æ‰€æœ‰å订å•状æ€ä¸ºå®Œæˆ
+ if(StringUtils.isNotBlank(delivery.getGroupId())){
+ MallOrderGroup group = mallOrderGroupMapper.selectById(delivery.getGroupId());
+ if(group.getIsFace() == 1){
+ List orderIdList = Arrays.stream(group.getGroupOrderIds().split(","))
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.toList());
+ List orderInnerList = mallOrderService.listByIds(orderIdList);
+ completedOrders = orderInnerList.stream()
+ .filter(order -> order != null && order.getStatus() == ORDER_STATUS_DELIVERING)
+ .collect(Collectors.toList());
+ List completedOrderIds = completedOrders.stream()
+ .map(MallOrder::getId)
+ .collect(Collectors.toList());
+ if (!completedOrderIds.isEmpty()) {
+ LambdaUpdateWrapper oqw = new LambdaUpdateWrapper<>();
+ oqw.in(MallOrder::getId, completedOrderIds).set(MallOrder::getStatus,ORDER_STATUS_DONE);
+ mallOrderService.update(oqw);
+
+ //æ›´æ–°ä¼˜æƒ åˆ¸å·²ä½¿ç”¨
+ LambdaUpdateWrapper oqwCoupon = new LambdaUpdateWrapper<>();
+ oqwCoupon.in(MallUserCoupon::getOrderId, completedOrderIds).set(MallUserCoupon::getStatus,2);
+ mallUserCouponService.update(oqwCoupon);
+ freeOrderCount = completedOrderIds.size();
+ }
+ isFantuan = false;
+ }else{
+ if (StringUtils.isNotBlank(delivery.getOrderId())) {
+ LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>();
+ oUw.eq(MallOrder::getId, delivery.getOrderId())
+ .set(MallOrder::getStatus, ORDER_STATUS_DONE);
+ mallOrderService.update(oUw);
+ MallOrder orderInner = mallOrderService.getById(delivery.getOrderId());
+ if (orderInner != null) {
+ completedOrders.add(orderInner);
+
+ if(orderInner.getOtherOrder() != null){
+ isFantuan = false;
+ }
+ }
+ //ä¼˜æƒ åˆ¸å˜æˆå·²ä½¿ç”¨
+ mallUserCouponService.useCoupon(delivery.getOrderId());
+ }
}
- isFantuan = false;
+ //isFantuan = false; // 已在上方é€å•计数,跳过底部统一计数
}else{
+ // åŒæ¥è®¢å•çŠ¶æ€ -> 已完æˆ
if (StringUtils.isNotBlank(delivery.getOrderId())) {
LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>();
oUw.eq(MallOrder::getId, delivery.getOrderId())
@@ -684,68 +716,65 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl 已完æˆ
- if (StringUtils.isNotBlank(delivery.getOrderId())) {
- LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>();
- oUw.eq(MallOrder::getId, delivery.getOrderId())
- .set(MallOrder::getStatus, ORDER_STATUS_DONE);
- mallOrderService.update(oUw);
- MallOrder orderInner = mallOrderService.getById(delivery.getOrderId());
- if (orderInner != null) {
- completedOrders.add(orderInner);
-
- if(orderInner.getOtherOrder() != null){
- isFantuan = false;
- }
- }
- //ä¼˜æƒ åˆ¸å˜æˆå·²ä½¿ç”¨
- mallUserCouponService.useCoupon(delivery.getOrderId());
+ if (isFantuan && !completedOrders.isEmpty()) {
+ freeOrderCount = 1;
}
+ //å¢žåŠ é…é€å‘˜ä½™é¢
+ Worker worker = workerServiceImpl.findByWorkerId(delivery.getWorkerId());
+ //æ›´æ–°ä½™é¢
+ worker.setDepoBal(worker.getDepoBal().add(delivery.getDeliveryFee()));
+ Integer oldCount = worker.getOrderCount() == null ? 0 : worker.getOrderCount();
+ //æ›´æ–°å•é‡
+ worker.setOrderCount(oldCount + 1);
+ //æ›´æ–°é…逿—¶é—´
+ // 3.1 计算本次é…é€è€—æ—¶ (毫秒)
+ long currentDuration = new Date().getTime() - delivery.getAcceptTime().getTime();
+ double minutesDouble = currentDuration / 60000.0;
+
+ // 2. 转æ¢ä¸º BigDecimal å¹¶ä¿ç•™ä¸¤ä½å°æ•° (å››èˆäº”å…¥)
+ BigDecimal minutesDecimal = new BigDecimal(minutesDouble)
+ .setScale(2, RoundingMode.HALF_UP);
+
+ BigDecimal oldAvgTime = worker.getAvgTime();
+ Integer newCount = oldCount + 1;
+ // æ–°çš„å¹³å‡æ—¶é—´ = (æ—§å¹³å‡æ—¶é—´ * æ—§å•é‡ + 本次é…逿—¶é—´) / æ–°å•é‡
+ BigDecimal newAvgTime = oldAvgTime.multiply(new BigDecimal(oldCount))
+ .add(minutesDecimal)
+ .divide(new BigDecimal(newCount), 2, RoundingMode.HALF_UP);
+ DecimalFormat df = new DecimalFormat("00.00");
+
+ String formattedResult = df.format(newAvgTime);
+ worker.setAvgTime(new BigDecimal(formattedResult));
+ workerServiceImpl.update(worker);
+ //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
+ DealingsRecord dealingsRecord = new DealingsRecord();
+ dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[0]);
+ dealingsRecord.setAmount(delivery.getDeliveryFee());
+ dealingsRecord.setDealingsTime(new Date());
+ dealingsRecord.setLinkId(deliveryId);
+ dealingsRecord.setLinkUserId(worker.getWorkerId());
+ dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[1]);
+ dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[0]);
+ dealingsRecord.setCreateBy(worker.getWorkerId());
+ dealingsRecordService.save(dealingsRecord);
+ sendWorkerCompleteAsyncAfterCommit(delivery, worker, completedOrders, freeOrderCount);
+ } finally {
+ releaseCompleteLock(completeLockKey);
}
- if (isFantuan && !completedOrders.isEmpty()) {
- freeOrderCount = 1;
+ }
+
+ private String buildCompleteLockKey(String deliveryId) {
+ return "mall_delivery:complete:" + deliveryId;
+ }
+
+ private boolean tryCompleteLock(String key) {
+ return Boolean.TRUE.equals(stringRedisTemplate.opsForValue().setIfAbsent(key, "1", COMPLETE_LOCK_SECONDS, TimeUnit.SECONDS));
+ }
+
+ private void releaseCompleteLock(String key) {
+ if (StringUtils.isNotBlank(key)) {
+ stringRedisTemplate.delete(key);
}
- //å¢žåŠ é…é€å‘˜ä½™é¢
- Worker worker = workerServiceImpl.findByWorkerId(delivery.getWorkerId());
- //æ›´æ–°ä½™é¢
- worker.setDepoBal(worker.getDepoBal().add(delivery.getDeliveryFee()));
- Integer oldCount = worker.getOrderCount() == null ? 0 : worker.getOrderCount();
- //æ›´æ–°å•é‡
- worker.setOrderCount(oldCount + 1);
- //æ›´æ–°é…逿—¶é—´
- // 3.1 计算本次é…é€è€—æ—¶ (毫秒)
- long currentDuration = new Date().getTime() - delivery.getAcceptTime().getTime();
- double minutesDouble = currentDuration / 60000.0;
-
- // 2. 转æ¢ä¸º BigDecimal å¹¶ä¿ç•™ä¸¤ä½å°æ•° (å››èˆäº”å…¥)
- BigDecimal minutesDecimal = new BigDecimal(minutesDouble)
- .setScale(2, RoundingMode.HALF_UP);
-
- BigDecimal oldAvgTime = worker.getAvgTime();
- Integer newCount = oldCount + 1;
- // æ–°çš„å¹³å‡æ—¶é—´ = (æ—§å¹³å‡æ—¶é—´ * æ—§å•é‡ + 本次é…逿—¶é—´) / æ–°å•é‡
- BigDecimal newAvgTime = oldAvgTime.multiply(new BigDecimal(oldCount))
- .add(minutesDecimal)
- .divide(new BigDecimal(newCount), 2, RoundingMode.HALF_UP);
- DecimalFormat df = new DecimalFormat("00.00");
-
- String formattedResult = df.format(newAvgTime);
- worker.setAvgTime(new BigDecimal(formattedResult));
- workerServiceImpl.update(worker);
- //å¢žåŠ ä½™é¢å˜åŠ¨è®°å½•
- DealingsRecord dealingsRecord = new DealingsRecord();
- dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[0]);
- dealingsRecord.setAmount(delivery.getDeliveryFee());
- dealingsRecord.setDealingsTime(new Date());
- dealingsRecord.setLinkId(deliveryId);
- dealingsRecord.setLinkUserId(worker.getWorkerId());
- dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[1]);
- dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[0]);
- dealingsRecord.setCreateBy(worker.getWorkerId());
- dealingsRecordService.save(dealingsRecord);
- sendWorkerCompleteAsyncAfterCommit(delivery, worker, completedOrders, freeOrderCount);
}
private void sendWorkerCompleteAsyncAfterCommit(MallDeliveryOrder delivery, Worker worker, List completedOrders, int freeOrderCount) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
index b90008e3..ac387cf5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
@@ -1974,7 +1974,7 @@ public class MallOrderServiceImpl extends ServiceImpl