fix: 付款申请同步组织编码与币种改为取自关联合同并调整默认推送配置

This commit is contained in:
刘泉佳
2026-09-16 17:27:59 +08:00
parent 53b15e6093
commit 345d8ebe38
6 changed files with 60 additions and 48 deletions
@@ -31,7 +31,9 @@ import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.cache.DictBizCache;
import org.springblade.system.cache.SysCache;
import org.springblade.system.pojo.entity.DictBiz;
import org.springblade.system.pojo.entity.Dept;
import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveDTO;
import org.springblade.thirdparty.bfi.pojo.dto.BfiPayApplySaveEntryDTO;
import org.springblade.thirdparty.bfi.pojo.vo.BfiBillSaveResultItemVO;
@@ -122,17 +124,13 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
private final TemporaryCreditLimitMapper temporaryCreditLimitMapper;
private final IFormalSettlementService formalSettlementService;
private final IBfiService bfiService;
@Value("${thirdParty.bfi.payApply.srcSys:TMS}")
@Value("${thirdParty.bfi.payApply.srcSys:WLTMS}")
private String bfiPayApplySrcSys;
@Value("${thirdParty.bfi.payApply.billtype:ap_payapply_BT_S}")
@Value("${thirdParty.bfi.payApply.billtype:ap_payapply_oth_BT_S}")
private String bfiPayApplyBilltype;
@Value("${thirdParty.bfi.payApply.orgNumber:}")
private String bfiPayApplyOrgNumber;
@Value("${thirdParty.bfi.payApply.currency:CNY}")
private String bfiPayApplyCurrency;
@Value("${thirdParty.bfi.payApply.exratetable:01}")
private String bfiPayApplyExratetable;
@Value("${thirdParty.bfi.payApply.srcType:TMS付款申请}")
@Value("${thirdParty.bfi.payApply.srcType:0KzXs}")
private String bfiPayApplySrcType;
@Override
@@ -378,21 +376,23 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
* @return 金蝶付款申请单id
*/
private String pushBfiPayApply(PaymentApplication entity) {
if (Func.isBlank(bfiPayApplyOrgNumber)) throw new ServiceException("推送金蝶付款申请失败,请配置thirdParty.bfi.payApply.orgNumber");
ContractManage contract = requireContract(entity);
String orgNumber = bfiOrgNumber(contract);
String currency = bfiCurrency(contract);
String applyDateText = (entity.getApplyDate() == null ? LocalDate.now() : entity.getApplyDate()).format(DateTimeFormatter.BASIC_ISO_DATE);
BigDecimal applyAmount = money(entity.getAppliedAmount()).setScale(2, RoundingMode.HALF_UP);
BfiPayApplySaveDTO param = new BfiPayApplySaveDTO();
param.setAwrpSrcCode(entity.getPaymentNo());
param.setAwrpSrcSys(bfiPayApplySrcSys);
param.setSettleorgNumber(bfiPayApplyOrgNumber);
param.setSettleorgNumber(orgNumber);
param.setBilltypeNumber(bfiPayApplyBilltype);
param.setApplydate(applyDateText);
param.setApplyorgNumber(bfiPayApplyOrgNumber);
param.setPayorgNumber(bfiPayApplyOrgNumber);
param.setPurorgNumber(bfiPayApplyOrgNumber);
param.setApplyorgNumber(orgNumber);
param.setPayorgNumber(orgNumber);
// param.setPurorgNumber(orgNumber);
param.setApplycause(bfiApplyCause(entity.getPaymentType()));
param.setPaycurrencyNumber(bfiPayApplyCurrency);
param.setSettlecurrencyNumber(bfiPayApplyCurrency);
param.setPaycurrencyNumber(currency);
param.setSettlecurrencyNumber(currency);
param.setAwrpSrcType(bfiPayApplySrcType);
param.setExratetableNumber(bfiPayApplyExratetable);
param.setExratedate(applyDateText);
@@ -431,6 +431,25 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
updateById(entity);
}
private ContractManage requireContract(PaymentApplication entity) {
if (entity.getContractId() == null) throw new ServiceException("推送金蝶付款申请失败,付款申请未关联合同");
ContractManage contract = contractManageMapper.selectById(entity.getContractId());
if (contract == null || Objects.equals(contract.getIsDeleted(), 1)) throw new ServiceException("推送金蝶付款申请失败,关联合同不存在");
return contract;
}
private String bfiOrgNumber(ContractManage contract) {
Dept dept = contract.getOrganizationId() == null ? null : SysCache.getDept(contract.getOrganizationId());
String orgNumber = dept == null || Func.isBlank(dept.getDeptCode()) ? contract.getOrganizationName() : dept.getDeptCode();
if (Func.isBlank(orgNumber)) throw new ServiceException("推送金蝶付款申请失败,合同所属组织编码不能为空");
return orgNumber;
}
private String bfiCurrency(ContractManage contract) {
if (Func.isBlank(contract.getSettlementCurrency())) throw new ServiceException("推送金蝶付款申请失败,合同结算币种不能为空");
return contract.getSettlementCurrency();
}
private String bfiApplyCause(String paymentType) {
return switch (paymentType == null ? "" : paymentType) {
case "project_advance" -> "项目预付款申请";