撤销收款接口
This commit is contained in:
+14
@@ -147,6 +147,20 @@ public class ReceiptManageApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public Boolean cancelCollection(ReceiptManageDO receiptManageDO) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
//校验支付密码
|
||||||
|
CheckPasswordUtil.checkPayPassword(receiptManageDO.getPayPassword(),null);
|
||||||
|
return receiptManageDomainService.cancelCollection(receiptManageDO);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 退款
|
* 退款
|
||||||
*/
|
*/
|
||||||
|
|||||||
+2
@@ -575,6 +575,8 @@ public class ReportFormApplicationService {
|
|||||||
//收款单
|
//收款单
|
||||||
QueryWrapper<ReceiptManage> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<ReceiptManage> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("top_organization_id", loginUser.getUserPo().getTopOrganizationId());
|
queryWrapper.eq("top_organization_id", loginUser.getUserPo().getTopOrganizationId());
|
||||||
|
//过滤已撤销(逻辑删除)的收款单
|
||||||
|
queryWrapper.eq("del_flag", 1);
|
||||||
for (int i = 0; i < formQueryParamsList.size(); i++) {
|
for (int i = 0; i < formQueryParamsList.size(); i++) {
|
||||||
FormQueryParams formQueryParams = formQueryParamsList.get(i);
|
FormQueryParams formQueryParams = formQueryParamsList.get(i);
|
||||||
FormQueryParams beforeFormQueryParams = null;
|
FormQueryParams beforeFormQueryParams = null;
|
||||||
|
|||||||
+66
@@ -681,6 +681,72 @@ public class BillManageDomainService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款:恢复账单信息并保存撤销收款操作日志
|
||||||
|
*/
|
||||||
|
public Boolean cancelCollectionInfo(List<ReceiptDetail> receiptDetails) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
List<Long> billManageIds = receiptDetails.stream().map(ReceiptDetail::getBillManageId).collect(Collectors.toList());
|
||||||
|
LambdaQueryWrapper<BillManage> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(BillManage::getBillManageId,billManageIds);
|
||||||
|
List<BillManage> billManageList = billManageService.list(queryWrapper);
|
||||||
|
if(billManageList == null || billManageList.size()==0){
|
||||||
|
throw new ServiceException("账单信息未找到");
|
||||||
|
}
|
||||||
|
List<BillManage> billManageListSave = new ArrayList<>();
|
||||||
|
List<BillOperationLog> billOperationLogSave = new ArrayList<>();
|
||||||
|
for (ReceiptDetail receiptDetail : receiptDetails) {
|
||||||
|
BillManage billManage = billManageList.stream().filter(billManage1 -> ObjectUtil.equal(billManage1.getBillManageId(),receiptDetail.getBillManageId())).findAny().orElse(null);
|
||||||
|
if(null == billManage){
|
||||||
|
throw new ServiceException("账单" + receiptDetail.getBillNumber() + "信息未找到,请刷新后重试");
|
||||||
|
}
|
||||||
|
BigDecimal collectedDiscount = receiptDetail.getCollectedDiscount() == null ? BigDecimal.ZERO : receiptDetail.getCollectedDiscount();
|
||||||
|
BigDecimal collectedAmount = receiptDetail.getCollectedAmount() == null ? BigDecimal.ZERO : receiptDetail.getCollectedAmount();
|
||||||
|
BigDecimal all = collectedAmount.add(collectedDiscount);
|
||||||
|
BigDecimal billAmountSettlement = billManage.getBillAmountSettlement() == null ? BigDecimal.ZERO : billManage.getBillAmountSettlement();
|
||||||
|
//校验已收金额是否足够撤销,避免出现负数
|
||||||
|
if (billAmountSettlement.compareTo(all) < 0) {
|
||||||
|
throw new ServiceException("账单" + billManage.getBillNumber() + "已收金额小于待撤销金额,无法撤销收款,请刷新后重试");
|
||||||
|
}
|
||||||
|
BillManage billManageSave = new BillManage();
|
||||||
|
billManageSave.setBillManageId(billManage.getBillManageId());
|
||||||
|
//扣减已收金额,重新计算未收金额
|
||||||
|
billManageSave.setBillAmountSettlement(billAmountSettlement.subtract(all));
|
||||||
|
billManageSave.setBillAmountUnsettled(billManage.getBillAmount().subtract(billManageSave.getBillAmountSettlement()));
|
||||||
|
//扣减实收金额
|
||||||
|
BigDecimal actualReceivedAmount = billManage.getActualReceivedAmount() == null ? BigDecimal.ZERO : billManage.getActualReceivedAmount();
|
||||||
|
billManageSave.setActualReceivedAmount(actualReceivedAmount.subtract(collectedAmount));
|
||||||
|
//扣减结算单优惠金额
|
||||||
|
BigDecimal settlementDiscountsAmount = billManage.getSettlementDiscountsAmount() == null ? BigDecimal.ZERO : billManage.getSettlementDiscountsAmount();
|
||||||
|
billManageSave.setSettlementDiscountsAmount(settlementDiscountsAmount.subtract(collectedDiscount));
|
||||||
|
//恢复账单状态:已收金额为0回到未收款,未收金额为0为已收款,否则为部分收款
|
||||||
|
if (billManageSave.getBillAmountSettlement().compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
billManageSave.setBillState(3);
|
||||||
|
} else if (billManageSave.getBillAmountUnsettled().compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
billManageSave.setBillState(5);
|
||||||
|
} else {
|
||||||
|
billManageSave.setBillState(4);
|
||||||
|
}
|
||||||
|
billManageSave.setUpdateBy(loginUser.getUserPo().getUserId());
|
||||||
|
billManageSave.setUpdateByName(loginUser.getUserPo().getUserName());
|
||||||
|
billManageSave.setUpdateTime(new Date());
|
||||||
|
billManageListSave.add(billManageSave);
|
||||||
|
//保存账单操作记录
|
||||||
|
BillOperationLog billOperationLog = new BillOperationLog();
|
||||||
|
billOperationLog.setBillManageId(billManage.getBillManageId());
|
||||||
|
billOperationLog.setOperationInfo(StringUtils.format(BillLogsConstants.cancel_collection_bill_text,receiptDetail.getCollectionNum(),all,collectedAmount,collectedDiscount));
|
||||||
|
billOperationLog.setOperationType(12);
|
||||||
|
billOperationLog.setDelFlag(1);
|
||||||
|
billOperationLogSave.add(billOperationLog);
|
||||||
|
}
|
||||||
|
Boolean three = billOperationLogDomainService.insertBatch(billOperationLogSave);
|
||||||
|
Boolean flag = billManageService.updateBatchById(billManageListSave);
|
||||||
|
return flag && three;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更改账单状态(付款)
|
* 更改账单状态(付款)
|
||||||
*/
|
*/
|
||||||
|
|||||||
+2
-2
@@ -42,8 +42,8 @@ public class BillOperationLog extends BaseVOEntity{
|
|||||||
@Excel(name = "账单管理id")
|
@Excel(name = "账单管理id")
|
||||||
private Long billManageId;
|
private Long billManageId;
|
||||||
|
|
||||||
@ApiModelProperty("操作类型(1-创建账单,2-调整账单,3-确认账单,4-发起对账,5-客户确认,6-财务审核,7-收款,8-作废账单,9-删除账单,10-退款,11-付款)")
|
@ApiModelProperty("操作类型(1-创建账单,2-调整账单,3-确认账单,4-发起对账,5-客户确认,6-财务审核,7-收款,8-作废账单,9-删除账单,10-退款,11-付款,12-撤销收款)")
|
||||||
@Excel(name = "操作类型", readConverterExp = "1=-创建账单,2-调整账单,3-确认账单,4-发起对账,5-客户确认,6-财务审核,7-收款,8-作废账单,9-删除账单,10-退款,11-付款")
|
@Excel(name = "操作类型", readConverterExp = "1=-创建账单,2-调整账单,3-确认账单,4-发起对账,5-客户确认,6-财务审核,7-收款,8-作废账单,9-删除账单,10-退款,11-付款,12-撤销收款")
|
||||||
private Integer operationType;
|
private Integer operationType;
|
||||||
|
|
||||||
@ApiModelProperty("操作信息")
|
@ApiModelProperty("操作信息")
|
||||||
|
|||||||
+28
@@ -1,16 +1,22 @@
|
|||||||
package com.mhd.bms.domain.receiptManage.service;
|
package com.mhd.bms.domain.receiptManage.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.mhd.bms.domain.receiptManage.entity.ReceiptDetail;
|
import com.mhd.bms.domain.receiptManage.entity.ReceiptDetail;
|
||||||
import com.mhd.bms.domain.receiptManage.repository.facade.IReceiptDetailService;
|
import com.mhd.bms.domain.receiptManage.repository.facade.IReceiptDetailService;
|
||||||
import com.mhd.bms.domain.receiptManage.repository.po.ReceiptDetailPO;
|
import com.mhd.bms.domain.receiptManage.repository.po.ReceiptDetailPO;
|
||||||
import com.mhd.bms.domain.receiptManage.repository.todo.ReceiptDetailDO;
|
import com.mhd.bms.domain.receiptManage.repository.todo.ReceiptDetailDO;
|
||||||
|
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
|
||||||
|
import com.mhd.common.core.exception.digitalLogisticsException.UserError;
|
||||||
|
import com.mhd.common.security.utils.SecurityUtils;
|
||||||
|
import com.mhd.system.api.model.LoginUser;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -95,6 +101,28 @@ public class ReceiptDetailDomainService {
|
|||||||
public List<ReceiptDetail> queryListByIdSet(Set<Long> orderIdSet) {
|
public List<ReceiptDetail> queryListByIdSet(Set<Long> orderIdSet) {
|
||||||
LambdaQueryWrapper<ReceiptDetail> queryWrapperDetail = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ReceiptDetail> queryWrapperDetail = new LambdaQueryWrapper<>();
|
||||||
queryWrapperDetail.in(ReceiptDetail::getReceiptManageId, orderIdSet);
|
queryWrapperDetail.in(ReceiptDetail::getReceiptManageId, orderIdSet);
|
||||||
|
queryWrapperDetail.eq(ReceiptDetail::getDelFlag, 1);
|
||||||
return receiptDetailService.list(queryWrapperDetail);
|
return receiptDetailService.list(queryWrapperDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款:批量逻辑删除收款明细
|
||||||
|
*/
|
||||||
|
public Boolean cancelCollectionDetails(List<ReceiptDetail> receiptDetails) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
List<ReceiptDetail> receiptDetailSaveList = new ArrayList<>();
|
||||||
|
for (ReceiptDetail receiptDetail : receiptDetails) {
|
||||||
|
ReceiptDetail receiptDetailSave = new ReceiptDetail();
|
||||||
|
receiptDetailSave.setReceiptDetailId(receiptDetail.getReceiptDetailId());
|
||||||
|
receiptDetailSave.setDelFlag(2);
|
||||||
|
receiptDetailSave.setUpdateBy(loginUser.getUserPo().getUserId());
|
||||||
|
receiptDetailSave.setUpdateByName(loginUser.getUserPo().getUserName());
|
||||||
|
receiptDetailSave.setUpdateTime(new Date());
|
||||||
|
receiptDetailSaveList.add(receiptDetailSave);
|
||||||
|
}
|
||||||
|
return receiptDetailService.updateBatchById(receiptDetailSaveList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+83
@@ -300,6 +300,89 @@ public class ReceiptManageDomainService {
|
|||||||
return flag && flagTwo && flagThree;
|
return flag && flagTwo && flagThree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款
|
||||||
|
*/
|
||||||
|
public Boolean cancelCollection(ReceiptManageDO receiptManageDO) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
if (null == receiptManageDO.getReceiptManageId()) {
|
||||||
|
throw new ServiceException("收款单id不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(receiptManageDO.getBillManageIds())) {
|
||||||
|
throw new ServiceException("撤销账单不能为空");
|
||||||
|
}
|
||||||
|
//查询收款单信息
|
||||||
|
ReceiptManage receiptManage = receiptManageService.getById(receiptManageDO.getReceiptManageId());
|
||||||
|
if (null == receiptManage || ObjectUtil.equal(receiptManage.getDelFlag(), 2)) {
|
||||||
|
throw new ServiceException("收款单信息未找到或已撤销,请刷新后重试");
|
||||||
|
}
|
||||||
|
if (ObjectUtil.equal(receiptManage.getPaymentStatus(), 2)) {
|
||||||
|
throw new ServiceException("该收款单已退款,无法撤销收款");
|
||||||
|
}
|
||||||
|
//查询待撤销账单对应的收款明细
|
||||||
|
Set<Long> billManageIdSet = Stream.of(receiptManageDO.getBillManageIds().split(",")).filter(StringUtils::isNotEmpty).map(String::trim).map(Long::valueOf).collect(Collectors.toSet());
|
||||||
|
LambdaQueryWrapper<ReceiptDetail> queryWrapperDetail = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapperDetail.eq(ReceiptDetail::getReceiptManageId, receiptManageDO.getReceiptManageId());
|
||||||
|
queryWrapperDetail.in(ReceiptDetail::getBillManageId, billManageIdSet);
|
||||||
|
queryWrapperDetail.eq(ReceiptDetail::getDelFlag, 1);
|
||||||
|
List<ReceiptDetail> receiptDetails = receiptDetailDomainService.queryListByLambda(queryWrapperDetail);
|
||||||
|
if (null == receiptDetails || receiptDetails.size() == 0) {
|
||||||
|
throw new ServiceException("账单收款记录不存在或已撤销,请刷新后重试");
|
||||||
|
}
|
||||||
|
if (receiptDetails.size() != billManageIdSet.size()) {
|
||||||
|
throw new ServiceException("部分账单收款记录不存在或已撤销,请刷新后重试");
|
||||||
|
}
|
||||||
|
//恢复账单信息并保存撤销收款操作日志
|
||||||
|
Boolean flagTwo = billManageDomainService.cancelCollectionInfo(receiptDetails);
|
||||||
|
//逻辑删除收款明细
|
||||||
|
Boolean flag = receiptDetailDomainService.cancelCollectionDetails(receiptDetails);
|
||||||
|
//重新计算收款单金额,收款明细已全部撤销时逻辑删除收款单
|
||||||
|
Boolean flagThree = updateReceiptManageByCancel(receiptManage);
|
||||||
|
return flag && flagTwo && flagThree;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款后重新计算收款单信息,收款明细已全部撤销时逻辑删除收款单
|
||||||
|
*/
|
||||||
|
private Boolean updateReceiptManageByCancel(ReceiptManage receiptManage) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
//查询收款单下剩余未撤销的收款明细
|
||||||
|
LambdaQueryWrapper<ReceiptDetail> queryWrapperDetail = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapperDetail.eq(ReceiptDetail::getReceiptManageId, receiptManage.getReceiptManageId());
|
||||||
|
queryWrapperDetail.eq(ReceiptDetail::getDelFlag, 1);
|
||||||
|
List<ReceiptDetail> receiptDetailList = receiptDetailDomainService.queryListByLambda(queryWrapperDetail);
|
||||||
|
ReceiptManage receiptManageSave = new ReceiptManage();
|
||||||
|
receiptManageSave.setReceiptManageId(receiptManage.getReceiptManageId());
|
||||||
|
receiptManageSave.setUpdateBy(loginUser.getUserPo().getUserId());
|
||||||
|
receiptManageSave.setUpdateByName(loginUser.getUserPo().getUserName());
|
||||||
|
receiptManageSave.setUpdateTime(new Date());
|
||||||
|
if (null == receiptDetailList || receiptDetailList.size() == 0) {
|
||||||
|
//收款明细已全部撤销,逻辑删除收款单
|
||||||
|
receiptManageSave.setDelFlag(2);
|
||||||
|
return receiptManageService.updateById(receiptManageSave);
|
||||||
|
}
|
||||||
|
//按剩余明细重新计算收款单金额
|
||||||
|
BigDecimal billAmount = receiptDetailList.stream().map(ReceiptDetail::getBillAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal collectedDiscount = receiptDetailList.stream().map(ReceiptDetail::getCollectedDiscount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal collectedAmount = receiptDetailList.stream().map(ReceiptDetail::getCollectedAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal uncollectedAmount = receiptDetailList.stream().map(ReceiptDetail::getBillAmountUnsettledResidue).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal billAmountUnsettled = receiptDetailList.stream().map(ReceiptDetail::getBillAmountUnsettled).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
receiptManageSave.setBillAmount(billAmount);
|
||||||
|
receiptManageSave.setCollectedDiscount(collectedDiscount);
|
||||||
|
receiptManageSave.setCollectedAmount(collectedAmount);
|
||||||
|
receiptManageSave.setUncollectedAmount(uncollectedAmount);
|
||||||
|
receiptManageSave.setBillAmountUnsettled(billAmountUnsettled);
|
||||||
|
//账单金额 = 已收金额 + 剩余未收金额 + 收款优惠金额 + 收款金额
|
||||||
|
receiptManageSave.setBillAmountSettlement(billAmount.subtract(uncollectedAmount).subtract(collectedDiscount).subtract(collectedAmount));
|
||||||
|
return receiptManageService.updateById(receiptManageSave);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询收款单详情
|
* 查询收款单详情
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -88,6 +88,14 @@ public class BillLogsConstants
|
|||||||
public static final String refund_bill_text = "退款单号:{},退款金额:{}元";
|
public static final String refund_bill_text = "退款单号:{},退款金额:{}元";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款
|
||||||
|
* 收款单号:{},撤销收款金额:{}元(实收{}元,优惠{}元)
|
||||||
|
*/
|
||||||
|
public static final String cancel_collection_bill_title = "撤销收款";
|
||||||
|
public static final String cancel_collection_bill_text = "收款单号:{},撤销收款金额:{}元(实收{}元,优惠{}元)";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 付款
|
* 付款
|
||||||
* 付款单号:{},付款金额:{}元
|
* 付款单号:{},付款金额:{}元
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.mhd.bms.interfaces.facadeApi;
|
package com.mhd.bms.interfaces.facadeApi;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@@ -114,6 +115,56 @@ public class ReceiptManageApi extends BaseController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销收款
|
||||||
|
*/
|
||||||
|
@ApiOperation("撤销收款")
|
||||||
|
@RepeatSubmit
|
||||||
|
@PostMapping("/cancelCollection")
|
||||||
|
public AjaxResult cancelCollection(@RequestBody ReceiptManageDTO receiptManageDTO)
|
||||||
|
{
|
||||||
|
if(null == receiptManageDTO.getReceiptManageId()){
|
||||||
|
throw new ServiceException("收款单id不能为空");
|
||||||
|
}
|
||||||
|
if(!StringUtils.isNotEmpty(receiptManageDTO.getBillManageIds())){
|
||||||
|
throw new ServiceException("撤销账单不能为空");
|
||||||
|
}
|
||||||
|
RedissonMultiLock redissonMultiLock = null;
|
||||||
|
boolean payInfoDetailLock = false;
|
||||||
|
try {
|
||||||
|
RedisLockTypeEnum redisLockTypeEnum = RedisLockTypeEnum.BMS;
|
||||||
|
List<RLock> locks = new ArrayList<>();
|
||||||
|
//收款单id与账单id去重后加锁,避免同一把锁重复加锁
|
||||||
|
Set<String> lockKeySet = new LinkedHashSet<>();
|
||||||
|
lockKeySet.add(String.valueOf(receiptManageDTO.getReceiptManageId()));
|
||||||
|
lockKeySet.addAll(Stream.of(receiptManageDTO.getBillManageIds().split(",")).collect(Collectors.toSet()));
|
||||||
|
lockKeySet.forEach(x -> {
|
||||||
|
//获取唯一key值
|
||||||
|
String key = redisLockTypeEnum.getUniqueKey(UniqueKeyUtil.getBillingKey(x));
|
||||||
|
locks.add(redisLock.getRLock(key));
|
||||||
|
});
|
||||||
|
redissonMultiLock = new RedissonMultiLock(locks.toArray(new RLock[lockKeySet.size()]));
|
||||||
|
//尝试获取锁 不等待 持有锁10分钟
|
||||||
|
payInfoDetailLock = redissonMultiLock.tryLock(-1, 10, TimeUnit.MINUTES);
|
||||||
|
if (!payInfoDetailLock) {
|
||||||
|
redissonMultiLock = null;
|
||||||
|
return AjaxResult.error("收款单正在处理,请稍后再试");
|
||||||
|
}
|
||||||
|
log.info("撤销收款加锁成功");
|
||||||
|
//转换实体
|
||||||
|
ReceiptManageDO receiptManageDO = new ReceiptManageDO();
|
||||||
|
BeanUtils.copyProperties(receiptManageDTO,receiptManageDO);
|
||||||
|
return toAjax(receiptManageApplicationService.cancelCollection(receiptManageDO));
|
||||||
|
}catch (Exception e){
|
||||||
|
return AjaxResult.error("撤销收款失败:" + e.getMessage());
|
||||||
|
}finally {
|
||||||
|
if (redissonMultiLock != null && payInfoDetailLock) {
|
||||||
|
redissonMultiLock.unlock();
|
||||||
|
log.info("撤销收款释放了锁");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除收款单管理
|
* 批量删除收款单管理
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
WM_CONCAT(b.bill_number) AS billNumbers
|
WM_CONCAT(b.bill_number) AS billNumbers
|
||||||
FROM
|
FROM
|
||||||
receipt_manage a
|
receipt_manage a
|
||||||
LEFT JOIN receipt_detail b ON a.receipt_manage_id = b.receipt_manage_id
|
LEFT JOIN receipt_detail b ON a.receipt_manage_id = b.receipt_manage_id AND b.del_flag = 1
|
||||||
WHERE
|
WHERE
|
||||||
a.del_flag = 1
|
a.del_flag = 1
|
||||||
<include refid="common_where"/>
|
<include refid="common_where"/>
|
||||||
@@ -101,6 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
left join PAYMENT_WALLET c on b.payment_card_id = c.PAYMENT_WALLET_ID
|
left join PAYMENT_WALLET c on b.payment_card_id = c.PAYMENT_WALLET_ID
|
||||||
WHERE
|
WHERE
|
||||||
a.bill_manage_id = #{billManageId}
|
a.bill_manage_id = #{billManageId}
|
||||||
|
AND a.del_flag = 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user