From f2c63d168a26b07a3c65f1fc3946eb8385634775 Mon Sep 17 00:00:00 2001 From: gaowdong Date: Fri, 11 Apr 2025 13:13:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E9=92=B1=E5=8C=85-=E7=BA=BF?= =?UTF-8?q?=E4=B8=8B=E5=85=85=E5=80=BC=EF=BC=8C=E7=9B=B4=E6=8E=A5=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E9=87=91=E9=A2=9D=20=E4=B8=AA=E4=BA=BA=E9=92=B1?= =?UTF-8?q?=E5=8C=85-=E7=A6=BB=E8=81=8C=E6=97=B6=EF=BC=8C=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account/controller/AccInfoController.java | 18 +++- .../controller/AccWalletInfoController.java | 46 +++------ .../domain/param/AccLeaveClearParam.java | 18 ++++ .../domain/param/AccRechargeParam.java | 30 ++++++ .../account/mapper/AccWalletInfoMapper.java | 7 -- .../core/account/service/AccSubService.java | 2 - .../core/account/service/IAccInfoService.java | 6 +- .../service/IAccWalletInfoService.java | 27 +++-- .../service/impl/AccInfoServiceImpl.java | 86 ++++++++++++---- .../service/impl/AccSubServiceImpl.java | 66 ++++--------- .../impl/AccWalletInfoServiceImpl.java | 98 ++++++++++++++----- .../core/pay/constants/PayChannelEnum.java | 5 +- .../core/pay/controller/NotifyCotroller.java | 25 ++++- .../core/pay/controller/PayController.java | 15 ++- .../mapper/account/AccWalletInfoMapper.xml | 19 ---- 15 files changed, 289 insertions(+), 179 deletions(-) create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccLeaveClearParam.java create mode 100644 bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccRechargeParam.java diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccInfoController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccInfoController.java index 4332558..990908d 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccInfoController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccInfoController.java @@ -5,11 +5,8 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import com.bonus.canteen.core.account.domain.AccInfo; -import com.bonus.canteen.core.account.domain.param.AccOperationQueryParam; -import com.bonus.canteen.core.account.domain.param.AccountBalanceEditParam; -import com.bonus.canteen.core.account.domain.param.AccountEnableDisableParam; +import com.bonus.canteen.core.account.domain.param.*; import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO; -import com.bonus.canteen.core.account.domain.param.AccountInfoQueryParam; import com.bonus.canteen.core.account.service.AccOperationHistoryService; import com.bonus.common.log.enums.OperaType; @@ -190,4 +187,17 @@ public class AccInfoController extends BaseController { public AjaxResult queryWalletBalance(@RequestBody AccInfo accInfo) { return success(this.accInfoService.queryWalletBalance(accInfo)); } + @ApiOperation("单人充值") + @PostMapping("/recharge") + public AjaxResult individualAccRechargeA(@RequestBody @Valid AccRechargeParam param) { + this.accInfoService.individualAccRecharge(param); + return AjaxResult.success(); + } + + @ApiOperation("离职清空余额(个人钱包和补贴钱包)") + @PostMapping({"/leave/clear"}) + public AjaxResult individualAccLeaveClear(@RequestBody @Valid AccLeaveClearParam param) { + this.accInfoService.individualAccLeaveClear(param); + return AjaxResult.success(); + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccWalletInfoController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccWalletInfoController.java index e6cd849..f392b3a 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccWalletInfoController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/controller/AccWalletInfoController.java @@ -1,28 +1,20 @@ package com.bonus.canteen.core.account.controller; -import java.util.List; -import javax.servlet.http.HttpServletResponse; +import com.bonus.canteen.core.account.domain.AccWalletInfo; +import com.bonus.canteen.core.account.service.IAccWalletInfoService; +import com.bonus.common.core.utils.poi.ExcelUtil; +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.core.web.page.TableDataInfo; +import com.bonus.common.log.annotation.SysLog; import com.bonus.common.log.enums.OperaType; -import com.bonus.canteen.core.common.annotation.PreventRepeatSubmit; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.bonus.common.log.annotation.SysLog; -import com.bonus.common.security.annotation.RequiresPermissions; -import com.bonus.canteen.core.account.domain.AccWalletInfo; -import com.bonus.canteen.core.account.service.IAccWalletInfoService; -import com.bonus.common.core.web.controller.BaseController; -import com.bonus.common.core.web.domain.AjaxResult; -import com.bonus.common.core.utils.poi.ExcelUtil; -import com.bonus.common.core.web.page.TableDataInfo; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 钱包详情信息Controller @@ -89,22 +81,6 @@ public class AccWalletInfoController extends BaseController { } } - /** - * 修改钱包详情信息 - */ - @ApiOperation(value = "修改钱包详情信息") - //@PreventRepeatSubmit - //@RequiresPermissions("account:info:edit") - @SysLog(title = "钱包详情信息", businessType = OperaType.UPDATE, logType = 1,module = "仓储管理->修改钱包详情信息") - @PostMapping("/edit") - public AjaxResult edit(@RequestBody AccWalletInfo accWalletInfo) { - try { - return toAjax(accWalletInfoService.updateAccWalletInfo(accWalletInfo)); - } catch (Exception e) { - return error("系统错误, " + e.getMessage()); - } - } - /** * 删除钱包详情信息 */ diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccLeaveClearParam.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccLeaveClearParam.java new file mode 100644 index 0000000..27d16f7 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccLeaveClearParam.java @@ -0,0 +1,18 @@ +package com.bonus.canteen.core.account.domain.param; + +import com.bonus.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class AccLeaveClearParam extends BaseEntity { + @ApiModelProperty(value = "用户编号") + private @NotNull( + message = "用户编号不能为空" + ) Long userId; + + @ApiModelProperty("清空类型 清空-1 清空至-2") + private Integer clearType = 1; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccRechargeParam.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccRechargeParam.java new file mode 100644 index 0000000..ba5ffa4 --- /dev/null +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/domain/param/AccRechargeParam.java @@ -0,0 +1,30 @@ +package com.bonus.canteen.core.account.domain.param; + +import com.bonus.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +public class AccRechargeParam extends BaseEntity { + @ApiModelProperty(value = "用户编号") + private @NotNull( + message = "用户编号不能为空" + ) Long userId; + @ApiModelProperty( + value = "充值金额/分" + ) + private @NotNull( + message = "金额不能为空" + ) @Max( + value = 10000000L, + message = "超过最大金额限制" + ) @Min( + value = 1L, + message = "小于最小充值金额" + ) BigDecimal amount; +} diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccWalletInfoMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccWalletInfoMapper.java index 4564576..ba9f1d9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccWalletInfoMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/mapper/AccWalletInfoMapper.java @@ -44,13 +44,6 @@ public interface AccWalletInfoMapper { public int batchInsertAccWalletInfo(@Param("list") List accWalletInfos); - /** - * 修改钱包详情信息 - * - * @param accWalletInfo 钱包详情信息 - * @return 结果 - */ - public int updateAccWalletInfo(AccWalletInfo accWalletInfo); /** * 删除钱包详情信息 diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/AccSubService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/AccSubService.java index e379b9e..088179c 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/AccSubService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/AccSubService.java @@ -20,8 +20,6 @@ public interface AccSubService { AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyBatchClearParam param); - public void addAccWalletBalance(BigDecimal amount, Long userId, Integer walletId); - List queryAccSubOperationList(AccSubOperationQueryParam param); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccInfoService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccInfoService.java index 1ca3584..942bfa8 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccInfoService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccInfoService.java @@ -4,9 +4,7 @@ import java.util.List; import com.bonus.canteen.core.account.domain.AccInfo; import com.bonus.canteen.core.account.domain.AccInfoVo; import com.bonus.canteen.core.account.domain.WalletBalanceVO; -import com.bonus.canteen.core.account.domain.param.AccountBalanceEditParam; -import com.bonus.canteen.core.account.domain.param.AccountEnableDisableParam; -import com.bonus.canteen.core.account.domain.param.AccountInfoQueryParam; +import com.bonus.canteen.core.account.domain.param.*; import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO; import com.bonus.canteen.core.account.domain.vo.AccInfoInvalidSumVO; import com.bonus.system.api.domain.SysUser; @@ -74,4 +72,6 @@ public interface IAccInfoService { List queryAccInfoByUserIds(List userIds); AccInfoDetailsVO queryAccInfoByUserId(Long userId); void checkAccStatus(AccInfoDetailsVO accInfoVO); + void individualAccRecharge(AccRechargeParam param); + void individualAccLeaveClear(AccLeaveClearParam param); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccWalletInfoService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccWalletInfoService.java index 9e57124..8ef3284 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccWalletInfoService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/IAccWalletInfoService.java @@ -4,9 +4,13 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; +import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; +import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.domain.AccWalletInfo; import com.bonus.canteen.core.account.domain.bo.WalletBalanceOperation; import com.bonus.canteen.core.account.domain.vo.AccWalletInfoVO; +import com.bonus.canteen.core.pay.constants.PayChannelEnum; +import com.bonus.canteen.core.pay.constants.PayTypeEnum; import org.apache.ibatis.annotations.Param; /** @@ -43,14 +47,6 @@ public interface IAccWalletInfoService { public int batchInsertAccWalletInfo(List accWalletInfos); - /** - * 修改钱包详情信息 - * - * @param accWalletInfo 钱包详情信息 - * @return 结果 - */ - public int updateAccWalletInfo(AccWalletInfo accWalletInfo); - /** * 批量删除钱包详情信息 * @@ -70,5 +66,18 @@ public interface IAccWalletInfoService { Map> selectAccWalletInfoByUserIds(List userIds); void updateMinBalance(List userIds, Integer walletId, BigDecimal minBalance); - void acWalletBalanceOperation(WalletBalanceOperation operation); + + void addAccWalletBalance(BigDecimal amount, + Long userId, + AccWalletIdEnum walletIdEnum, + AccTradeTypeEnum accTradeTypeEnum, + PayChannelEnum payChannelEnum, + PayTypeEnum payTypeEnum); + + void clearAccWalletBalance(BigDecimal amount, + Long userId, + AccWalletIdEnum accWalletIdEnum, + AccTradeTypeEnum accTradeTypeEnum, + PayChannelEnum payChannelEnum, + PayTypeEnum payTypeEnum); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccInfoServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccInfoServiceImpl.java index 130f9e2..5790d6a 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccInfoServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccInfoServiceImpl.java @@ -10,13 +10,14 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.*; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.constants.AccStatusEnum; +import com.bonus.canteen.core.account.constants.WalletBalanceOperationEnum; import com.bonus.canteen.core.account.domain.*; -import com.bonus.canteen.core.account.domain.param.AccountBalanceEditParam; -import com.bonus.canteen.core.account.domain.param.AccountEnableDisableParam; +import com.bonus.canteen.core.account.domain.bo.WalletBalanceOperation; +import com.bonus.canteen.core.account.domain.param.*; import com.bonus.canteen.core.account.domain.vo.AccWalletInfoVO; -import com.bonus.canteen.core.account.domain.param.AccountInfoQueryParam; import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO; import com.bonus.canteen.core.account.domain.vo.AccInfoInvalidSumVO; import com.bonus.canteen.core.account.mq.AccMqSender; @@ -29,7 +30,10 @@ import cn.hutool.json.JSONUtil; import com.bonus.canteen.core.account.domain.AccInfoVo; import com.bonus.canteen.core.account.domain.AccWalletInfo; import com.bonus.canteen.core.account.domain.WalletBalanceVO; +import com.bonus.canteen.core.account.utils.AccRedisUtils; import com.bonus.canteen.core.common.utils.MqUtil; +import com.bonus.canteen.core.pay.constants.PayChannelEnum; +import com.bonus.canteen.core.pay.constants.PayTypeEnum; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.houqin.constant.LeCodeUseSceneEnum; @@ -130,27 +134,27 @@ public class AccInfoServiceImpl implements IAccInfoService { @Override @Transactional(rollbackFor = Exception.class) public void updateAccInfo(AccountBalanceEditParam accountBalanceEditParam) { - LocalDate accEndDate = accountBalanceEditParam.getEndDate(); - Map walletLimits = new HashMap<>(); - walletLimits.put(AccWalletIdEnum.WALLET, accountBalanceEditParam.getMinWalletBalLimit()); - walletLimits.put(AccWalletIdEnum.SUBSIDY, accountBalanceEditParam.getMinSubBalLimit()); - for (Map.Entry entry : walletLimits.entrySet()) { - accWalletInfoService.updateMinBalance(ListUtil.toList(accountBalanceEditParam.getUserId()), entry.getKey().getKey(), entry.getValue()); - } - updateAccountEndDate(ListUtil.toList(accountBalanceEditParam.getUserId()), accEndDate); +// LocalDate accEndDate = accountBalanceEditParam.getEndDate(); +// Map walletLimits = new HashMap<>(); +// walletLimits.put(AccWalletIdEnum.WALLET, accountBalanceEditParam.getMinWalletBalLimit()); +// walletLimits.put(AccWalletIdEnum.SUBSIDY, accountBalanceEditParam.getMinSubBalLimit()); +// for (Map.Entry entry : walletLimits.entrySet()) { +// accWalletInfoService.updateMinBalance(ListUtil.toList(accountBalanceEditParam.getUserId()), entry.getKey().getKey(), entry.getValue()); +// } +// updateAccountEndDate(ListUtil.toList(accountBalanceEditParam.getUserId()), accEndDate); } protected void updateAccountEndDate(List userIds, LocalDate accEndDate) { - if (ObjectUtil.isEmpty(userIds)) { - log.info("更新账户有效期-账户信息为空"); - return; - } - try { - accInfoMapper.updateAccInfoEndDateByUserId(accEndDate, userIds, SecurityUtils.getUsername()); - } catch (Exception e) { - log.error("[更新账户有效期失败", e); - throw new ServiceException("更新账户有效期失败"); - } +// if (ObjectUtil.isEmpty(userIds)) { +// log.info("更新账户有效期-账户信息为空"); +// return; +// } +// try { +// accInfoMapper.updateAccInfoEndDateByUserId(accEndDate, userIds, SecurityUtils.getUsername()); +// } catch (Exception e) { +// log.error("[更新账户有效期失败", e); +// throw new ServiceException("更新账户有效期失败"); +// } } @@ -370,4 +374,44 @@ public class AccInfoServiceImpl implements IAccInfoService { accInfoVo.setAccAllBal(accInfoVo.getWalletBal().add(accInfoVo.getSubsidyBal())); } } + @Transactional( + rollbackFor = {Exception.class} + ) + public void individualAccRecharge(AccRechargeParam param) { + AccInfoDetailsVO accInfoVO = queryAccInfoByUserId(param.getUserId()); + if(Objects.isNull(accInfoVO)) { + throw new ServiceException("账户不存在"); + } + checkAccStatus(accInfoVO); + accWalletInfoService.addAccWalletBalance( + param.getAmount(), + param.getUserId(), + AccWalletIdEnum.WALLET, + AccTradeTypeEnum.RECHARGE, + PayChannelEnum.GC_SYSTEM, + PayTypeEnum.CASH); + } + @Transactional( + rollbackFor = {Exception.class} + ) + public void individualAccLeaveClear(AccLeaveClearParam param) { + AccInfoDetailsVO accInfoVO = queryAccInfoByUserId(param.getUserId()); + if(Objects.isNull(accInfoVO)) { + throw new ServiceException("账户不存在"); + } + checkAccStatus(accInfoVO); + List walletInfoList = accWalletInfoService.selectAccWalletInfoByUserId(accInfoVO.getUserId()); + if(CollUtil.isEmpty(walletInfoList)) { + throw new ServiceException("补贴钱包不存在"); + } + for(AccWalletInfo walletInfo : walletInfoList){ + accWalletInfoService.clearAccWalletBalance( + walletInfo.getWalletBal(), + param.getUserId(), + AccWalletIdEnum.getEnum(walletInfo.getWalletId()), + AccTradeTypeEnum.CLEAR, + PayChannelEnum.GC_SYSTEM, + PayTypeEnum.MEAL_CARD); + } + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccSubServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccSubServiceImpl.java index 0d16bbd..49cd957 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccSubServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccSubServiceImpl.java @@ -2,7 +2,6 @@ package com.bonus.canteen.core.account.service.impl; import cn.hutool.core.collection.CollUtil; import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; -import com.bonus.canteen.core.account.constants.AccWalletClearTypeEnum; import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.constants.WalletBalanceOperationEnum; import com.bonus.canteen.core.account.domain.AccWalletInfo; @@ -64,7 +63,12 @@ public class AccSubServiceImpl implements AccSubService { throw new ServiceException("账户不存在"); } accInfoService.checkAccStatus(accInfoVO); - addAccWalletBalance(param.getAmount(), param.getUserId(), AccWalletIdEnum.SUBSIDY.getKey()); + accWalletInfoService.addAccWalletBalance(param.getAmount(), + param.getUserId(), + AccWalletIdEnum.SUBSIDY, + AccTradeTypeEnum.SUBSIDY, + PayChannelEnum.GC_SYSTEM, + PayTypeEnum.SUB_GRANT); } @Transactional( rollbackFor = {Exception.class} @@ -101,7 +105,12 @@ public class AccSubServiceImpl implements AccSubService { if(Objects.isNull(walletInfo)) { throw new ServiceException("补贴钱包不存在"); } - clearAccWalletBalance(walletInfo.getWalletBal(), param.getUserId(), AccWalletIdEnum.SUBSIDY.getKey()); + accWalletInfoService.clearAccWalletBalance(walletInfo.getWalletBal(), + param.getUserId(), + AccWalletIdEnum.SUBSIDY, + AccTradeTypeEnum.CLEAR, + PayChannelEnum.GC_SYSTEM, + PayTypeEnum.SUB_GRANT); } // private BigDecimal calculateClearAmount(BigDecimal walletBal, Integer clearType, BigDecimal amount) { @@ -157,7 +166,13 @@ public class AccSubServiceImpl implements AccSubService { throw new ServiceException(accInfo.getNickName() + "的账户不存在"); } accInfoService.checkAccStatus(accInfoVO); - addAccWalletBalance(amount, accInfo.getUserId(), AccWalletIdEnum.SUBSIDY.getKey()); + accWalletInfoService.addAccWalletBalance( + amount, + accInfo.getUserId(), + AccWalletIdEnum.SUBSIDY, + AccTradeTypeEnum.SUBSIDY, + PayChannelEnum.GC_SYSTEM, + PayTypeEnum.SUB_GRANT); } catch (Exception ex) { log.error("批量补贴充值异常, 用户id: {}, 补贴金额:{}", accInfo.getUserId(), amount, ex); } @@ -200,30 +215,6 @@ public class AccSubServiceImpl implements AccSubService { log.info("批量清空补贴结束"); } - public void addAccWalletBalance(BigDecimal amount, Long userId, Integer walletId) { - log.info("新增补贴入参: amount:{}, userId:{},walletId:{}", amount, userId, walletId); - AccRedisUtils.lockUpdateAccWalletBalance(userId); - try { - WalletBalanceOperation operation = new WalletBalanceOperation(); - operation.setAmount(amount); - operation.setUserId(userId); - operation.setWalletId(walletId); - operation.setOperationType(WalletBalanceOperationEnum.ADD_BAL.getKey()); - if (AccWalletIdEnum.SUBSIDY.getKey().equals(walletId)) { - operation.setTradeType(AccTradeTypeEnum.SUBSIDY.getKey()); - operation.setPayChannel(PayChannelEnum.GW_SYSTEM.getKey()); - operation.setPayType(PayTypeEnum.SUB_GRANT.getKey()); - } else if (AccWalletIdEnum.WALLET.getKey().equals(walletId)) { - operation.setTradeType(AccTradeTypeEnum.RECHARGE.getKey()); - operation.setPayChannel(PayChannelEnum.ALI.getKey()); - operation.setPayType(PayTypeEnum.ALI_H5_PAY.getKey()); - } - accWalletInfoService.acWalletBalanceOperation(operation); - log.info("新增补贴结束"); - } finally { - AccRedisUtils.unlockUpdateAccWalletBalance(userId); - } - } // public void reduceAccWalletBalance(BigDecimal amount, Long userId, Integer walletId) { // log.info("清空补贴入参: amount:{}, userId:{},walletId:{}", amount, userId, walletId); @@ -244,25 +235,6 @@ public class AccSubServiceImpl implements AccSubService { // } // } - public void clearAccWalletBalance(BigDecimal amount, Long userId, Integer walletId) { - log.info("清空补贴入参: userId:{},walletId:{}", userId, walletId); - AccRedisUtils.lockUpdateAccWalletBalance(userId); - try { - WalletBalanceOperation operation = new WalletBalanceOperation(); - operation.setUserId(userId); - operation.setAmount(amount); - operation.setWalletId(walletId); - operation.setOperationType(WalletBalanceOperationEnum.REDUCE_BAL.getKey()); - operation.setTradeType(AccTradeTypeEnum.CLEAR.getKey()); - operation.setPayChannel(PayChannelEnum.GW_SYSTEM.getKey()); - operation.setPayType(PayTypeEnum.SUB_GRANT.getKey()); - accWalletInfoService.acWalletBalanceOperation(operation); - log.info("清空补贴结束"); - } finally { - AccRedisUtils.unlockUpdateAccWalletBalance(userId); - } - } - public AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyBatchClearParam param) { log.info("批量清空校验操作人数:{}", param.getUserIds().size()); List accInfoVOList = accInfoService.queryAccInfoByUserIds(param.getUserIds()); diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccWalletInfoServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccWalletInfoServiceImpl.java index c4509ca..10c7e90 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccWalletInfoServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/account/service/impl/AccWalletInfoServiceImpl.java @@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bonus.canteen.core.account.constants.AccTradeStateEnum; import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; +import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.constants.WalletBalanceOperationEnum; import com.bonus.canteen.core.account.domain.AccTrade; import com.bonus.canteen.core.account.domain.AccTradeWalletDetail; @@ -20,7 +21,10 @@ import com.bonus.canteen.core.account.domain.bo.WalletBalanceOperation; import com.bonus.canteen.core.account.domain.vo.AccWalletInfoVO; import com.bonus.canteen.core.account.service.IAccTradeService; import com.bonus.canteen.core.account.service.IAccTradeWalletDetailService; +import com.bonus.canteen.core.account.utils.AccRedisUtils; +import com.bonus.canteen.core.pay.constants.PayChannelEnum; import com.bonus.canteen.core.pay.constants.PayStateEnum; +import com.bonus.canteen.core.pay.constants.PayTypeEnum; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; @@ -114,18 +118,6 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService { } } - /** - * 修改钱包详情信息 - * - * @param accWalletInfo 钱包详情信息 - * @return 结果 - */ - @Override - public int updateAccWalletInfo(AccWalletInfo accWalletInfo) { - accWalletInfo.setUpdateTime(DateUtils.getNowDate()); - return accWalletInfoMapper.updateAccWalletInfo(accWalletInfo); - } - /** * 批量删除钱包详情信息 * @@ -180,23 +172,73 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService { } } - private void addAccWalletInfo(WalletBalanceOperation operation) { - accWalletInfoMapper.addAccWalletInfo(operation.getAmount(), operation.getUserId(), operation.getWalletId(), - SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date())); - } - - private void reduceAccWalletInfo(WalletBalanceOperation operation) { - accWalletInfoMapper.reduceAccWalletInfo(operation.getAmount(), operation.getUserId(), operation.getWalletId(), - SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date())); - } - // private void clearAccWalletInfo(WalletBalanceOperation operation) { // accWalletInfoMapper.clearAccWalletInfo(operation.getUserId(), operation.getWalletId(), // SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date())); // } @Transactional(rollbackFor = Exception.class) - public void acWalletBalanceOperation(WalletBalanceOperation operation) { + public void addAccWalletBalance(BigDecimal amount, + Long userId, + AccWalletIdEnum walletIdEnum, + AccTradeTypeEnum accTradeTypeEnum, + PayChannelEnum payChannelEnum, + PayTypeEnum payTypeEnum) { + log.info("新增钱包入参: amount:{}, userId:{},walletId:{}", amount, userId, walletIdEnum.getKey()); + AccRedisUtils.lockUpdateAccWalletBalance(userId); + try { + WalletBalanceOperation operation = operationBuilder(amount, + userId, + walletIdEnum.getKey(), + accTradeTypeEnum.getKey(), + payChannelEnum.getKey(), + payTypeEnum.getKey()); + operation.setOperationType(WalletBalanceOperationEnum.ADD_BAL.getKey()); + acWalletBalanceOperation(operation); + log.info("新增钱包结束"); + } finally { + AccRedisUtils.unlockUpdateAccWalletBalance(userId); + } + } + + @Transactional(rollbackFor = Exception.class) + public void clearAccWalletBalance(BigDecimal amount, + Long userId, + AccWalletIdEnum accWalletIdEnum, + AccTradeTypeEnum accTradeTypeEnum, + PayChannelEnum payChannelEnum, + PayTypeEnum payTypeEnum) { + log.info("扣减钱包入参: userId:{},walletId:{}", userId, accWalletIdEnum.getKey()); + AccRedisUtils.lockUpdateAccWalletBalance(userId); + try { + WalletBalanceOperation operation = operationBuilder(amount, + userId, + accWalletIdEnum.getKey(), + accTradeTypeEnum.getKey(), + payChannelEnum.getKey(), + payTypeEnum.getKey()); + operation.setOperationType(WalletBalanceOperationEnum.REDUCE_BAL.getKey()); + acWalletBalanceOperation(operation); + log.info("扣减钱包结束"); + } finally { + AccRedisUtils.unlockUpdateAccWalletBalance(userId); + } + } + + private WalletBalanceOperation operationBuilder(BigDecimal amount, Long userId, Integer walletId, + Integer tradeType, Integer payChannel, Integer payType) { + WalletBalanceOperation operation = new WalletBalanceOperation(); + operation.setUserId(userId); + operation.setAmount(amount); + operation.setWalletId(walletId); + operation.setTradeType(tradeType); + operation.setPayChannel(payChannel); + operation.setPayType(payType); + return operation; + } + + + private void acWalletBalanceOperation(WalletBalanceOperation operation) { try{ switch (WalletBalanceOperationEnum.getEnum(operation.getOperationType())) { case ADD_BAL: @@ -254,4 +296,14 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService { throw new ServiceException("修改钱包失败"); } } + + private void addAccWalletInfo(WalletBalanceOperation operation) { + accWalletInfoMapper.addAccWalletInfo(operation.getAmount(), operation.getUserId(), operation.getWalletId(), + SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date())); + } + + private void reduceAccWalletInfo(WalletBalanceOperation operation) { + accWalletInfoMapper.reduceAccWalletInfo(operation.getAmount(), operation.getUserId(), operation.getWalletId(), + SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date())); + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/constants/PayChannelEnum.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/constants/PayChannelEnum.java index 97ad237..d870f23 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/constants/PayChannelEnum.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/constants/PayChannelEnum.java @@ -4,13 +4,10 @@ package com.bonus.canteen.core.pay.constants; //import com.bonus.canteen.core.pay.channel.account.extension.AccPayExtension; //import com.bonus.canteen.core.pay.channel.ali.extension.AliPayExtension; -import java.util.*; -import java.util.stream.Collectors; - public enum PayChannelEnum { ACC(1, "系统账户", null), //AccPayExtension.class ALI(3, "支付宝", null), //AliPayExtension.class - GW_SYSTEM(20, "系统后台", null); + GC_SYSTEM(20, "系统后台", null); private final Integer key; private final String desc; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java index 78d0625..a8e57a9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/NotifyCotroller.java @@ -3,18 +3,23 @@ package com.bonus.canteen.core.pay.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.internal.util.AlipaySignature; import com.bonus.canteen.core.account.constants.AccTradeStateEnum; +import com.bonus.canteen.core.account.constants.AccTradeTypeEnum; import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.domain.AccTrade; import com.bonus.canteen.core.account.service.AccSubService; import com.bonus.canteen.core.account.service.IAccTradeService; +import com.bonus.canteen.core.account.service.IAccWalletInfoService; import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum; +import com.bonus.canteen.core.pay.constants.PayChannelEnum; import com.bonus.canteen.core.pay.constants.PayStateEnum; import com.bonus.canteen.core.account.domain.vo.AccTradeVo; +import com.bonus.canteen.core.pay.constants.PayTypeEnum; import com.bonus.canteen.core.pay.util.AlipayConfig; import com.bonus.common.security.utils.SecurityUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @@ -36,7 +41,9 @@ public class NotifyCotroller { IAccTradeService accTradeService; @Autowired AccSubService accSubService; - + @Autowired + @Lazy + private IAccWalletInfoService accWalletInfoService; @RequestMapping("getnotify") public void getNotify(HttpServletRequest request, HttpServletResponse response) throws AlipayApiException, IOException { Map params = new HashMap(); @@ -80,7 +87,13 @@ public class NotifyCotroller { updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue()); updateTrade.setFailReason(trade_status); if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) { - accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey()); + accWalletInfoService.addAccWalletBalance( + totalAmount, + SecurityUtils.getUserId(), + AccWalletIdEnum.WALLET, + AccTradeTypeEnum.RECHARGE, + PayChannelEnum.ALI, + PayTypeEnum.ALI_H5_PAY); } this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); } else if (AliPayTradeStatusEnum.TRADE_STATUS_SUCCESS.getKey().equals(trade_status)) { @@ -95,7 +108,13 @@ public class NotifyCotroller { updateTrade.setTradeState(AccTradeStateEnum.TAKE_EFFECT.getKey().longValue()); updateTrade.setFailReason(trade_status); if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) { - accSubService.addAccWalletBalance(totalAmount, SecurityUtils.getUserId(), AccWalletIdEnum.WALLET.getKey()); + accWalletInfoService.addAccWalletBalance( + totalAmount, + SecurityUtils.getUserId(), + AccWalletIdEnum.WALLET, + AccTradeTypeEnum.RECHARGE, + PayChannelEnum.ALI, + PayTypeEnum.ALI_H5_PAY); } this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); } else { diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java index ac30d47..662d28d 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/pay/controller/PayController.java @@ -13,7 +13,9 @@ import com.bonus.canteen.core.account.constants.AccWalletIdEnum; import com.bonus.canteen.core.account.domain.AccTrade; import com.bonus.canteen.core.account.service.AccSubService; import com.bonus.canteen.core.account.service.IAccTradeService; +import com.bonus.canteen.core.account.service.IAccWalletInfoService; import com.bonus.canteen.core.pay.constants.AliPayTradeStatusEnum; +import com.bonus.canteen.core.pay.constants.PayChannelEnum; import com.bonus.canteen.core.pay.constants.PayStateEnum; import com.bonus.canteen.core.pay.constants.PayTypeEnum; import com.bonus.canteen.core.pay.util.AlipayConfig; @@ -23,6 +25,7 @@ import com.bonus.common.security.utils.SecurityUtils; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -48,7 +51,9 @@ public class PayController { IAccTradeService accTradeService; @Autowired AccSubService accSubService; - + @Autowired + @Lazy + private IAccWalletInfoService accWalletInfoService; @PostMapping("pay") public void pay(@RequestBody AccTradeVo accTradeVo, HttpServletResponse response) throws AlipayApiException, IOException { // 预装数据,存档 @@ -114,7 +119,13 @@ public class PayController { AccTrade accTradeInDB = accTradeService.selectAccTradeByOrderNo(accTradeVo.getOrderNo()); if (PayStateEnum.PAY_INPROCESS.getKey().equals(accTradeInDB.getPayState())) { BigDecimal totalAmount = new BigDecimal(response.getTotalAmount()); - accSubService.addAccWalletBalance(totalAmount, accTradeVo.getUserId(), AccWalletIdEnum.WALLET.getKey()); + accWalletInfoService.addAccWalletBalance( + totalAmount, + accTradeVo.getUserId(), + AccWalletIdEnum.WALLET, + AccTradeTypeEnum.RECHARGE, + PayChannelEnum.ALI, + PayTypeEnum.ALI_H5_PAY); } this.accTradeService.updateAccTradeVoByOrderNo(updateTrade); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccWalletInfoMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccWalletInfoMapper.xml index 8e7eb32..58014e2 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccWalletInfoMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/account/AccWalletInfoMapper.xml @@ -104,25 +104,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - update acc_wallet_info - - acc_id = #{accId}, - wallet_id = #{walletId}, - wallet_bal = #{walletBal}, - limit_balance = #{limitBalance}, - frozen_balance = #{frozenBalance}, - expired_time = #{expiredTime}, - last_subsidy_amount = #{lastSubsidyAmount}, - last_subsidy_time = #{lastSubsidyTime}, - create_by = #{createBy}, - create_time = #{createTime}, - update_by = #{updateBy}, - update_time = #{updateTime}, - - where user_id = #{userId} - - delete from acc_wallet_info where user_id = #{userId}