From ac32c13ad62f0ac12bc645609007e879f1382d06 Mon Sep 17 00:00:00 2001
From: RuicyWu <1063154311@qq.com>
Date: Sun, 7 Jun 2026 18:17:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../assetstenant/spring/spring-bean.xml | 1 +
.../assetstenant/AssetsTenantPluginApi.java | 11 +-
.../assetstenant/assets/AssetsService.java | 107 ++++---
.../apps/assetstenant/assets/OaAssetsVo.java | 19 +-
.../apps/assetstenant/bill/BillService.java | 303 ++++++++++++++----
.../seeyon/apps/assetstenant/bill/BillVo.java | 45 ++-
.../assetstenant/bill/FeeRecordService.java | 43 ++-
.../assetstenant/bill/WaeBillService.java | 19 +-
.../assetstenant/community/CommunitityVo.java | 90 ++++++
.../community/CommunityLayoutAggVo.java | 52 +++
.../community/CommunityLayoutVo.java | 103 ++++++
.../community/CommunityService.java | 234 +++++++++-----
.../config/AssetsTenantConfigProvider.java | 6 +-
...stants.java => AssetsTenantConstants.java} | 12 +-
.../contract/ContractAssetsVo.java | 18 ++
.../contract/ContractDocService.java | 7 -
.../contract/ContractFeeInfo.java | 4 +
.../contract/ContractPayBaseInfo.java | 86 +++++
.../contract/ContractService.java | 289 ++++++++++++-----
.../contract/OaContractDetailVo.java | 169 ++++++++++
.../assetstenant/contract/OaContractVo.java | 1 +
.../apps/assetstenant/cus/Customer.java | 9 +
.../assetstenant/cus/CustomerService.java | 9 +-
.../discharge/DisCharegeService.java | 52 ++-
.../fallback/FallbackService.java | 103 +++++-
.../assetstenant/fallback/FallbackVo.java | 11 +
.../assetstenant/file/FileHandlerService.java | 4 +-
.../apps/assetstenant/file/OaFileVo.java | 9 +-
.../assetstenant/flow/FlowCreateService.java | 21 +-
.../node/DisChargeFeeConfirmNode.java | 39 +++
.../assetstenant/notice/NoticeService.java | 12 +-
.../assetstenant/reserve/ReserveService.java | 45 ++-
.../apps/assetstenant/utils/ProtUtil.java | 83 +++++
.../viewrecord/ViewRecordService.java | 30 +-
.../weappconfig/WeAppConfigService.java | 10 +-
.../resources/assetstenant/BillResource.java | 70 ++--
.../assetstenant/CommunityResource.java | 14 +
.../assetstenant/FileTransportResource.java | 1 +
.../assetstenant/ReserveResource.java | 36 ++-
.../assetstenant/ViewRecordResource.java | 14 +
40 files changed, 1787 insertions(+), 404 deletions(-)
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutAggVo.java
rename src/main/java/com/seeyon/apps/assetstenant/constants/{RentConstants.java => AssetsTenantConstants.java} (77%)
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/ContractFeeInfo.java
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/ContractPayBaseInfo.java
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/OaContractDetailVo.java
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/node/DisChargeFeeConfirmNode.java
create mode 100644 src/main/java/com/seeyon/apps/assetstenant/utils/ProtUtil.java
diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml
index 8c9bd1a..32a9859 100644
--- a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml
+++ b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml
@@ -22,4 +22,5 @@
+
diff --git a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java
index 0cba1dc..978f6c4 100644
--- a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java
+++ b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java
@@ -1,16 +1,15 @@
package com.seeyon.apps.assetstenant;
-import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants;
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
-import org.springframework.stereotype.Component;
public class AssetsTenantPluginApi extends APluginInfoApi {
public AssetsTenantPluginApi() {
}
public String getPluginId() {
- return RentConstants.getPluginId();
+ return AssetsTenantConstants.getPluginId();
}
public String getCreateUser() {
@@ -23,12 +22,12 @@ public class AssetsTenantPluginApi extends APluginInfoApi {
public ConfigVo getDefaultConfig() {
ConfigVo configVo = new ConfigVo();
- RentConstants[] var2 = RentConstants.values();
+ AssetsTenantConstants[] var2 = AssetsTenantConstants.values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
- RentConstants value = var2[var4];
- if (value != RentConstants.plugin) {
+ AssetsTenantConstants value = var2[var4];
+ if (value != AssetsTenantConstants.plugin) {
configVo.getDevParams().put(value.name(), value.getDefaultValue());
configVo.getProdParams().put(value.name(), value.getDefaultValue());
configVo.getParamMap().put(value.name(), value.getDescription());
diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java
index a3a7b3e..7031dd5 100644
--- a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java
+++ b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java
@@ -2,7 +2,7 @@ package com.seeyon.apps.assetstenant.assets;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
-import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants;
import com.seeyon.apps.assetstenant.contract.ContractAssetsVo;
import com.seeyon.apps.assetstenant.file.OaFileVo;
import com.seeyon.apps.assetstenant.po.PageQueryVo;
@@ -15,16 +15,15 @@ import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.utils.form.*;
import org.apache.commons.lang3.StringUtils;
-import java.math.BigDecimal;
import java.util.*;
public class AssetsService {
- private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("AssetsTenantConfigProvider");
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");
private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager");
private String getFormNo() {
- return configProvider.getBizConfigByKey(RentConstants.ASSETS_FORMNO);
+ return configProvider.getBizConfigByKey(AssetsTenantConstants.ASSETS_FORMNO);
}
public PageQueryVo pageQuery(JSONObject params) throws Exception {
@@ -38,8 +37,8 @@ public class AssetsService {
List vos = new ArrayList<>();
Long count = FormTableExecutor.count(master,null, conditions);
if(datas.size() > 0){
- for (Object data : datas) {
- Map map = (Map) data;
+ for (FormColumn data : datas) {
+ Map map = data.getFieldsMap();
OaAssetsVo oaAssetsVo = new OaAssetsVo();
fillPageQueryVo(map, oaAssetsVo);
vos.add(oaAssetsVo);
@@ -53,7 +52,7 @@ public class AssetsService {
private List buildConditions(JSONObject params, FormTableBean formTableBean) throws BusinessException {
List conditions = new ArrayList<>();
if(StringUtils.isNotBlank(params.getString("cusNo"))) {
- conditions.add(FormWhereCondition.build().display("租户-租户编号").value(params.getString("cusNo")));
+ conditions.add(FormWhereCondition.build().display("租户编码").value(params.getString("cusNo")));
}
if(StringUtils.isNotBlank(params.getString("assetsNo"))) {
conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo")));
@@ -72,37 +71,26 @@ public class AssetsService {
conditions.add(FormWhereCondition.build().display("商圈位置")
.value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"商圈位置",params.getString("bizZone"))));
}
- if(StringUtils.isNotBlank(params.getString("renovationStatus"))) {
- conditions.add(FormWhereCondition.build().display("装修情况")
- .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"装修情况",params.getString("renovationStatus"))));
- }
if(StringUtils.isNotBlank(params.getString("layout"))) {
- conditions.add(FormWhereCondition.build().display("房屋户型")
- .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"房屋户型",params.getString("layout"))));
- }
- if(StringUtils.isNotBlank(params.getString("rentFeeRange"))) {
- String[] split = params.getString("rentFeeRange").split("-");
- String rentFeeStart = null;
- if(split.length > 1) {
- rentFeeStart = split[0];
- }
- String rentFeeEnd = split[split.length - 1];
- if(rentFeeStart != null) {
- conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.GE)
- .value(new BigDecimal(rentFeeStart)));
- }
- conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.LE)
- .value(new BigDecimal(rentFeeEnd)));
+ conditions.add(FormWhereCondition.build().display("户型")
+ .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"户型",params.getString("layout"))));
}
+
if(StringUtils.isNotBlank(params.getString("features"))){
String[] features = params.getString("features").split(",");
- for (Object feature : features) {
- conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + ""))
- .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT));
- }
+// for (Object feature : features) {
+// conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + ""))
+// .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT));
+// }
+ }
+ if(StringUtils.isNotBlank(params.getString("communityNo"))) {
+ conditions.add(FormWhereCondition.build().display("楼盘编号").value(params.getString("communityNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("buildingNo"))) {
+ conditions.add(FormWhereCondition.build().display("楼栋").value(params.getString("buildingNo")));
}
if(StringUtils.isNotBlank(params.getString("keyWord"))){
- conditions.add(FormWhereCondition.build().display("品牌名称")
+ conditions.add(FormWhereCondition.build().display("资产名称")
.startWithBracket(true)
.concatFactor(ClauseFactor.OR)
.value(params.getString("keyWord"))
@@ -194,7 +182,6 @@ public class AssetsService {
// }
conditions
.add(FormWhereCondition.build().display("资产二级类型")
- .startWithBracket(true)
.value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型",type)));
}
@@ -223,10 +210,12 @@ public class AssetsService {
Map fieldsMap = formColumn.getFieldsMap();
assetsVo.setFormId(formColumn.getId());
assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
- assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
+ assetsVo.setAssetsName(getStringValue(fieldsMap,"资产名称"));
assetsVo.setManager(getStringValue(fieldsMap,"资产管理员"));
+ assetsVo.setAddress(getStringValue(fieldsMap,"所在地址"));
+ assetsVo.setZone(getStringValue(fieldsMap,"所在区域"));
if(fieldsMap.get("资产图片") != null) {
- assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager));
+ assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager));
}
return assetsVo;
}
@@ -254,14 +243,23 @@ public class AssetsService {
public void fillDetailVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException {
assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
- assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
- assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息"));
+ assetsVo.setAssetsName(getStringValue(fieldsMap,"资产名称"));
+// assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息"));
assetsVo.setFormId(getStringValue(fieldsMap,"id"));
assetsVo.setAssetsStatus(getStringValue(fieldsMap,"资产状态"));
- assetsVo.setAssetsType(getStringValue(fieldsMap,"资产类型"));
+ assetsVo.setAssetsType(getStringValue(fieldsMap,"资产二级类型"));
assetsVo.setAssetsAddress(getStringValue(fieldsMap,"所在位置"));
- assetsVo.setLongitude(getStringValue(fieldsMap,"坐落经度")); //经度
- assetsVo.setLatitude(getStringValue(fieldsMap,"坐落纬度")); //纬度
+ assetsVo.setManageType(getStringValue(fieldsMap,"运营类型"));
+ String lnglat = getStringValue(fieldsMap, "坐落经纬度");
+ if(StringUtils.isNotBlank(lnglat)){
+ // 统一替换逗号为分号,然后分割,兼容 ; 和 , 两种格式
+ String[] lnglatArr = lnglat.replace(",", ";").split(";");
+ // 增加数组长度判断,防止越界异常
+ if (lnglatArr.length >= 2) {
+ assetsVo.setLongitude(lnglatArr[0].trim()); // trim() 去除多余空格
+ assetsVo.setLatitude(lnglatArr[1].trim());
+ }
+ }
assetsVo.setFloorNo(getStringValue(fieldsMap,"楼层"));
assetsVo.setUnitNo(getStringValue(fieldsMap,"单元"));
assetsVo.setRoomNo(getStringValue(fieldsMap,"门牌号"));
@@ -269,7 +267,7 @@ public class AssetsService {
assetsVo.setHasLift(getStringValue(fieldsMap,"有无电梯"));
assetsVo.setManagerPhone(getStringValue(fieldsMap,"管理员联系方式"));
assetsVo.setBizZone(getStringValue(fieldsMap,"商圈位置"));
- assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型"));
+ assetsVo.setLayout(getStringValue(fieldsMap,"户型"));
assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况"));
V3xOrgMember member = null;
try {
@@ -280,17 +278,17 @@ public class AssetsService {
if(member != null) {
assetsVo.setManagerName(member.getName().substring(0,1) + "管家");
}
- BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积");
- BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金");
+ String area = getStringValue(fieldsMap,"建筑面积");
+ String rentFee = Optional.ofNullable(getStringValue(fieldsMap,"月租金")).orElse(getStringValue(fieldsMap,"年租金"));
assetsVo.setFootPrint(area.toString());
if(area != null && rentFee != null) {
assetsVo.setRentFee(rentFee.toString());
}
- if(fieldsMap.get("VR文件上传") != null) {
- assetsVo.setVrImg(OaFileVo.getInstance((Long)fieldsMap.get("VR文件上传"),attachmentManager));
- }
if(fieldsMap.get("资产图片") != null) {
- assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager));
+ assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager));
+ }
+ if(fieldsMap.get("VR文件上传") != null) {
+ assetsVo.setVrImg(OaFileVo.getInstance(fieldsMap.get("VR文件上传"),attachmentManager));
}
}
@@ -299,14 +297,25 @@ public class AssetsService {
assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息"));
assetsVo.setFormId(getStringValue(fieldsMap,"id"));
- assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型"));
+ assetsVo.setLayout(getStringValue(fieldsMap,"户型"));
assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况"));
String area = getStringValue(fieldsMap,"建筑面积");
String rentFee = Optional.ofNullable(getStringValue(fieldsMap,"月租金")).orElse(getStringValue(fieldsMap,"年租金"));
assetsVo.setFootPrint(area);
assetsVo.setRentFee(rentFee);
if(fieldsMap.get("资产图片") != null) {
- assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager));
+ assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager));
}
}
+
+ public Map getAssetsManagerInfo(String assetsNo) throws Exception {
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo));
+ TableContext tableContext = getTableContext();
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,false);
+ if(formColumn == null || formColumn.getFieldsMap() == null) {
+ return null;
+ }
+ return formColumn.getFieldsMap();
+ }
}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java
index 45af8fc..4eab0f2 100644
--- a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java
+++ b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java
@@ -34,7 +34,8 @@ public class OaAssetsVo {
private String powerFee; //电费
private String powerFeeUnit; //电费单位
private String bizZone;
- private List features;
+ private String manageType; //运营类型
+ private String[] tags;
private String renovationStatus; //装修状态
public String getAssetsNo() {
@@ -253,12 +254,12 @@ public class OaAssetsVo {
this.bizZone = bizZone;
}
- public List getFeatures() {
- return features;
+ public String[] getTags() {
+ return tags;
}
- public void setFeatures(List features) {
- this.features = features;
+ public void setTags(String[] tags) {
+ this.tags = tags;
}
public String getRenovationStatus() {
@@ -276,4 +277,12 @@ public class OaAssetsVo {
public void setRentFeeUnit(String rentFeeUnit) {
this.rentFeeUnit = rentFeeUnit;
}
+
+ public String getManageType() {
+ return manageType;
+ }
+
+ public void setManageType(String manageType) {
+ this.manageType = manageType;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java
index 34b9cea..8bfb3b8 100644
--- a/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java
@@ -1,31 +1,47 @@
package com.seeyon.apps.assetstenant.bill;
+import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.assetstenant.assets.AssetsService;
import com.seeyon.apps.assetstenant.assets.OaAssetsVo;
import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
-import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants;
+import com.seeyon.apps.assetstenant.contract.ContractPayBaseInfo;
import com.seeyon.apps.assetstenant.contract.ContractService;
+import com.seeyon.apps.assetstenant.contract.OaContractDetailVo;
+import com.seeyon.apps.assetstenant.flow.FlowCreateService;
import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.cap4.form.api.FormApi4Cap4;
+import com.seeyon.cap4.form.bean.FormBean;
+import com.seeyon.cap4.form.bean.FormFieldBean;
import com.seeyon.cap4.form.bean.FormTableBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.ctp.organization.bo.V3xOrgMember;
+import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.utils.form.*;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.math.RoundingMode;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
public class BillService {
+ private static final Log log = Log.get(BillService.class);
private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
private ContractService contractService = (ContractService) AppContext.getBean("contractService");
private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService");
+ private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService");
+ private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager");
+ private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
private String getFormNo() {
- return configProvider.getBizConfigByKey(RentConstants.CONTRACTBILLFORMNO);
+ return configProvider.getBizConfigByKey(AssetsTenantConstants.CONTRACTBILLFORMNO);
}
private TableContext getTableContext() throws BusinessException {
@@ -33,9 +49,9 @@ public class BillService {
return tableContext;
}
- private String getStringValue(Map fieldsMap,String key) {
+ private String getStringValue(Map fieldsMap, String key) {
Object o = fieldsMap.get(key);
- if(o == null) {
+ if (o == null) {
return null;
}
return o + "";
@@ -43,16 +59,19 @@ public class BillService {
private List buildConditions(JSONObject params, FormTableBean formTableBean) {
List conditions = new ArrayList<>();
- if(StringUtils.isNotBlank(params.getString("cusNo"))) {
+ if (StringUtils.isNotBlank(params.getString("cusNo"))) {
conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo")));
}
- if(StringUtils.isNotBlank(params.getString("billNo"))) {
- conditions.add(FormWhereCondition.build().display("租赁账单编号").value(params.getString("billNo")));
+ if (StringUtils.isNotBlank(params.getString("billNo"))) {
+ conditions.add(FormWhereCondition.build().display("账单-账单明细编号").value(params.getString("billNo")));
}
- if(StringUtils.isNotBlank(params.getString("billStatus"))) {
- if("已缴费".equals(params.getString("billStatus"))) {
+ if(StringUtils.isNotBlank(params.getString("contractNo"))) {
+ conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo")));
+ }
+ if (StringUtils.isNotBlank(params.getString("billStatus"))) {
+ if ("已缴费".equals(params.getString("billStatus"))) {
conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL));
- }else {
+ } else {
conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR));
conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean, "账单-收款结果反馈", "未收款")).endWithBracket(true));
}
@@ -60,13 +79,13 @@ public class BillService {
return conditions;
}
- public List queryAllContractBill(List conditions) throws Exception {;
+ public List queryAllContractBill(List conditions) throws Exception {
TableContext tableContext = getTableContext();
- List datas = FormTableExecutor.query(tableContext, null, conditions,true);
+ List datas = FormTableExecutor.query(tableContext, null, conditions, true);
List vos = new ArrayList<>();
- if(datas.size() > 0){
- for (Object data : datas) {
- Map map = (Map) data;
+ if (datas.size() > 0) {
+ for (FormColumn data : datas) {
+ Map map = data.getFieldsMap();
BillVo billVo = new BillVo();
fillVo(map, billVo);
vos.add(billVo);
@@ -75,27 +94,72 @@ public class BillService {
return vos;
}
+ public List queryContractPayBaseInfoList(String contractNo) throws BusinessException {
+ List contractPayBaseInfoList = new ArrayList<>();
+ String formNo = configProvider.getBizConfigByKey(AssetsTenantConstants.BILLCREATEFORMNO);
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo));
+ TableContext master = FormTableExecutor.master(formNo);
+ List formColumns = FormTableExecutor.query(master, null, conditions, true);
+ if(formColumns == null || formColumns.size() <= 0){
+ return contractPayBaseInfoList;
+ }
+ for (FormColumn formColumn : formColumns) {
+ Map fieldsMap = formColumn.getFieldsMap();
+ ContractPayBaseInfo baseInfo = new ContractPayBaseInfo();
+ baseInfo.setContractNo(contractNo);
+ baseInfo.setAssetsName(getStringValue(fieldsMap, "资产名称"));
+ baseInfo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
+ baseInfo.setTotalRentFee(getStringValue(fieldsMap,"本账单金额"));
+ Integer totalPeriod = contractService.countTotalPeriod(contractNo);
+ baseInfo.setTotalTermNum(totalPeriod + "");
+ Integer countPaidTermNum = countPaidTermNum(baseInfo.getAssetsNo(), baseInfo.getContractNo());
+ baseInfo.setPaidTermNum(countPaidTermNum + "");
+ JSONObject param = new JSONObject();
+ param.put("contractNo", contractNo);
+ try {
+ OaContractDetailVo detailVo = contractService.queryContractDetail(param);
+ baseInfo.setDeposit(detailVo.getDeposit());
+ }catch (Exception e) {
+
+ }
+ contractPayBaseInfoList.add(baseInfo);
+ }
+ return contractPayBaseInfoList;
+ }
+
+ public Integer countPaidTermNum(String assetsNo,String contractNo) throws BusinessException {
+ TableContext tableContext = getTableContext();
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo));
+ conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo));
+ conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"收款结果反馈", "已结清")));
+ conditions.add(FormWhereCondition.build().display("账单类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"账单类型", "租金")));
+ Long count = FormTableExecutor.count(tableContext, null, conditions);
+ return count.intValue();
+ }
+
public Integer countUnpayRentBills(JSONObject params) throws Exception {
TableContext tableContext = getTableContext();
- List conditions = buildConditions(params,tableContext.getTableBean());
+ List conditions = buildConditions(params, tableContext.getTableBean());
conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR));
- conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"账单-收款结果反馈","未收款")).endWithBracket(true));
- Long count = FormTableExecutor.count(tableContext, null,conditions);
+ conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "账单-收款结果反馈", "未收款")).endWithBracket(true));
+ Long count = FormTableExecutor.count(tableContext, null, conditions);
return count.intValue();
}
public PageQueryVo pageQueryContractBill(JSONObject params) throws Exception {
TableContext tableContext = getTableContext();
- List conditions = buildConditions(params,tableContext.getTableBean());
+ List conditions = buildConditions(params, tableContext.getTableBean());
Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo");
Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize");
PageQueryVo pageQueryVo = new PageQueryVo();
- List datas = FormTableExecutor.pageQuery(tableContext, null,conditions, pageNo, pageSize,true);
+ List datas = FormTableExecutor.pageQuery(tableContext, null, conditions, pageNo, pageSize, true);
List vos = new ArrayList<>();
- Long count = FormTableExecutor.count(tableContext,null, conditions);
- if(datas.size() > 0){
- for (Object data : datas) {
- Map map = (Map) data;
+ Long count = FormTableExecutor.count(tableContext, null, conditions);
+ if (datas.size() > 0) {
+ for (FormColumn data : datas) {
+ Map map = data.getFieldsMap();
BillVo billVo = new BillVo();
fillVo(map, billVo);
vos.add(billVo);
@@ -108,9 +172,9 @@ public class BillService {
public BillVo queryOne(JSONObject params) throws Exception {
TableContext tableContext = getTableContext();
- List conditions = buildConditions(params,tableContext.getTableBean());
- FormColumn formColumn = FormTableExecutor.queryOne(tableContext,conditions,true);
- if(formColumn == null) {
+ List conditions = buildConditions(params, tableContext.getTableBean());
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions, true);
+ if (formColumn == null) {
return null;
}
Map fieldsMap = formColumn.getFieldsMap();
@@ -120,37 +184,166 @@ public class BillService {
}
public void fillVo(Map fieldsMap, BillVo billVo) throws Exception {
- billVo.setBillType("CONTRACT");
- billVo.setBillNo(getStringValue(fieldsMap,"租赁账单编号" ));
- String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap,"收款结果反馈");
- billVo.setBillStatus(payStatus);
- billVo.setCusNo(getStringValue(fieldsMap,"承租方编号"));
- billVo.setBillStartDate(getStringValue(fieldsMap,"账单-开始日期"));
- billVo.setContractNo(getStringValue(fieldsMap,"合同编号"));
- billVo.setBillPayEndDate(getStringValue(fieldsMap,"账单-当前缴费时限"));
- billVo.setBillEndDate(getStringValue(fieldsMap,"账单-结束日期"));
- OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号"));
- String asssetsName = null;
- if(oaAssetsVo != null) {
- asssetsName = oaAssetsVo.getAssetsName();
+ billVo.setBillType(getStringValue(fieldsMap, "账单类型"));
+ billVo.setBillNo(getStringValue(fieldsMap, "账单-账单明细编号"));
+ String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap, "账单-收款结果反馈");
+ billVo.setBillStatus(payStatus);
+ billVo.setCusNo(getStringValue(fieldsMap, "承租方编号"));
+ billVo.setBillStartDate(getStringValue(fieldsMap, "账单-开始日期"));
+ billVo.setContractNo(getStringValue(fieldsMap, "合同编号"));
+ billVo.setBillPayEndDate(getStringValue(fieldsMap, "账单-当前缴费时限"));
+ billVo.setBillEndDate(getStringValue(fieldsMap, "账单-结束日期"));
+ String billName = buildBillName(fieldsMap, billVo);
+ billVo.setBillPayDate(getStringValue(fieldsMap, "账单-实际收款时间"));
+ billVo.setBillName(billName);
+ if(billVo.getBillTermNum() != null && 1 == billVo.getBillTermNum()) {
+ billVo.setDeposit(getDeposit(getStringValue(fieldsMap, "合同编号")));
+ }
+ if("租金".equals(billVo.getBillType())) {
+ BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("账单-租费");
+ billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString());
+ }else if("履约保证金".equals(billVo.getBillType())){
+ BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("约定履约保证金");
+ billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString());
+ }else if("违约金".equals(billVo.getBillType())){
+ BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("应收违约金");
+ billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString());
+ }else if("滞纳金".equals(billVo.getBillType())){
+ BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("应收滞纳金");
+ billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString());
}
- String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-";
- String billTerm = "(" + billVo.getBillStartDate() + "-" + billVo.getBillEndDate() + ")";
- billVo.setBillName(asssetsName + roomNo + billTerm);
- BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("账单-租费");
- billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString());
- billVo.setBillPayTime(getStringValue(fieldsMap,"账单-实际收款时间"));
}
- private String buildBillName(Map fieldsMap) throws Exception {
- String contractNo = getStringValue(fieldsMap,"合同编号");
- String term = contractService.queryContractPayPeriod(contractNo,getStringValue(fieldsMap,"账单-开始日期")) + "-";
- OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号"));
+ private String getDeposit(String contractNo) throws Exception {
+ JSONObject params = new JSONObject();
+ params.put("contractNo", contractNo);
+ OaContractDetailVo oaContractVo = contractService.queryContractDetail(params);
+ return oaContractVo == null ? null : oaContractVo.getDeposit();
+ }
+
+ private String buildBillName(Map fieldsMap, BillVo billVo) throws Exception {
+ String contractNo = getStringValue(fieldsMap, "合同编号");
+ Integer termNum = contractService.queryContractPayPeriod(contractNo, getStringValue(fieldsMap, "账单-开始日期"));
+ billVo.setBillTermNum(termNum);
+ OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap, "资产编号"));
String asssetsName = null;
- if(oaAssetsVo != null) {
+ if (oaAssetsVo != null) {
asssetsName = oaAssetsVo.getAssetsName();
}
String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-";
- return asssetsName + roomNo + term;
+ return asssetsName + roomNo + termNum + "期";
+ }
+
+ public void payCallBack(String billNo,String payDate) throws Exception {
+ // 1. 获取Bean + 非空校验
+ FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
+ if (formApi4Cap4 == null) {
+ throw new Exception("Spring容器中未找到formApi4Cap4 Bean");
+ }
+
+ // 2. 复用配置,避免重复查询
+ String templateCode = this.configProvider.getBizConfigByKey(AssetsTenantConstants.PAYMENT_REGISTRATION_TEMPLATECODE);
+ String appName = this.configProvider.getBizConfigByKey(AssetsTenantConstants.FORMAPPNAME);
+
+ // 3. 获取表单结构
+ FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(templateCode);
+ FormTableBean masterTableBean = cap4FormBean.getMasterTableBean();
+ String tableName = masterTableBean.getTableName();
+ List subTableBeanList = cap4FormBean.getSubTableBean();
+ FormTableBean subTableBean = null;
+ // 4. 获取子表名 + 非空校验
+ String subDbTableName = null;
+ for (FormTableBean tableBean : subTableBeanList) {
+ if ("租金收款明细".equals(tableBean.getDisplay())) {
+ subDbTableName = tableBean.getTableName();
+ subTableBean = tableBean;
+ break;
+ }
+ }
+ // 5. 构造数据结构(规范泛型)
+ Map mainFormData = new HashMap<>();
+ Map> subFormDataMap = new HashMap<>();
+ List