From fb39852c1f7bf2da897c47260870a7260bcce0be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Wed, 25 Feb 2026 16:37:15 +0800
Subject: [PATCH] =?UTF-8?q?BMS=E7=BB=93=E7=AE=97=E4=B8=BB=E4=BD=93?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=9F=A5=E8=AF=A2=E6=98=BE=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/basic/ContractManageMapper.xml | 3 +
.../BillingStatementDomainService.java | 79 ++++++++++++-------
2 files changed, 52 insertions(+), 30 deletions(-)
diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml
index 1f120b45c..a11cc4e59 100644
--- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml
+++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ContractManageMapper.xml
@@ -142,6 +142,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and contract_type = #{contractManageDO.contractType}
+
+ and settlement_customers like concat('%', #{contractManageDO.settlementCustomers}, '%')
+
and settlement_customers_code = #{contractManageDO.settlementCustomersCode}
diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java
index c475a664d..7027efcd1 100644
--- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java
+++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java
@@ -393,41 +393,14 @@ public class BillingStatementDomainService {
*/
private void handleData(BillingStatementDO billingStatementDO) {
//查询合同信息,赋值合同周期信息
+ //优先通过合同编号获取合同信息
if(StringUtils.isNotEmpty(billingStatementDO.getContractNumber())){
AjaxResult ajaxResult = systemServiceFeign.getInfoByCode(billingStatementDO.getContractNumber());
if("200".equals(String.valueOf(ajaxResult.get("code")))){
ContractManagePO contractManagePO = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), ContractManagePO.class);
if(null != contractManagePO){
- //取值合同详情,对比费用科目,取值计费周期
- if(contractManagePO.getContractManageDetailPOList()!=null && contractManagePO.getContractManageDetailPOList().size()>0){
- List contractManageDetailPOList = contractManagePO.getContractManageDetailPOList();
- String subjectCode = !StringUtils.isNotEmpty(billingStatementDO.getSecondSubjectCode()) ? billingStatementDO.getFirstSubjectCode() : billingStatementDO.getSecondSubjectCode();
- Date cycleBeginTime = null;
- Date cycleEndTime = null;
- for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) {
- String subjectCodeContract = !StringUtils.isNotEmpty(contractManageDetailPO.getSecondSubjectCode()) ? contractManageDetailPO.getFirstSubjectCode() : contractManageDetailPO.getSecondSubjectCode();
- if(subjectCodeContract.equals(subjectCode)){
- Date businessDate = billingStatementDO.getBusinessDate();
- //根据不同类型获取计费周期
- if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"1") || ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"4")){
- //实时计费、按天计费,赋值为当天
- cycleBeginTime = businessDate;
- cycleEndTime = businessDate;
- }else if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"2")){
- //按账期计费
- cycleBeginTime = businessDate;
- cycleEndTime = contractManagePO.getPaymentDate();
- }else if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"3")){
- //按周计费,用businessDate往后推一周的日期
- cycleBeginTime = businessDate;
- cycleEndTime = DateUtil.offsetWeek(businessDate,1);
- }
- break;
- }
- }
- billingStatementDO.setCycleBeginTime(cycleBeginTime);
- billingStatementDO.setCycleEndTime(cycleEndTime);
- }
+ //根据合同判断计费流水的周期开始日期和周期结束日期
+ setCycleTimeByContract(billingStatementDO, contractManagePO);
billingStatementDO.setContractType(contractManagePO.getContractType());
}
}
@@ -445,6 +418,52 @@ public class BillingStatementDomainService {
}
}
+ /**
+ * 根据合同判断计费流水的周期开始日期和周期结束日期
+ * (1)周期开始日期:根据合同明细的计费属性判断
+ * - 实时计费、按天计费:周期开始日期 = 业务日期
+ * - 按账期计费:周期开始日期 = 业务日期
+ * - 按周计费:周期开始日期 = 业务日期
+ * (2)周期结束日期:根据合同明细的计费属性判断
+ * - 实时计费、按天计费:周期结束日期 = 业务日期
+ * - 按账期计费:周期结束日期 = 合同的出账日期(paymentDate)
+ * - 按周计费:周期结束日期 = 业务日期往后推一周
+ * @param billingStatementDO 计费流水对象
+ * @param contractManagePO 合同管理对象
+ */
+ private void setCycleTimeByContract(BillingStatementDO billingStatementDO, ContractManagePO contractManagePO) {
+ //取值合同详情,对比费用科目,取值计费周期
+ if(contractManagePO.getContractManageDetailPOList()!=null && contractManagePO.getContractManageDetailPOList().size()>0){
+ List contractManageDetailPOList = contractManagePO.getContractManageDetailPOList();
+ String subjectCode = !StringUtils.isNotEmpty(billingStatementDO.getSecondSubjectCode()) ? billingStatementDO.getFirstSubjectCode() : billingStatementDO.getSecondSubjectCode();
+ Date cycleBeginTime = null;
+ Date cycleEndTime = null;
+ for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) {
+ String subjectCodeContract = !StringUtils.isNotEmpty(contractManageDetailPO.getSecondSubjectCode()) ? contractManageDetailPO.getFirstSubjectCode() : contractManageDetailPO.getSecondSubjectCode();
+ if(subjectCodeContract.equals(subjectCode)){
+ Date businessDate = billingStatementDO.getBusinessDate();
+ //根据不同类型获取计费周期
+ if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"1") || ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"4")){
+ //实时计费、按天计费,赋值为当天
+ cycleBeginTime = businessDate;
+ cycleEndTime = businessDate;
+ }else if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"2")){
+ //按账期计费
+ cycleBeginTime = businessDate;
+ cycleEndTime = contractManagePO.getPaymentDate();
+ }else if(ObjectUtil.equal(contractManageDetailPO.getBillingAttributesCode(),"3")){
+ //按周计费,用businessDate往后推一周的日期
+ cycleBeginTime = businessDate;
+ cycleEndTime = DateUtil.offsetWeek(businessDate,1);
+ }
+ break;
+ }
+ }
+ billingStatementDO.setCycleBeginTime(cycleBeginTime);
+ billingStatementDO.setCycleEndTime(cycleEndTime);
+ }
+ }
+
/**
* 账单作废,流水状态回滚