parent
dbacf19ad0
commit
f2c63d168a
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除钱包详情信息
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -44,13 +44,6 @@ public interface AccWalletInfoMapper {
|
|||
|
||||
public int batchInsertAccWalletInfo(@Param("list") List<AccWalletInfo> accWalletInfos);
|
||||
|
||||
/**
|
||||
* 修改钱包详情信息
|
||||
*
|
||||
* @param accWalletInfo 钱包详情信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateAccWalletInfo(AccWalletInfo accWalletInfo);
|
||||
|
||||
/**
|
||||
* 删除钱包详情信息
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@ public interface AccSubService {
|
|||
|
||||
AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyBatchClearParam param);
|
||||
|
||||
public void addAccWalletBalance(BigDecimal amount, Long userId, Integer walletId);
|
||||
|
||||
List<AccSubOperationListVO> queryAccSubOperationList(AccSubOperationQueryParam param);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccInfoDetailsVO> queryAccInfoByUserIds(List<Long> userIds);
|
||||
AccInfoDetailsVO queryAccInfoByUserId(Long userId);
|
||||
void checkAccStatus(AccInfoDetailsVO accInfoVO);
|
||||
void individualAccRecharge(AccRechargeParam param);
|
||||
void individualAccLeaveClear(AccLeaveClearParam param);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccWalletInfo> accWalletInfos);
|
||||
|
||||
/**
|
||||
* 修改钱包详情信息
|
||||
*
|
||||
* @param accWalletInfo 钱包详情信息
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateAccWalletInfo(AccWalletInfo accWalletInfo);
|
||||
|
||||
/**
|
||||
* 批量删除钱包详情信息
|
||||
*
|
||||
|
|
@ -70,5 +66,18 @@ public interface IAccWalletInfoService {
|
|||
Map<Long, List<AccWalletInfoVO>> selectAccWalletInfoByUserIds(List<Long> userIds);
|
||||
|
||||
void updateMinBalance(List<Long> 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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccWalletIdEnum, BigDecimal> walletLimits = new HashMap<>();
|
||||
walletLimits.put(AccWalletIdEnum.WALLET, accountBalanceEditParam.getMinWalletBalLimit());
|
||||
walletLimits.put(AccWalletIdEnum.SUBSIDY, accountBalanceEditParam.getMinSubBalLimit());
|
||||
for (Map.Entry<AccWalletIdEnum, BigDecimal> 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<AccWalletIdEnum, BigDecimal> walletLimits = new HashMap<>();
|
||||
// walletLimits.put(AccWalletIdEnum.WALLET, accountBalanceEditParam.getMinWalletBalLimit());
|
||||
// walletLimits.put(AccWalletIdEnum.SUBSIDY, accountBalanceEditParam.getMinSubBalLimit());
|
||||
// for (Map.Entry<AccWalletIdEnum, BigDecimal> entry : walletLimits.entrySet()) {
|
||||
// accWalletInfoService.updateMinBalance(ListUtil.toList(accountBalanceEditParam.getUserId()), entry.getKey().getKey(), entry.getValue());
|
||||
// }
|
||||
// updateAccountEndDate(ListUtil.toList(accountBalanceEditParam.getUserId()), accEndDate);
|
||||
}
|
||||
|
||||
protected void updateAccountEndDate(List<Long> 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<AccWalletInfo> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<AccInfoDetailsVO> accInfoVOList = accInfoService.queryAccInfoByUserIds(param.getUserIds());
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<String, String> params = new HashMap<String, String>();
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,25 +104,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</foreach>
|
||||
</insert>
|
||||
|
||||
<update id="updateAccWalletInfo" parameterType="com.bonus.canteen.core.account.domain.AccWalletInfo">
|
||||
update acc_wallet_info
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="accId != null">acc_id = #{accId},</if>
|
||||
<if test="walletId != null">wallet_id = #{walletId},</if>
|
||||
<if test="walletBal != null">wallet_bal = #{walletBal},</if>
|
||||
<if test="limitBalance != null">limit_balance = #{limitBalance},</if>
|
||||
<if test="frozenBalance != null">frozen_balance = #{frozenBalance},</if>
|
||||
<if test="expiredTime != null">expired_time = #{expiredTime},</if>
|
||||
<if test="lastSubsidyAmount != null">last_subsidy_amount = #{lastSubsidyAmount},</if>
|
||||
<if test="lastSubsidyTime != null">last_subsidy_time = #{lastSubsidyTime},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
</trim>
|
||||
where user_id = #{userId}
|
||||
</update>
|
||||
|
||||
<delete id="deleteAccWalletInfoByUserId" parameterType="Long">
|
||||
delete from acc_wallet_info where user_id = #{userId}
|
||||
</delete>
|
||||
|
|
|
|||
Loading…
Reference in New Issue