Commit 3d68dd86 authored by chenjiuping's avatar chenjiuping

自动核销功能

parent b94caa15
......@@ -139,5 +139,21 @@ public interface ReceiptService extends IService<ReceiptDO> {
ReceiptExportDto getReceiptExportByOrderId(Long orderId);
/**
* 判断当前收款单有没有达到比例
*
* @param receiptDO
* @param proportion
* @return
*/
Boolean judgingProportion(ReceiptDO receiptDO, String proportion);
/**
* 自动更新收款单的核销状态
*
* @param receiptDO
*/
void autoWriteOffReceipt(ReceiptDO receiptDO, String userId, String userName);
}
package cn.iocoder.yudao.module.wealth.service.receipt;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.apollo.core.event.OrderNumberLogEvent;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
......@@ -101,8 +102,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
@Override
@Transactional(rollbackFor = Exception.class)
public Long createReceipt(ReceiptCreateReqVO createReqVO) {
List<ReceivableUpdateReqVO> receivableUpdateReqVOList =
createReqVO.getReceivableVOList();
List<ReceivableUpdateReqVO> receivableUpdateReqVOList = createReqVO.getReceivableVOList();
if (CollectionUtil.isEmpty(receivableUpdateReqVOList)) {
throw exception(RECEIVABLE_NOT_NULL);
......@@ -118,8 +118,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
//当自编号为空(某些预付款未装柜的订单),则校验为同一客户同意目的国,忽略自编号规则,视为同一自编号
validateSameCustomerReceivable(createReqVO.getReceivableVOList());
List<ReceiptAccountCreateReqVO> receiptAccountCreateReqVOList =
createReqVO.getReceiptAccountList();
List<ReceiptAccountCreateReqVO> receiptAccountCreateReqVOList = createReqVO.getReceiptAccountList();
if (CollectionUtil.isEmpty(receiptAccountCreateReqVOList)) {
throw exception(RECEIPT_ACCOUNT_NOT_EXISTS);
......@@ -178,29 +177,25 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
receiptMapper.updateById(update);
}
List<ReceivableDO> receivableDOList =
receivableUpdateReqVOList.stream().
filter(re -> null != re.getId()).map(re -> {
ReceivableDO receivableDO =
ReceivableConvert.INSTANCE.convert(re);
receivableDO.setReceiptNo(receipt.getReceiptNo());
receivableDO.setReceiptId(receipt.getId());
receivableDO.setState(1);
receivableDO.setUpdater(creator);
receivableDO.setUpdateTime(new Date());
return receivableDO;
}).collect(Collectors.toList());
List<ReceivableDO> receivableDOList = receivableUpdateReqVOList.stream().filter(re -> null != re.getId()).map(re -> {
ReceivableDO receivableDO = ReceivableConvert.INSTANCE.convert(re);
receivableDO.setReceiptNo(receipt.getReceiptNo());
receivableDO.setReceiptId(receipt.getId());
receivableDO.setState(1);
receivableDO.setUpdater(creator);
receivableDO.setUpdateTime(new Date());
return receivableDO;
}).collect(Collectors.toList());
receivableService.updateBatchById(receivableDOList);
List<ReceiptAccountDO> receiptAccountDOList =
receiptAccountCreateReqVOList.stream().map(re -> {
ReceiptAccountDO receivableDO = ReceiptAccountConvert.INSTANCE.convert(re);
receivableDO.setReceiptId(receipt.getId());
receivableDO.setUpdater(creator);
receivableDO.setUpdateTime(new Date());
return receivableDO;
}).collect(Collectors.toList());
List<ReceiptAccountDO> receiptAccountDOList = receiptAccountCreateReqVOList.stream().map(re -> {
ReceiptAccountDO receivableDO = ReceiptAccountConvert.INSTANCE.convert(re);
receivableDO.setReceiptId(receipt.getId());
receivableDO.setUpdater(creator);
receivableDO.setUpdateTime(new Date());
return receivableDO;
}).collect(Collectors.toList());
receiptAccountService.saveBatch(receiptAccountDOList);
// 返回
......@@ -438,37 +433,29 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
}
@Override
public PageResult<ReceiptBackVO> getReceiptPage(ReceiptQueryVO query,
PageVO page) {
public PageResult<ReceiptBackVO> getReceiptPage(ReceiptQueryVO query, PageVO page) {
page.setField("er.id");
IPage<ReceiptBackVO> mpPage = MyBatisUtils.buildPage(page);
receiptMapper.getReceiptBackPage(mpPage, query);
//添加明细状态计算列表
//MxStatus
//获取List指定字段的List
List<Long> idList = mpPage.getRecords().stream()
.map(ReceiptBackVO::getId)
.collect(Collectors.toList());
List<Long> idList = mpPage.getRecords().stream().map(ReceiptBackVO::getId).collect(Collectors.toList());
//一定要判空,不然会报错
if(CollectionUtil.isNotEmpty(idList)) {
if (CollectionUtil.isNotEmpty(idList)) {
//根据List获取本页中所有的明细信息
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper =
new LambdaQueryWrapper<>();
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(ReceiptItemDO::getReceiptId, idList);
//所有收款单的明细
List<ReceiptItemDO> listItem =
receiptItemMapper.selectList(lambdaQueryWrapper);
List<ReceiptItemDO> listItem = receiptItemMapper.selectList(lambdaQueryWrapper);
LambdaQueryWrapper<ReceiptAccountDO> lambdaQueryWrapper2 =
new LambdaQueryWrapper<>();
LambdaQueryWrapper<ReceiptAccountDO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.in(ReceiptAccountDO::getReceiptId, idList);
List<ReceiptAccountDO> ReceiptAccountList =
receiptAccountMapper.selectList(lambdaQueryWrapper2);
List<ReceiptAccountDO> ReceiptAccountList = receiptAccountMapper.selectList(lambdaQueryWrapper2);
Map<Integer, CurrencyRespDTO> currencyMap = currencyApi.getAllCurrency();
for (ReceiptBackVO r : mpPage.getRecords()
) {
for (ReceiptBackVO r : mpPage.getRecords()) {
String sR = getReceiptMxStatus(listItem, r.getId());
r.setMxStatus(sR);
......@@ -480,16 +467,14 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
r.setSsShow(s2);
//核销比例
r.setHxBiLi(getHxBili(ReceiptAccountList,
listItem, r.getId()));
r.setHxBiLi(getHxBili(ReceiptAccountList, listItem, r.getId()));
}
}
return PageResult.of(mpPage);
}
private String getPercentage(BigDecimal part, BigDecimal total) {
BigDecimal percentage = part.divide(total, 5,
BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
BigDecimal percentage = part.divide(total, 5, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
// 输出百分比
String sR = format(percentage) + "%";
return sR;
......@@ -505,24 +490,18 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
/*
获取核销比例
*/
private String getHxBili(List<ReceiptAccountDO> ReceiptAccountList,
List<ReceiptItemDO> listItemList,
long ReceiptId) {
private String getHxBili(List<ReceiptAccountDO> ReceiptAccountList, List<ReceiptItemDO> listItemList, long ReceiptId) {
String sR = "0";
if (CollectionUtil.isEmpty(ReceiptAccountList))
return sR;
if (CollectionUtil.isEmpty(ReceiptAccountList)) return sR;
if (CollectionUtil.isEmpty(listItemList)) {
return sR;
}
List<ReceiptAccountDO> ReceiptAccountList1 =
ReceiptAccountList.stream().filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.toList());
List<ReceiptAccountDO> ReceiptAccountList1 = ReceiptAccountList.stream().filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.toList());
if (CollectionUtil.isEmpty(ReceiptAccountList1)) return sR;
BigDecimal bTotal = new BigDecimal(0);
BigDecimal bPart = new BigDecimal(0);
for (ReceiptAccountDO do1 : ReceiptAccountList1
) {
for (ReceiptAccountDO do1 : ReceiptAccountList1) {
bTotal = bTotal.add(do1.getWriteOffAmount());
}
......@@ -532,16 +511,13 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
}
//已核销状态记录
List<ReceiptItemDO> list =
listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId
&& i.getStatus() != 0).collect(Collectors.toList());
List<ReceiptItemDO> list = listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId && i.getStatus() != 0).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) {
//核销金额为0 核销比例为空
return sR;
}
for (ReceiptItemDO do2 : list
) {
for (ReceiptItemDO do2 : list) {
bPart = bPart.add(do2.getWriteOffAmount());
}
//计算百分比
......@@ -552,22 +528,16 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
/*
应收款
*/
private String getYSShow(List<ReceiptAccountDO> ReceiptAccountList,
long ReceiptId,
Map<Integer, CurrencyRespDTO> currencyMap) {
private String getYSShow(List<ReceiptAccountDO> ReceiptAccountList, long ReceiptId, Map<Integer, CurrencyRespDTO> currencyMap) {
String sR = "";
if (CollectionUtil.isEmpty(ReceiptAccountList)) {
return sR;
}
List<ReceiptAccountDO> ReceiptAccountList1 =
ReceiptAccountList.stream().filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.toList());
if (CollectionUtil.isEmpty(ReceiptAccountList1))
return sR;
List<ReceiptAccountDO> ReceiptAccountList1 = ReceiptAccountList.stream().filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.toList());
if (CollectionUtil.isEmpty(ReceiptAccountList1)) return sR;
for (ReceiptAccountDO do1 : ReceiptAccountList1
) {
for (ReceiptAccountDO do1 : ReceiptAccountList1) {
BigDecimal b1 = do1.getReceivableAmount();
String s1 = b1.toString();
String s2 = "";
......@@ -585,24 +555,17 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
实收金额
*/
private String getSSShow(List<ReceiptItemDO> listItemList,
long ReceiptId,
Map<Integer, CurrencyRespDTO> currencyMap) {
private String getSSShow(List<ReceiptItemDO> listItemList, long ReceiptId, Map<Integer, CurrencyRespDTO> currencyMap) {
String sR = "";
if (CollectionUtil.isEmpty(listItemList)) {
return sR;
}
List<ReceiptItemDO> list =
listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.toList());
List<ReceiptItemDO> list = listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) return sR;
//根据币种分组求和
Map<Long, BigDecimal> dataMap =
list.stream().filter(t -> t.getCurrencyId() != null)
.collect(Collectors.groupingBy(ReceiptItemDO::getCurrencyId,
CollectorsUtil.summingBigDecimal(ReceiptItemDO::getAmount)));
Map<Long, BigDecimal> dataMap = list.stream().filter(t -> t.getCurrencyId() != null).collect(Collectors.groupingBy(ReceiptItemDO::getCurrencyId, CollectorsUtil.summingBigDecimal(ReceiptItemDO::getAmount)));
//遍历币种信息
for (Map.Entry<Long, BigDecimal> entry : dataMap.entrySet()) {
String key = entry.getKey().toString();
......@@ -633,8 +596,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
//全部审核 收款明细全部已审批 OK
String sMxStatus = "";
//计算明细总数
Long iCount = listItem.stream().filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.counting());
Long iCount = listItem.stream().filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.counting());
if (iCount == 0) {
sMxStatus = "未录入";
return sMxStatus;
......@@ -645,18 +607,10 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
//bmpStatus
//PROCESS(1, "处理中"),APPROVE(2, "通过"),
//REJECT(3, "不通过"),CANCEL(4, "已取消");
long Item0 = listItem.stream().filter(i -> i.getStatus() == 0).
filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.counting());
long Item1 = listItem.stream().filter(i -> i.getStatus() == 1).
filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.counting());
long Item2 = listItem.stream().filter(i -> i.getStatus() == 2).
filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.counting());
long Item3 = listItem.stream().filter(i -> i.getStatus() == 3).
filter(i -> i.getReceiptId() == ReceiptId).
collect(Collectors.counting());
long Item0 = listItem.stream().filter(i -> i.getStatus() == 0).filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.counting());
long Item1 = listItem.stream().filter(i -> i.getStatus() == 1).filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.counting());
long Item2 = listItem.stream().filter(i -> i.getStatus() == 2).filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.counting());
long Item3 = listItem.stream().filter(i -> i.getStatus() == 3).filter(i -> i.getReceiptId() == ReceiptId).collect(Collectors.counting());
if (Item0 == iCount) {
//0待核销
......@@ -684,9 +638,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
return sMxStatus;
}
if ((Item2 + Item3) == iCount ||
(Item1 + Item3) == iCount ||
(Item2 + Item1) == iCount) {
if ((Item2 + Item3) == iCount || (Item1 + Item3) == iCount || (Item2 + Item1) == iCount) {
sMxStatus = "部分审核";
return sMxStatus;
}
......@@ -764,8 +716,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
@Override
public void createFinanceReceiptWriteOff(FinanceReceiptVo financeReceiptVo) {
ReceiptDO receiptDO =
validateReceiptBmpStatus(financeReceiptVo.getReceiptId());
ReceiptDO receiptDO = validateReceiptBmpStatus(financeReceiptVo.getReceiptId());
//判断收款单下的收款明细是不是全部核销完成
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ReceiptItemDO::getReceiptId, financeReceiptVo.getReceiptId());
......@@ -775,19 +726,15 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
throw exception(RECEIPT_ITEM_WRITE_OFF_ING);
}
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper1 =
new LambdaQueryWrapper<>();
lambdaQueryWrapper1.eq(ReceiptItemDO::getReceiptId,
financeReceiptVo.getReceiptId());
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.eq(ReceiptItemDO::getReceiptId, financeReceiptVo.getReceiptId());
lambdaQueryWrapper1.eq(ReceiptItemDO::getStatus, 1);
List<ReceiptItemDO> receiptItemDOList =
receiptItemMapper.selectList(lambdaQueryWrapper1);
List<ReceiptItemDO> receiptItemDOList = receiptItemMapper.selectList(lambdaQueryWrapper1);
if (null == receiptItemDOList || receiptItemDOList.size() == 0) {
throw exception(RECEIPT_NOT_WRITE_OFF_ITEM_NOT_EXISTS);
}
BigDecimal totalAmount =
receiptItemDOList.stream().map(ReceiptItemDO::getWriteOffAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalAmount = receiptItemDOList.stream().map(ReceiptItemDO::getWriteOffAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
/* if (receiptDO.getState() != 2 && receiptDO.getState() != 3) {
......@@ -826,11 +773,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
approvalDO.setReason(financeReceiptVo.getRemark());
receiptApprovalService.save(approvalDO);
Long userId = SecurityFrameworkUtils.getLoginUserId();
String bpmId = bpmCreateServiceFactory.createBmp(userId,
approvalDO.getId(),
WorkFlowEmus.FINANCE_RECEIPT_WRITE_OFF.getKey(),
financeReceiptVo.getReceiptNo(),
financeReceiptVo.getCopyUserList());
String bpmId = bpmCreateServiceFactory.createBmp(userId, approvalDO.getId(), WorkFlowEmus.FINANCE_RECEIPT_WRITE_OFF.getKey(), financeReceiptVo.getReceiptNo(), financeReceiptVo.getCopyUserList());
approvalDO.setBmpId(bpmId);
receiptApprovalService.updateById(approvalDO);
......@@ -839,9 +782,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
update.setId(financeReceiptVo.getReceiptId());
update.setBmpStatus(BpmProcessInstanceResultEnum.PROCESS.getResult());
//计算出核销比例
BigDecimal proportion =
totalAmount.divide(receiptDO.getReceivableTotalAmount(),
8, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(6, BigDecimal.ROUND_HALF_UP);
BigDecimal proportion = totalAmount.divide(receiptDO.getReceivableTotalAmount(), 8, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(6, BigDecimal.ROUND_HALF_UP);
update.setWriteOffProportion(proportion);
update.setState(ReceiptStatusEnum.WRITE_OFF_ALL_ING.getValue());
update.setBmpId(bpmId);
......@@ -926,8 +867,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
throw exception(BMP_NOT);
}
if (receiptDO.getBmpStatus() !=
BpmProcessInstanceResultEnum.PROCESS.getResult()) {
if (receiptDO.getBmpStatus() != BpmProcessInstanceResultEnum.PROCESS.getResult()) {
throw exception(BMP_CANCEL);
}
......@@ -938,4 +878,80 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
public ReceiptExportDto getReceiptExportByOrderId(Long orderId) {
return receiptMapper.getReceiptExportByOrderId(orderId);
}
@Override
public Boolean judgingProportion(ReceiptDO receiptDO, String proportion) {
//判断收款单下的收款明细是不是全部核销
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ReceiptItemDO::getReceiptId, receiptDO.getId());
lambdaQueryWrapper.in(ReceiptItemDO::getStatus, 0, 2, 3);
Long count = receiptItemMapper.selectCount(lambdaQueryWrapper);
if (count != 0) {
return Boolean.FALSE;
}
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.eq(ReceiptItemDO::getReceiptId, receiptDO.getId());
lambdaQueryWrapper1.eq(ReceiptItemDO::getStatus, 1);
List<ReceiptItemDO> receiptItemDOList = receiptItemMapper.selectList(lambdaQueryWrapper1);
if (null == receiptItemDOList || receiptItemDOList.size() == 0) {
return Boolean.FALSE;
}
BigDecimal totalAmount = receiptItemDOList.stream().map(ReceiptItemDO::getWriteOffAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
Long currencyId = receiptDO.getCurrencyId();
if (null == currencyId) {
log.error("自动核销判断核销币种为空");
return Boolean.FALSE;
}
//计算出实际收款比例
BigDecimal sjbl = NumberUtil.div(totalAmount, receiptDO.getReceivableTotalAmount()).multiply(new BigDecimal("100"));
//实际收款比例大于规定阀值时,反回可以自己动核销
if (sjbl.compareTo(new BigDecimal(proportion)) >= 0) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void autoWriteOffReceipt(ReceiptDO receiptDO, String userId, String userName) {
ReceiptDO updateReceipt = new ReceiptDO();
// 添加订单ID的修改,不然订单ID就丢失了
updateReceipt.setOrderId(receiptDO.getOrderId());
updateReceipt.setId(receiptDO.getId());
//需要根据是否要开票变成已核销,还是已核销待开票
if (receiptDO.getOpenInvoice() == 0) {
updateReceipt.setState(ReceiptStatusEnum.WRITE_OFF_ALL_SUCCESS.getValue());
}
if (receiptDO.getOpenInvoice() == 1) {
updateReceipt.setState(ReceiptStatusEnum.WRITE_OFF_ALL_OPENING.getValue());
}
updateReceipt.setWriteOffAt(new Date());
updateReceipt.setWriteOffProportion(new BigDecimal("100"));//设置核销比例
updateReceipt.setRemark("自动核销,核销比例>=100%");
updateReceipt.setWriteOffId(Long.parseLong(userId));
updateReceipt.setWriteOffName(userName);
receiptMapper.updateById(updateReceipt);
//更新收该收款单下的应收为收款完成状态
LambdaUpdateWrapper<ReceivableDO> lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.eq(ReceivableDO::getReceiptId, receiptDO.getId());
lambdaUpdateWrapper.set(ReceivableDO::getState, 2);
receivableService.update(lambdaUpdateWrapper);
//添加订单核销日志
LambdaQueryWrapper<ReceivableDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ReceivableDO::getReceiptId, receiptDO.getId());
List<ReceivableDO> orderList = receivableService.list(lambdaQueryWrapper);
List orderIds = orderList.stream().map(ReceivableDO::getOrderId).distinct().collect(Collectors.toList());
receivableService.orderReceivableWriteOffLogAdd(orderIds, receiptDO.getReceiptNo());
}
}
package cn.iocoder.yudao.module.wealth.controller.admin.job;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptDO;
import cn.iocoder.yudao.module.wealth.enums.ReceiptStatusEnum;
import cn.iocoder.yudao.module.wealth.service.receipt.ReceiptService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* 收款单自动核销任务
*/
@Component
@TenantJob
@Slf4j
public class ReceiptAutoWriteOff implements JobHandler {
@Resource
ReceiptService receiptService;
@Resource
AdminUserApi adminUserApi;
@Override
public String execute(String param) throws Exception {
if (StrUtil.isBlank(param)) {
log.error("自动核销比例未配置,自动退出");
return "";
}
String[] paramArray = param.split(",");
if (paramArray.length != 2 || StrUtil.isBlank(paramArray[0]) || StrUtil.isBlank(paramArray[1])) {
log.error("自动核销比例JOB参数错误,自动退出");
return "";
}
AdminUserRespDTO adminUserRespDTO = adminUserApi.getUser(Long.parseLong(paramArray[1]));
if (null == adminUserRespDTO) {
log.error("自动核销比例JOB参数错误,核销人配置错误,自动退出");
return "";
}
//查询所有收款单状态为待核销的
LambdaQueryWrapper<ReceiptDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.and(i -> i.eq(ReceiptDO::getState, ReceiptStatusEnum.WRITE_OFF_WAITING.getValue()).or().eq(ReceiptDO::getState, ReceiptStatusEnum.WRITE_OFF_PART_ING.getValue()));
List<ReceiptDO> receiptDOList = receiptService.selectList(lambdaQueryWrapper);
for (ReceiptDO receiptDO : receiptDOList) {
try {
//判断当前收款单下的收款明细是不是全部是已核销并且核销比例要大于配置(params)
Boolean result = receiptService.judgingProportion(receiptDO, paramArray[0]);
if (result) {
receiptService.autoWriteOffReceipt(receiptDO, paramArray[1], adminUserRespDTO.getNickname());
}
} catch (Exception e) {
log.error("收款单{}自动核销出错原因:{}", receiptDO.getReceiptNo(), e.getMessage());
}
}
return "";
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment