补贴管理 =
This commit is contained in:
parent
4fe71a435b
commit
240c49a5b7
|
|
@ -27,39 +27,39 @@ public class AccSubsidyController extends BaseController {
|
|||
private AccSubService accSubService;
|
||||
@ApiOperation("单人补贴")
|
||||
@PostMapping("/add")
|
||||
public AjaxResult individualAccSubsidyAdd(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult individualAccSubsidyAdd(@RequestBody @Valid AccSubsidyAddParam param) {
|
||||
this.accSubService.individualAccSubsidyAdd(param);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation("补贴清空")
|
||||
@PostMapping({"/clear"})
|
||||
public AjaxResult individualAccSubsidyClear(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult individualAccSubsidyClear(@RequestBody @Valid AccSubsidyClearParam param) {
|
||||
this.accSubService.individualAccSubsidyClear(param);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation("批量补贴")
|
||||
@PostMapping("/batch/add")
|
||||
public AjaxResult batchAccSubsidyAdd(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult batchAccSubsidyAdd(@RequestBody @Valid AccSubsidyBatchAddParam param) {
|
||||
this.accSubService.batchAccSubsidyAdd(param);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
@ApiOperation("批量补贴校验")
|
||||
@PostMapping("/batch/add/check")
|
||||
public AjaxResult batchAccSubsidyAddCheck(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult batchAccSubsidyAddCheck(@RequestBody @Valid AccSubsidyBatchAddParam param) {
|
||||
return AjaxResult.success(accSubService.batchOperationWalletAddCheck(param));
|
||||
}
|
||||
@ApiOperation("批量补贴清空")
|
||||
@PostMapping({"/batch/clear"})
|
||||
public AjaxResult batchAccSubsidyClear(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult batchAccSubsidyClear(@RequestBody @Valid AccSubsidyBatchClearParam param) {
|
||||
this.accSubService.batchAccSubsidyClear(param);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation("批量补贴清空校验")
|
||||
@PostMapping({"/batch/clear/check"})
|
||||
public AjaxResult batchAccSubsidyClearCheck(@RequestBody @Valid AccSubsidyParam param) {
|
||||
public AjaxResult batchAccSubsidyClearCheck(@RequestBody @Valid AccSubsidyBatchClearParam param) {
|
||||
return AjaxResult.success(accSubService.batchOperationWalletClearCheck(param));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
package com.bonus.canteen.core.account.domain.param;
|
||||
|
||||
import com.bonus.common.core.web.domain.BaseEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
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 AccSubsidyAddParam extends BaseEntity {
|
||||
@ApiModelProperty(value = "用户编号")
|
||||
private @NotNull(
|
||||
message = "用户编号不能为空"
|
||||
) Long userId;
|
||||
@ApiModelProperty(
|
||||
value = "充值金额/分"
|
||||
)
|
||||
private @NotNull(
|
||||
message = "金额不能为空"
|
||||
) @Max(
|
||||
value = 10000000L,
|
||||
message = "超过最大金额限制"
|
||||
) @Min(
|
||||
value = 1L,
|
||||
message = "小于最小充值金额"
|
||||
) BigDecimal amount;
|
||||
@ApiModelProperty("操作类型 补贴-1 清空补贴-2")
|
||||
@JsonIgnore
|
||||
private Integer operationType;
|
||||
}
|
||||
|
|
@ -10,18 +10,11 @@ import javax.validation.constraints.Min;
|
|||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class AccSubsidyParam extends BaseEntity {
|
||||
public class AccSubsidyBatchAddParam extends BaseEntity {
|
||||
@ApiModelProperty(
|
||||
value = "用户编号",
|
||||
required = true
|
||||
)
|
||||
private @NotNull(
|
||||
message = "用户编号不能为空"
|
||||
) Long userId;
|
||||
@ApiModelProperty(
|
||||
value = "用户编号",
|
||||
required = true
|
||||
value = "用户编号"
|
||||
)
|
||||
private @NotNull(
|
||||
message = "用户编号不能为空"
|
||||
|
|
@ -39,8 +32,6 @@ public class AccSubsidyParam extends BaseEntity {
|
|||
value = 1L,
|
||||
message = "小于最小充值金额"
|
||||
) BigDecimal amount;
|
||||
@ApiModelProperty("清空类型 清空-1 清空至-2")
|
||||
private Integer clearType = 1;
|
||||
@ApiModelProperty("操作类型 补贴-1 清空补贴-2")
|
||||
@JsonIgnore
|
||||
private Integer operationType;
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.bonus.canteen.core.account.domain.param;
|
||||
|
||||
import com.bonus.common.core.web.domain.BaseEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
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;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class AccSubsidyBatchClearParam extends BaseEntity {
|
||||
@ApiModelProperty(
|
||||
value = "用户编号"
|
||||
)
|
||||
private @NotNull(
|
||||
message = "用户编号不能为空"
|
||||
) List<Long> userIds;
|
||||
@ApiModelProperty("清空类型 清空-1 清空至-2")
|
||||
private Integer clearType = 1;
|
||||
@ApiModelProperty("操作类型 补贴-1 清空补贴-2")
|
||||
@JsonIgnore
|
||||
private Integer operationType;
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.bonus.canteen.core.account.domain.param;
|
||||
|
||||
import com.bonus.common.core.web.domain.BaseEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
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 AccSubsidyClearParam extends BaseEntity {
|
||||
@ApiModelProperty(value = "用户编号")
|
||||
private @NotNull(
|
||||
message = "用户编号不能为空"
|
||||
) Long userId;
|
||||
|
||||
@ApiModelProperty("清空类型 清空-1 清空至-2")
|
||||
private Integer clearType = 1;
|
||||
@ApiModelProperty("操作类型 补贴-1 清空补贴-2")
|
||||
@JsonIgnore
|
||||
private Integer operationType;
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package com.bonus.canteen.core.account.mapper;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import com.bonus.canteen.core.account.domain.AccWalletInfo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
|
@ -21,7 +22,7 @@ public interface AccWalletInfoMapper {
|
|||
* @return 钱包详情信息
|
||||
*/
|
||||
public List<AccWalletInfo> selectAccWalletInfoByUserId(Long userId);
|
||||
public AccWalletInfo selectAccWalletInfoByUserIdAndWalletId(Long userId, Integer walletId);
|
||||
public AccWalletInfo selectAccWalletInfoByUserIdAndWalletId(@Param("userId") Long userId, @Param("walletId") Integer walletId);
|
||||
|
||||
List<AccWalletInfoVO> selectAccWalletInfoByUserIds(@Param("userIds") List<Long> userIds);
|
||||
|
||||
|
|
@ -71,18 +72,24 @@ public interface AccWalletInfoMapper {
|
|||
@Param("walletId") Integer walletId,
|
||||
@Param("userIds") List<Long> userIds,
|
||||
@Param("updateBy") String updateBy,
|
||||
@Param("updateTime") LocalDate updateTime);
|
||||
@Param("updateTime") LocalDateTime updateTime);
|
||||
|
||||
void addAccWalletInfo(@Param("amount") BigDecimal amount,
|
||||
@Param("userId") Long userId,
|
||||
@Param("walletId") Integer walletId
|
||||
@Param("walletId") Integer walletId,
|
||||
@Param("updateBy") String updateBy,
|
||||
@Param("updateTime") LocalDateTime updateTime
|
||||
);
|
||||
void reduceAccWalletInfo(@Param("amount") BigDecimal amount,
|
||||
@Param("userId") Long userId,
|
||||
@Param("walletId") Integer walletId
|
||||
@Param("walletId") Integer walletId,
|
||||
@Param("updateBy") String updateBy,
|
||||
@Param("updateTime") LocalDateTime updateTime
|
||||
);
|
||||
|
||||
void clearAccWalletInfo(@Param("userId") Long userId,
|
||||
@Param("walletId") Integer walletId
|
||||
@Param("walletId") Integer walletId,
|
||||
@Param("updateBy") String updateBy,
|
||||
@Param("updateTime") LocalDateTime updateTime
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.bonus.canteen.core.account.service;
|
||||
|
||||
import com.bonus.canteen.core.account.domain.param.AccSubOperationQueryParam;
|
||||
import com.bonus.canteen.core.account.domain.param.AccSubsidyParam;
|
||||
import com.bonus.canteen.core.account.domain.param.*;
|
||||
import com.bonus.canteen.core.account.domain.vo.AccBatchOperationWalletPreCheckVO;
|
||||
import com.bonus.canteen.core.account.domain.vo.AccSubOperationListVO;
|
||||
|
||||
|
|
@ -9,17 +8,17 @@ import java.math.BigDecimal;
|
|||
import java.util.List;
|
||||
|
||||
public interface AccSubService {
|
||||
void individualAccSubsidyAdd(AccSubsidyParam param);
|
||||
void individualAccSubsidyAdd(AccSubsidyAddParam param);
|
||||
|
||||
void individualAccSubsidyClear(AccSubsidyParam param);
|
||||
void individualAccSubsidyClear(AccSubsidyClearParam param);
|
||||
|
||||
void batchAccSubsidyAdd(AccSubsidyParam param);
|
||||
void batchAccSubsidyAdd(AccSubsidyBatchAddParam param);
|
||||
|
||||
void batchAccSubsidyClear(AccSubsidyParam param);
|
||||
void batchAccSubsidyClear(AccSubsidyBatchClearParam param);
|
||||
|
||||
AccBatchOperationWalletPreCheckVO batchOperationWalletAddCheck(AccSubsidyParam param);
|
||||
AccBatchOperationWalletPreCheckVO batchOperationWalletAddCheck(AccSubsidyBatchAddParam param);
|
||||
|
||||
AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyParam param);
|
||||
AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyBatchClearParam param);
|
||||
|
||||
public void addAccWalletBalance(BigDecimal amount, Long userId, Integer walletId);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.bonus.canteen.core.account.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bonus.canteen.core.account.domain.bo.AccOperationHistory;
|
||||
import com.bonus.canteen.core.account.domain.param.AccOperationQueryParam;
|
||||
|
|
@ -31,7 +33,7 @@ public class AccOperationHistoryServiceImpl extends ServiceImpl<AccOperationHist
|
|||
public void addAccOperationHistory(Long userId, Integer type) {
|
||||
AjaxResult userResult = remoteUserService.getInfo(userId , SecurityConstants.INNER);
|
||||
if(Objects.nonNull(userResult)) {
|
||||
SysUser sysUser = userResult.getDataAs(SysUser.class);
|
||||
SysUser sysUser = JSONObject.parseObject(JSON.toJSONString(userResult.get(AjaxResult.DATA_TAG)), SysUser.class);
|
||||
AccOperationHistory accOperationRecord = new AccOperationHistory();
|
||||
accOperationRecord.setType(type);
|
||||
accOperationRecord.setUserId(userId);
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ import com.bonus.canteen.core.account.constants.AccWalletIdEnum;
|
|||
import com.bonus.canteen.core.account.constants.WalletBalanceOperationEnum;
|
||||
import com.bonus.canteen.core.account.domain.AccWalletInfo;
|
||||
import com.bonus.canteen.core.account.domain.bo.WalletBalanceOperation;
|
||||
import com.bonus.canteen.core.account.domain.param.AccSubOperationQueryParam;
|
||||
import com.bonus.canteen.core.account.domain.param.AccSubsidyParam;
|
||||
import com.bonus.canteen.core.account.domain.param.*;
|
||||
import com.bonus.canteen.core.account.domain.vo.AccBatchOperationWallerErrorVO;
|
||||
import com.bonus.canteen.core.account.domain.vo.AccBatchOperationWalletPreCheckVO;
|
||||
import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO;
|
||||
|
|
@ -57,7 +56,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
@Transactional(
|
||||
rollbackFor = {Exception.class}
|
||||
)
|
||||
public void individualAccSubsidyAdd(AccSubsidyParam param) {
|
||||
public void individualAccSubsidyAdd(AccSubsidyAddParam param) {
|
||||
AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(param.getUserId());
|
||||
if(Objects.isNull(accInfoVO)) {
|
||||
throw new ServiceException("账户不存在");
|
||||
|
|
@ -68,7 +67,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
@Transactional(
|
||||
rollbackFor = {Exception.class}
|
||||
)
|
||||
public void individualAccSubsidyClear(AccSubsidyParam param) {
|
||||
public void individualAccSubsidyClear(AccSubsidyClearParam param) {
|
||||
AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(param.getUserId());
|
||||
if(Objects.isNull(accInfoVO)) {
|
||||
throw new ServiceException("账户不存在");
|
||||
|
|
@ -77,25 +76,25 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
clearAllAccSubsidyHandler(accInfoVO, param);
|
||||
}
|
||||
|
||||
private void clearAccSubsidyHandler(AccInfoDetailsVO accInfoVO, AccSubsidyParam param) {
|
||||
AccWalletInfo walletInfo = accWalletInfoService.selectAccWalletInfoByUserIdAndWalletId(accInfoVO.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
if(Objects.isNull(walletInfo)) {
|
||||
throw new ServiceException("补贴钱包不存在");
|
||||
}
|
||||
BigDecimal walletBal = walletInfo.getWalletBal();
|
||||
if (walletBal.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new ServiceException("补贴钱包余额必须大于0元");
|
||||
} else {
|
||||
BigDecimal clearAmount = this.calculateClearAmount(walletBal, param.getClearType(), param.getAmount());
|
||||
if (clearAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new ServiceException("清空金额必须大于0元");
|
||||
} else {
|
||||
reduceAccWalletBalance(clearAmount, param.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
// private void clearAccSubsidyHandler(AccInfoDetailsVO accInfoVO, AccSubsidyClearParam param) {
|
||||
// AccWalletInfo walletInfo = accWalletInfoService.selectAccWalletInfoByUserIdAndWalletId(accInfoVO.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
// if(Objects.isNull(walletInfo)) {
|
||||
// throw new ServiceException("补贴钱包不存在");
|
||||
// }
|
||||
// BigDecimal walletBal = walletInfo.getWalletBal();
|
||||
// if (walletBal.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
// throw new ServiceException("补贴钱包余额必须大于0元");
|
||||
// } else {
|
||||
// BigDecimal clearAmount = this.calculateClearAmount(walletBal, param.getClearType(), param.getAmount());
|
||||
// if (clearAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
// throw new ServiceException("清空金额必须大于0元");
|
||||
// } else {
|
||||
// reduceAccWalletBalance(clearAmount, param.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
private void clearAllAccSubsidyHandler(AccInfoDetailsVO accInfoVO, AccSubsidyParam param) {
|
||||
private void clearAllAccSubsidyHandler(AccInfoDetailsVO accInfoVO, AccSubsidyClearParam param) {
|
||||
AccWalletInfo walletInfo = accWalletInfoService.selectAccWalletInfoByUserIdAndWalletId(accInfoVO.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
if(Objects.isNull(walletInfo)) {
|
||||
throw new ServiceException("补贴钱包不存在");
|
||||
|
|
@ -103,17 +102,17 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
clearAccWalletBalance(walletInfo.getWalletBal(), param.getUserId(), AccWalletIdEnum.SUBSIDY.getKey());
|
||||
}
|
||||
|
||||
private BigDecimal calculateClearAmount(BigDecimal walletBal, Integer clearType, BigDecimal amount) {
|
||||
BigDecimal clearAmount;
|
||||
if (AccWalletClearTypeEnum.CLEAR_BY.getKey().equals(clearType)) {
|
||||
clearAmount = amount.compareTo(walletBal) >= 0 ? BigDecimal.ZERO : walletBal.subtract(amount);
|
||||
} else {
|
||||
clearAmount = amount.compareTo(walletBal) >= 0 ? walletBal : amount;
|
||||
}
|
||||
return clearAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : clearAmount;
|
||||
}
|
||||
// private BigDecimal calculateClearAmount(BigDecimal walletBal, Integer clearType, BigDecimal amount) {
|
||||
// BigDecimal clearAmount;
|
||||
// if (AccWalletClearTypeEnum.CLEAR_BY.getKey().equals(clearType)) {
|
||||
// clearAmount = amount.compareTo(walletBal) >= 0 ? BigDecimal.ZERO : walletBal.subtract(amount);
|
||||
// } else {
|
||||
// clearAmount = amount.compareTo(walletBal) >= 0 ? walletBal : amount;
|
||||
// }
|
||||
// return clearAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : clearAmount;
|
||||
// }
|
||||
|
||||
public void batchAccSubsidyClear(AccSubsidyParam param) {
|
||||
public void batchAccSubsidyClear(AccSubsidyBatchClearParam param) {
|
||||
log.info("批量清空补贴用户数量:{}", param.getUserIds().size());
|
||||
if(CollUtil.isEmpty(param.getUserIds())) {
|
||||
throw new ServiceException("批量清空补贴用户为空");
|
||||
|
|
@ -124,12 +123,12 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
throw new ServiceException("批量清空补贴查询到的用户为空");
|
||||
} else {
|
||||
this.asyncTaskExecutor.execute(() -> {
|
||||
this.batchAccSubsidyClearHandler(accInfoVOList, param.getAmount(), param.getClearType());
|
||||
this.batchAccSubsidyClearHandler(accInfoVOList, param.getClearType());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void batchAccSubsidyAdd(AccSubsidyParam param) {
|
||||
public void batchAccSubsidyAdd(AccSubsidyBatchAddParam param) {
|
||||
log.info("批量补贴用户数量:{}", param.getUserIds().size());
|
||||
if(CollUtil.isEmpty(param.getUserIds())) {
|
||||
throw new ServiceException("批量补贴用户为空");
|
||||
|
|
@ -171,7 +170,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
log.info("批量补贴结束");
|
||||
}
|
||||
|
||||
private void batchAccSubsidyClearHandler(List<AccInfoDetailsVO> accInfoDetails, BigDecimal amount, Integer clearType) {
|
||||
private void batchAccSubsidyClearHandler(List<AccInfoDetailsVO> accInfoDetails, Integer clearType) {
|
||||
log.info("批量清空补贴开始:{}", accInfoDetails.size());
|
||||
AccRedisUtils.lockBatchUpdateAccWallet();
|
||||
try {
|
||||
|
|
@ -182,11 +181,10 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
throw new ServiceException(accInfo.getNickName() + "的账户不存在");
|
||||
}
|
||||
accInfoService.checkAccStatus(accInfoVO);
|
||||
AccSubsidyParam param = new AccSubsidyParam();
|
||||
param.setAmount(amount);
|
||||
AccSubsidyClearParam param = new AccSubsidyClearParam();
|
||||
param.setUserId(accInfo.getUserId());
|
||||
param.setClearType(clearType);
|
||||
clearAccSubsidyHandler(accInfoVO, param);
|
||||
clearAllAccSubsidyHandler(accInfoVO, param);
|
||||
} catch (Exception var10) {
|
||||
log.error("批量清空补贴充值异常", var10);
|
||||
}
|
||||
|
|
@ -225,24 +223,24 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
}
|
||||
}
|
||||
|
||||
public void reduceAccWalletBalance(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.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 void reduceAccWalletBalance(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.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 void clearAccWalletBalance(BigDecimal amount, Long userId, Integer walletId) {
|
||||
log.info("清空补贴入参: userId:{},walletId:{}", userId, walletId);
|
||||
|
|
@ -263,7 +261,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
}
|
||||
}
|
||||
|
||||
public AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyParam param) {
|
||||
public AccBatchOperationWalletPreCheckVO batchOperationWalletClearCheck(AccSubsidyBatchClearParam param) {
|
||||
log.info("批量清空校验操作人数:{}", param.getUserIds().size());
|
||||
List<AccInfoDetailsVO> accInfoVOList = accInfoService.queryAccInfoByUserIds(param.getUserIds());
|
||||
if (CollUtil.isEmpty(accInfoVOList)) {
|
||||
|
|
@ -272,7 +270,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
List<AccBatchOperationWallerErrorVO> errVOList = new ArrayList<>();
|
||||
List<Long> validUserList = new ArrayList<>();
|
||||
List<BigDecimal> amountList = new ArrayList<>();
|
||||
|
||||
BigDecimal walletBal = null;
|
||||
for (AccInfoDetailsVO accInfo : accInfoVOList) {
|
||||
try {
|
||||
checkAccount(accInfo);
|
||||
|
|
@ -280,7 +278,7 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
if(Objects.isNull(walletInfo)) {
|
||||
throw new ServiceException("补贴钱包不存在");
|
||||
}
|
||||
BigDecimal walletBal = walletInfo.getWalletBal();
|
||||
walletBal = walletInfo.getWalletBal();
|
||||
// if (walletBal.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
// throw new ServiceException("补贴钱包余额必须大于0元");
|
||||
// } else {
|
||||
|
|
@ -294,14 +292,22 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
amountList.add(walletBal);
|
||||
validUserList.add(walletInfo.getUserId());
|
||||
} catch (Exception ex) {
|
||||
errVOList.add(createErrorVO(accInfo, param.getAmount(), ex.getMessage()));
|
||||
errVOList.add(createErrorVO(accInfo, walletBal, ex.getMessage()));
|
||||
}
|
||||
}
|
||||
BigDecimal validTotalAmount = amountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
return buildResult(param, validUserList, errVOList, validTotalAmount);
|
||||
AccBatchOperationWalletPreCheckVO result = new AccBatchOperationWalletPreCheckVO();
|
||||
result.setTotalUserSum(param.getUserIds().size());
|
||||
result.setValidCount(validUserList.size());
|
||||
result.setValidTotalAmount(validTotalAmount);
|
||||
result.setValidUserIdList(validUserList);
|
||||
result.setInvalidCount(errVOList.size());
|
||||
result.setErrVOList(errVOList);
|
||||
result.setRemark(param.getRemark());
|
||||
return result;
|
||||
}
|
||||
|
||||
public AccBatchOperationWalletPreCheckVO batchOperationWalletAddCheck(AccSubsidyParam param) {
|
||||
public AccBatchOperationWalletPreCheckVO batchOperationWalletAddCheck(AccSubsidyBatchAddParam param) {
|
||||
log.info("批量校验操作人数:{}", param.getUserIds().size());
|
||||
List<AccInfoDetailsVO> accInfoVOList = accInfoService.queryAccInfoByUserIds(param.getUserIds());
|
||||
if (CollUtil.isEmpty(accInfoVOList)) {
|
||||
|
|
@ -319,7 +325,16 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
}
|
||||
}
|
||||
BigDecimal validTotalAmount = param.getAmount().multiply(new BigDecimal(sucVoList.size()));
|
||||
return buildResult(param, sucVoList, errVOList, validTotalAmount);
|
||||
AccBatchOperationWalletPreCheckVO result = new AccBatchOperationWalletPreCheckVO();
|
||||
result.setTotalUserSum(param.getUserIds().size());
|
||||
result.setValidCount(sucVoList.size());
|
||||
result.setValidTotalAmount(validTotalAmount);
|
||||
result.setValidUserIdList(sucVoList);
|
||||
result.setInvalidCount(errVOList.size());
|
||||
result.setErrVOList(errVOList);
|
||||
result.setAmount(param.getAmount());
|
||||
result.setRemark(param.getRemark());
|
||||
return result;
|
||||
}
|
||||
|
||||
private void checkAccount(AccInfoDetailsVO accInfo) {
|
||||
|
|
@ -336,23 +351,6 @@ public class AccSubServiceImpl implements AccSubService {
|
|||
errVO.setErrorMessage(errMsg);
|
||||
return errVO;
|
||||
}
|
||||
|
||||
private AccBatchOperationWalletPreCheckVO buildResult(AccSubsidyParam param,
|
||||
List<Long> sucVoList,
|
||||
List<AccBatchOperationWallerErrorVO> errVOList,
|
||||
BigDecimal validTotalAmount) {
|
||||
AccBatchOperationWalletPreCheckVO result = new AccBatchOperationWalletPreCheckVO();
|
||||
result.setTotalUserSum(param.getUserIds().size());
|
||||
result.setValidCount(sucVoList.size());
|
||||
result.setValidTotalAmount(validTotalAmount);
|
||||
result.setValidUserIdList(sucVoList);
|
||||
result.setInvalidCount(errVOList.size());
|
||||
result.setErrVOList(errVOList);
|
||||
result.setAmount(param.getAmount());
|
||||
result.setRemark(param.getRemark());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AccSubOperationListVO> queryAccSubOperationList(AccSubOperationQueryParam param) {
|
||||
return accTradeService.queryAccSubOperationList(param);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import java.util.Objects;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.WalletBalanceOperationEnum;
|
||||
|
|
@ -170,7 +172,7 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
|
||||
try {
|
||||
accWalletInfoMapper.updateMinBalanceByUserId(minBalance, walletId, userIds,
|
||||
SecurityUtils.getUserId().toString(), DateUtils.toLocalDate(new Date()));
|
||||
SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date()));
|
||||
} catch (Exception e) {
|
||||
log.error("修改钱包最低余额限制失败", e);
|
||||
throw new ServiceException("修改钱包最低余额限制失败");
|
||||
|
|
@ -178,15 +180,18 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
}
|
||||
|
||||
private void addAccWalletInfo(WalletBalanceOperation operation) {
|
||||
accWalletInfoMapper.addAccWalletInfo(operation.getAmount(), operation.getUserId(), operation.getWalletId());
|
||||
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());
|
||||
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());
|
||||
// accWalletInfoMapper.clearAccWalletInfo(operation.getUserId(), operation.getWalletId(),
|
||||
// SecurityUtils.getUserId().toString(), DateUtils.toLocalDateTime(new Date()));
|
||||
// }
|
||||
|
||||
public void acWalletBalanceOperation(WalletBalanceOperation operation) {
|
||||
|
|
@ -206,7 +211,7 @@ public class AccWalletInfoServiceImpl implements IAccWalletInfoService {
|
|||
AjaxResult userResult = remoteUserService.getInfo(operation.getUserId() , SecurityConstants.INNER);
|
||||
SysUser sysUser = null;
|
||||
if(Objects.nonNull(userResult)) {
|
||||
sysUser = userResult.getDataAs(SysUser.class);
|
||||
sysUser = JSONObject.parseObject(JSON.toJSONString(userResult.get(AjaxResult.DATA_TAG)), SysUser.class);
|
||||
}
|
||||
long tradeId = Id.next();
|
||||
LocalDateTime tradeTime = LocalDateTime.now();
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
package com.bonus.canteen.core.utils;
|
||||
|
||||
import com.bonus.common.houqin.i18n.I18nConfiguration;
|
||||
import com.bonus.common.houqin.utils.SpringContextHolder;
|
||||
import com.bonus.common.houqin.utils.id.IdWorkConfiguration;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
@Configuration
|
||||
@Import({IdWorkConfiguration.class, I18nConfiguration.class})
|
||||
@Import({IdWorkConfiguration.class, I18nConfiguration.class, SpringContextHolder.class})
|
||||
public class CommonConfiguration {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,22 +157,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
|
||||
<update id="addAccWalletInfo">
|
||||
UPDATE acc_wallet_info
|
||||
SET wallet_bal = wallet_bal + #{amount}
|
||||
SET wallet_bal = wallet_bal + #{amount},
|
||||
update_by = #{updateBy},
|
||||
update_time = #{updateTime}
|
||||
WHERE user_id = #{userId}
|
||||
AND wallet_id = #{walletId}
|
||||
</update>
|
||||
|
||||
<update id="reduceAccWalletInfo">
|
||||
UPDATE acc_wallet_info
|
||||
SET wallet_bal = wallet_bal - #{amount}
|
||||
WHERE user_id = #{custId}
|
||||
SET wallet_bal = wallet_bal - #{amount},
|
||||
update_by = #{updateBy},
|
||||
update_time = #{updateTime}
|
||||
WHERE user_id = #{userId}
|
||||
AND wallet_id = #{walletId}
|
||||
</update>
|
||||
|
||||
<update id="clearAccWalletInfo">
|
||||
UPDATE acc_wallet_info
|
||||
SET wallet_bal = 0
|
||||
WHERE user_id = #{custId}
|
||||
SET wallet_bal = 0,
|
||||
update_by = #{updateBy},
|
||||
update_time = #{updateTime}
|
||||
WHERE user_id = #{userId}
|
||||
AND wallet_id = #{walletId}
|
||||
</update>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue