Commit 0626c669 authored by zhangfeng's avatar zhangfeng

feat(wealth): 优化

parent d83ca425
......@@ -88,6 +88,7 @@ import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.framework.ue.UeProperties;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptDO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receivable.ReceivableDO;
import cn.iocoder.yudao.module.wealth.dal.mysql.receivable.ReceivableMapper;
import cn.iocoder.yudao.module.wealth.service.receipt.ReceiptService;
import cn.iocoder.yudao.module.wealth.service.receivable.ReceivableService;
import cn.iocoder.yudao.module.wealth.vo.receivable.ReceivableBackVO;
......@@ -168,6 +169,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
private final CustomerContactsService customerContactsService;
private final OrderExceptionService orderExceptionService;
private final ReceivableMapper receivableMapper;
private UeProperties ueProperties;
......@@ -3866,6 +3868,9 @@ public class OrderQueryServiceImpl implements OrderQueryService {
if (query.getIsPaoCargo() != null && query.getIsPaoCargo() == 1) {
orderType.add(3);
}
if (CollectionUtil.isNotEmpty(query.getDestCityIds()) && CollectionUtil.isEmpty(query.getDestWarehouseIds())) {
query.setDestWarehouseIds(receivableMapper.getDestWarehouseIdListByDestCity(query.getDestCityIds()));
}
query.setOrderType(orderType);
log.warn(I18nMessage.getLang().toString());
List<OrderBackPageVO> records = orderMapper.containerOrderSummaryList(query);
......
......@@ -7633,6 +7633,7 @@
LEFT JOIN ecw_make_bill_of_lading bl on bl.order_id = o.order_id and bl.deleted = 0
LEFT JOIN ecw_customer norc on norc.id = nor.customer_id
LEFT JOIN ecw_customer neeo on neeo.id = nee.customer_id
LEFT JOIN ecw_order_objective ob on ob.order_id = o.order_id and ob.deleted = 0
WHERE o.`container_number` = #{query.containerNumber}
<include refid="containerOrderSummaryQuery"/>
</select>
......
......@@ -103,4 +103,6 @@ public interface ReceiptItemMapper extends AbstractMapper<ReceiptItemDO> {
List<CurrencyAmount> countTotalWriteOffAmount();
List<ReceivableIncomeBelong> selectAllWriteOffItemByOrders(@Param("orderIds") Set<Long> orderIds);
BigDecimal getWriteOffAmountReceivableId(Long id);
}
......@@ -77,7 +77,6 @@ import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
import static cn.iocoder.yudao.module.wealth.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.wealth.enums.ReceiptItemStatusEnum.*;
/**
* 收款单 Service 实现类
......@@ -698,7 +697,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
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 && (i.getStatus() == 1 || i.getStatus() == 3)).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) return sR;
//根据币种分组求和
......
......@@ -96,7 +96,7 @@ public interface ReceiptItemService extends IService<ReceiptItemDO> {
*
* @param financeReceiptItemVo
*/
ReceiptApprovalDO createFinanceReceiptItemWriteOff(FinanceReceiptItemVo financeReceiptItemVo);
void createFinanceReceiptItemWriteOff(FinanceReceiptItemVo financeReceiptItemVo);
/**
* 发起收款明细反核销
......
......@@ -11,16 +11,13 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.bpm.api.BpmCreateServiceFactory;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.enums.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.enums.WorkFlowEmus;
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.currency.CurrencyApi;
import cn.iocoder.yudao.module.ecw.api.currency.dto.CurrencyRespDTO;
import cn.iocoder.yudao.module.ecw.api.currency.dto.ExchangeRateRespDTO;
import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.wealth.convert.receiptItem.ReceiptItemConvert;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptBankWriteoffRangeDO;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receipt.ReceiptDO;
......@@ -109,10 +106,6 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
private ReceiptBankWriteoffRangeMapper receiptBankWriteoffRangeMapper;
@Resource
private ReceiptAccountMapper receiptAccountMapper;
@Resource
private BpmProcessInstanceApi bpmProcessInstanceApi;
@Resource
private AdminUserApi adminUserApi;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -122,12 +115,6 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
ReceiptItemDO receiptItem = ReceiptItemConvert.INSTANCE.convert(createReqVO);
receiptItem.setSerialNumber(wealthGenCodeUtils.generateReceiptItemCode());
receiptItemMapper.insert(receiptItem);
// 生成应收明细核销记录
BankAccountDTO account = bankApi.getBankAccountByAccountId(receiptItem.getAccountId());
Integer incomeBelong = account.getBaIncomeBelong();
for (ReceivableWriteOffReqVO receivableWriteOffReqVO : createReqVO.getReceivableWriteOffList()) {
receivableService.createWriteOffRecord(receivableWriteOffReqVO, receiptItem, incomeBelong);
}
// 创建收款明细的时候要判断收款单状态进行更新
if (receiptDO.getState() == 1) {
ReceiptDO update = new ReceiptDO();
......@@ -136,17 +123,66 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
update.setState(2);
receiptService.updateById(update);
}
receiptService.updateReceiptItemStatus(receiptItem.getReceiptId());
if (isBatch) {
String remark = "导入收款明细自动提交审批";
List<ReceiptAccountDO> receiptAccountDOS = receiptAccountMapper.selectList(Wrappers
.lambdaQuery(ReceiptAccountDO.class)
.eq(ReceiptAccountDO::getReceiptId, receiptDO.getId())
.eq(ReceiptAccountDO::getCurrencyId, receiptItem.getCurrencyId()));
if (StringUtils.isNotBlank(createReqVO.getRate()) && receiptDO.getRateValidateDate() != null && receiptDO.getRateValidateDate().before(new Date())) {
// 更新汇率和相关金额
List<ReceivableDO> receivableDOS = receivableService.selectList(Wrappers.lambdaQuery(ReceivableDO.class).eq(ReceivableDO::getReceiptId, receiptDO.getId()));
Long baseCurrencyId = receivableDOS.get(0).getBaseCurrencyId();
if (CollectionUtils.isNotEmpty(receiptAccountDOS) && baseCurrencyId.equals(receiptItem.getWriteOffCurrencyId())) {
ReceiptAccountDO receiptAccountDO = receiptAccountDOS.get(0);
if (receiptAccountDO.getWriteOffAmount().compareTo(new BigDecimal(createReqVO.getRate())) != 0) {
BigDecimal receivableTotalAmount = BigDecimal.ZERO;
BigDecimal receiptAccountAmount = BigDecimal.ZERO;
for (ReceivableDO receivableDO : receivableDOS) {
if (Objects.equals(receivableDO.getCurrencyId(), createReqVO.getCurrencyId()) && Objects.equals(receivableDO.getBaseCurrencyId(), createReqVO.getWriteOffCurrencyId())) {
// 获取已核销的基准金额
BigDecimal writeOffAmount = receiptItemMapper.getWriteOffAmountReceivableId(receivableDO.getId());
if (writeOffAmount == null) {
writeOffAmount = BigDecimal.ZERO;
}
// 改汇率后剩余未核销基准金额
BigDecimal remainBaseAmount = receivableDO.getBaseAmount().subtract(writeOffAmount);
remainBaseAmount = remainBaseAmount.divide(receivableDO.getExchangeRate(), 8, RoundingMode.HALF_UP).multiply(new BigDecimal(createReqVO.getRate()));
receivableDO.setBaseAmount(remainBaseAmount.add(writeOffAmount));
receiptAccountAmount = receiptAccountAmount.add(receivableDO.getBaseAmount());
receivableDO.setExchangeRate(new BigDecimal(createReqVO.getRate()));
receivableService.updateById(receivableDO);
}
receivableTotalAmount = receivableTotalAmount.add(receivableDO.getBaseAmount());
}
receiptAccountDO.setWriteOffRate(new BigDecimal(createReqVO.getRate()));
receiptAccountDO.setWriteOffAmount(receiptAccountAmount);
receiptAccountMapper.updateById(receiptAccountDO);
receiptDO.setReceivableTotalAmount(receivableTotalAmount);
receiptService.updateById(receiptDO);
Map<Integer, CurrencyRespDTO> allCurrency = currencyApi.getAllCurrency();
CurrencyRespDTO currency1 = allCurrency.get(receiptAccountDO.getCurrencyId().intValue());
CurrencyRespDTO currency2 = allCurrency.get(baseCurrencyId.intValue());
remark = remark + ";更新收款单" + currency1.getTitleZh() + "兑" + currency2.getTitleZh() + "币种汇率为" + createReqVO.getBatchRate();
}
}
}
createFinanceReceiptItemWriteOff(FinanceReceiptItemVo.builder()
.receiptId(receiptItem.getReceiptId())
.receiptNo(receiptDO.getReceiptNo())
.receiptItemId(receiptItem.getId())
.remark("批量创建收款明细自动提交审批")
.remark(remark)
.build());
// TODO 更新汇率
}
// 返回
// 生成应收明细核销记录
BankAccountDTO account = bankApi.getBankAccountByAccountId(receiptItem.getAccountId());
Integer incomeBelong = account.getBaIncomeBelong();
for (ReceivableWriteOffReqVO receivableWriteOffReqVO : createReqVO.getReceivableWriteOffList()) {
receivableService.createWriteOffRecord(receivableWriteOffReqVO, receiptItem, incomeBelong);
}
receiptService.updateReceiptItemStatus(receiptItem.getReceiptId());
return receiptItem.getId();
}
......@@ -248,7 +284,6 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
}
@Override
@Transactional(rollbackFor = Exception.class)
public void verification(Long id, Integer bpmResult, String comment) {
//收款单明细核销审核
ReceiptItemDO receiptItemDO = receiptItemMapper.selectById(id);
......@@ -286,7 +321,6 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
}
}
receivableService.updateBatchById(receivableDOS);
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
// 更新银行账户余额
bankApi.updateBankAccountBalance(BankAccountDTO.builder()
.id(receiptItemDO.getAccountId())
......@@ -304,6 +338,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receiptItemDO.setStatus(ReceiptItemStatusEnum.DRAFT.getValue());
}
receiptItemMapper.updateById(receiptItemDO);
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
receiptService.recordLog(receiptItemDO.getReceiptId(), ReceiptLinkEnum.APPROVE_BANK_RECEIPT, comment, WorkFlowEmus.FINANCE_RECEIPT_ITEM_WRITE_OFF.getValue());
}
......@@ -487,7 +522,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
}
@Override
public ReceiptApprovalDO createFinanceReceiptItemWriteOff(FinanceReceiptItemVo financeReceiptItemVo) {
public void createFinanceReceiptItemWriteOff(FinanceReceiptItemVo financeReceiptItemVo) {
ReceiptItemDO receiptItemDO = this.getById(financeReceiptItemVo.getReceiptItemId());
if (null == receiptItemDO) {
throw exception(RECEIPT_ITEM_NOT_FOUND);
......@@ -560,10 +595,8 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receiptItemDO.setStatus(ReceiptItemStatusEnum.WRITE_OFF_APPROVE_ING.getValue());
receiptItemDO.setBmpId(bpmId);
this.updateById(receiptItemDO);
return approvalDO;
}
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
return null;
}
/**
......@@ -653,6 +686,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
update.setStatus(ReceiptItemStatusEnum.WRITE_OFF_NO_APPROVE_ING.getValue());
update.setBmpId(bpmId);
this.updateById(update);
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
}
@Override
......@@ -668,6 +702,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
Long userId = SecurityFrameworkUtils.getLoginUserId();
ReceiptItemDO receiptItemDO = validateReceiptItemBmpCancel(financeReceiptItemVo.getReceiptItemId());
bpmCreateServiceFactory.cancelBmpById(userId, receiptItemDO.getBmpId(), financeReceiptItemVo.getRemark());
receiptService.updateReceiptItemStatus(receiptItemDO.getReceiptId());
}
private ReceiptItemDO validateReceiptItemBmpCancel(Long id) {
......@@ -891,6 +926,24 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
if (null == matchReceiptDO) {
return new ReceiptItemBatchRespVO(batchCreateReqVO.getOrderNo(), batchCreateReqVO.getPayer(), 0, "收款单不存在");
}
// 校验汇率
List<ReceiptAccountDO> receiptAccountDOS = receiptAccountMapper.selectList(Wrappers
.lambdaQuery(ReceiptAccountDO.class)
.eq(ReceiptAccountDO::getReceiptId, matchReceiptDO.getId())
.eq(ReceiptAccountDO::getCurrencyId, Long.parseLong(batchCreateReqVO.getPayCurrency())));
Long baseCurrencyId = receivableCollect.get(matchReceiptDO.getId()).get(0).getBaseCurrencyId();
if (StringUtils.isBlank(batchCreateReqVO.getSettleRate())) {
if (receiptAccountDOS.isEmpty() || !baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) {
return new ReceiptItemBatchRespVO(batchCreateReqVO.getOrderNo(), batchCreateReqVO.getPayer(), 0, "汇率为空且收款单账单无匹配汇率");
}
batchCreateReqVO.setSettleRateRatio(receiptAccountDOS.get(0).getWriteOffRate());
}
// 没有汇率有效期或者汇率没过期且能匹配到还是用原汇率
else if (matchReceiptDO.getRateValidateDate() == null || matchReceiptDO.getRateValidateDate().getTime() > System.currentTimeMillis()){
if (!receiptAccountDOS.isEmpty() && baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) {
batchCreateReqVO.setSettleRateRatio(receiptAccountDOS.get(0).getWriteOffRate());
}
}
// 查询订单是否存在多条银行收款数据
if (!ignoreItem) {
LambdaQueryWrapper<ReceiptItemDO> queryWrapper = Wrappers.lambdaQuery(ReceiptItemDO.class).in(ReceiptItemDO::getReceiptId, receivableCollect.keySet());
......@@ -911,11 +964,12 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receiptItemCreateReqVO.setAccountBankName(batchCreateReqVO.getAccountBankName());
receiptItemCreateReqVO.setAmount(new BigDecimal(batchCreateReqVO.getPayAmount()));
receiptItemCreateReqVO.setCurrencyId(Long.parseLong(batchCreateReqVO.getPayCurrency()));
receiptItemCreateReqVO.setRate(batchCreateReqVO.getSettleRate());
receiptItemCreateReqVO.setRate(batchCreateReqVO.getSettleRateRatio().toString());
receiptItemCreateReqVO.setWriteOffCurrencyId(Long.parseLong(batchCreateReqVO.getSettleCurrency()));
receiptItemCreateReqVO.setWriteOffAmount(receiptItemCreateReqVO.getAmount().multiply(new BigDecimal(batchCreateReqVO.getSettleRate())));
receiptItemCreateReqVO.setWriteOffAmount(receiptItemCreateReqVO.getAmount().multiply(batchCreateReqVO.getSettleRateRatio()));
receiptItemCreateReqVO.setRemark(batchCreateReqVO.getRemark());
receiptItemCreateReqVO.setOrderNo(orderByNo.getOrderNo());
receiptItemCreateReqVO.setBatchRate(batchCreateReqVO.getSettleRate());
try {
receiptItemCreateReqVO.setAmountDate(DateUtils.parseDate(batchCreateReqVO.getPayDate(), FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
} catch (Exception e) {
......@@ -965,23 +1019,40 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "提交人不能为空");
}
Map<Integer, CurrencyRespDTO> allCurrency = currencyApi.getAllCurrency();
List<String> currencySymbols = allCurrency.values().stream().map(CurrencyRespDTO::getFuhao).collect(Collectors.toList());
if (!currencySymbols.contains(createReqVO.getPayCurrency())) {
List<String> currencyTitles = allCurrency.values().stream().map(CurrencyRespDTO::getTitleEn).collect(Collectors.toList());
if (!currencyTitles.contains(createReqVO.getPayCurrency())) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "实收金额币种不存在");
}
if (!currencySymbols.contains(createReqVO.getSettleCurrency())) {
if (!currencyTitles.contains(createReqVO.getSettleCurrency())) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "结算币种不存在");
}
ExchangeRateRespDTO rate = currencyApi.getCurrencyRateByCode(createReqVO.getPayCurrency(), createReqVO.getSettleCurrency());
if (null == rate) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率不存在");
String settleRate = createReqVO.getSettleRate();
if (StringUtils.isNotBlank(settleRate)) {
if (!settleRate.contains(":")) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率格式不正确");
}
BigDecimal rate1;
BigDecimal rate2;
String[] split = settleRate.split(":");
if (split.length != 2) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率格式不正确");
}
try {
rate1 = new BigDecimal(split[0]);
rate2 = new BigDecimal(split[1]);
} catch (Exception e) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率数值填写不正确");
}
if (rate1.compareTo(BigDecimal.ZERO) <= 0 || rate2.compareTo(BigDecimal.ZERO) <= 0) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率数值填写不正确");
}
createReqVO.setSettleRateRatio(rate2.divide(rate1, 6, RoundingMode.HALF_UP));
}
createReqVO.setSettleRate(rate.getCurrencyRate().toString());
for (CurrencyRespDTO value : allCurrency.values()) {
if (value.getFuhao().equals(createReqVO.getPayCurrency())) {
if (value.getTitleEn().equals(createReqVO.getPayCurrency())) {
createReqVO.setPayCurrency(value.getId().toString());
}
if (value.getFuhao().equals(createReqVO.getSettleCurrency())) {
if (value.getTitleEn().equals(createReqVO.getSettleCurrency())) {
createReqVO.setSettleCurrency(value.getId().toString());
}
}
......@@ -996,9 +1067,10 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
createReqVO.setAccountId(account.getId());
createReqVO.setAccountName(account.getBaAccountName());
createReqVO.setAccountBankName(account.getBaBankName());
//if (account.getBaCurrency() != null && !allCurrency.get(account.getBaCurrency()).getFuhao().equals(createReqVO.getPayCurrency())) {
// return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "收款账号币种与实收金额币种不一致");
//}
Integer baCurrency = account.getBaCurrency();
if (baCurrency != null && !baCurrency.equals(Integer.parseInt(createReqVO.getPayCurrency()))) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "收款账号币种与实收金额币种不一致");
}
return null;
}
}
......@@ -353,16 +353,15 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
receivableBackVO.setWriteOffAmount(BigDecimal.ZERO);
}
receivableBackVO.setNotWriteOffAmount(receivableBackVO.getActualAmount().subtract(receivableBackVO.getWriteOffAmount()));
if (receivableBackVO.getExchangeRate() != null) {
receivableBackVO.setWriteOffAmountUsd(receivableBackVO.getWriteOffAmount().multiply(receivableBackVO.getExchangeRate()));
receivableBackVO.setNotWriteOffAmountUsd(receivableBackVO.getNotWriteOffAmount().multiply(receivableBackVO.getExchangeRate()));
} else {
receivableBackVO.setWriteOffAmountUsd(BigDecimal.ZERO);
receivableBackVO.setNotWriteOffAmountUsd(BigDecimal.ZERO);
BigDecimal baseWriteOffAmount = receiptItemMapper.getWriteOffAmountReceivableId(receivableBackVO.getId());
if (baseWriteOffAmount == null) {
baseWriteOffAmount = BigDecimal.ZERO;
}
receivableBackVO.setWriteOffAmountUsd(baseWriteOffAmount);
if (receivableBackVO.getBaseAmount() == null) {
receivableBackVO.setBaseAmount(BigDecimal.ZERO);
}
receivableBackVO.setNotWriteOffAmountUsd(receivableBackVO.getBaseAmount().subtract(baseWriteOffAmount));
// 核销比例 = 已核销金额 / 实际金额,保留两位小数字符串
if (receivableBackVO.getWriteOffAmount().compareTo(BigDecimal.ZERO) <= 0 || receivableBackVO.getActualAmount().compareTo(BigDecimal.ZERO) <= 0) {
receivableBackVO.setWriteOffProportion("0.00%");
......@@ -978,7 +977,6 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
}
// 判断属于哪种费用 0运费,1 清关费,2 额外费用
Integer feeType = this.getFeeType(boxReceivable.getFeeType());
// TODO 折扣金额计算的成交单价和原价暂时不知道哪拿,先只取优惠金额
BigDecimal discount = boxReceivable.getDiscountTotal() == null ? BigDecimal.ZERO : boxReceivable.getDiscountTotal();
BigDecimal notWrittenOff = Objects.equals(boxReceivable.getWriteOffAmount(), BigDecimal.ZERO) ? currencyAmount.getAmount() : currencyAmount.getAmount().subtract(boxReceivable.getWriteOffAmount());
......
......@@ -10,6 +10,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Builder
@ApiModel("管理后台 - 批量收款信息创建 Request VO")
......@@ -53,6 +55,10 @@ public class ReceiptItemBatchCreateReqVO {
@ExcelProperty("汇率")
private String settleRate;
@ApiModelProperty(value = "汇率比值")
@ExcelIgnore
private BigDecimal settleRateRatio;
@ApiModelProperty(value = "水单号")
@ExcelProperty("水单号")
private String waterNo;
......
......@@ -18,4 +18,6 @@ public class ReceiptItemCreateReqVO extends ReceiptItemBaseVO {
private List<ReceivableWriteOffReqVO> receivableWriteOffList;
@ApiModelProperty(value = "订单号")
private String orderNo;
@ApiModelProperty(value = "批量导入原始汇率")
private String batchRate;
}
......@@ -289,13 +289,13 @@ public class ReceiptItemController {
List<ReceiptItemBatchCreateReqVO> list = Arrays.asList(
ReceiptItemBatchCreateReqVO.builder()
.orderNo("订单号/提单号给其一")
.payer("发货人/收货人")
.payer("填\"发货人\"或\"收货人\"")
.payDate("格式:2024-01-01 11:22:33")
.payAccount("8110901012501586556")
.payAmount("99.99")
.payCurrency("$")
.settleCurrency("")
.settleRate("0.877193")
.payCurrency("RMB")
.settleCurrency("USD")
.settleRate("7.17:1")
.waterNo("非必填")
.submitter("提交人")
.remark("非必填")
......
......@@ -121,4 +121,12 @@
AND eri.status = 1 AND eri.deleted = 0
GROUP BY erwor.receivable_id, erwor.income_belong
</select>
<select id="getWriteOffAmountReceivableId" resultType="java.math.BigDecimal">
SELECT
SUM(erwor.write_off_amount)
FROM ecw_receivable_write_off_record erwor
LEFT JOIN ecw_receipt_item eri ON erwor.receipt_item_id = eri.id
WHERE erwor.receivable_id = #{id}
AND eri.status = 1 AND eri.deleted = 0
</select>
</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