Commit 545558ed authored by 332784038@qq.com's avatar 332784038@qq.com

收款明细补充新的汇率业务值

parent 56341372
...@@ -109,8 +109,55 @@ ALTER TABLE `ecw_receipt_account` ADD COLUMN `source_currency_code` varchar(255) ...@@ -109,8 +109,55 @@ ALTER TABLE `ecw_receipt_account` ADD COLUMN `source_currency_code` varchar(255)
ALTER TABLE `ecw_receipt_account` ADD COLUMN `target_amount` DECIMAL(14, 4) DEFAULT NULL COMMENT '支付币种基准金额' AFTER `source_currency_code`; ALTER TABLE `ecw_receipt_account` ADD COLUMN `target_amount` DECIMAL(14, 4) DEFAULT NULL COMMENT '支付币种基准金额' AFTER `source_currency_code`;
ALTER TABLE `ecw_receipt_account` ADD COLUMN `target_currency_code` varchar(255) DEFAULT NULL COMMENT '支付币种代码' AFTER `target_amount`; ALTER TABLE `ecw_receipt_account` ADD COLUMN `target_currency_code` varchar(255) DEFAULT NULL COMMENT '支付币种代码' AFTER `target_amount`;
update `ecw_receipt_account` r left join `ecw_currency_rate` r1 on r.currency_id = r1.source_id and r.collection_currency_id = r1.target_id UPDATE `ecw_receipt_account` r left join (SELECT
set r.source_amount = r1.source_amount, r.`source_currency_code` = r1.target_currency_code, r.target_amount = r1.target_amount, r.`target_currency_code` = r1.target_currency_code; ra.id,
r1.source_amount,
update `ecw_receipt_account` r left join `ecw_currency` c1 on r.currency_id = c1.id r1.source_currency_code,
set r.source_amount = 1, r.`source_currency_code` = c1.fuhao, r.target_amount = 1, r.`target_currency_code` = c1.fuhao where r.currency_id = r.collection_currency_id; r1.target_amount,
r1.target_currency_code
FROM`ecw_receipt_account` as ra
left JOIN (SELECT rb.base_currency_id as base_currency_id, rb.receipt_id as receipt_id FROM `ecw_receivable` rb WHERE rb.receipt_id is not null GROUP BY rb.base_currency_id,rb.receipt_id) as rc
on rc.receipt_id = ra.receipt_id
JOIN `ecw_currency_rate` r1
ON ra.currency_id = r1.source_id
AND rc.base_currency_id = r1.target_id) rs on rs.id = r.id
SET
r.source_amount = rs.source_amount,
r.source_currency_code = rs.source_currency_code,
r.target_amount = rs.target_amount,
r.target_currency_code = rs.target_currency_code;
UPDATE `ecw_receipt_account` r left join (SELECT
ra.id
FROM `ecw_receipt_account` as ra
left JOIN (SELECT rb.base_currency_id as base_currency_id, rb.receipt_id as receipt_id FROM `ecw_receivable` rb WHERE rb.receipt_id is not null GROUP BY rb.base_currency_id,rb.receipt_id) as rc
on rc.receipt_id = ra.receipt_id
where ra.currency_id = rc.base_currency_id
) rs
on rs.id = r.id
left join `ecw_currency` c1 on r.currency_id = c1.id
set r.source_amount = 1, r.`source_currency_code` = c1.fuhao, r.target_amount = 1, r.`target_currency_code` = c1.fuhao;
ALTER TABLE `ecw_receipt_item` ADD COLUMN `source_amount` DECIMAL(14, 4) DEFAULT NULL COMMENT '原币种基准金额' AFTER `rate`;
ALTER TABLE `ecw_receipt_item` ADD COLUMN `source_currency_code` varchar(255) DEFAULT NULL COMMENT '原币种代码' AFTER `source_amount`;
ALTER TABLE `ecw_receipt_item` ADD COLUMN `target_amount` DECIMAL(14, 4) DEFAULT NULL COMMENT '支付币种基准金额' AFTER `source_currency_code`;
ALTER TABLE `ecw_receipt_item` ADD COLUMN `target_currency_code` varchar(255) DEFAULT NULL COMMENT '支付币种代码' AFTER `target_amount`;
update `ecw_receipt_item` ri
left JOIN (
SELECT ra.currency_id as currency_id,
ra.receipt_id as receipt_id,
ra.source_amount as source_amount,
ra.source_currency_code as source_currency_code,
ra.target_amount as target_amount,
ra.target_currency_code as target_currency_code
FROM `ecw_receipt_account` ra
WHERE ra.receipt_id is not null
GROUP BY ra.currency_id, ra.receipt_id
) as rc on ri.currency_id = rc.currency_id and ri.receipt_id = rc.receipt_id
set ri.source_amount = rc.source_amount,
ri.source_currency_code = rc.source_currency_code,
ri.target_amount = rc.target_amount,
ri.target_currency_code = rc.target_currency_code;
package cn.iocoder.yudao.module.wealth.dal.dataobject.receiptItem; package cn.iocoder.yudao.module.wealth.dal.dataobject.receiptItem;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
...@@ -70,6 +73,18 @@ public class ReceiptItemDO extends BaseDO { ...@@ -70,6 +73,18 @@ public class ReceiptItemDO extends BaseDO {
* 收款汇率 * 收款汇率
*/ */
private String rate; private String rate;
@ApiModelProperty(value = "原币种基础汇率金额")
private BigDecimal sourceAmount;
@ApiModelProperty(value = "原币种代码")
private String sourceCurrencyCode;
@ApiModelProperty(value = "支付币种基础汇率金额")
private BigDecimal targetAmount;
@ApiModelProperty(value = "支付币种代码")
private String targetCurrencyCode;
/** /**
* 实收日期 * 实收日期
*/ */
......
...@@ -151,23 +151,31 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -151,23 +151,31 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
} }
// 改汇率后剩余未核销基准金额 // 改汇率后剩余未核销基准金额
BigDecimal remainBaseAmount = receivableDO.getBaseAmount().subtract(writeOffAmount); BigDecimal remainBaseAmount = receivableDO.getBaseAmount().subtract(writeOffAmount);
remainBaseAmount = remainBaseAmount.divide(receivableDO.getExchangeRate(), 8, RoundingMode.HALF_UP).multiply(new BigDecimal(createReqVO.getRate())); remainBaseAmount = (remainBaseAmount.multiply(receivableDO.getSourceAmount()).divide(receivableDO.getTargetAmount(), 8, RoundingMode.HALF_UP))
.multiply(createReqVO.getTargetAmount()).divide(createReqVO.getTargetAmount(), 2, RoundingMode.HALF_UP);
receivableDO.setBaseAmount(remainBaseAmount.add(writeOffAmount)); receivableDO.setBaseAmount(remainBaseAmount.add(writeOffAmount));
receiptAccountAmount = receiptAccountAmount.add(receivableDO.getBaseAmount()); receiptAccountAmount = receiptAccountAmount.add(receivableDO.getBaseAmount());
receivableDO.setExchangeRate(new BigDecimal(createReqVO.getRate())); receivableDO.setExchangeRate(new BigDecimal(createReqVO.getRate()));
receivableDO.setSourceAmount(createReqVO.getSourceAmount());
receivableDO.setSourceCurrencyCode(createReqVO.getSourceCurrencyCode());
receivableDO.setTargetAmount(createReqVO.getTargetAmount());
receivableDO.setTargetCurrencyCode(createReqVO.getTargetCurrencyCode());
receivableService.updateById(receivableDO); receivableService.updateById(receivableDO);
} }
receivableTotalAmount = receivableTotalAmount.add(receivableDO.getBaseAmount()); receivableTotalAmount = receivableTotalAmount.add(receivableDO.getBaseAmount());
} }
Map<Integer, CurrencyRespDTO> allCurrency = currencyApi.getAllCurrency();
CurrencyRespDTO currency1 = allCurrency.get(receiptAccountDO.getCurrencyId().intValue());
CurrencyRespDTO currency2 = allCurrency.get(baseCurrencyId.intValue());
receiptAccountDO.setWriteOffRate(new BigDecimal(createReqVO.getRate())); receiptAccountDO.setWriteOffRate(new BigDecimal(createReqVO.getRate()));
receiptAccountDO.setSourceAmount(createReqVO.getSourceAmount());
receiptAccountDO.setSourceCurrencyCode(StringUtils.isBlank(createReqVO.getSourceCurrencyCode()) && Objects.nonNull(currency1)? currency1.getFuhao():createReqVO.getSourceCurrencyCode());
receiptAccountDO.setTargetAmount(createReqVO.getTargetAmount());
receiptAccountDO.setTargetCurrencyCode(StringUtils.isBlank(createReqVO.getTargetCurrencyCode()) && Objects.nonNull(currency2)? currency2.getFuhao():createReqVO.getTargetCurrencyCode());
receiptAccountDO.setWriteOffAmount(receiptAccountAmount); receiptAccountDO.setWriteOffAmount(receiptAccountAmount);
receiptAccountMapper.updateById(receiptAccountDO); receiptAccountMapper.updateById(receiptAccountDO);
receiptDO.setReceivableTotalAmount(receivableTotalAmount); receiptDO.setReceivableTotalAmount(receivableTotalAmount);
receiptService.updateById(receiptDO); 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(); remark = remark + ";更新收款单" + currency1.getTitleZh() + "兑" + currency2.getTitleZh() + "币种汇率为" + createReqVO.getBatchRate();
} }
} }
...@@ -573,7 +581,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -573,7 +581,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receivableDO.setState(1); receivableDO.setState(1);
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().multiply(receivableDO.getSourceAmount()).divide(receivableDO.getTargetAmount(), 4, RoundingMode.HALF_UP);
BigDecimal oldWriteOffAmount = receivableDO.getWriteOffAmount() == null ? BigDecimal.ZERO : receivableDO.getWriteOffAmount(); BigDecimal oldWriteOffAmount = receivableDO.getWriteOffAmount() == null ? BigDecimal.ZERO : receivableDO.getWriteOffAmount();
receivableDO.setWriteOffAmount(oldWriteOffAmount.add(writeOffCurrent)); receivableDO.setWriteOffAmount(oldWriteOffAmount.add(writeOffCurrent));
} }
...@@ -938,12 +946,22 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -938,12 +946,22 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
if (receiptAccountDOS.isEmpty() || !baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) { if (receiptAccountDOS.isEmpty() || !baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) {
return new ReceiptItemBatchRespVO(batchCreateReqVO.getOrderNo(), batchCreateReqVO.getPayer(), 0, "汇率为空且收款单账单无匹配汇率"); return new ReceiptItemBatchRespVO(batchCreateReqVO.getOrderNo(), batchCreateReqVO.getPayer(), 0, "汇率为空且收款单账单无匹配汇率");
} }
batchCreateReqVO.setSettleRateRatio(receiptAccountDOS.get(0).getWriteOffRate()); ReceiptAccountDO receiptAccountDO = receiptAccountDOS.get(0);
batchCreateReqVO.setSettleRateRatio(receiptAccountDO.getWriteOffRate());
batchCreateReqVO.setSourceAmount(receiptAccountDO.getSourceAmount());
batchCreateReqVO.setSourceCurrencyCode(receiptAccountDO.getSourceCurrencyCode());
batchCreateReqVO.setTargetAmount(receiptAccountDO.getTargetAmount());
batchCreateReqVO.setTargetCurrencyCode(receiptAccountDO.getTargetCurrencyCode());
} }
// 没有汇率有效期或者汇率没过期且能匹配到还是用原汇率 // 没有汇率有效期或者汇率没过期且能匹配到还是用原汇率
else if (matchReceiptDO.getRateValidateDate() == null || matchReceiptDO.getRateValidateDate().getTime() > System.currentTimeMillis()) { else if (matchReceiptDO.getRateValidateDate() == null || matchReceiptDO.getRateValidateDate().getTime() > System.currentTimeMillis()) {
if (!receiptAccountDOS.isEmpty() && baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) { if (!receiptAccountDOS.isEmpty() && baseCurrencyId.equals(Long.parseLong(batchCreateReqVO.getSettleCurrency()))) {
batchCreateReqVO.setSettleRateRatio(receiptAccountDOS.get(0).getWriteOffRate()); ReceiptAccountDO receiptAccountDO = receiptAccountDOS.get(0);
batchCreateReqVO.setSettleRateRatio(receiptAccountDO.getWriteOffRate());
batchCreateReqVO.setSourceAmount(receiptAccountDO.getSourceAmount());
batchCreateReqVO.setSourceCurrencyCode(receiptAccountDO.getSourceCurrencyCode());
batchCreateReqVO.setTargetAmount(receiptAccountDO.getTargetAmount());
batchCreateReqVO.setTargetCurrencyCode(receiptAccountDO.getTargetCurrencyCode());
} }
} }
// 查询订单是否存在多条银行收款数据 // 查询订单是否存在多条银行收款数据
...@@ -968,6 +986,10 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -968,6 +986,10 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
receiptItemCreateReqVO.setAmount(new BigDecimal(batchCreateReqVO.getPayAmount())); receiptItemCreateReqVO.setAmount(new BigDecimal(batchCreateReqVO.getPayAmount()));
receiptItemCreateReqVO.setCurrencyId(Long.parseLong(batchCreateReqVO.getPayCurrency())); receiptItemCreateReqVO.setCurrencyId(Long.parseLong(batchCreateReqVO.getPayCurrency()));
receiptItemCreateReqVO.setRate(batchCreateReqVO.getSettleRateRatio().toString()); receiptItemCreateReqVO.setRate(batchCreateReqVO.getSettleRateRatio().toString());
receiptItemCreateReqVO.setSourceAmount(batchCreateReqVO.getSourceAmount());
receiptItemCreateReqVO.setSourceCurrencyCode(batchCreateReqVO.getSourceCurrencyCode());
receiptItemCreateReqVO.setTargetAmount(batchCreateReqVO.getTargetAmount());
receiptItemCreateReqVO.setTargetCurrencyCode(batchCreateReqVO.getTargetCurrencyCode());
receiptItemCreateReqVO.setWriteOffCurrencyId(Long.parseLong(batchCreateReqVO.getSettleCurrency())); receiptItemCreateReqVO.setWriteOffCurrencyId(Long.parseLong(batchCreateReqVO.getSettleCurrency()));
receiptItemCreateReqVO.setWriteOffAmount(receiptItemCreateReqVO.getAmount().multiply(batchCreateReqVO.getSettleRateRatio())); receiptItemCreateReqVO.setWriteOffAmount(receiptItemCreateReqVO.getAmount().multiply(batchCreateReqVO.getSettleRateRatio()));
receiptItemCreateReqVO.setRemark(batchCreateReqVO.getRemark()); receiptItemCreateReqVO.setRemark(batchCreateReqVO.getRemark());
...@@ -1055,6 +1077,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R ...@@ -1055,6 +1077,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
if (rate1.compareTo(BigDecimal.ZERO) <= 0 || rate2.compareTo(BigDecimal.ZERO) <= 0) { if (rate1.compareTo(BigDecimal.ZERO) <= 0 || rate2.compareTo(BigDecimal.ZERO) <= 0) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率数值填写不正确"); return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "汇率数值填写不正确");
} }
// TODO 汇率逻辑修改
createReqVO.setSettleRateRatio(rate2.divide(rate1, 6, RoundingMode.HALF_UP)); createReqVO.setSettleRateRatio(rate2.divide(rate1, 6, RoundingMode.HALF_UP));
} }
for (CurrencyRespDTO value : allCurrency.values()) { for (CurrencyRespDTO value : allCurrency.values()) {
......
...@@ -59,6 +59,22 @@ public class ReceiptItemBatchCreateReqVO { ...@@ -59,6 +59,22 @@ public class ReceiptItemBatchCreateReqVO {
@ExcelIgnore @ExcelIgnore
private BigDecimal settleRateRatio; private BigDecimal settleRateRatio;
@ApiModelProperty(value = "原币种基础汇率金额")
@ExcelIgnore
private BigDecimal sourceAmount;
@ApiModelProperty(value = "原币种代码")
@ExcelIgnore
private String sourceCurrencyCode;
@ApiModelProperty(value = "支付币种基础汇率金额")
@ExcelIgnore
private BigDecimal targetAmount;
@ApiModelProperty(value = "支付币种代码")
@ExcelIgnore
private String targetCurrencyCode;
@ApiModelProperty(value = "水单号") @ApiModelProperty(value = "水单号")
@ExcelProperty("水单号") @ExcelProperty("水单号")
private String waterNo; private String waterNo;
......
package cn.iocoder.yudao.module.wealth.vo.receiptItem; package cn.iocoder.yudao.module.wealth.vo.receiptItem;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
...@@ -50,6 +52,22 @@ public class ReceiptItemBaseVO { ...@@ -50,6 +52,22 @@ public class ReceiptItemBaseVO {
@ApiModelProperty(value = "收款汇率") @ApiModelProperty(value = "收款汇率")
private String rate; private String rate;
@ApiModelProperty(value = "原币种基础汇率金额")
@ExcelIgnore
private BigDecimal sourceAmount;
@ApiModelProperty(value = "原币种代码")
@ExcelIgnore
private String sourceCurrencyCode;
@ApiModelProperty(value = "支付币种基础汇率金额")
@ExcelIgnore
private BigDecimal targetAmount;
@ApiModelProperty(value = "支付币种代码")
@ExcelIgnore
private String targetCurrencyCode;
@ApiModelProperty(value = "实收日期") @ApiModelProperty(value = "实收日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
......
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