Commit 20a43543 authored by zhangfeng's avatar zhangfeng

feat(wealth): 优化

parent 6960a4e8
...@@ -48,6 +48,9 @@ CREATE TABLE `ecw_receipt_bank_writeoff_range` ( ...@@ -48,6 +48,9 @@ CREATE TABLE `ecw_receipt_bank_writeoff_range` (
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '银行收款明细自动核销比例设置表' ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '银行收款明细自动核销比例设置表' ROW_FORMAT = DYNAMIC;
INSERT INTO `ecw_receipt_bank_writeoff_range` (`id`, `write_off_down`, `write_off_up`, `create_time`, `update_time`, `creator`, `updater`, `deleted`) VALUES (1, 9999, 10000, '2025-01-20 13:39:44', '2025-01-20 13:39:44', '1', '1', 0);
CREATE TABLE `ecw_receipt_invoice` ( CREATE TABLE `ecw_receipt_invoice` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`invoice_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开票编号', `invoice_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开票编号',
......
package cn.iocoder.yudao.module.ecw.service.api; package cn.iocoder.yudao.module.ecw.service.api;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.module.ecw.api.bank.BankApi; import cn.iocoder.yudao.module.ecw.api.bank.BankApi;
import cn.iocoder.yudao.module.ecw.api.bank.dto.BankAccountDTO; import cn.iocoder.yudao.module.ecw.api.bank.dto.BankAccountDTO;
import cn.iocoder.yudao.module.ecw.convert.bankAccount.BankAccountConvert; import cn.iocoder.yudao.module.ecw.convert.bankAccount.BankAccountConvert;
...@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Service @Service
...@@ -33,16 +35,24 @@ public class BankApiImpl implements BankApi { ...@@ -33,16 +35,24 @@ public class BankApiImpl implements BankApi {
@Override @Override
public void updateBankAccountBalance(BankAccountDTO bankAccountDTO, boolean isAdd) { public void updateBankAccountBalance(BankAccountDTO bankAccountDTO, boolean isAdd) {
List<BankAccountDO> bankAccountDOS = bankAccountMapper.selectList(Wrappers.lambdaQuery(BankAccountDO.class) BankAccountDO bankAccountDO = null;
.eq(BankAccountDO::getBaAccountName, bankAccountDTO.getBaAccountName()) if (bankAccountDTO.getId() != null) {
.eq(BankAccountDO::getBaAccountNum, bankAccountDTO.getBaAccountNum()) bankAccountDO = bankAccountMapper.selectById(bankAccountDTO.getId());
.eq(BankAccountDO::getBaBankName, bankAccountDTO.getBaBankName())); } else {
if (bankAccountDOS != null && !bankAccountDOS.isEmpty()) { List<BankAccountDO> bankAccountDOS = bankAccountMapper.selectList(Wrappers.lambdaQuery(BankAccountDO.class)
BankAccountDO bankAccountDO = bankAccountDOS.get(0); .eq(BankAccountDO::getBaAccountName, bankAccountDTO.getBaAccountName())
.eq(BankAccountDO::getBaAccountNum, bankAccountDTO.getBaAccountNum())
.eq(BankAccountDO::getBaBankName, bankAccountDTO.getBaBankName()));
if (CollectionUtil.isNotEmpty(bankAccountDOS)) {
bankAccountDO = bankAccountDOS.get(0);
}
}
if (bankAccountDO != null) {
BigDecimal baBalance = bankAccountDO.getBaBalance() == null ? BigDecimal.ZERO : bankAccountDO.getBaBalance();
if (isAdd) { if (isAdd) {
bankAccountDO.setBaBalance(bankAccountDO.getBaBalance().add(bankAccountDTO.getBaBalance())); bankAccountDO.setBaBalance(baBalance.add(bankAccountDTO.getBaBalance()));
} else { } else {
bankAccountDO.setBaBalance(bankAccountDO.getBaBalance().subtract(bankAccountDTO.getBaBalance())); bankAccountDO.setBaBalance(baBalance.subtract(bankAccountDTO.getBaBalance()));
} }
bankAccountMapper.updateById(bankAccountDO); bankAccountMapper.updateById(bankAccountDO);
} }
......
...@@ -3849,7 +3849,9 @@ public class OrderQueryServiceImpl implements OrderQueryService { ...@@ -3849,7 +3849,9 @@ public class OrderQueryServiceImpl implements OrderQueryService {
orderCostSummaryDto.setIsCargoControl(back.getIsCargoControl() ? 1 : 0); orderCostSummaryDto.setIsCargoControl(back.getIsCargoControl() ? 1 : 0);
return orderCostSummaryDto; return orderCostSummaryDto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
List<OrderCostSummaryDto> resultList = totalList.subList(page.getPage() - 1, Math.min(page.getPage() * page.getRows(), records.size())); int startIndex = Math.max(0, (page.getPage() - 1) * page.getRows());
int endIndex = Math.min(startIndex + page.getRows(), records.size());
List<OrderCostSummaryDto> resultList = totalList.subList(startIndex, endIndex);
ContainerReportOrderPageResult<OrderCostSummaryDto> pageResult = new ContainerReportOrderPageResult(resultList, records.size(), page.getRows(), (long) page.getPage(), records.size() / page.getRows() + 1); ContainerReportOrderPageResult<OrderCostSummaryDto> pageResult = new ContainerReportOrderPageResult(resultList, records.size(), page.getRows(), (long) page.getPage(), records.size() / page.getRows() + 1);
// 汇总全部 // 汇总全部
totalList.stream().forEach(orderCostSummaryDto -> { totalList.stream().forEach(orderCostSummaryDto -> {
......
...@@ -15,7 +15,7 @@ public interface BankReceiptDetailsMapper { ...@@ -15,7 +15,7 @@ public interface BankReceiptDetailsMapper {
IPage<BankIncomeItemResp> getBankIncomeItemPage(IPage<BankIncomeItemResp> page, @Param("req") BankIncomeItemReq req); IPage<BankIncomeItemResp> getBankIncomeItemPage(IPage<BankIncomeItemResp> page, @Param("req") BankIncomeItemReq req);
List<CurrencyAmount> calculateAccountBalance(String accountNo); List<CurrencyAmount> calculateAccountBalance(Long accountId);
List<CurrencyAmount> calculateCurrentAmount(@Param("req") BankIncomeItemReq req); List<CurrencyAmount> calculateCurrentAmount(@Param("req") BankIncomeItemReq req);
......
...@@ -437,4 +437,6 @@ public interface ReceivableMapper extends AbstractMapper<ReceivableDO> { ...@@ -437,4 +437,6 @@ public interface ReceivableMapper extends AbstractMapper<ReceivableDO> {
List<ReceivableDO> selectBoxReceivablesByOrderIds(@Param("orderIds") Set<Long> orderIds); List<ReceivableDO> selectBoxReceivablesByOrderIds(@Param("orderIds") Set<Long> orderIds);
List<Long> getAllBoxId(); List<Long> getAllBoxId();
List<Long> getDestWarehouseIdListByDestCity(@Param("destCity") List<Long> destCity);
} }
...@@ -13,8 +13,4 @@ public interface BoxReportConstant { ...@@ -13,8 +13,4 @@ public interface BoxReportConstant {
* 报表查询条件缓存key * 报表查询条件缓存key
*/ */
String BOX_REPORT_QUERY_CONDITION_CACHE = "wealth:report:condition"; String BOX_REPORT_QUERY_CONDITION_CACHE = "wealth:report:condition";
/**
* 本年度报表缓存
*/
String BOX_REPORT_CURRENT_YEAR_CACHE = "wealth:report:currentYear";
} }
...@@ -5,6 +5,8 @@ import cn.iocoder.yudao.module.bpm.api.BpmCreateServiceFactory; ...@@ -5,6 +5,8 @@ import cn.iocoder.yudao.module.bpm.api.BpmCreateServiceFactory;
import cn.iocoder.yudao.module.bpm.enums.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.enums.WorkFlowEmus; import cn.iocoder.yudao.module.bpm.enums.WorkFlowEmus;
import cn.iocoder.yudao.module.bpm.resp.TaskResp; import cn.iocoder.yudao.module.bpm.resp.TaskResp;
import cn.iocoder.yudao.module.ecw.api.bank.BankApi;
import cn.iocoder.yudao.module.ecw.api.bank.dto.BankAccountDTO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptDO; import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptDO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receiptApproval.ReceiptApprovalDO; import cn.iocoder.yudao.module.wealth.dal.dataobject.receiptApproval.ReceiptApprovalDO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receiptItem.ReceiptItemDO; import cn.iocoder.yudao.module.wealth.dal.dataobject.receiptItem.ReceiptItemDO;
...@@ -57,6 +59,8 @@ public class FinanceReceiptApproveService { ...@@ -57,6 +59,8 @@ public class FinanceReceiptApproveService {
private ReceivableService receivableService; private ReceivableService receivableService;
@Resource @Resource
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
@Resource
private BankApi bankApi;
@Transactional @Transactional
public void financeApproveCallBack(String bmpKey, String businessKey, Integer result) { public void financeApproveCallBack(String bmpKey, String businessKey, Integer result) {
...@@ -158,6 +162,7 @@ public class FinanceReceiptApproveService { ...@@ -158,6 +162,7 @@ public class FinanceReceiptApproveService {
List orderIds = orderList.stream().map(ReceivableDO::getOrderId).distinct().collect(Collectors.toList()); List orderIds = orderList.stream().map(ReceivableDO::getOrderId).distinct().collect(Collectors.toList());
receivableService.orderReceivableWriteOffLogAdd(orderIds, receiptDO.getReceiptNo()); receivableService.orderReceivableWriteOffLogAdd(orderIds, receiptDO.getReceiptNo());
// TODO 更新核销误差兑额外费用主币种金额
} else if (result == BpmProcessInstanceResultEnum.REJECT.getResult()) { } else if (result == BpmProcessInstanceResultEnum.REJECT.getResult()) {
updateReceipt.setState(ReceiptStatusEnum.WRITE_OFF_PART_ING.getValue()); updateReceipt.setState(ReceiptStatusEnum.WRITE_OFF_PART_ING.getValue());
...@@ -230,7 +235,7 @@ public class FinanceReceiptApproveService { ...@@ -230,7 +235,7 @@ public class FinanceReceiptApproveService {
updateWrapper.eq(ReceiptItemDO::getId, receiptItemDO.getId()); updateWrapper.eq(ReceiptItemDO::getId, receiptItemDO.getId());
updateWrapper.set(ReceiptItemDO::getBmpStatus, result); updateWrapper.set(ReceiptItemDO::getBmpStatus, result);
if (result == BpmProcessInstanceResultEnum.APPROVE.getResult()) { if (result == BpmProcessInstanceResultEnum.APPROVE.getResult()) {
updateWrapper.set(ReceiptItemDO::getStatus, ReceiptItemStatusEnum.WRITE_OFF.getValue()); updateWrapper.set(ReceiptItemDO::getStatus, ReceiptItemStatusEnum.DRAFT.getValue());
updateWrapper.set(ReceiptItemDO::getApprovalTime, null); updateWrapper.set(ReceiptItemDO::getApprovalTime, null);
receiptItemMapper.update(null, updateWrapper); receiptItemMapper.update(null, updateWrapper);
//需要根据应收明细核销状态 变更成部分核销或者待核销 //需要根据应收明细核销状态 变更成部分核销或者待核销
...@@ -259,6 +264,13 @@ public class FinanceReceiptApproveService { ...@@ -259,6 +264,13 @@ public class FinanceReceiptApproveService {
} }
receivableService.updateBatchById(receivableDOS); receivableService.updateBatchById(receivableDOS);
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId()); receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
// 更新银行账户余额
bankApi.updateBankAccountBalance(BankAccountDTO.builder()
.id(receiptItemDO.getAccountId())
.baAccountName(receiptItemDO.getAccountName())
.baAccountNum(receiptItemDO.getAccountNo())
.baBankName(receiptItemDO.getAccountBankName())
.baBalance(receiptItemDO.getAmount()).build(), true);
} else if (result == BpmProcessInstanceResultEnum.REJECT.getResult()) { } else if (result == BpmProcessInstanceResultEnum.REJECT.getResult()) {
updateWrapper.set(ReceiptItemDO::getStatus, ReceiptItemStatusEnum.WRITE_OFF.getValue()); updateWrapper.set(ReceiptItemDO::getStatus, ReceiptItemStatusEnum.WRITE_OFF.getValue());
receiptItemMapper.update(null, updateWrapper); receiptItemMapper.update(null, updateWrapper);
...@@ -267,7 +279,6 @@ public class FinanceReceiptApproveService { ...@@ -267,7 +279,6 @@ public class FinanceReceiptApproveService {
receiptItemMapper.update(null, updateWrapper); receiptItemMapper.update(null, updateWrapper);
} }
receiptService.recordLog(receiptItemDO.getReceiptId(), ReceiptLinkEnum.REJECT_BANK_RECEIPT, comment, WorkFlowEmus.FINANCE_RECEIPT_ITEM_WRITE_OFF_NO.getValue()); receiptService.recordLog(receiptItemDO.getReceiptId(), ReceiptLinkEnum.REJECT_BANK_RECEIPT, comment, WorkFlowEmus.FINANCE_RECEIPT_ITEM_WRITE_OFF_NO.getValue());
// TODO 更新银行账号余额
} }
ReceiptApprovalDO updateReceiptApproval = new ReceiptApprovalDO(); ReceiptApprovalDO updateReceiptApproval = new ReceiptApprovalDO();
updateReceiptApproval.setId(receiptApprovalDO.getId()); updateReceiptApproval.setId(receiptApprovalDO.getId());
......
...@@ -844,7 +844,6 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO ...@@ -844,7 +844,6 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
update.setState(ReceiptStatusEnum.APPROVE_NEGATION.getValue()); update.setState(ReceiptStatusEnum.APPROVE_NEGATION.getValue());
update.setBmpId(bpmId); update.setBmpId(bpmId);
receiptMapper.updateById(update); receiptMapper.updateById(update);
//recordLog(update.getId(), ReceiptLinkEnum.REJECT_RECEIPT, financeReceiptVo.getRemark(), WorkFlowEmus.FINANCE_RECEIPT_APPROVE_NO.getValue());
} }
@Override @Override
...@@ -876,7 +875,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO ...@@ -876,7 +875,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
if (null == currencyId) { if (null == currencyId) {
throw exception(RECEIPT_CURRENCY_NOT_EXISTS); throw exception(RECEIPT_CURRENCY_NOT_EXISTS);
} }
if (totalAmount.compareTo(receiptDO.getReceivableTotalAmount()) == -1) { if (totalAmount.compareTo(receiptDO.getReceivableTotalAmount()) < 0) {
DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictDataFromCache("write_off_diff", String.valueOf(currencyId)); DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictDataFromCache("write_off_diff", String.valueOf(currencyId));
if (null == dictDataRespDTO) { if (null == dictDataRespDTO) {
throw exception(RECEIPT_CURRENCY_DIFF_NOT_EXISTS); throw exception(RECEIPT_CURRENCY_DIFF_NOT_EXISTS);
...@@ -940,7 +939,6 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO ...@@ -940,7 +939,6 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
update.setState(ReceiptStatusEnum.WRITE_OFF_ALL_NEGATION.getValue()); update.setState(ReceiptStatusEnum.WRITE_OFF_ALL_NEGATION.getValue());
update.setBmpId(bpmId); update.setBmpId(bpmId);
receiptMapper.updateById(update); receiptMapper.updateById(update);
recordLog(update.getId(), ReceiptLinkEnum.REJECT_WRITE_OFF_RECEIPT, financeReceiptVo.getRemark(), update.getBmpId());
} }
@Override @Override
......
...@@ -87,7 +87,7 @@ public class BankReceiptDetailsImpl implements BankReceiptDetailsService { ...@@ -87,7 +87,7 @@ public class BankReceiptDetailsImpl implements BankReceiptDetailsService {
if (accountBalanceMap.containsKey(record.getAccountNo())) { if (accountBalanceMap.containsKey(record.getAccountNo())) {
record.setAccountBalance(accountBalanceMap.get(record.getAccountNo())); record.setAccountBalance(accountBalanceMap.get(record.getAccountNo()));
} else { } else {
record.setAccountBalance(bankReceiptDetailsMapper.calculateAccountBalance(record.getAccountNo())); record.setAccountBalance(bankReceiptDetailsMapper.calculateAccountBalance(record.getAccountId()));
accountBalanceMap.put(record.getAccountNo(), record.getAccountBalance()); accountBalanceMap.put(record.getAccountNo(), record.getAccountBalance());
} }
List<ReceiptRelationOrderInfoVO> orderInfoByReceiptId = receiptMapper.getOrderInfoByReceiptId(Long.parseLong(record.getReceiptId())); List<ReceiptRelationOrderInfoVO> orderInfoByReceiptId = receiptMapper.getOrderInfoByReceiptId(Long.parseLong(record.getReceiptId()));
......
...@@ -28,7 +28,7 @@ public interface ReceiptItemService extends IService<ReceiptItemDO> { ...@@ -28,7 +28,7 @@ public interface ReceiptItemService extends IService<ReceiptItemDO> {
* @param createReqVO 创建信息 * @param createReqVO 创建信息
* @return 编号 * @return 编号
*/ */
Long createReceiptItem(@Valid ReceiptItemCreateReqVO createReqVO); Long createReceiptItem(@Valid ReceiptItemCreateReqVO createReqVO,boolean isBatch);
/** /**
* 更新收款单明细 * 更新收款单明细
......
...@@ -116,7 +116,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -116,7 +116,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createReceiptItem(ReceiptItemCreateReqVO createReqVO) { public Long createReceiptItem(ReceiptItemCreateReqVO createReqVO, boolean isBatch) {
ReceiptDO receiptDO = validateCreateVO(createReqVO); ReceiptDO receiptDO = validateCreateVO(createReqVO);
// 插入收款明细 // 插入收款明细
ReceiptItemDO receiptItem = ReceiptItemConvert.INSTANCE.convert(createReqVO); ReceiptItemDO receiptItem = ReceiptItemConvert.INSTANCE.convert(createReqVO);
...@@ -141,7 +141,9 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -141,7 +141,9 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receiptService.updateById(update); receiptService.updateById(update);
} }
receiptService.updateReceiptItemStatus(receiptItem.getReceiptId()); receiptService.updateReceiptItemStatus(receiptItem.getReceiptId());
receiptItemAutoApprove(receiptItem, receiptDO.getReceiptNo()); if (isBatch) {
receiptItemAutoApprove(receiptItem, receiptDO.getReceiptNo());
}
// 返回 // 返回
return receiptItem.getId(); return receiptItem.getId();
} }
...@@ -247,13 +249,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -247,13 +249,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void verification(Long id, Integer bpmResult, String comment) { public void verification(Long id, Integer bpmResult, String comment) {
//收款单明细核销审核 //收款单明细核销审核
if (null == id) {
throw exception(RECEIPT_ITEM_NOT_FOUND);
}
ReceiptItemDO receiptItemDO = receiptItemMapper.selectById(id); ReceiptItemDO receiptItemDO = receiptItemMapper.selectById(id);
if (null == receiptItemDO) {
throw exception(RECEIPT_ITEM_NOT_FOUND);
}
receiptItemDO.setBmpStatus(bpmResult); receiptItemDO.setBmpStatus(bpmResult);
// 核销通过 // 核销通过
if (Objects.equals(bpmResult, BpmProcessInstanceResultEnum.APPROVE.getResult())) { if (Objects.equals(bpmResult, BpmProcessInstanceResultEnum.APPROVE.getResult())) {
...@@ -262,10 +258,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -262,10 +258,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
// 更新收款单 // 更新收款单
ReceiptDO receiptDO = receiptMapper.selectById(receiptItemDO.getReceiptId()); ReceiptDO receiptDO = receiptMapper.selectById(receiptItemDO.getReceiptId());
if (null == receiptDO) { //判断收款单状态如果是待提交状态-变成部分核销状态,其它 状态不变
throw exception(RECEIPT_NOT_EXISTS);
}
//判断收款单状态如果是待核销状态-变成部分核销状态,其它 状态不变
if (receiptDO.getState().equals(ReceiptStatusEnum.WRITE_OFF_WAITING.getValue())) { if (receiptDO.getState().equals(ReceiptStatusEnum.WRITE_OFF_WAITING.getValue())) {
receiptDO.setState(ReceiptStatusEnum.WRITE_OFF_PART_ING.getValue()); receiptDO.setState(ReceiptStatusEnum.WRITE_OFF_PART_ING.getValue());
} }
...@@ -274,7 +267,11 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -274,7 +267,11 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
if (null != receiptDO.getReceivableTotalAmount() && receiptDO.getReceivableTotalAmount().compareTo(BigDecimal.ZERO) > 0) { if (null != receiptDO.getReceivableTotalAmount() && receiptDO.getReceivableTotalAmount().compareTo(BigDecimal.ZERO) > 0) {
receiptDO.setWriteOffProportion(writeOffAmount.divide(receiptDO.getReceivableTotalAmount(), 8, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(6, BigDecimal.ROUND_HALF_UP)); receiptDO.setWriteOffProportion(writeOffAmount.divide(receiptDO.getReceivableTotalAmount(), 8, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(6, BigDecimal.ROUND_HALF_UP));
} }
receiptService.updateById(receiptDO); try {
receiptService.updateById(receiptDO);
} catch (Exception e) {
log.error("更新收款单状态失败", e);
}
//更新应收明细 //更新应收明细
List<ReceivableDO> receivableDOS = receivableService.selectList("receipt_id", receiptItemDO.getReceiptId()); List<ReceivableDO> receivableDOS = receivableService.selectList("receipt_id", receiptItemDO.getReceiptId());
for (ReceivableDO receivableDO : receivableDOS) { for (ReceivableDO receivableDO : receivableDOS) {
...@@ -282,13 +279,15 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -282,13 +279,15 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
ReceivableWriteOffRecordDO receivableWriteOffRecordDO = receivableService.getReceivableWriteOffRecord(receivableDO.getId(), receiptItemDO.getId()); ReceivableWriteOffRecordDO receivableWriteOffRecordDO = receivableService.getReceivableWriteOffRecord(receivableDO.getId(), receiptItemDO.getId());
if (null != receivableWriteOffRecordDO) { if (null != receivableWriteOffRecordDO) {
BigDecimal writeOffCurrent = receivableWriteOffRecordDO.getWriteOffAmount().divide(receivableDO.getExchangeRate(), 4, RoundingMode.HALF_UP); BigDecimal writeOffCurrent = receivableWriteOffRecordDO.getWriteOffAmount().divide(receivableDO.getExchangeRate(), 4, RoundingMode.HALF_UP);
receivableDO.setWriteOffAmount(receivableDO.getWriteOffAmount().add(writeOffCurrent)); BigDecimal oldWriteOffAmount = receivableDO.getWriteOffAmount() == null ? BigDecimal.ZERO : receivableDO.getWriteOffAmount();
receivableDO.setWriteOffAmount(oldWriteOffAmount.add(writeOffCurrent));
} }
} }
receivableService.updateBatchById(receivableDOS); receivableService.updateBatchById(receivableDOS);
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId()); receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
// 更新银行账户余额 // 更新银行账户余额
bankApi.updateBankAccountBalance(BankAccountDTO.builder() bankApi.updateBankAccountBalance(BankAccountDTO.builder()
.id(receiptItemDO.getAccountId())
.baAccountName(receiptItemDO.getAccountName()) .baAccountName(receiptItemDO.getAccountName())
.baAccountNum(receiptItemDO.getAccountNo()) .baAccountNum(receiptItemDO.getAccountNo())
.baBankName(receiptItemDO.getAccountBankName()) .baBankName(receiptItemDO.getAccountBankName())
...@@ -692,7 +691,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -692,7 +691,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
List<ReceivableWriteOffReqVO> receivableWriteOffList = getReceiptItemDetail(listForCreateReceiptItem, receiptItemCreateReqVO); List<ReceivableWriteOffReqVO> receivableWriteOffList = getReceiptItemDetail(listForCreateReceiptItem, receiptItemCreateReqVO);
receiptItemCreateReqVO.setReceivableWriteOffList(receivableWriteOffList); receiptItemCreateReqVO.setReceivableWriteOffList(receivableWriteOffList);
// 插入数据 // 插入数据
Long receiptItemId = proxy.createReceiptItem(receiptItemCreateReqVO); Long receiptItemId = proxy.createReceiptItem(receiptItemCreateReqVO, true);
ReceiptItemDO receiptItemDO = receiptItemMapper.selectById(receiptItemId); ReceiptItemDO receiptItemDO = receiptItemMapper.selectById(receiptItemId);
if (receiptItemDO.getBmpId() == null) { if (receiptItemDO.getBmpId() == null) {
this.createFinanceReceiptItemWriteOff(FinanceReceiptItemVo.builder() this.createFinanceReceiptItemWriteOff(FinanceReceiptItemVo.builder()
......
...@@ -24,6 +24,9 @@ public class BankIncomeItemResp { ...@@ -24,6 +24,9 @@ public class BankIncomeItemResp {
@ApiModelProperty(value = "0收/1支,暂时没支") @ApiModelProperty(value = "0收/1支,暂时没支")
private Integer isIncome; private Integer isIncome;
@ApiModelProperty(value = "收款账号id")
private Long accountId;
@ApiModelProperty(value = "收款账号") @ApiModelProperty(value = "收款账号")
private String accountNo; private String accountNo;
......
...@@ -42,7 +42,7 @@ public class ReceivableBoxReportQueryVO { ...@@ -42,7 +42,7 @@ public class ReceivableBoxReportQueryVO {
private Integer slStatus; private Integer slStatus;
@ApiModelProperty(value = "出货状态") @ApiModelProperty(value = "出货状态")
private Integer boxStatus; private List<Integer> boxStatus;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始到港时间") @ApiModelProperty(value = "开始到港时间")
...@@ -83,6 +83,8 @@ public class ReceivableBoxReportQueryVO { ...@@ -83,6 +83,8 @@ public class ReceivableBoxReportQueryVO {
private Boolean forceUpdateCache = false; private Boolean forceUpdateCache = false;
private List<String> selfNoList;
public Boolean isEmpty() { public Boolean isEmpty() {
return StringUtils.isBlank(selfNo) return StringUtils.isBlank(selfNo)
&& (CollectionUtil.isEmpty(startWarehouseIdList)) && (CollectionUtil.isEmpty(startWarehouseIdList))
......
...@@ -15,7 +15,7 @@ public class ReceivableCurrencyAmount { ...@@ -15,7 +15,7 @@ public class ReceivableCurrencyAmount {
public ReceivableCurrencyAmount(Long currencyId, BigDecimal amount) { public ReceivableCurrencyAmount(Long currencyId, BigDecimal amount) {
this.currencyId = currencyId; this.currencyId = currencyId;
this.amount = amount; this.amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
} }
@Override @Override
...@@ -32,6 +32,11 @@ public class ReceivableCurrencyAmount { ...@@ -32,6 +32,11 @@ public class ReceivableCurrencyAmount {
} }
public void addAmount(BigDecimal amount) { public void addAmount(BigDecimal amount) {
this.amount = this.amount.add(amount); this.amount = this.amount.add(amount).setScale(2, BigDecimal.ROUND_HALF_UP);
}
@Override
public ReceivableCurrencyAmount clone() {
return new ReceivableCurrencyAmount(this.currencyId, this.amount);
} }
} }
\ No newline at end of file
...@@ -12,4 +12,5 @@ public class ReceivableIncomeBelong { ...@@ -12,4 +12,5 @@ public class ReceivableIncomeBelong {
*/ */
private Integer incomeBelong; private Integer incomeBelong;
private BigDecimal writeOffAmount; private BigDecimal writeOffAmount;
private BigDecimal writeOffBaseAmount;
} }
package cn.iocoder.yudao.module.wealth.controller.admin.job;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.module.wealth.dal.mysql.receivable.ReceivableMapper;
import cn.iocoder.yudao.module.wealth.service.receivable.ReceivableService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Slf4j
@AllArgsConstructor
public class BoxReportCacheRefreshJob implements JobHandler {
private final ReceivableService receivableService;
private final ReceivableMapper receivableMapper;
@Override
public String execute(String param) {
log.info("初始化应收报表缓存");
try {
List<Long> boxIds = receivableMapper.getAllBoxId();
receivableService.updateBoxAmountCache(boxIds, true);
} catch (Exception e) {
log.error("初始化应收报表缓存失败", e);
}
log.info("初始化应收报表缓存完成");
return "";
}
}
...@@ -19,10 +19,11 @@ import static cn.iocoder.yudao.module.wealth.enums.BoxReportConstant.BOX_AMOUNT_ ...@@ -19,10 +19,11 @@ import static cn.iocoder.yudao.module.wealth.enums.BoxReportConstant.BOX_AMOUNT_
@Component @Component
@Slf4j @Slf4j
@AllArgsConstructor @AllArgsConstructor
public class BoxReportCacheLoader implements ApplicationRunner { public class BoxReportCacheRefreshRunner implements ApplicationRunner {
private final ReceivableService receivableService; private final ReceivableService receivableService;
private final ReceivableMapper receivableMapper; private final ReceivableMapper receivableMapper;
private final RedisHelper redisHelper; private final RedisHelper redisHelper;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
log.info("初始化应收报表缓存"); log.info("初始化应收报表缓存");
......
...@@ -74,7 +74,7 @@ public class ReceiptItemController { ...@@ -74,7 +74,7 @@ public class ReceiptItemController {
@ApiOperation("创建收款明细") @ApiOperation("创建收款明细")
//@PreAuthorize("@ss.hasPermission('ecw:receipt-item:create')") //@PreAuthorize("@ss.hasPermission('ecw:receipt-item:create')")
public CommonResult<Long> createReceiptItem(@Valid @RequestBody ReceiptItemCreateReqVO createReqVO) { public CommonResult<Long> createReceiptItem(@Valid @RequestBody ReceiptItemCreateReqVO createReqVO) {
return success(receiptItemService.createReceiptItem(createReqVO)); return success(receiptItemService.createReceiptItem(createReqVO,false));
} }
@PutMapping("/update") @PutMapping("/update")
...@@ -178,7 +178,8 @@ public class ReceiptItemController { ...@@ -178,7 +178,8 @@ public class ReceiptItemController {
LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper = LambdaQueryWrapper<ReceiptItemDO> lambdaQueryWrapper =
new LambdaQueryWrapper<>(); new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ReceiptItemDO::getReceiptId, id); lambdaQueryWrapper.eq(ReceiptItemDO::getReceiptId, id)
.in(ReceiptItemDO::getStatus, Arrays.asList(1, 2 ,3));
List<ReceiptItemDO> listItem = List<ReceiptItemDO> listItem =
receiptItemMapper.selectList(lambdaQueryWrapper); receiptItemMapper.selectList(lambdaQueryWrapper);
......
...@@ -89,6 +89,7 @@ ...@@ -89,6 +89,7 @@
SELECT SELECT
eri.id, eri.id,
eri.receipt_id, eri.receipt_id,
eri.account_id,
eri.account_no, eri.account_no,
eri.account_name, eri.account_name,
eri.account_bank_name, eri.account_bank_name,
...@@ -102,8 +103,7 @@ ...@@ -102,8 +103,7 @@
INNER JOIN (SELECT receipt_id, order_id FROM ecw_receivable GROUP BY receipt_id, order_id) rb INNER JOIN (SELECT receipt_id, order_id FROM ecw_receivable GROUP BY receipt_id, order_id) rb
ON rb.receipt_id = er.id ON rb.receipt_id = er.id
LEFT JOIN ecw_order eo ON eo.order_id = rb.order_id LEFT JOIN ecw_order eo ON eo.order_id = rb.order_id
LEFT JOIN ecw_bank_account eba ON eba.ba_account_num = eri.account_no WHERE eri.status = 1 AND eri.account_id IS NOT NULL
WHERE eri.status = 1
<include refid="incomePageCondition"/> <include refid="incomePageCondition"/>
GROUP BY eri.id GROUP BY eri.id
<!-- <if test="req.isAsc != null">--> <!-- <if test="req.isAsc != null">-->
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
concat('%',#{req.relationNo},'%') OR eo.tidan_no = #{req.relationNo}) concat('%',#{req.relationNo},'%') OR eo.tidan_no = #{req.relationNo})
</if> </if>
<if test="req.platformAccountIds != null and req.platformAccountIds.size > 0"> <if test="req.platformAccountIds != null and req.platformAccountIds.size > 0">
AND era.platform_account_id IN AND eri.account_id IN
<foreach collection="req.platformAccountIds" item="platformAccountId" open="(" separator="," close=")"> <foreach collection="req.platformAccountIds" item="platformAccountId" open="(" separator="," close=")">
#{platformAccountId} #{platformAccountId}
</foreach> </foreach>
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
SUM(amount) AS amount SUM(amount) AS amount
FROM ecw_receipt_item FROM ecw_receipt_item
WHERE WHERE
account_no = #{accountNo} AND status = 1 account_id = #{accountId} AND status = 1
GROUP BY currency_id GROUP BY currency_id
</select> </select>
<select id="calculateCurrentAmount" <select id="calculateCurrentAmount"
...@@ -164,8 +164,7 @@ ...@@ -164,8 +164,7 @@
INNER JOIN (SELECT receipt_id, order_id FROM ecw_receivable GROUP BY receipt_id, order_id) rb INNER JOIN (SELECT receipt_id, order_id FROM ecw_receivable GROUP BY receipt_id, order_id) rb
ON rb.receipt_id = er.id ON rb.receipt_id = er.id
LEFT JOIN ecw_order eo ON eo.order_id = rb.order_id LEFT JOIN ecw_order eo ON eo.order_id = rb.order_id
LEFT JOIN ecw_receipt_account era ON era.receipt_id = eri.receipt_id WHERE eri.status = 1 AND eri.account_id IS NOT NULL
WHERE eri.status = 1
<include refid="incomePageCondition"/> <include refid="incomePageCondition"/>
GROUP BY eri.id) AS t GROUP BY eri.id) AS t
GROUP BY t.currency_id GROUP BY t.currency_id
......
...@@ -108,7 +108,8 @@ ...@@ -108,7 +108,8 @@
SELECT SELECT
erwor.receivable_id, erwor.receivable_id,
erwor.income_belong, erwor.income_belong,
SUM(erwor.receivable_write_off_amount) AS write_off_amount IFNULL(SUM(erwor.receivable_write_off_amount), 0) AS write_off_amount,
IFNULL(SUM(erwor.write_off_amount), 0) AS write_off_base_amount
FROM ecw_receivable_write_off_record erwor FROM ecw_receivable_write_off_record erwor
LEFT JOIN ecw_receipt_item eri ON erwor.receipt_item_id = eri.id LEFT JOIN ecw_receipt_item eri ON erwor.receipt_item_id = eri.id
WHERE WHERE
......
...@@ -55,16 +55,19 @@ ...@@ -55,16 +55,19 @@
</select> </select>
<select id="countReceiptBackPage" resultType="java.lang.Integer"> <select id="countReceiptBackPage" resultType="java.lang.Integer">
SELECT count(1) SELECT count(1)
FROM (
SELECT er.id
FROM ecw_receipt er FROM ecw_receipt er
<if test="query.numberNo != null and query.numberNo != ''"> <if test="query.numberNo != null and query.numberNo != ''">
INNER JOIN (SELECT receipt_id,order_id FROM ecw_receivable GROUP BY receipt_id, order_id ) AS rb ON rb.receipt_id = er.id INNER JOIN (SELECT receipt_id,order_id FROM ecw_receivable GROUP BY receipt_id, order_id ) AS rb ON
rb.receipt_id = er.id
LEFT JOIN ecw_order o ON o.order_id=rb.order_id AND o.deleted=0 LEFT JOIN ecw_order o ON o.order_id=rb.order_id AND o.deleted=0
</if> </if>
WHERE er.deleted = 0 WHERE er.deleted = 0
<include refid="pageCondition"/> <include refid="pageCondition"/>
<if test="query.numberNo != null and query.numberNo != ''"> <if test="query.numberNo != null and query.numberNo != ''">
GROUP BY er.receipt_no GROUP BY er.receipt_no
</if> </if>) AS t
</select> </select>
<select id="getReceiptItemPayat" resultType="java.util.Date"> <select id="getReceiptItemPayat" resultType="java.util.Date">
SELECT eri.amount_date SELECT eri.amount_date
......
...@@ -453,18 +453,17 @@ ...@@ -453,18 +453,17 @@
eb.id, eb.id,
eb.self_no, eb.self_no,
eb.dg_date, eb.dg_date,
eb.qg_date,
eb.orderCount, eb.orderCount,
eb.ladingCount, eb.ladingCount,
eb.dest_country_id, eb.dest_country_id,
ebs.sl_settled_time, ebs.sl_settled_time,
ebcn.ul_warehouse_time ebc.cl_clear_time qg_date,
ebcu.ul_warehouse_time
FROM ( FROM (
SELECT SELECT
box.id id, box.id id,
box.self_no self_no, box.self_no self_no,
box.dg_date dg_date, box.dg_date dg_date,
box.qg_date qg_date,
box.dest_country_id dest_country_id, box.dest_country_id dest_country_id,
box.start_warehouse_id start_warehouse_id, box.start_warehouse_id start_warehouse_id,
box.dest_warehouse_id dest_warehouse_id, box.dest_warehouse_id dest_warehouse_id,
...@@ -481,42 +480,55 @@ ...@@ -481,42 +480,55 @@
<if test="query.beginDaogangTime != null and query.endDaogangTime != null"> <if test="query.beginDaogangTime != null and query.endDaogangTime != null">
AND box.dg_date BETWEEN #{query.beginDaogangTime} AND #{query.endDaogangTime} AND box.dg_date BETWEEN #{query.beginDaogangTime} AND #{query.endDaogangTime}
</if> </if>
<if test="query.beginQingguanTime != null and query.endQingguanTime != null">
AND box.qg_date BETWEEN #{query.beginQingguanTime} AND #{query.endQingguanTime}
</if>
<if test="query.selfNo != null and query.selfNo != '' "> <if test="query.selfNo != null and query.selfNo != '' ">
AND box.self_no LIKE concat('%',#{query.selfNo},'%') AND box.self_no LIKE concat('%',#{query.selfNo},'%')
</if> </if>
<if test="query.selfNoList != null and query.selfNoList.size() > 0">
AND box.self_no IN
<foreach collection="query.selfNoList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="query.startWarehouseIdList != null and query.startWarehouseIdList.size() > 0"> <if test="query.startWarehouseIdList != null and query.startWarehouseIdList.size() > 0">
AND box.start_warehouse_id IN AND box.start_warehouse_id IN
<foreach collection="query.startWarehouseIdList" item="item" open="(" separator="," close=")"> <foreach collection="query.startWarehouseIdList" item="item" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="query.destCountryId != null and query.destCountryId.size() > 0">
AND box.dest_country_id IN
<foreach collection="query.destCountryId" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="query.destWarehouseIdList != null and query.destWarehouseIdList.size() > 0"> <if test="query.destWarehouseIdList != null and query.destWarehouseIdList.size() > 0">
AND box.dest_warehouse_id IN AND box.dest_warehouse_id IN
<foreach collection="query.destWarehouseIdList" item="item" open="(" separator="," close=")"> <foreach collection="query.destWarehouseIdList" item="item" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
</if> </if>
<if test="query.boxStatus != null"> <if test="query.boxStatus != null and query.boxStatus.size() > 0">
AND box.shipment_status = #{query.boxStatus} AND box.shipment_status IN
<foreach collection="query.boxStatus" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if> </if>
<if test="query.slStatus != null"> <if test="query.slStatus != null">
AND box.sl_status = #{query.slStatus} AND box.sl_status = #{query.slStatus}
</if> </if>
) eb ) eb
LEFT JOIN ecw_box_cabinet_unload ebcn ON eb.id = ebcn.shipment_id LEFT JOIN ecw_box_cabinet_unload ebcu ON eb.id = ebcu.shipment_id
LEFT JOIN ecw_box_settlement ebs ON eb.id = ebs.shipment_id LEFT JOIN ecw_box_settlement ebs ON eb.id = ebs.shipment_id
<if test="query.beginUlWarehouseTime != null and query.endUlWarehouseTime != null"> LEFT JOIN ecw_box_clearance ebc ON eb.id = ebc.shipment_id
LEFT JOIN ecw_box_clearance ebc ON eb.id = ebc.shipment_id
</if>
WHERE 1 = 1 WHERE 1 = 1
<if test="query.beginJsDate != null and query.endJsDate != null"> <if test="query.beginJsDate != null and query.endJsDate != null">
AND ebs.sl_settled_time BETWEEN #{query.beginJsDate} AND #{query.endJsDate} AND ebs.sl_settled_time BETWEEN #{query.beginJsDate} AND #{query.endJsDate}
</if> </if>
<if test="query.beginQingguanTime != null and query.endQingguanTime != null">
AND ebc.cl_clear_time BETWEEN #{query.beginQingguanTime} AND #{query.endQingguanTime}
</if>
<if test="query.beginUlWarehouseTime != null and query.endUlWarehouseTime != null"> <if test="query.beginUlWarehouseTime != null and query.endUlWarehouseTime != null">
AND ebc.cl_clear_time BETWEEN #{query.beginUlWarehouseTime} AND #{query.endUlWarehouseTime} AND ebcu.ul_warehouse_time BETWEEN #{query.beginUlWarehouseTime} AND #{query.endUlWarehouseTime}
</if> </if>
<if test="query.ladingBillStatus != null"> <if test="query.ladingBillStatus != null">
<if test="query.ladingBillStatus == 0"> <if test="query.ladingBillStatus == 0">
...@@ -570,4 +582,11 @@ ...@@ -570,4 +582,11 @@
<select id="getAllBoxId" resultType="java.lang.Long"> <select id="getAllBoxId" resultType="java.lang.Long">
SELECT id FROM ecw_box WHERE deleted = 0 AND pr_status &gt; 21 AND dest_country_id > 0 SELECT id FROM ecw_box WHERE deleted = 0 AND pr_status &gt; 21 AND dest_country_id > 0
</select> </select>
<select id="getDestWarehouseIdListByDestCity" resultType="java.lang.Long">
SELECT id FROM ecw_warehouse WHERE deleted = 0
AND shi IN
<foreach collection="destCity" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper> </mapper>
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