commit b1097e86e2b83c2808be0bcdcb2e648049c5445b
Author: RuicyWu <1063154311@qq.com>
Date: Wed May 6 16:04:39 2026 +0800
初步封装
diff --git a/seeyon/WEB-INF/assetstenant/pluginCfg.xml b/seeyon/WEB-INF/assetstenant/pluginCfg.xml
new file mode 100644
index 0000000..27ab835
--- /dev/null
+++ b/seeyon/WEB-INF/assetstenant/pluginCfg.xml
@@ -0,0 +1,6 @@
+
+
+ assetstenant
+ 资产租赁数据集成
+ 20260412
+
diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml
new file mode 100644
index 0000000..8c9bd1a
--- /dev/null
+++ b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml b/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml
new file mode 100644
index 0000000..c3bf19e
--- /dev/null
+++ b/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/seeyon/WEB-INF/assetstenant/spring/spring.xml b/seeyon/WEB-INF/assetstenant/spring/spring.xml
new file mode 100644
index 0000000..ad72735
--- /dev/null
+++ b/seeyon/WEB-INF/assetstenant/spring/spring.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java
new file mode 100644
index 0000000..0cba1dc
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java
@@ -0,0 +1,42 @@
+package com.seeyon.apps.assetstenant;
+
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+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();
+ }
+
+ public String getCreateUser() {
+ return "橙阳科技";
+ }
+
+ public String getDescription() {
+ return "资产租户端数据集成";
+ }
+
+ public ConfigVo getDefaultConfig() {
+ ConfigVo configVo = new ConfigVo();
+ RentConstants[] var2 = RentConstants.values();
+ int var3 = var2.length;
+
+ for(int var4 = 0; var4 < var3; ++var4) {
+ RentConstants value = var2[var4];
+ if (value != RentConstants.plugin) {
+ configVo.getDevParams().put(value.name(), value.getDefaultValue());
+ configVo.getProdParams().put(value.name(), value.getDefaultValue());
+ configVo.getParamMap().put(value.name(), value.getDescription());
+ }
+ }
+
+ return configVo;
+ }
+
+}
+
diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java
new file mode 100644
index 0000000..a3a7b3e
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java
@@ -0,0 +1,312 @@
+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.contract.ContractAssetsVo;
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.cap4.form.bean.FormTableBean;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.ctp.common.filemanager.manager.AttachmentManager;
+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.*;
+
+public class AssetsService {
+
+ 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);
+ }
+
+ public PageQueryVo pageQuery(JSONObject params) throws Exception {
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+ List conditions = buildConditions(params,masterTableBean);
+ 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(master,null,conditions,pageNo,pageSize,true);
+ List vos = new ArrayList<>();
+ Long count = FormTableExecutor.count(master,null, conditions);
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ OaAssetsVo oaAssetsVo = new OaAssetsVo();
+ fillPageQueryVo(map, oaAssetsVo);
+ vos.add(oaAssetsVo);
+ }
+ pageQueryVo.setDatas(vos);
+ pageQueryVo.setTotalCount(count);
+ }
+ return pageQueryVo;
+ }
+
+ 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")));
+ }
+ if(StringUtils.isNotBlank(params.getString("assetsNo"))) {
+ conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("assetsStatus"))) {
+ conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"资产状态",params.getString("assetsStatus"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("assetsType"))) {
+ handleAssetsSubType(conditions,params.getString("assetsType"));
+ }
+ if(StringUtils.isNotBlank(params.getString("manageType"))) {
+ conditions.add(FormWhereCondition.build().display("运营类型")
+ .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"运营类型",params.getString("manageType"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("bizZone"))) {
+ 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)));
+ }
+ 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));
+ }
+ }
+ if(StringUtils.isNotBlank(params.getString("keyWord"))){
+ conditions.add(FormWhereCondition.build().display("品牌名称")
+ .startWithBracket(true)
+ .concatFactor(ClauseFactor.OR)
+ .value(params.getString("keyWord"))
+ .clauseFactor(ClauseFactor.LIKE));
+ handleBizZoneSet(conditions,params.getString("keyWord"));
+ conditions.add(FormWhereCondition.build().display("所在位置")
+ .value(params.getString("keyWord"))
+ .endWithBracket(true)
+ .clauseFactor(ClauseFactor.LIKE));
+ }
+ return conditions;
+ }
+
+ private Set getAllBizZones(FormTableBean formTableBean){
+ return EnumMapUtils.getEnumItemValues(formTableBean,"商圈位置");
+ }
+
+ public Set getAllBizZones() throws BusinessException {
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+ return getAllBizZones(masterTableBean);
+ }
+
+ private Set getFeatures(FormTableBean formTableBean){
+ return EnumMapUtils.getEnumItemValues(formTableBean,"基础配套");
+ }
+
+ public Set getFeatures() throws BusinessException {
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+ return getFeatures(masterTableBean);
+ }
+
+ private void handleBizZoneSet(List conditions,String keyWord) throws BusinessException {
+ if (conditions == null || keyWord == null || keyWord.isEmpty()) {
+ return;
+ }
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+ Set allBizZones = getAllBizZones(masterTableBean);
+ Set tempSet = new HashSet<>();
+ FormWhereCondition condition = FormWhereCondition.build().display("商圈位置").clauseFactor(ClauseFactor.IN).concatFactor(ClauseFactor.OR);
+ for (String bizZone : allBizZones) {
+ if(bizZone.contains(keyWord)){
+ String enumItemId = EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"商圈位置",bizZone);
+ tempSet.add(enumItemId);
+ }
+ }
+ condition.setValues(Collections.singletonList(tempSet));
+ if(condition.getValues().size() > 0) {
+ conditions.add(condition);
+ }
+ }
+
+ private void handleAssetsSubType(List conditions,String type) throws BusinessException {
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+// if("住房".equals(type)) {
+// conditions
+// .add(FormWhereCondition.build().display("资产二级类型")
+// .startWithBracket(true)
+// .concatFactor(ClauseFactor.OR)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","住宅")));
+// conditions.add(FormWhereCondition.build().display("资产二级类型")
+// .endWithBracket(true)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","保障性住房")));
+// }
+// if("商铺".equals(type)) {
+// conditions
+// .add(FormWhereCondition.build().display("资产二级类型")
+// .startWithBracket(true)
+// .concatFactor(ClauseFactor.OR)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","写字楼")));
+// conditions.add(FormWhereCondition.build().display("资产二级类型")
+// .concatFactor(ClauseFactor.OR)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","商业门面")));
+// conditions.add(FormWhereCondition.build().display("资产二级类型")
+// .concatFactor(ClauseFactor.OR)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","商业用房")));
+// conditions.add(FormWhereCondition.build().display("资产二级类型")
+// .endWithBracket(true)
+// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","政府机构")));
+// }
+// if("厂房".equals(type)) {
+// conditions.add(FormWhereCondition.build().display("资产二级类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","厂房")));
+// }
+// if("停车场".equals(type)) {
+// conditions.add(FormWhereCondition.build().display("资产二级类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","车房")));
+// }
+ conditions
+ .add(FormWhereCondition.build().display("资产二级类型")
+ .startWithBracket(true)
+ .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型",type)));
+ }
+
+ public OaAssetsVo queryAssetsDetail(String id) throws Exception {
+ if(id == null) {
+ return null;
+ }
+ JSONObject object = new JSONObject();
+ object.put("assetsNo", id);
+ return queryAssetsDetail(object);
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+ public ContractAssetsVo queryContractAssetsDetail(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params,tableContext.getTableBean());
+ ContractAssetsVo assetsVo = new ContractAssetsVo();
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext,conditions,true);
+ if(formColumn == null) {
+ return assetsVo;
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ assetsVo.setFormId(formColumn.getId());
+ assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
+ assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
+ assetsVo.setManager(getStringValue(fieldsMap,"资产管理员"));
+ if(fieldsMap.get("资产图片") != null) {
+ assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager));
+ }
+ return assetsVo;
+ }
+
+ public OaAssetsVo queryAssetsDetail(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params,tableContext.getTableBean());
+ OaAssetsVo assetsVo = new OaAssetsVo();
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,true);
+ if(formColumn == null) {
+ return assetsVo;
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ fillDetailVo(fieldsMap,assetsVo);
+ return assetsVo;
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ public void fillDetailVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException {
+ assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
+ assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
+ assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息"));
+ assetsVo.setFormId(getStringValue(fieldsMap,"id"));
+ assetsVo.setAssetsStatus(getStringValue(fieldsMap,"资产状态"));
+ assetsVo.setAssetsType(getStringValue(fieldsMap,"资产类型"));
+ assetsVo.setAssetsAddress(getStringValue(fieldsMap,"所在位置"));
+ assetsVo.setLongitude(getStringValue(fieldsMap,"坐落经度")); //经度
+ assetsVo.setLatitude(getStringValue(fieldsMap,"坐落纬度")); //纬度
+ assetsVo.setFloorNo(getStringValue(fieldsMap,"楼层"));
+ assetsVo.setUnitNo(getStringValue(fieldsMap,"单元"));
+ assetsVo.setRoomNo(getStringValue(fieldsMap,"门牌号"));
+ assetsVo.setBuilding(getStringValue(fieldsMap,"楼栋"));
+ assetsVo.setHasLift(getStringValue(fieldsMap,"有无电梯"));
+ assetsVo.setManagerPhone(getStringValue(fieldsMap,"管理员联系方式"));
+ assetsVo.setBizZone(getStringValue(fieldsMap,"商圈位置"));
+ assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型"));
+ assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况"));
+ V3xOrgMember member = null;
+ try {
+ member = orgManager.getMemberById(Long.parseLong((String)fieldsMap.get("运营管理员")));
+ }catch (Exception e) {
+
+ }
+ if(member != null) {
+ assetsVo.setManagerName(member.getName().substring(0,1) + "管家");
+ }
+ BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积");
+ BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金");
+ 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));
+ }
+ }
+
+ public void fillPageQueryVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException {
+ assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号"));
+ assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称"));
+ assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息"));
+ assetsVo.setFormId(getStringValue(fieldsMap,"id"));
+ 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));
+ }
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java
new file mode 100644
index 0000000..45af8fc
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java
@@ -0,0 +1,279 @@
+package com.seeyon.apps.assetstenant.assets;
+
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+
+import java.util.List;
+
+public class OaAssetsVo {
+
+ private String assetsNo; // 资产编号
+ private String assetsName; // 资产名称
+ private String assetsType; //资产类型
+ private String assetsStatus; //资产状态
+ private String rentFee; //租金
+ private String rentFeeUnit; //租金单位
+ private String footPrint; //占地大小
+ private String formId; //表单记录ID
+ private OaFileVo detailImg; //详情图片
+ private OaFileVo vrImg; //vr图
+ private String assetsDesc; //资产描述
+ private String assetsAddress; //资产地址
+ private String latitude; //纬度
+ private String longitude; //经度
+ private String unitNo; //单元号
+ private String floorNo; //楼层号
+ private String roomNo; //房间号
+ private String hasLift;//有无电梯
+ private String managerPhone; //管理员电话
+ private String managerName; //管理员姓名
+ private String layout; //户型
+ private String orientation; //朝向
+ private String building; //楼栋
+ private String waterFee; //水费
+ private String waterFeeUnit; //水费单位
+ private String powerFee; //电费
+ private String powerFeeUnit; //电费单位
+ private String bizZone;
+ private List features;
+ private String renovationStatus; //装修状态
+
+ public String getAssetsNo() {
+ return assetsNo;
+ }
+
+ public void setAssetsNo(String assetsNo) {
+ this.assetsNo = assetsNo;
+ }
+
+ public String getAssetsName() {
+ return assetsName;
+ }
+
+ public void setAssetsName(String assetsName) {
+ this.assetsName = assetsName;
+ }
+
+ public String getAssetsType() {
+ return assetsType;
+ }
+
+ public void setAssetsType(String assetsType) {
+ this.assetsType = assetsType;
+ }
+
+ public String getAssetsStatus() {
+ return assetsStatus;
+ }
+
+ public void setAssetsStatus(String assetsStatus) {
+ this.assetsStatus = assetsStatus;
+ }
+
+ public String getRentFee() {
+ return rentFee;
+ }
+
+ public void setRentFee(String rentFee) {
+ this.rentFee = rentFee;
+ }
+
+ public String getFootPrint() {
+ return footPrint;
+ }
+
+ public void setFootPrint(String footPrint) {
+ this.footPrint = footPrint;
+ }
+
+ public String getFormId() {
+ return formId;
+ }
+
+ public void setFormId(String formId) {
+ this.formId = formId;
+ }
+
+ public OaFileVo getDetailImg() {
+ return detailImg;
+ }
+
+ public void setDetailImg(OaFileVo detailImg) {
+ this.detailImg = detailImg;
+ }
+
+ public OaFileVo getVrImg() {
+ return vrImg;
+ }
+
+ public void setVrImg(OaFileVo vrImg) {
+ this.vrImg = vrImg;
+ }
+
+ public String getAssetsDesc() {
+ return assetsDesc;
+ }
+
+ public void setAssetsDesc(String assetsDesc) {
+ this.assetsDesc = assetsDesc;
+ }
+
+ public String getAssetsAddress() {
+ return assetsAddress;
+ }
+
+ public void setAssetsAddress(String assetsAddress) {
+ this.assetsAddress = assetsAddress;
+ }
+
+ public String getLatitude() {
+ return latitude;
+ }
+
+ public void setLatitude(String latitude) {
+ this.latitude = latitude;
+ }
+
+ public String getLongitude() {
+ return longitude;
+ }
+
+ public void setLongitude(String longitude) {
+ this.longitude = longitude;
+ }
+
+ public String getUnitNo() {
+ return unitNo;
+ }
+
+ public void setUnitNo(String unitNo) {
+ this.unitNo = unitNo;
+ }
+
+ public String getFloorNo() {
+ return floorNo;
+ }
+
+ public void setFloorNo(String floorNo) {
+ this.floorNo = floorNo;
+ }
+
+ public String getRoomNo() {
+ return roomNo;
+ }
+
+ public void setRoomNo(String roomNo) {
+ this.roomNo = roomNo;
+ }
+
+ public String getHasLift() {
+ return hasLift;
+ }
+
+ public void setHasLift(String hasLift) {
+ this.hasLift = hasLift;
+ }
+
+ public String getManagerPhone() {
+ return managerPhone;
+ }
+
+ public void setManagerPhone(String managerPhone) {
+ this.managerPhone = managerPhone;
+ }
+
+ public String getLayout() {
+ return layout;
+ }
+
+ public void setLayout(String layout) {
+ this.layout = layout;
+ }
+
+ public String getOrientation() {
+ return orientation;
+ }
+
+ public void setOrientation(String orientation) {
+ this.orientation = orientation;
+ }
+
+ public String getBuilding() {
+ return building;
+ }
+
+ public void setBuilding(String building) {
+ this.building = building;
+ }
+
+ public String getWaterFee() {
+ return waterFee;
+ }
+
+ public void setWaterFee(String waterFee) {
+ this.waterFee = waterFee;
+ }
+
+ public String getWaterFeeUnit() {
+ return waterFeeUnit;
+ }
+
+ public void setWaterFeeUnit(String waterFeeUnit) {
+ this.waterFeeUnit = waterFeeUnit;
+ }
+
+ public String getPowerFee() {
+ return powerFee;
+ }
+
+ public void setPowerFee(String powerFee) {
+ this.powerFee = powerFee;
+ }
+
+ public String getPowerFeeUnit() {
+ return powerFeeUnit;
+ }
+
+ public void setPowerFeeUnit(String powerFeeUnit) {
+ this.powerFeeUnit = powerFeeUnit;
+ }
+
+ public String getManagerName() {
+ return managerName;
+ }
+
+ public void setManagerName(String managerName) {
+ this.managerName = managerName;
+ }
+
+ public String getBizZone() {
+ return bizZone;
+ }
+
+ public void setBizZone(String bizZone) {
+ this.bizZone = bizZone;
+ }
+
+ public List getFeatures() {
+ return features;
+ }
+
+ public void setFeatures(List features) {
+ this.features = features;
+ }
+
+ public String getRenovationStatus() {
+ return renovationStatus;
+ }
+
+ public void setRenovationStatus(String renovationStatus) {
+ this.renovationStatus = renovationStatus;
+ }
+
+ public String getRentFeeUnit() {
+ return rentFeeUnit;
+ }
+
+ public void setRentFeeUnit(String rentFeeUnit) {
+ this.rentFeeUnit = rentFeeUnit;
+ }
+}
\ 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
new file mode 100644
index 0000000..34b9cea
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java
@@ -0,0 +1,156 @@
+package com.seeyon.apps.assetstenant.bill;
+
+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.contract.ContractService;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.cap4.form.bean.FormTableBean;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+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;
+
+public class BillService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+ private ContractService contractService = (ContractService) AppContext.getBean("contractService");
+ private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.CONTRACTBILLFORMNO);
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ private List buildConditions(JSONObject params, FormTableBean formTableBean) {
+ List conditions = new ArrayList<>();
+ 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("billStatus"))) {
+ if("已缴费".equals(params.getString("billStatus"))) {
+ conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL));
+ }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));
+ }
+ }
+ return conditions;
+ }
+
+ public List queryAllContractBill(List conditions) throws Exception {;
+ TableContext tableContext = getTableContext();
+ List datas = FormTableExecutor.query(tableContext, null, conditions,true);
+ List vos = new ArrayList<>();
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ BillVo billVo = new BillVo();
+ fillVo(map, billVo);
+ vos.add(billVo);
+ }
+ }
+ return vos;
+ }
+
+ public Integer countUnpayRentBills(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ 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);
+ return count.intValue();
+ }
+
+ public PageQueryVo pageQueryContractBill(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ 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 vos = new ArrayList<>();
+ Long count = FormTableExecutor.count(tableContext,null, conditions);
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ BillVo billVo = new BillVo();
+ fillVo(map, billVo);
+ vos.add(billVo);
+ }
+ pageQueryVo.setDatas(vos);
+ pageQueryVo.setTotalCount(count);
+ }
+ return pageQueryVo;
+ }
+
+ 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) {
+ return null;
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ BillVo billVo = new BillVo();
+ fillVo(fieldsMap, billVo);
+ return billVo;
+ }
+
+ 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();
+ }
+ 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,"资产编号"));
+ String asssetsName = null;
+ if(oaAssetsVo != null) {
+ asssetsName = oaAssetsVo.getAssetsName();
+ }
+ String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-";
+ return asssetsName + roomNo + term;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java
new file mode 100644
index 0000000..18d3e05
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java
@@ -0,0 +1,112 @@
+package com.seeyon.apps.assetstenant.bill;
+
+public class BillVo {
+ private String billType; //账单类型
+ private String billNo; //账单编号
+ private String cusNo; //租户编号
+ private String contractNo; //合同编号
+ private String billAmount; //账单金额
+ private String billStatus; //账单状态
+ private String billStartDate; //账单开始日期
+ private String billEndDate; //账单结束日期
+ private String billPayEndDate; //账单支付截止日期
+ private String billName;// 账单名称
+ private String billPayTime;
+ private String formId;
+
+ public String getBillType() {
+ return billType;
+ }
+
+ public void setBillType(String billType) {
+ this.billType = billType;
+ }
+
+ public String getBillNo() {
+ return billNo;
+ }
+
+ public void setBillNo(String billNo) {
+ this.billNo = billNo;
+ }
+
+ public String getCusNo() {
+ return cusNo;
+ }
+
+ public void setCusNo(String cusNo) {
+ this.cusNo = cusNo;
+ }
+
+ public String getContractNo() {
+ return contractNo;
+ }
+
+ public void setContractNo(String contractNo) {
+ this.contractNo = contractNo;
+ }
+
+ public String getBillAmount() {
+ return billAmount;
+ }
+
+ public void setBillAmount(String billAmount) {
+ this.billAmount = billAmount;
+ }
+
+ public String getBillStatus() {
+ return billStatus;
+ }
+
+ public void setBillStatus(String billStatus) {
+ this.billStatus = billStatus;
+ }
+
+ public String getBillEndDate() {
+ return billEndDate;
+ }
+
+ public void setBillEndDate(String billEndDate) {
+ this.billEndDate = billEndDate;
+ }
+
+ public String getBillName() {
+ return billName;
+ }
+
+ public void setBillName(String billName) {
+ this.billName = billName;
+ }
+
+ public String getFormId() {
+ return formId;
+ }
+
+ public void setFormId(String formId) {
+ this.formId = formId;
+ }
+
+ public String getBillPayTime() {
+ return billPayTime;
+ }
+
+ public void setBillPayTime(String billPayTime) {
+ this.billPayTime = billPayTime;
+ }
+
+ public String getBillStartDate() {
+ return billStartDate;
+ }
+
+ public void setBillStartDate(String billStartDate) {
+ this.billStartDate = billStartDate;
+ }
+
+ public String getBillPayEndDate() {
+ return billPayEndDate;
+ }
+
+ public void setBillPayEndDate(String billPayEndDate) {
+ this.billPayEndDate = billPayEndDate;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java
new file mode 100644
index 0000000..80364d4
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java
@@ -0,0 +1,107 @@
+package com.seeyon.apps.assetstenant.bill;
+
+import com.alibaba.fastjson.JSONObject;
+import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+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;
+
+public class FeeRecordService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+ private BillService billService = (BillService) AppContext.getBean("billService");
+ private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("waeBillService");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.FEERECORDFORMNO);
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+ private List buildConditions(JSONObject params) throws BusinessException {
+ TableContext tableContext = getTableContext();
+ List conditions = new ArrayList<>();
+ if(StringUtils.isNotBlank(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")));
+ }
+ if(StringUtils.isNotBlank(params.getString("contractNo"))) {
+ conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("leType"))) {
+ conditions.add(FormWhereCondition.build().display("收支类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "收支类型", params.getString("leType"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("year"))) {
+ conditions.add(FormWhereCondition.build()
+ .display("收付款日期")
+ .startWithBracket(true)
+ .clauseFactor(ClauseFactor.GE)
+ .value(params.getString("year") + "-01-01"));
+ conditions.add(FormWhereCondition.build()
+ .display("收付款日期")
+ .endWithBracket(true)
+ .clauseFactor(ClauseFactor.LE)
+ .value(params.getString("year") + "-12-31"));
+ }
+ return conditions;
+ }
+
+
+ public PageQueryVo queryBillPayRecord(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params);
+ 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 payRecordVos = new ArrayList<>();
+ Long count = FormTableExecutor.count(tableContext, null,conditions);
+ for (Object data : datas) {
+ PayRecordVo payRecordVo = new PayRecordVo();
+ Map fieldsMap = (Map) data;
+ fillVo(fieldsMap,payRecordVo);
+ payRecordVos.add(payRecordVo);
+ }
+ pageQueryVo.setDatas(payRecordVos);
+ pageQueryVo.setTotalCount(count);
+ return pageQueryVo;
+ }
+
+ public void fillVo(Map fieldsMap, PayRecordVo payRecordVo) throws Exception {
+ payRecordVo.setInOutType(getStringValue(fieldsMap,"收支类型"));
+ payRecordVo.setPayDate(getStringValue(fieldsMap,"收付款日期"));
+ payRecordVo.setInDate(getStringValue(fieldsMap,"收付款日期"));
+ BigDecimal amount = (BigDecimal) fieldsMap.get("收付款金额");
+ payRecordVo.setItemAmount(amount.toString());
+ JSONObject billQueryParam = new JSONObject();
+ billQueryParam.put("billNo", fieldsMap.get("账单编号"));
+ BillVo billVo = billService.queryOne(billQueryParam);
+ if(billVo != null) {
+ String itemName = billVo.getBillName();
+ payRecordVo.setItemName(itemName);
+ }else {
+ payRecordVo.setItemName(getStringValue(fieldsMap,"费用类型"));
+ }
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java b/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java
new file mode 100644
index 0000000..9b900ff
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java
@@ -0,0 +1,50 @@
+package com.seeyon.apps.assetstenant.bill;
+
+public class PayRecordVo {
+ private String itemName; //记录项名称
+ private String itemAmount; //记录项金额
+ private String payDate; //支付日期
+ private String inDate; //入账日期
+ private String inOutType; //收支类型
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public void setItemName(String itemName) {
+ this.itemName = itemName;
+ }
+
+ public String getItemAmount() {
+ return itemAmount;
+ }
+
+ public void setItemAmount(String itemAmount) {
+ this.itemAmount = itemAmount;
+ }
+
+ public String getPayDate() {
+ return payDate;
+ }
+
+ public void setPayDate(String payDate) {
+ this.payDate = payDate;
+ }
+
+ public String getInDate() {
+ return inDate;
+ }
+
+ public void setInDate(String inDate) {
+ this.inDate = inDate;
+ }
+
+ public String getInOutType() {
+ return inOutType;
+ }
+
+ public void setInOutType(String inOutType) {
+ this.inOutType = inOutType;
+ }
+
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java
new file mode 100644
index 0000000..0fec8c3
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java
@@ -0,0 +1,117 @@
+package com.seeyon.apps.assetstenant.bill;
+
+import com.alibaba.fastjson.JSONObject;
+import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+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;
+
+public class WaeBillService {
+
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.WAEBILLFORMNO);
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+
+ private List buildConditions(JSONObject params) throws BusinessException {
+ TableContext tableContext = getTableContext();
+ List conditions = new ArrayList<>();
+ if(StringUtils.isNotBlank(params.getString("cusNo"))) {
+ conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("billStatus"))) {
+ if("已缴费".equals(params.getString("billStatus"))) {
+ conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NOT_NULL));
+ }else {
+ 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));
+ }
+ }
+ return conditions;
+ }
+
+
+ public PageQueryVo pageQueryWaeBill(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params);
+ 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 vos = new ArrayList<>();
+ Long count = FormTableExecutor.count(tableContext,null, conditions);
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ BillVo billVo = new BillVo();
+ fillVo(map, billVo);
+ vos.add(billVo);
+ }
+ pageQueryVo.setDatas(vos);
+ pageQueryVo.setTotalCount(count);
+ }
+ return pageQueryVo;
+ }
+
+ public List queryAllWaeBill(List conditions) throws Exception {;
+ TableContext tableContext = getTableContext();
+ List datas = FormTableExecutor.query(tableContext, null,conditions,true);
+ List vos = new ArrayList<>();
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ BillVo billVo = new BillVo();
+ fillVo(map, billVo);
+ vos.add(billVo);
+ }
+ }
+ return vos;
+ }
+
+ public Integer countUnpayWaeBills(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params);
+ 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);
+ return count.intValue();
+ }
+
+ public void fillVo(Map fieldsMap, BillVo billVo) {
+ billVo.setBillType("WAE");
+ billVo.setBillStartDate(getStringValue(fieldsMap,"账单开始日期"));
+ billVo.setBillEndDate(getStringValue(fieldsMap,"账单结束日期"));
+ billVo.setBillStatus(getStringValue(fieldsMap,"缴费状态"));
+ billVo.setCusNo(getStringValue(fieldsMap,"承租方编号"));
+ billVo.setBillNo(getStringValue(fieldsMap,"档案编号"));
+ BigDecimal powerFee = fieldsMap.get("本次应缴电费") == null ? BigDecimal.ZERO : (BigDecimal) fieldsMap.get("本次应缴电费");
+ BigDecimal waterFee = fieldsMap.get("本次应缴水费") == null ? BigDecimal.ZERO : (BigDecimal) fieldsMap.get("本次应缴水费");
+ billVo.setBillAmount((powerFee.add(waterFee)).toString());
+ billVo.setBillName("水电费");
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java
new file mode 100644
index 0000000..6f786ab
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java
@@ -0,0 +1,69 @@
+package com.seeyon.apps.assetstenant.community;
+
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+
+public class CommunitityVo {
+ private String referenceTotalPrice;//参考总价
+ private String renovation;//装修
+ private String features;//特色
+ private String communityId;
+ private String referenceAvgPrice;//参考均价
+ private OaFileVo coverImg;//封面图
+ private String communityName;//楼盘名称
+
+ public String getReferenceTotalPrice() {
+ return referenceTotalPrice;
+ }
+
+ public void setReferenceTotalPrice(String referenceTotalPrice) {
+ this.referenceTotalPrice = referenceTotalPrice;
+ }
+
+ public String getRenovation() {
+ return renovation;
+ }
+
+ public void setRenovation(String renovation) {
+ this.renovation = renovation;
+ }
+
+ public String getFeatures() {
+ return features;
+ }
+
+ public void setFeatures(String features) {
+ this.features = features;
+ }
+
+ public String getCommunityId() {
+ return communityId;
+ }
+
+ public void setCommunityId(String communityId) {
+ this.communityId = communityId;
+ }
+
+ public String getReferenceAvgPrice() {
+ return referenceAvgPrice;
+ }
+
+ public void setReferenceAvgPrice(String referenceAvgPrice) {
+ this.referenceAvgPrice = referenceAvgPrice;
+ }
+
+ public OaFileVo getCoverImg() {
+ return coverImg;
+ }
+
+ public void setCoverImg(OaFileVo coverImg) {
+ this.coverImg = coverImg;
+ }
+
+ public String getCommunityName() {
+ return communityName;
+ }
+
+ public void setCommunityName(String communityName) {
+ this.communityName = communityName;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java
new file mode 100644
index 0000000..66ac88e
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java
@@ -0,0 +1,76 @@
+package com.seeyon.apps.assetstenant.community;
+
+public class CommunityBuildingVo {
+ private String sort; // 序号
+ private String openTime; // 开盘时间 → UI:2022-01-09
+ private String layers; // 层数 → UI:16层
+ private String unitNo; // 单元号
+ private Integer saleHouseCount; // 在售户数 → UI:6户
+ private String buildType; // 建筑类型 → UI:高层
+ private String liftRatio; // 户梯比 → UI:1梯1户
+ private String buildingNo; // 楼栋号 → UI:1栋
+
+ public String getOpenTime() {
+ return openTime;
+ }
+
+ public void setOpenTime(String openTime) {
+ this.openTime = openTime;
+ }
+
+ public String getSort() {
+ return sort;
+ }
+
+ public void setSort(String sort) {
+ this.sort = sort;
+ }
+
+ public String getLayers() {
+ return layers;
+ }
+
+ public void setLayers(String layers) {
+ this.layers = layers;
+ }
+
+ public String getUnitNo() {
+ return unitNo;
+ }
+
+ public void setUnitNo(String unitNo) {
+ this.unitNo = unitNo;
+ }
+
+ public Integer getSaleHouseCount() {
+ return saleHouseCount;
+ }
+
+ public void setSaleHouseCount(Integer saleHouseCount) {
+ this.saleHouseCount = saleHouseCount;
+ }
+
+ public String getBuildType() {
+ return buildType;
+ }
+
+ public void setBuildType(String buildType) {
+ this.buildType = buildType;
+ }
+
+ public String getLiftRatio() {
+ return liftRatio;
+ }
+
+ public void setLiftRatio(String liftRatio) {
+ this.liftRatio = liftRatio;
+ }
+
+ public String getBuildingNo() {
+ return buildingNo;
+ }
+
+ public void setBuildingNo(String buildingNo) {
+ this.buildingNo = buildingNo;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java
new file mode 100644
index 0000000..2a4394e
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java
@@ -0,0 +1,4 @@
+package com.seeyon.apps.assetstenant.community;
+
+public class CommunityLayoutVo {
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java
new file mode 100644
index 0000000..5066a7f
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java
@@ -0,0 +1,197 @@
+package com.seeyon.apps.assetstenant.community;
+
+import com.alibaba.fastjson.JSONObject;
+import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.cap4.form.bean.FormTableBean;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.ctp.common.filemanager.manager.AttachmentManager;
+import com.seeyon.ctp.organization.bo.V3xOrgMember;
+import com.seeyon.utils.form.*;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CommunityService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+ private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.ASSETS_FORMNO);
+ }
+
+ public PageQueryVo pageQuery(JSONObject params) throws Exception {
+ TableContext master = FormTableExecutor.master(getFormNo());
+ FormTableBean masterTableBean = master.getTableBean();
+ List conditions = buildConditions(params,masterTableBean);
+ 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(master,null,conditions,pageNo,pageSize,true);
+ List vos = new ArrayList<>();
+ Long count = FormTableExecutor.count(master,null, conditions);
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ CommunitityVo communitityVo = new CommunitityVo();
+ fillVo(map, communitityVo);
+ vos.add(communitityVo);
+ }
+ pageQueryVo.setDatas(vos);
+ pageQueryVo.setTotalCount(count);
+ }
+ return pageQueryVo;
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+ private TableContext getSubTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.sub(getFormNo(),"楼盘明细");
+ return tableContext;
+ }
+
+ // ====================== 填充楼栋VO(严格匹配UI字段) ======================
+ private void fillBuildingVo(Map map, CommunityBuildingVo vo) {
+ vo.setSort(getStringValue(map, "序号1"));
+ vo.setOpenTime(getStringValue(map, "明细-开盘时间"));
+ // 注意:如果数据库没有直接的"层数/单元数/在售户数/户梯比"字段,需要从表单字段映射
+ // 假设表单字段如下:
+// vo.setLayers(getStringValue(map, "层数"));
+// vo.setUnitCount(getInteger(map, "单元数"));
+// vo.setSaleHouseCount(getInteger(map, "在售户数"));
+// vo.setBuildType(getStr(map, "明细-建筑类型"));
+// vo.setLiftRatio(getStr(map, "户梯比"));
+// vo.setAvgPrice(getBigDecimal(map, "明细-参考均价"));
+ }
+
+ private List buildConditions(JSONObject params, FormTableBean formTableBean) throws BusinessException {
+ List conditions = new ArrayList<>();
+ if(StringUtils.isNotBlank(params.getString("communityId"))) {
+ conditions.add(FormWhereCondition.build().display("formmain_id").value(params.getString("communityId")));
+ }
+ if(StringUtils.isNotBlank(params.getString("assetsStatus"))) {
+ conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"资产状态",params.getString("assetsStatus"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("manageType"))) {
+ conditions.add(FormWhereCondition.build().display("运营类型")
+ .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"运营类型",params.getString("manageType"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("bizZone"))) {
+ 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)));
+ }
+ 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));
+ }
+ }
+ return conditions;
+ }
+
+ public CommunitityVo queryCommunityDetail(String communityId) throws Exception {
+ TableContext tableContext = getTableContext();
+ JSONObject params = new JSONObject();
+ params.put("communityId",communityId);
+ List conditions = buildConditions(params,tableContext.getTableBean());
+ CommunitityVo communitityVo = new CommunitityVo();
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,true);
+ if(formColumn == null) {
+ return communitityVo;
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ fillVo(fieldsMap,communitityVo);
+ return communitityVo;
+ }
+
+ public List queryBuildingList(JSONObject params) throws Exception {
+ TableContext tableContext = getSubTableContext();
+ List conditions = buildConditions(params,tableContext.getTableBean());
+ List formColumns = FormTableExecutor.query(tableContext, null, conditions, true);
+ if(formColumns.size() == 0) {
+ return new ArrayList<>();
+ }
+ List buildingVos = new ArrayList<>();
+ Map buildingVoMap = new HashMap<>();
+ for(FormColumn formColumn : formColumns) {
+ Map fieldsMap = formColumn.getFieldsMap();
+ String buildingNo = getStringValue(fieldsMap,"明细-售卖楼栋");
+ if(!buildingVoMap.containsKey(buildingNo)) {
+ CommunityBuildingVo communityBuildingVo = new CommunityBuildingVo();
+ communityBuildingVo.setBuildingNo(buildingNo);
+ communityBuildingVo.setBuildType(getStringValue(fieldsMap,"明细-建筑类型"));
+ communityBuildingVo.setOpenTime(getStringValue(fieldsMap,"明细-开盘时间"));
+ communityBuildingVo.setUnitNo(buildingNo);
+ communityBuildingVo.setSaleHouseCount(1);
+ }else {
+ CommunityBuildingVo buildingVo = buildingVoMap.get(buildingNo);
+ buildingVo.setSaleHouseCount(buildingVo.getSaleHouseCount() + 1);
+ }
+ }
+ buildingVos.addAll(buildingVoMap.values());
+ return buildingVos;
+ }
+
+ public List queryLayoutList(JSONObject params) throws Exception {
+ TableContext tableContext = getSubTableContext();
+ List conditions = buildConditions(params,tableContext.getTableBean());
+ List formColumns = FormTableExecutor.query(tableContext, null, conditions, true);
+ return null;
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ public void fillVo(Map fieldsMap,CommunitityVo communitityVo) throws BusinessException {
+ communitityVo.setCommunityId(getStringValue(fieldsMap,"资产编号")); //楼盘id
+ communitityVo.setCommunityName(getStringValue(fieldsMap,"品牌名称")); //楼盘名称
+ communitityVo.setFeatures(getStringValue(fieldsMap,"详情信息")); //楼盘特点
+ communitityVo.setRenovation(getStringValue(fieldsMap,"id")); //装修情况
+ communitityVo.setReferenceAvgPrice(getStringValue(fieldsMap,"资产状态")); //楼盘参考均价
+ communitityVo.setReferenceTotalPrice(getStringValue(fieldsMap,"资产类型"));//楼盘参考总价
+ V3xOrgMember member = null;
+ BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积");
+ BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金");
+ if(fieldsMap.get("VR文件上传") != null) {
+ communitityVo.setCoverImg(OaFileVo.getInstance((Long)fieldsMap.get("VR文件上传"),attachmentManager));
+ }
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java b/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java
new file mode 100644
index 0000000..49c339b
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java
@@ -0,0 +1,18 @@
+package com.seeyon.apps.assetstenant.config;
+
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.apps.common.config.ICstConfigApi;
+import com.seeyon.apps.common.plugin.vo.ConfigVo;
+import com.seeyon.ctp.common.AppContext;
+
+import static com.seeyon.apps.assetstenant.constants.RentConstants.getPluginId;
+
+public class AssetsTenantConfigProvider {
+
+ protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
+
+ public String getBizConfigByKey(RentConstants key) {
+ ConfigVo config = cstConfigApi.getConfig(getPluginId());
+ return config.getParamVal(key.name());
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java b/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java
new file mode 100644
index 0000000..80012af
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java
@@ -0,0 +1,47 @@
+package com.seeyon.apps.assetstenant.constants;
+
+public enum RentConstants {
+
+ plugin("assetstenant","插件ID"),
+ OA_HOST("",""),
+ FORMEDITLOGINNAME("","表单修改登录名"),
+ updateAccountName("表单",""),
+ restName("",""),
+ restPwd("",""),
+ formLoginName("2019","表单数据录入登录名"),
+ ASSETS_FORMNO("","资产运营档案编码"),
+ CONTRACT_FORMNO("","租赁合同表单编码"),
+ DISCHARGE_TEMPLATECODE("","退租申请模板编码"),
+ DISCHARGE_FORMNO("","退租申请表单编码"),
+ FALLBACK_FORMNO("","留言板表单编码"),
+ RESERVE_FORMNO("","看房预约表单编码"),
+ VIEWRECORD_FORMNO("","浏览记录表单编码"),
+ FORMAPPNAME("","表单应用名称"),
+ FEERECORDFORMNO("","费用收支台账表单编码"),
+ CONTRACTBILLFORMNO("","合同账单表单编码"),
+ WAEBILLFORMNO("","水电费账单表单编码"),
+ CUSDOCFORMNO("","客商档案表单编码"),
+ NOTICEFORMNO("","招商公告表单编码"),
+ WECHATBACKENDHOST("","微信小程序后端host"),
+ WEAPPCONFIGFORMNO("","小程序配置表")
+ ;
+ RentConstants(String defaultValue, String description) {
+ this.defaultValue = defaultValue;
+ this.description = description;
+ }
+
+ private String defaultValue;
+ private String description;
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public static String getPluginId() {
+ return plugin.defaultValue;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java
new file mode 100644
index 0000000..85be01d
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java
@@ -0,0 +1,107 @@
+package com.seeyon.apps.assetstenant.contract;
+
+
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+
+public class ContractAssetsVo {
+
+ private String assetsNo; // 资产编号
+ private String assetsName; // 资产名称
+ private String rentFee; //租金
+ private String formId; //表单记录ID
+ private OaFileVo detailImg; //详情图片
+ private String waterFee; //水费
+ private String waterFeeUnit; //水费单位
+ private String powerFee; //电费
+ private String powerFeeUnit; //电费单位
+ private String footPrint; //占地大小
+ private String manager;//管理员
+
+ public String getAssetsNo() {
+ return assetsNo;
+ }
+
+ public void setAssetsNo(String assetsNo) {
+ this.assetsNo = assetsNo;
+ }
+
+ public String getAssetsName() {
+ return assetsName;
+ }
+
+ public void setAssetsName(String assetsName) {
+ this.assetsName = assetsName;
+ }
+
+ public String getRentFee() {
+ return rentFee;
+ }
+
+ public void setRentFee(String rentFee) {
+ this.rentFee = rentFee;
+ }
+
+ public String getFormId() {
+ return formId;
+ }
+
+ public void setFormId(String formId) {
+ this.formId = formId;
+ }
+
+ public OaFileVo getDetailImg() {
+ return detailImg;
+ }
+
+ public void setDetailImg(OaFileVo detailImg) {
+ this.detailImg = detailImg;
+ }
+
+ public String getWaterFee() {
+ return waterFee;
+ }
+
+ public void setWaterFee(String waterFee) {
+ this.waterFee = waterFee;
+ }
+
+ public String getWaterFeeUnit() {
+ return waterFeeUnit;
+ }
+
+ public void setWaterFeeUnit(String waterFeeUnit) {
+ this.waterFeeUnit = waterFeeUnit;
+ }
+
+ public String getPowerFee() {
+ return powerFee;
+ }
+
+ public void setPowerFee(String powerFee) {
+ this.powerFee = powerFee;
+ }
+
+ public String getPowerFeeUnit() {
+ return powerFeeUnit;
+ }
+
+ public void setPowerFeeUnit(String powerFeeUnit) {
+ this.powerFeeUnit = powerFeeUnit;
+ }
+
+ public String getFootPrint() {
+ return footPrint;
+ }
+
+ public void setFootPrint(String footPrint) {
+ this.footPrint = footPrint;
+ }
+
+ public String getManager() {
+ return manager;
+ }
+
+ public void setManager(String manager) {
+ this.manager = manager;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java
new file mode 100644
index 0000000..43758c2
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java
@@ -0,0 +1,48 @@
+package com.seeyon.apps.assetstenant.contract;
+
+import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.utils.form.FormWhereCondition;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ContractDocService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+
+// public String getAssetsManagerOrg(String contractNo) throws Exception {
+// String formNo = configProvider.getBizConfigByKey(RentConstants.contractDocFormCode);
+// List conditions = new ArrayList<>();
+// conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo));
+// FormColumn formColumn = formDataOperator.queryOneRowFormData(formNo, true, null, conditions);
+// if(formColumn == null || formColumn.getFieldsMap() == null) {
+// return null;
+// }
+// Map fieldsMap = formColumn.getFieldsMap();
+// return (String)fieldsMap.get("签订单位");
+// }
+//
+// public Map getContractInfoByContractNo(String contractNo) throws Exception {
+// String formNo = configProvider.getBizConfigByKey(RentConstants.contractDocFormCode);
+// List conditions = new ArrayList<>();
+// conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo));
+// FormColumn formColumn = formDataOperator.queryOneRowFormData(formNo, false, null, conditions);
+// if(formColumn == null) {
+// return null;
+// }
+// Map fieldsMap = formColumn.getFieldsMap();
+// Map map = new HashMap<>();
+// if(fieldsMap == null) {
+// return map;
+// }
+// map.put("合同名称",fieldsMap.get("合同名称"));
+// map.put("合同金额",fieldsMap.get("合同金额"));
+// map.put("承租方名称",fieldsMap.get("承租方名称"));
+// map.put("承租方类型",fieldsMap.get("承租方类型"));
+// return map;
+// }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java
new file mode 100644
index 0000000..beb3ba6
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java
@@ -0,0 +1,45 @@
+package com.seeyon.apps.assetstenant.contract;
+
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+
+public class ContractDurationUtil {
+
+ /**
+ * 计算合同生效时长,格式化为:x年x月x日
+ * @param startDateStr 合同开始日期 格式:yyyy-MM-dd
+ * @param endDateStr 合同结束日期 格式:yyyy-MM-dd
+ * @return 格式化后的时长文本,例如:2年3月5天、6月2天、10天
+ */
+ public static String calculateContractDuration(String startDateStr, String endDateStr) {
+ // 日期格式化器
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+ // 字符串转日期
+ LocalDate startDate = LocalDate.parse(startDateStr, formatter);
+ LocalDate endDate = LocalDate.parse(endDateStr, formatter);
+
+ // 计算两个日期之间的年、月、日(Java8+ 标准API,自动处理大小月、闰年)
+ Period period = Period.between(startDate, endDate);
+
+ int years = period.getYears();
+ int months = period.getMonths();
+ int days = period.getDays();
+
+ // 拼接结果(自动忽略0值)
+ StringBuilder sb = new StringBuilder();
+ if (years > 0) {
+ sb.append(years).append("年");
+ }
+ if (months > 0) {
+ sb.append(months).append("月");
+ }
+ if (days > 0) {
+ sb.append(days).append("天");
+ }
+
+ // 防止开始结束同一天
+ return sb.length() == 0 ? "0天" : sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java
new file mode 100644
index 0000000..8144935
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java
@@ -0,0 +1,377 @@
+package com.seeyon.apps.assetstenant.contract;
+
+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.file.OaFileVo;
+import com.seeyon.apps.assetstenant.po.PageQueryVo;
+import com.seeyon.apps.esign.service.SignLinkService;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.ctp.common.filemanager.manager.AttachmentManager;
+import com.seeyon.utils.form.*;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class ContractService {
+
+ private static final Log log = LogFactory.getLog(ContractService.class);
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+ private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService");
+ private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("signLinkService");
+ private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.CONTRACT_FORMNO);
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+ public Integer countUnSign(JSONObject params) throws BusinessException {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params);
+ conditions.add(FormWhereCondition.build().display("签署状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "签署状态", "待签署")));
+ Long count = FormTableExecutor.count(tableContext,null, conditions);
+ return count.intValue();
+ }
+
+ public PageQueryVo pageQuery(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ List conditions = buildConditions(params);
+ 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 oaContractVos = new ArrayList<>();
+ Long count = FormTableExecutor.count(tableContext,null, conditions);
+ pageQueryVo.setDatas(oaContractVos);
+ pageQueryVo.setTotalCount(count);
+ TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细");
+ for (Object data : datas) {
+ OaContractVo oaContractVo = new OaContractVo();
+ Map dataMap = (Map) data;
+ fillVo(dataMap,oaContractVo);
+ Long id = Long.parseLong((String)dataMap.get("id"));
+ List subConditions = new ArrayList<>();
+ subConditions.add(FormWhereCondition.build().display("formmain_id").value(id));
+ List subDatas = FormTableExecutor.pageQuery(subTableContext, null, subConditions, 1, 10,true);
+ log.info("查询到的关联资产数量: " + subDatas.size());
+ if(subDatas.size() > 0) {
+ Map subOneRowData = (Map) subDatas.get(0);
+ String assetsNo = (String) subOneRowData.get("资产编号");
+ JSONObject temp = new JSONObject();
+ temp.put("assetsNo",assetsNo);
+ ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp);
+ oaContractVo.setAssetsName(assetsVo.getAssetsName());
+ oaContractVo.setManager(assetsVo.getManager());
+ }
+ oaContractVo.setTenantName(getStringValue(dataMap,"承租方名称"));
+ oaContractVo.setDeposit(getStringValue(dataMap,"履约保证金"));
+ oaContractVo.setRentFee(getStringValue(dataMap,"租金"));
+ oaContractVo.setRentTotalTime(ContractDurationUtil.calculateContractDuration(getStringValue(dataMap,"合同开始日期"),getStringValue(dataMap,"合同截止日期")));
+ oaContractVo.setRentFee(getViewRentFee(dataMap));
+ String payWay = getStringValue(dataMap,"租金单位");
+ switch (payWay) {
+ case "季度缴": oaContractVo.setRentFeeUnit("季");break;
+ case "月缴": oaContractVo.setRentFeeUnit("月");break;
+ case "年缴": oaContractVo.setRentFeeUnit("年");break;
+ case "一次性": oaContractVo.setRentFeeUnit(null);break;
+ case "半年缴": oaContractVo.setRentFeeUnit("半年");break;
+ default: oaContractVo.setRentFeeUnit(null);break;
+ }
+ oaContractVos.add(oaContractVo);
+ }
+ return pageQueryVo;
+ }
+
+ private String getViewRentFee(Map dataMap) {
+ String feeCountType = getStringValue(dataMap, "计费方式");
+ if("固定租金".equals(feeCountType)){
+ return getStringValue(dataMap,"固定租金标准");
+ }else {
+ String totalArea = getStringValue(dataMap,"租赁总面积");
+ String price = getStringValue(dataMap,"实际租赁单价");
+ if(StringUtils.isAnyBlank(totalArea,price)){
+ return null;
+ }
+ return String.valueOf(Double.parseDouble(totalArea) * Double.parseDouble(price));
+ }
+ }
+
+ public List queryAll(JSONObject params) throws Exception {
+ List conditions = buildConditions(params);
+ List queryColumns = new ArrayList<>();
+ queryColumns.add("合同编号");
+ queryColumns.add("合同名称");
+ TableContext tableContext = getTableContext();
+ List datas = FormTableExecutor.query(tableContext, queryColumns,conditions,true);
+ List oaContractVos = new ArrayList<>();
+ TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细");
+ for (FormColumn data : datas) {
+ OaContractVo oaContractVo = new OaContractVo();
+ Map dataMap = data.getFieldsMap();
+ fillVo(dataMap,oaContractVo);
+ Long id = Long.parseLong((String)dataMap.get("id"));
+ List subConditions = new ArrayList<>();
+ subConditions.add(FormWhereCondition.build().display("formmain_id").value(id));
+ List subDatas = FormTableExecutor.query(subTableContext, null, subConditions, true);
+ List assetsVos = new ArrayList<>();
+ for (Object subData : subDatas) {
+ Map subOneRowData = (Map) subData;
+ String assetsNo = (String) subOneRowData.get("资产编号");
+ JSONObject temp = new JSONObject();
+ temp.put("assetsNo",assetsNo);
+ ContractAssetsVo assetsVo = new ContractAssetsVo();
+ assetsVo.setAssetsNo(subOneRowData.get("资产编号") + "");
+ assetsVo.setAssetsName(subOneRowData.get("资产名称") + "");
+ assetsVos.add(assetsVo);
+ }
+ oaContractVo.setAssetsVos(assetsVos);
+ oaContractVos.add(oaContractVo);
+ }
+ return oaContractVos;
+ }
+
+ public void fillVo(Map fieldsMap, OaContractVo oaContractVo) {
+ oaContractVo.setFormId(getStringValue(fieldsMap, "id"));
+ oaContractVo.setContractNo(getStringValue(fieldsMap,"合同编号"));
+ oaContractVo.setContractName(getStringValue(fieldsMap,"合同名称"));
+ oaContractVo.setSignStatus(getStringValue(fieldsMap,"签署状态"));
+ oaContractVo.setCusNo(getStringValue(fieldsMap,"承租方编号"));
+ oaContractVo.setContractStartTime(getStringValue(fieldsMap,"合同开始日期"));
+ oaContractVo.setContractEndTime(getStringValue(fieldsMap,"合同截止日期"));
+ oaContractVo.setStartDate(oaContractVo.getContractStartTime());
+ oaContractVo.setEndDate(oaContractVo.getContractEndTime());
+ if(fieldsMap.get("盖章后合同附件") != null) {
+ oaContractVo.seteContractFile(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("盖章后合同附件")),attachmentManager));
+ }
+ oaContractVo.seteContractFlowId(getStringValue(fieldsMap,"电子签合同流程ID"));
+ }
+
+ private List buildConditions(JSONObject params) throws BusinessException {
+ TableContext tableContext = getTableContext();
+ List conditions = new ArrayList<>();
+ if(StringUtils.isNotBlank(params.getString("cusNo"))) {
+ conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("contractNo"))) {
+ conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo")));
+ }
+ if(StringUtils.isNotBlank(params.getString("formmainId"))) {
+ conditions.add(FormWhereCondition.build().display("formmainId").value(params.getString("formmainId")));
+ }
+ if(StringUtils.isNotBlank(params.getString("signStatus"))) {
+ conditions.add(FormWhereCondition.build().display("签署状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"签署状态",params.getString("signStatus"))));
+ }
+ if(StringUtils.isNotBlank(params.getString("signWay"))) {
+ String enumId = EnumMapUtils.getEnumItemIdByGroupNameAndItemShowValue("签订方式",params.getString("signWay"));
+ conditions.add(FormWhereCondition.build().display("签订方式").value(enumId).clauseFactor(ClauseFactor.NEQ));
+ }
+ if(StringUtils.isNotBlank(params.getString("startDate"))) {
+ conditions.add(FormWhereCondition.build().display("合同开始日期").clauseFactor(ClauseFactor.GE).value(params.getString("startDate")));
+ }
+ if(StringUtils.isNotBlank(params.getString("endDate"))) {
+ conditions.add(FormWhereCondition.build().display("合同截止日期").clauseFactor(ClauseFactor.LE).value(params.getString("endDate")));
+ }
+ return conditions;
+ }
+
+ public String queryContractPayPeriod(String contractNo, String billDate) throws Exception {
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build()
+ .display("合同编号")
+ .value(contractNo));
+ FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), conditions, true);
+ if (formColumn == null || formColumn.getFieldsMap() == null) {
+ return "";
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ String payWay = toStr(fieldsMap.get("缴费方式"));
+ int years = parseInt(fieldsMap.get("文本-年"));
+ int months = parseInt(fieldsMap.get("文本-月"));
+ int days = parseInt(fieldsMap.get("文本-日"));
+
+ String rentStartDateStr = toStr(fieldsMap.get("计租日期"));
+ if (rentStartDateStr.isEmpty() || billDate == null || billDate.isEmpty()) {
+ return "";
+ }
+
+ LocalDate startDate = LocalDate.parse(rentStartDateStr);
+ LocalDate billLocalDate = LocalDate.parse(billDate);
+ LocalDate endDate = startDate.plusYears(years).plusMonths(months).plusDays(days);
+
+ // 一次性/年付 1期
+ if ("一次性".equals(payWay) || "年缴".equals(payWay)) {
+ return "1";
+ }
+
+ // 账单早于开始日
+ if (billLocalDate.isBefore(startDate)) {
+ return "1";
+ }
+
+ int totalMonths = years * 12 + months;
+
+ // 账单超过结束日
+ if (billLocalDate.isAfter(endDate)) {
+ switch (payWay) {
+ case "季度缴":
+ int quarterPeriod = totalMonths / 3;
+ return (quarterPeriod > 0 ? quarterPeriod : 1) + "";
+ case "月缴":
+ return (totalMonths > 0 ? totalMonths : 1) + "";
+ // 修复后 半年缴
+ case "半年缴":
+ int halfYearPeriod = totalMonths / 6;
+ return (halfYearPeriod > 0 ? halfYearPeriod : 1) + "";
+ default:
+ return "1";
+ }
+ }
+
+ // 账单在合同期内
+ switch (payWay) {
+ case "季度缴":
+ long monthsBetweenQ = ChronoUnit.MONTHS.between(startDate, billLocalDate);
+ return ((monthsBetweenQ / 3) + 1) + "";
+ case "月缴":
+ long monthsBetween = ChronoUnit.MONTHS.between(startDate, billLocalDate);
+ return (monthsBetween + 1) + "";
+ // 修复后 半年缴
+ case "半年缴":
+ long monthsBetweenHalf = ChronoUnit.MONTHS.between(startDate, billLocalDate);
+ return (monthsBetweenHalf / 6 + 1) + "";
+ default:
+ return "1";
+ }
+ }
+
+ private String toStr(Object obj) {
+ return obj == null ? "" : obj.toString().trim();
+ }
+
+ private int parseInt(Object obj) {
+ if (obj == null) return 0;
+ try {
+ return Integer.parseInt(obj.toString().trim());
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ }
+
+ public OaContractVo queryContractDetail(JSONObject params) throws Exception {
+ List conditions = buildConditions(params);
+ FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(),conditions,true);
+ if(formColumn == null) {
+ return new OaContractVo();
+ }
+ Map dataMap = formColumn.getFieldsMap();
+ OaContractVo oaContractVo = new OaContractVo();
+ fillVo(dataMap,oaContractVo);
+ Long id = Long.parseLong((String)dataMap.get("id"));
+ List subConditions = new ArrayList<>();
+ subConditions.add(FormWhereCondition.build().display("formmain_id").value(id));
+ TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细");
+ List subDatas = FormTableExecutor.pageQuery(subTableContext, null, subConditions, 1, 10,true);
+ if(subDatas.size() > 0) {
+ Map subOneRowData = (Map) subDatas.get(0);
+ String assetsNo = (String) subOneRowData.get("资产编号");
+ BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价");
+ BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积");
+ String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null;
+ JSONObject temp = new JSONObject();
+ temp.put("assetsNo",assetsNo);
+ ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp);
+ assetsVo.setRentFee(rentFee);
+ assetsVo.setFootPrint(rentArea.toString());
+ List vos = new ArrayList<>();
+ vos.add(assetsVo);
+ oaContractVo.setAssetsVos(vos);
+ }
+ return oaContractVo;
+ }
+
+ public List queryContractAllAssets(String contractNo) throws Exception {
+ List tempConditions = new ArrayList<>();
+ tempConditions.add(FormWhereCondition.build().display("合同编号").value(contractNo));
+ FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), tempConditions,true);
+ if(formColumn == null) {
+ return null;
+ }
+ String id = formColumn.getId();
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("formmain_id").value(id));
+ TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细");
+ List subDatas = FormTableExecutor.query(subTableContext,null,conditions,true);
+ List assetsVos = new ArrayList<>();
+ if(subDatas.size() > 0) {
+ for (Object subData : subDatas) {
+ Map subOneRowData = (Map) subData;
+ String assetsNo = (String) subOneRowData.get("资产编号");
+ BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价");
+ BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积");
+ String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null;
+ JSONObject temp = new JSONObject();
+ temp.put("assetsNo",assetsNo);
+ OaAssetsVo assetsVo = assetsService.queryAssetsDetail(temp);
+ assetsVo.setRentFee(rentFee);
+ assetsVo.setFootPrint(rentArea.toString());
+ assetsVos.add(assetsVo);
+ }
+ }
+ return assetsVos;
+ }
+
+ public PageQueryVo pageQueryContractAssetsInfoWithFee(JSONObject params) throws Exception {
+ List conditions = buildConditions(params);
+ TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细");
+ List subDatas = FormTableExecutor.pageQuery(subTableContext, null, conditions, 1, 10,true);
+ PageQueryVo< ContractAssetsVo> pageQueryVo = new PageQueryVo();
+ List assetsVos = new ArrayList<>();
+ if(subDatas.size() > 0) {
+ for (Object subData : subDatas) {
+ Map subOneRowData = (Map) subData;
+ String assetsNo = (String) subOneRowData.get("资产编号");
+ BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价");
+ BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积");
+ String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null;
+ JSONObject temp = new JSONObject();
+ temp.put("assetsNo",assetsNo);
+ ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp);
+ assetsVo.setRentFee(rentFee);
+ assetsVo.setFootPrint(rentArea.toString());
+ assetsVos.add(assetsVo);
+ }
+ }
+ Long totalCount = FormTableExecutor.count(subTableContext, null, conditions);
+ pageQueryVo.setTotalCount(totalCount);
+ pageQueryVo.setDatas(assetsVos);
+ return pageQueryVo;
+ }
+
+ public String getSignLink(String eFlowId) {
+ return signLinkService.getSignLink(eFlowId);
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java
new file mode 100644
index 0000000..8512cc6
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java
@@ -0,0 +1,189 @@
+package com.seeyon.apps.assetstenant.contract;
+
+
+import com.seeyon.apps.assetstenant.file.OaFileVo;
+
+import java.util.List;
+
+public class OaContractVo {
+ private String formId; //表单ID
+ private String contractNo; //合同编号
+ private String contractName; //合同名称
+ private String signStatus; //签订状态
+ private String startDate; //开始日期
+ private String endDate; //开始日期
+ private OaFileVo eContractFile; //电子合同文件
+ private String eContractFlowId; //电子合同签署流程ID
+ private String contractStartTime; //合同开始时间
+ private String contractEndTime; //合同结束时间
+ private List assetsVos; //资产信息
+ private String contractType; //合同类型
+ private String cusNo; //客商编码
+ private String deposit;//押金
+ private String assetsName;//资产名称
+ private String manager; //管理员
+ private String rentTotalTime; //租期
+ private String tenantName; //租户名称
+ private String rentFee;//预估租金
+ private String rentFeeUnit;//租金单位
+
+ public String getContractNo() {
+ return contractNo;
+ }
+
+ public void setContractNo(String contractNo) {
+ this.contractNo = contractNo;
+ }
+
+ public String getContractName() {
+ return contractName;
+ }
+
+ public void setContractName(String contractName) {
+ this.contractName = contractName;
+ }
+
+ public String getSignStatus() {
+ return signStatus;
+ }
+
+ public void setSignStatus(String signStatus) {
+ this.signStatus = signStatus;
+ }
+
+ public List getAssetsVos() {
+ return assetsVos;
+ }
+
+ public void setAssetsVos(List assetsVos) {
+ this.assetsVos = assetsVos;
+ }
+
+ public OaFileVo geteContractFile() {
+ return eContractFile;
+ }
+
+ public void seteContractFile(OaFileVo eContractFile) {
+ this.eContractFile = eContractFile;
+ }
+
+ public String getCusNo() {
+ return cusNo;
+ }
+
+ public void setCusNo(String cusNo) {
+ this.cusNo = cusNo;
+ }
+
+ public String geteContractFlowId() {
+ return eContractFlowId;
+ }
+
+ public void seteContractFlowId(String eContractFlowId) {
+ this.eContractFlowId = eContractFlowId;
+ }
+
+ public String getFormId() {
+ return formId;
+ }
+
+ public void setFormId(String formId) {
+ this.formId = formId;
+ }
+
+ public String getContractStartTime() {
+ return contractStartTime;
+ }
+
+ public void setContractStartTime(String contractStartTime) {
+ this.contractStartTime = contractStartTime;
+ }
+
+ public String getContractEndTime() {
+ return contractEndTime;
+ }
+
+ public void setContractEndTime(String contractEndTime) {
+ this.contractEndTime = contractEndTime;
+ }
+
+ public String getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(String startDate) {
+ this.startDate = startDate;
+ }
+
+ public String getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(String endDate) {
+ this.endDate = endDate;
+ }
+
+ public String getContractType() {
+ return contractType;
+ }
+
+ public void setContractType(String contractType) {
+ this.contractType = contractType;
+ }
+
+ public String getDeposit() {
+ return deposit;
+ }
+
+ public void setDeposit(String deposit) {
+ this.deposit = deposit;
+ }
+
+ public String getAssetsName() {
+ return assetsName;
+ }
+
+ public void setAssetsName(String assetsName) {
+ this.assetsName = assetsName;
+ }
+
+ public String getManager() {
+ return manager;
+ }
+
+ public void setManager(String manager) {
+ this.manager = manager;
+ }
+
+ public String getRentTotalTime() {
+ return rentTotalTime;
+ }
+
+ public void setRentTotalTime(String rentTotalTime) {
+ this.rentTotalTime = rentTotalTime;
+ }
+
+ public String getTenantName() {
+ return tenantName;
+ }
+
+ public void setTenantName(String tenantName) {
+ this.tenantName = tenantName;
+ }
+
+ public String getRentFee() {
+ return rentFee;
+ }
+
+ public void setRentFee(String rentFee) {
+ this.rentFee = rentFee;
+ }
+
+ public String getRentFeeUnit() {
+ return rentFeeUnit;
+ }
+
+ public void setRentFeeUnit(String rentFeeUnit) {
+ this.rentFeeUnit = rentFeeUnit;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java b/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java
new file mode 100644
index 0000000..14c72c1
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java
@@ -0,0 +1,76 @@
+package com.seeyon.apps.assetstenant.cus;
+
+public class Customer {
+ private String id;
+ private String cusName;
+ private String cusPhone;
+ private String cardNo;
+ private String cusNo;
+ private String orgNo;
+ private String orgManagerName;
+ private int isOrg = 0;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getCusName() {
+ return cusName;
+ }
+
+ public void setCusName(String cusName) {
+ this.cusName = cusName;
+ }
+
+ public String getCusPhone() {
+ return cusPhone;
+ }
+
+ public void setCusPhone(String cusPhone) {
+ this.cusPhone = cusPhone;
+ }
+
+ public String getCardNo() {
+ return cardNo;
+ }
+
+ public void setCardNo(String cardNo) {
+ this.cardNo = cardNo;
+ }
+
+ public String getCusNo() {
+ return cusNo;
+ }
+
+ public void setCusNo(String cusNo) {
+ this.cusNo = cusNo;
+ }
+
+ public String getOrgManagerName() {
+ return orgManagerName;
+ }
+
+ public void setOrgManagerName(String orgManagerName) {
+ this.orgManagerName = orgManagerName;
+ }
+
+ public String getOrgNo() {
+ return orgNo;
+ }
+
+ public void setOrgNo(String orgNo) {
+ this.orgNo = orgNo;
+ }
+
+ public int getIsOrg() {
+ return isOrg;
+ }
+
+ public void setIsOrg(int isOrg) {
+ this.isOrg = isOrg;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java
new file mode 100644
index 0000000..9f163fa
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java
@@ -0,0 +1,82 @@
+package com.seeyon.apps.assetstenant.cus;
+
+import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider;
+import com.seeyon.apps.assetstenant.constants.RentConstants;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.utils.form.*;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class CustomerService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.CUSDOCFORMNO);
+ }
+
+ private TableContext getTableContext() throws BusinessException {
+ TableContext tableContext = FormTableExecutor.master(getFormNo());
+ return tableContext;
+ }
+
+
+ public String matchCusPerson(Customer customer) throws Exception {
+ String cardNo = customer.getCardNo();
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("纳税人识别号或身份证号").value(cardNo).clauseFactor(ClauseFactor.EQ));
+ TableContext tableContext = getTableContext();
+ conditions.add(FormWhereCondition.build().display("客商分类").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"客商分类","个人")));
+ List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true);
+ if(formColumnList != null && formColumnList.size() > 0){
+ Map fieldsMap = formColumnList.get(0).getFieldsMap();
+ return (String)fieldsMap.get("客商编号");
+ }
+ return null;
+ }
+
+ public String matchCusOrg(Customer customer) throws BusinessException {
+ String orgNo = customer.getOrgNo();
+ List conditions = new ArrayList<>();
+ TableContext tableContext = getTableContext();
+ conditions.add(FormWhereCondition.build().display("纳税人识别号或身份证号").value(orgNo).clauseFactor(ClauseFactor.EQ));
+ conditions.add(FormWhereCondition.build().display("客商分类").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"客商分类","企业")));
+ List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true);
+ if(formColumnList != null && formColumnList.size() > 0){
+ Map fieldsMap = formColumnList.get(0).getFieldsMap();
+ return (String)fieldsMap.get("客商编码");
+ }
+ return null;
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ public Customer getCustomerInfo(String cusNo) throws BusinessException {
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().display("客商编号").value(cusNo).clauseFactor(ClauseFactor.EQ));
+ TableContext tableContext = getTableContext();
+ List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true);
+ if(formColumnList != null && formColumnList.size() > 0){
+ Map fieldsMap = formColumnList.get(0).getFieldsMap();
+ Customer customer = new Customer();
+ customer.setCusName(getStringValue(fieldsMap,"客商名称"));
+ customer.setCusNo(getStringValue(fieldsMap,"客商编码"));
+ customer.setCusPhone(getStringValue(fieldsMap,"客户联系方式"));
+ customer.setOrgManagerName(getStringValue(fieldsMap,"客商联系人"));
+ customer.setOrgNo(getStringValue(fieldsMap,"纳税人识别号或身份证号"));
+ customer.setIsOrg(StringUtils.isNotEmpty(customer.getOrgNo()) ? 1 : 0);
+ return customer;
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java
new file mode 100644
index 0000000..17e28cb
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java
@@ -0,0 +1,131 @@
+package com.seeyon.apps.assetstenant.discharge;
+
+import com.alibaba.fastjson.JSONObject;
+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.contract.ContractService;
+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.FormTableBean;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.utils.form.*;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class DisCharegeService {
+
+ private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider");
+ private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService");
+ private ContractService contractService = (ContractService) AppContext.getBean("contractService");
+
+ private String getFormNo() {
+ return configProvider.getBizConfigByKey(RentConstants.DISCHARGE_FORMNO);
+ }
+ private TableContext getTableContext() throws BusinessException {
+ return FormTableExecutor.master(getFormNo());
+ }
+
+ private String getStringValue(Map fieldsMap,String key) {
+ Object o = fieldsMap.get(key);
+ if(o == null) {
+ return null;
+ }
+ return o + "";
+ }
+
+ public PageQueryVo pageQuery(JSONObject params) throws Exception {
+ List conditions = buildConditions(params);
+ Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo");
+ Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize");
+ List queryColumnVos = new ArrayList<>();
+ PageQueryVo pageQueryVo = new PageQueryVo();
+ List vos = new ArrayList<>();
+ TableContext tableContext = getTableContext();
+ List datas = FormTableExecutor.pageQuery(tableContext, queryColumnVos, conditions, pageNo, pageSize,true);
+ Long count = FormTableExecutor.count(tableContext,null, conditions);
+ if(datas.size() > 0){
+ for (Object data : datas) {
+ Map map = (Map) data;
+ DisChargeRecordVo vo = new DisChargeRecordVo();
+ fillVo(map,vo);
+ vos.add(vo);
+ }
+ pageQueryVo.setDatas(vos);
+ pageQueryVo.setTotalCount(count);
+ }
+ return pageQueryVo;
+ }
+
+ public void saveApplay(JSONObject params) throws Exception {
+ TableContext tableContext = getTableContext();
+ FormTableBean masterTableBean = tableContext.getTableBean();
+ String tableName = masterTableBean.getTableName();
+ String subDbTableName = null;
+ TableContext sub = FormTableExecutor.sub(getFormNo(), "租赁资产");
+ subDbTableName = sub.getTableName();
+ Map mainFormData = new HashMap<>();
+ Map> subFormDataMap = new HashMap<>();
+ List