From ac32c13ad62f0ac12bc645609007e879f1382d06 Mon Sep 17 00:00:00 2001 From: RuicyWu <1063154311@qq.com> Date: Sun, 7 Jun 2026 18:17:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assetstenant/spring/spring-bean.xml | 1 + .../assetstenant/AssetsTenantPluginApi.java | 11 +- .../assetstenant/assets/AssetsService.java | 107 ++++--- .../apps/assetstenant/assets/OaAssetsVo.java | 19 +- .../apps/assetstenant/bill/BillService.java | 303 ++++++++++++++---- .../seeyon/apps/assetstenant/bill/BillVo.java | 45 ++- .../assetstenant/bill/FeeRecordService.java | 43 ++- .../assetstenant/bill/WaeBillService.java | 19 +- .../assetstenant/community/CommunitityVo.java | 90 ++++++ .../community/CommunityLayoutAggVo.java | 52 +++ .../community/CommunityLayoutVo.java | 103 ++++++ .../community/CommunityService.java | 234 +++++++++----- .../config/AssetsTenantConfigProvider.java | 6 +- ...stants.java => AssetsTenantConstants.java} | 12 +- .../contract/ContractAssetsVo.java | 18 ++ .../contract/ContractDocService.java | 7 - .../contract/ContractFeeInfo.java | 4 + .../contract/ContractPayBaseInfo.java | 86 +++++ .../contract/ContractService.java | 289 ++++++++++++----- .../contract/OaContractDetailVo.java | 169 ++++++++++ .../assetstenant/contract/OaContractVo.java | 1 + .../apps/assetstenant/cus/Customer.java | 9 + .../assetstenant/cus/CustomerService.java | 9 +- .../discharge/DisCharegeService.java | 52 ++- .../fallback/FallbackService.java | 103 +++++- .../assetstenant/fallback/FallbackVo.java | 11 + .../assetstenant/file/FileHandlerService.java | 4 +- .../apps/assetstenant/file/OaFileVo.java | 9 +- .../assetstenant/flow/FlowCreateService.java | 21 +- .../node/DisChargeFeeConfirmNode.java | 39 +++ .../assetstenant/notice/NoticeService.java | 12 +- .../assetstenant/reserve/ReserveService.java | 45 ++- .../apps/assetstenant/utils/ProtUtil.java | 83 +++++ .../viewrecord/ViewRecordService.java | 30 +- .../weappconfig/WeAppConfigService.java | 10 +- .../resources/assetstenant/BillResource.java | 70 ++-- .../assetstenant/CommunityResource.java | 14 + .../assetstenant/FileTransportResource.java | 1 + .../assetstenant/ReserveResource.java | 36 ++- .../assetstenant/ViewRecordResource.java | 14 + 40 files changed, 1787 insertions(+), 404 deletions(-) create mode 100644 src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutAggVo.java rename src/main/java/com/seeyon/apps/assetstenant/constants/{RentConstants.java => AssetsTenantConstants.java} (77%) create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/ContractFeeInfo.java create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/ContractPayBaseInfo.java create mode 100644 src/main/java/com/seeyon/apps/assetstenant/contract/OaContractDetailVo.java create mode 100644 src/main/java/com/seeyon/apps/assetstenant/node/DisChargeFeeConfirmNode.java create mode 100644 src/main/java/com/seeyon/apps/assetstenant/utils/ProtUtil.java diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml index 8c9bd1a..32a9859 100644 --- a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml +++ b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml @@ -22,4 +22,5 @@ + diff --git a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java index 0cba1dc..978f6c4 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java +++ b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java @@ -1,16 +1,15 @@ package com.seeyon.apps.assetstenant; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.common.plugin.api.APluginInfoApi; import com.seeyon.apps.common.plugin.vo.ConfigVo; -import org.springframework.stereotype.Component; public class AssetsTenantPluginApi extends APluginInfoApi { public AssetsTenantPluginApi() { } public String getPluginId() { - return RentConstants.getPluginId(); + return AssetsTenantConstants.getPluginId(); } public String getCreateUser() { @@ -23,12 +22,12 @@ public class AssetsTenantPluginApi extends APluginInfoApi { public ConfigVo getDefaultConfig() { ConfigVo configVo = new ConfigVo(); - RentConstants[] var2 = RentConstants.values(); + AssetsTenantConstants[] var2 = AssetsTenantConstants.values(); int var3 = var2.length; for(int var4 = 0; var4 < var3; ++var4) { - RentConstants value = var2[var4]; - if (value != RentConstants.plugin) { + AssetsTenantConstants value = var2[var4]; + if (value != AssetsTenantConstants.plugin) { configVo.getDevParams().put(value.name(), value.getDefaultValue()); configVo.getProdParams().put(value.name(), value.getDefaultValue()); configVo.getParamMap().put(value.name(), value.getDescription()); diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java index a3a7b3e..7031dd5 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java @@ -2,7 +2,7 @@ package com.seeyon.apps.assetstenant.assets; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.contract.ContractAssetsVo; import com.seeyon.apps.assetstenant.file.OaFileVo; import com.seeyon.apps.assetstenant.po.PageQueryVo; @@ -15,16 +15,15 @@ import com.seeyon.ctp.organization.manager.OrgManager; import com.seeyon.utils.form.*; import org.apache.commons.lang3.StringUtils; -import java.math.BigDecimal; import java.util.*; public class AssetsService { - private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("AssetsTenantConfigProvider"); + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.ASSETS_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.ASSETS_FORMNO); } public PageQueryVo pageQuery(JSONObject params) throws Exception { @@ -38,8 +37,8 @@ public class AssetsService { List vos = new ArrayList<>(); Long count = FormTableExecutor.count(master,null, conditions); if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); OaAssetsVo oaAssetsVo = new OaAssetsVo(); fillPageQueryVo(map, oaAssetsVo); vos.add(oaAssetsVo); @@ -53,7 +52,7 @@ public class AssetsService { private List buildConditions(JSONObject params, FormTableBean formTableBean) throws BusinessException { List conditions = new ArrayList<>(); if(StringUtils.isNotBlank(params.getString("cusNo"))) { - conditions.add(FormWhereCondition.build().display("租户-租户编号").value(params.getString("cusNo"))); + conditions.add(FormWhereCondition.build().display("租户编码").value(params.getString("cusNo"))); } if(StringUtils.isNotBlank(params.getString("assetsNo"))) { conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo"))); @@ -72,37 +71,26 @@ public class AssetsService { conditions.add(FormWhereCondition.build().display("商圈位置") .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"商圈位置",params.getString("bizZone")))); } - if(StringUtils.isNotBlank(params.getString("renovationStatus"))) { - conditions.add(FormWhereCondition.build().display("装修情况") - .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"装修情况",params.getString("renovationStatus")))); - } if(StringUtils.isNotBlank(params.getString("layout"))) { - conditions.add(FormWhereCondition.build().display("房屋户型") - .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"房屋户型",params.getString("layout")))); - } - if(StringUtils.isNotBlank(params.getString("rentFeeRange"))) { - String[] split = params.getString("rentFeeRange").split("-"); - String rentFeeStart = null; - if(split.length > 1) { - rentFeeStart = split[0]; - } - String rentFeeEnd = split[split.length - 1]; - if(rentFeeStart != null) { - conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.GE) - .value(new BigDecimal(rentFeeStart))); - } - conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.LE) - .value(new BigDecimal(rentFeeEnd))); + conditions.add(FormWhereCondition.build().display("户型") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"户型",params.getString("layout")))); } + if(StringUtils.isNotBlank(params.getString("features"))){ String[] features = params.getString("features").split(","); - for (Object feature : features) { - conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + "")) - .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT)); - } +// for (Object feature : features) { +// conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + "")) +// .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT)); +// } + } + if(StringUtils.isNotBlank(params.getString("communityNo"))) { + conditions.add(FormWhereCondition.build().display("楼盘编号").value(params.getString("communityNo"))); + } + if(StringUtils.isNotBlank(params.getString("buildingNo"))) { + conditions.add(FormWhereCondition.build().display("楼栋").value(params.getString("buildingNo"))); } if(StringUtils.isNotBlank(params.getString("keyWord"))){ - conditions.add(FormWhereCondition.build().display("品牌名称") + conditions.add(FormWhereCondition.build().display("资产名称") .startWithBracket(true) .concatFactor(ClauseFactor.OR) .value(params.getString("keyWord")) @@ -194,7 +182,6 @@ public class AssetsService { // } conditions .add(FormWhereCondition.build().display("资产二级类型") - .startWithBracket(true) .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型",type))); } @@ -223,10 +210,12 @@ public class AssetsService { Map fieldsMap = formColumn.getFieldsMap(); assetsVo.setFormId(formColumn.getId()); assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); - assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); + assetsVo.setAssetsName(getStringValue(fieldsMap,"资产名称")); assetsVo.setManager(getStringValue(fieldsMap,"资产管理员")); + assetsVo.setAddress(getStringValue(fieldsMap,"所在地址")); + assetsVo.setZone(getStringValue(fieldsMap,"所在区域")); if(fieldsMap.get("资产图片") != null) { - assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager)); } return assetsVo; } @@ -254,14 +243,23 @@ public class AssetsService { public void fillDetailVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException { assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); - assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); - assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息")); + assetsVo.setAssetsName(getStringValue(fieldsMap,"资产名称")); +// assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息")); assetsVo.setFormId(getStringValue(fieldsMap,"id")); assetsVo.setAssetsStatus(getStringValue(fieldsMap,"资产状态")); - assetsVo.setAssetsType(getStringValue(fieldsMap,"资产类型")); + assetsVo.setAssetsType(getStringValue(fieldsMap,"资产二级类型")); assetsVo.setAssetsAddress(getStringValue(fieldsMap,"所在位置")); - assetsVo.setLongitude(getStringValue(fieldsMap,"坐落经度")); //经度 - assetsVo.setLatitude(getStringValue(fieldsMap,"坐落纬度")); //纬度 + assetsVo.setManageType(getStringValue(fieldsMap,"运营类型")); + String lnglat = getStringValue(fieldsMap, "坐落经纬度"); + if(StringUtils.isNotBlank(lnglat)){ + // 统一替换逗号为分号,然后分割,兼容 ; 和 , 两种格式 + String[] lnglatArr = lnglat.replace(",", ";").split(";"); + // 增加数组长度判断,防止越界异常 + if (lnglatArr.length >= 2) { + assetsVo.setLongitude(lnglatArr[0].trim()); // trim() 去除多余空格 + assetsVo.setLatitude(lnglatArr[1].trim()); + } + } assetsVo.setFloorNo(getStringValue(fieldsMap,"楼层")); assetsVo.setUnitNo(getStringValue(fieldsMap,"单元")); assetsVo.setRoomNo(getStringValue(fieldsMap,"门牌号")); @@ -269,7 +267,7 @@ public class AssetsService { assetsVo.setHasLift(getStringValue(fieldsMap,"有无电梯")); assetsVo.setManagerPhone(getStringValue(fieldsMap,"管理员联系方式")); assetsVo.setBizZone(getStringValue(fieldsMap,"商圈位置")); - assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型")); + assetsVo.setLayout(getStringValue(fieldsMap,"户型")); assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况")); V3xOrgMember member = null; try { @@ -280,17 +278,17 @@ public class AssetsService { if(member != null) { assetsVo.setManagerName(member.getName().substring(0,1) + "管家"); } - BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积"); - BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金"); + String area = getStringValue(fieldsMap,"建筑面积"); + String rentFee = Optional.ofNullable(getStringValue(fieldsMap,"月租金")).orElse(getStringValue(fieldsMap,"年租金")); assetsVo.setFootPrint(area.toString()); if(area != null && rentFee != null) { assetsVo.setRentFee(rentFee.toString()); } - if(fieldsMap.get("VR文件上传") != null) { - assetsVo.setVrImg(OaFileVo.getInstance((Long)fieldsMap.get("VR文件上传"),attachmentManager)); - } if(fieldsMap.get("资产图片") != null) { - assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager)); + } + if(fieldsMap.get("VR文件上传") != null) { + assetsVo.setVrImg(OaFileVo.getInstance(fieldsMap.get("VR文件上传"),attachmentManager)); } } @@ -299,14 +297,25 @@ public class AssetsService { assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息")); assetsVo.setFormId(getStringValue(fieldsMap,"id")); - assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型")); + assetsVo.setLayout(getStringValue(fieldsMap,"户型")); assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况")); String area = getStringValue(fieldsMap,"建筑面积"); String rentFee = Optional.ofNullable(getStringValue(fieldsMap,"月租金")).orElse(getStringValue(fieldsMap,"年租金")); assetsVo.setFootPrint(area); assetsVo.setRentFee(rentFee); if(fieldsMap.get("资产图片") != null) { - assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + assetsVo.setDetailImg(OaFileVo.getInstance(fieldsMap.get("资产图片"),attachmentManager)); } } + + public Map getAssetsManagerInfo(String assetsNo) throws Exception { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo)); + TableContext tableContext = getTableContext(); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,false); + if(formColumn == null || formColumn.getFieldsMap() == null) { + return null; + } + return formColumn.getFieldsMap(); + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java index 45af8fc..4eab0f2 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java @@ -34,7 +34,8 @@ public class OaAssetsVo { private String powerFee; //电费 private String powerFeeUnit; //电费单位 private String bizZone; - private List features; + private String manageType; //运营类型 + private String[] tags; private String renovationStatus; //装修状态 public String getAssetsNo() { @@ -253,12 +254,12 @@ public class OaAssetsVo { this.bizZone = bizZone; } - public List getFeatures() { - return features; + public String[] getTags() { + return tags; } - public void setFeatures(List features) { - this.features = features; + public void setTags(String[] tags) { + this.tags = tags; } public String getRenovationStatus() { @@ -276,4 +277,12 @@ public class OaAssetsVo { public void setRentFeeUnit(String rentFeeUnit) { this.rentFeeUnit = rentFeeUnit; } + + public String getManageType() { + return manageType; + } + + public void setManageType(String manageType) { + this.manageType = manageType; + } } \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java index 34b9cea..8bfb3b8 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java @@ -1,31 +1,47 @@ package com.seeyon.apps.assetstenant.bill; +import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.AssetsService; import com.seeyon.apps.assetstenant.assets.OaAssetsVo; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; +import com.seeyon.apps.assetstenant.contract.ContractPayBaseInfo; import com.seeyon.apps.assetstenant.contract.ContractService; +import com.seeyon.apps.assetstenant.contract.OaContractDetailVo; +import com.seeyon.apps.assetstenant.flow.FlowCreateService; import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; import com.seeyon.cap4.form.bean.FormTableBean; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; import com.seeyon.utils.form.*; import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.math.RoundingMode; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; public class BillService { + private static final Log log = Log.get(BillService.class); private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private ContractService contractService = (ContractService) AppContext.getBean("contractService"); private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService"); + private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.CONTRACTBILLFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.CONTRACTBILLFORMNO); } private TableContext getTableContext() throws BusinessException { @@ -33,9 +49,9 @@ public class BillService { return tableContext; } - private String getStringValue(Map fieldsMap,String key) { + private String getStringValue(Map fieldsMap, String key) { Object o = fieldsMap.get(key); - if(o == null) { + if (o == null) { return null; } return o + ""; @@ -43,16 +59,19 @@ public class BillService { private List buildConditions(JSONObject params, FormTableBean formTableBean) { List conditions = new ArrayList<>(); - if(StringUtils.isNotBlank(params.getString("cusNo"))) { + if (StringUtils.isNotBlank(params.getString("cusNo"))) { conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); } - if(StringUtils.isNotBlank(params.getString("billNo"))) { - conditions.add(FormWhereCondition.build().display("租赁账单编号").value(params.getString("billNo"))); + if (StringUtils.isNotBlank(params.getString("billNo"))) { + conditions.add(FormWhereCondition.build().display("账单-账单明细编号").value(params.getString("billNo"))); } - if(StringUtils.isNotBlank(params.getString("billStatus"))) { - if("已缴费".equals(params.getString("billStatus"))) { + if(StringUtils.isNotBlank(params.getString("contractNo"))) { + conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo"))); + } + if (StringUtils.isNotBlank(params.getString("billStatus"))) { + if ("已缴费".equals(params.getString("billStatus"))) { conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL)); - }else { + } else { conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean, "账单-收款结果反馈", "未收款")).endWithBracket(true)); } @@ -60,13 +79,13 @@ public class BillService { return conditions; } - public List queryAllContractBill(List conditions) throws Exception {; + public List queryAllContractBill(List conditions) throws Exception { TableContext tableContext = getTableContext(); - List datas = FormTableExecutor.query(tableContext, null, conditions,true); + List datas = FormTableExecutor.query(tableContext, null, conditions, true); List vos = new ArrayList<>(); - if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + if (datas.size() > 0) { + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); BillVo billVo = new BillVo(); fillVo(map, billVo); vos.add(billVo); @@ -75,27 +94,72 @@ public class BillService { return vos; } + public List queryContractPayBaseInfoList(String contractNo) throws BusinessException { + List contractPayBaseInfoList = new ArrayList<>(); + String formNo = configProvider.getBizConfigByKey(AssetsTenantConstants.BILLCREATEFORMNO); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo)); + TableContext master = FormTableExecutor.master(formNo); + List formColumns = FormTableExecutor.query(master, null, conditions, true); + if(formColumns == null || formColumns.size() <= 0){ + return contractPayBaseInfoList; + } + for (FormColumn formColumn : formColumns) { + Map fieldsMap = formColumn.getFieldsMap(); + ContractPayBaseInfo baseInfo = new ContractPayBaseInfo(); + baseInfo.setContractNo(contractNo); + baseInfo.setAssetsName(getStringValue(fieldsMap, "资产名称")); + baseInfo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); + baseInfo.setTotalRentFee(getStringValue(fieldsMap,"本账单金额")); + Integer totalPeriod = contractService.countTotalPeriod(contractNo); + baseInfo.setTotalTermNum(totalPeriod + ""); + Integer countPaidTermNum = countPaidTermNum(baseInfo.getAssetsNo(), baseInfo.getContractNo()); + baseInfo.setPaidTermNum(countPaidTermNum + ""); + JSONObject param = new JSONObject(); + param.put("contractNo", contractNo); + try { + OaContractDetailVo detailVo = contractService.queryContractDetail(param); + baseInfo.setDeposit(detailVo.getDeposit()); + }catch (Exception e) { + + } + contractPayBaseInfoList.add(baseInfo); + } + return contractPayBaseInfoList; + } + + public Integer countPaidTermNum(String assetsNo,String contractNo) throws BusinessException { + TableContext tableContext = getTableContext(); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo)); + conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"收款结果反馈", "已结清"))); + conditions.add(FormWhereCondition.build().display("账单类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"账单类型", "租金"))); + Long count = FormTableExecutor.count(tableContext, null, conditions); + return count.intValue(); + } + public Integer countUnpayRentBills(JSONObject params) throws Exception { TableContext tableContext = getTableContext(); - List conditions = buildConditions(params,tableContext.getTableBean()); + List conditions = buildConditions(params, tableContext.getTableBean()); conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); - conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"账单-收款结果反馈","未收款")).endWithBracket(true)); - Long count = FormTableExecutor.count(tableContext, null,conditions); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "账单-收款结果反馈", "未收款")).endWithBracket(true)); + Long count = FormTableExecutor.count(tableContext, null, conditions); return count.intValue(); } public PageQueryVo pageQueryContractBill(JSONObject params) throws Exception { TableContext tableContext = getTableContext(); - List conditions = buildConditions(params,tableContext.getTableBean()); + List conditions = buildConditions(params, tableContext.getTableBean()); Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); PageQueryVo pageQueryVo = new PageQueryVo(); - List datas = FormTableExecutor.pageQuery(tableContext, null,conditions, pageNo, pageSize,true); + List datas = FormTableExecutor.pageQuery(tableContext, null, conditions, pageNo, pageSize, true); List vos = new ArrayList<>(); - Long count = FormTableExecutor.count(tableContext,null, conditions); - if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + Long count = FormTableExecutor.count(tableContext, null, conditions); + if (datas.size() > 0) { + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); BillVo billVo = new BillVo(); fillVo(map, billVo); vos.add(billVo); @@ -108,9 +172,9 @@ public class BillService { public BillVo queryOne(JSONObject params) throws Exception { TableContext tableContext = getTableContext(); - List conditions = buildConditions(params,tableContext.getTableBean()); - FormColumn formColumn = FormTableExecutor.queryOne(tableContext,conditions,true); - if(formColumn == null) { + List conditions = buildConditions(params, tableContext.getTableBean()); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions, true); + if (formColumn == null) { return null; } Map fieldsMap = formColumn.getFieldsMap(); @@ -120,37 +184,166 @@ public class BillService { } public void fillVo(Map fieldsMap, BillVo billVo) throws Exception { - billVo.setBillType("CONTRACT"); - billVo.setBillNo(getStringValue(fieldsMap,"租赁账单编号" )); - String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap,"收款结果反馈"); - billVo.setBillStatus(payStatus); - billVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); - billVo.setBillStartDate(getStringValue(fieldsMap,"账单-开始日期")); - billVo.setContractNo(getStringValue(fieldsMap,"合同编号")); - billVo.setBillPayEndDate(getStringValue(fieldsMap,"账单-当前缴费时限")); - billVo.setBillEndDate(getStringValue(fieldsMap,"账单-结束日期")); - OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号")); - String asssetsName = null; - if(oaAssetsVo != null) { - asssetsName = oaAssetsVo.getAssetsName(); + billVo.setBillType(getStringValue(fieldsMap, "账单类型")); + billVo.setBillNo(getStringValue(fieldsMap, "账单-账单明细编号")); + String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap, "账单-收款结果反馈"); + billVo.setBillStatus(payStatus); + billVo.setCusNo(getStringValue(fieldsMap, "承租方编号")); + billVo.setBillStartDate(getStringValue(fieldsMap, "账单-开始日期")); + billVo.setContractNo(getStringValue(fieldsMap, "合同编号")); + billVo.setBillPayEndDate(getStringValue(fieldsMap, "账单-当前缴费时限")); + billVo.setBillEndDate(getStringValue(fieldsMap, "账单-结束日期")); + String billName = buildBillName(fieldsMap, billVo); + billVo.setBillPayDate(getStringValue(fieldsMap, "账单-实际收款时间")); + billVo.setBillName(billName); + if(billVo.getBillTermNum() != null && 1 == billVo.getBillTermNum()) { + billVo.setDeposit(getDeposit(getStringValue(fieldsMap, "合同编号"))); + } + if("租金".equals(billVo.getBillType())) { + BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("账单-租费"); + billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); + }else if("履约保证金".equals(billVo.getBillType())){ + BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("约定履约保证金"); + billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); + }else if("违约金".equals(billVo.getBillType())){ + BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("应收违约金"); + billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); + }else if("滞纳金".equals(billVo.getBillType())){ + BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("应收滞纳金"); + billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); } - String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-"; - String billTerm = "(" + billVo.getBillStartDate() + "-" + billVo.getBillEndDate() + ")"; - billVo.setBillName(asssetsName + roomNo + billTerm); - BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("账单-租费"); - billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); - billVo.setBillPayTime(getStringValue(fieldsMap,"账单-实际收款时间")); } - private String buildBillName(Map fieldsMap) throws Exception { - String contractNo = getStringValue(fieldsMap,"合同编号"); - String term = contractService.queryContractPayPeriod(contractNo,getStringValue(fieldsMap,"账单-开始日期")) + "-"; - OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号")); + private String getDeposit(String contractNo) throws Exception { + JSONObject params = new JSONObject(); + params.put("contractNo", contractNo); + OaContractDetailVo oaContractVo = contractService.queryContractDetail(params); + return oaContractVo == null ? null : oaContractVo.getDeposit(); + } + + private String buildBillName(Map fieldsMap, BillVo billVo) throws Exception { + String contractNo = getStringValue(fieldsMap, "合同编号"); + Integer termNum = contractService.queryContractPayPeriod(contractNo, getStringValue(fieldsMap, "账单-开始日期")); + billVo.setBillTermNum(termNum); + OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap, "资产编号")); String asssetsName = null; - if(oaAssetsVo != null) { + if (oaAssetsVo != null) { asssetsName = oaAssetsVo.getAssetsName(); } String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-"; - return asssetsName + roomNo + term; + return asssetsName + roomNo + termNum + "期"; + } + + public void payCallBack(String billNo,String payDate) throws Exception { + // 1. 获取Bean + 非空校验 + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + if (formApi4Cap4 == null) { + throw new Exception("Spring容器中未找到formApi4Cap4 Bean"); + } + + // 2. 复用配置,避免重复查询 + String templateCode = this.configProvider.getBizConfigByKey(AssetsTenantConstants.PAYMENT_REGISTRATION_TEMPLATECODE); + String appName = this.configProvider.getBizConfigByKey(AssetsTenantConstants.FORMAPPNAME); + + // 3. 获取表单结构 + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(templateCode); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + String tableName = masterTableBean.getTableName(); + List subTableBeanList = cap4FormBean.getSubTableBean(); + FormTableBean subTableBean = null; + // 4. 获取子表名 + 非空校验 + String subDbTableName = null; + for (FormTableBean tableBean : subTableBeanList) { + if ("租金收款明细".equals(tableBean.getDisplay())) { + subDbTableName = tableBean.getTableName(); + subTableBean = tableBean; + break; + } + } + // 5. 构造数据结构(规范泛型) + Map mainFormData = new HashMap<>(); + Map> subFormDataMap = new HashMap<>(); + List subFormDataList = new ArrayList<>(); + + Map mainData = new HashMap<>(); + mainFormData.put(tableName, mainData); + if (subDbTableName != null) { + log.info("明细表表名为: " + subDbTableName); + subFormDataMap.put(subDbTableName, subFormDataList); + } + + // 6. 查询账单数据 + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("账单-账单明细编号").value(billNo)); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), conditions,false); + // 7. 主数据非空判断 + if (formColumn == null || formColumn.getFieldsMap() == null) { + throw new Exception("根据账单编号:" + billNo + "未查询到账单数据"); + } + Map fieldsMap = formColumn.getFieldsMap(); + BigDecimal accountsReceivable = BigDecimal.ZERO; + // 初始化实际收款金额(避免null) + BigDecimal actualReceipts = BigDecimal.ZERO; + BigDecimal rate = new BigDecimal("0.994"); + // 8. 组装子表数据 + Map subTableRowData = new HashMap<>(); + subTableRowData.put("账单-明细编号", fieldsMap.get("账单-账单明细编号")); + subTableRowData.put("账单-开始日期", df.format((Date)fieldsMap.get("账单-开始日期"))); + subTableRowData.put("账单-结束日期", df.format((Date)fieldsMap.get("账单-结束日期"))); + subTableRowData.put("账单-当期缴费期限", fieldsMap.get("账单-当前缴费时限")); + subTableRowData.put("账单-综合减免", fieldsMap.get("账单-减免金额") == null ? BigDecimal.ZERO : fieldsMap.get("账单-减免金额")); + subTableRowData.put("账单-租费递增", fieldsMap.get("账单-租费递增") == null ? BigDecimal.ZERO : fieldsMap.get("账单-租费递增")); + // 应收金额计算 + BigDecimal receivable = (BigDecimal) fieldsMap.get("账单-应收租金"); + if (receivable != null) { + accountsReceivable = accountsReceivable.add(receivable); + // 修复BigDecimal.setScale不生效问题 + actualReceipts = accountsReceivable.multiply(rate).setScale(2, RoundingMode.HALF_UP); + } + subTableRowData.put("账单-应收租金", receivable); + subTableRowData.put("账单-未收租金", fieldsMap.get("账单-未收租金")); + subTableRowData.put("账单-本次收租金", receivable); + subTableRowData.put("账单-本次收款日期", payDate); + subTableRowData.put("账单-本次开票金额", receivable); + subTableRowData.put("账单-未开票金额", receivable); + subTableRowData.put("账单-资产编号", fieldsMap.get("资产编号")); + subTableRowData.put("账单-资产名称", fieldsMap.get("资产名称")); + FormFieldBean formFieldBean = subTableBean.getFieldBeanByDisplay("收款结果"); + subTableRowData.put("账单-收款结果", EnumMapUtils.getEnumItemValueByEnumId("已结清",formFieldBean.getEnumId())); + subFormDataList.add(subTableRowData); + // 9. 获取合同信息 + 非空校验 + String contractNo = (String) fieldsMap.get("合同编号"); + mainData.put("合同名称", fieldsMap.get("合同名称")); + mainData.put("合同金额", fieldsMap.get("合同金额")); + mainData.put("签订单位", fieldsMap.get("签订单位")); + mainData.put("承租方类型", fieldsMap.get("承租方类型")); + mainData.put("承租方名称", fieldsMap.get("承租方")); + mainData.put("承租方编码", fieldsMap.get("承租方编号")); + mainData.put("租金_费项_文本",fieldsMap.get("账单类型")); + // 10. 经办人/部门信息(安全赋值) + String assetNo = (String) fieldsMap.get("资产编号"); + Map assetsManagerInfo = this.assetsService.getAssetsManagerInfo(assetNo); + if (assetsManagerInfo != null && assetsManagerInfo.get("运营管理员") != null) { + String managerId = String.valueOf(assetsManagerInfo.get("运营管理员")); + try { + V3xOrgMember member = this.orgManager.getMemberById(Long.parseLong(managerId)); + if (member != null) { + mainData.put("经办部门", member.getOrgDepartmentId()); + mainData.put("经办单位", member.getOrgAccountId()); + mainData.put("经办人员", managerId); + } + } catch (Exception e) { + log.warn("获取经办人信息失败", e); + } + } + // 11. 组装主表数据(线程安全日期) + TableContext receivePayFlowTableContext = FormTableExecutor.master(templateCode); + mainData.put("选择收款项", EnumMapUtils.getEnumItemValueByDisplayValue(receivePayFlowTableContext.getTableBean(), "收款项", "租金")); + mainData.put("经办日期", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + mainData.put("合同编号", contractNo); + mainData.put("本次收款金额", actualReceipts); + // 12. 启动流程 + this.flowCreateService.flowStart("微信小程序支付完成收款登记", + mainFormData, subFormDataMap, appName, templateCode); } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java index 18d3e05..4affb2f 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java @@ -10,9 +10,12 @@ public class BillVo { private String billStartDate; //账单开始日期 private String billEndDate; //账单结束日期 private String billPayEndDate; //账单支付截止日期 + private String billPayDate; //账单支付日期 private String billName;// 账单名称 - private String billPayTime; private String formId; + private Integer billTermNum;//账期号 + private String deposit; //押金 + private String refundDate;//退款日期 public String getBillType() { return billType; @@ -86,14 +89,6 @@ public class BillVo { this.formId = formId; } - public String getBillPayTime() { - return billPayTime; - } - - public void setBillPayTime(String billPayTime) { - this.billPayTime = billPayTime; - } - public String getBillStartDate() { return billStartDate; } @@ -109,4 +104,36 @@ public class BillVo { public void setBillPayEndDate(String billPayEndDate) { this.billPayEndDate = billPayEndDate; } + + public Integer getBillTermNum() { + return billTermNum; + } + + public void setBillTermNum(Integer billTermNum) { + this.billTermNum = billTermNum; + } + + public String getDeposit() { + return deposit; + } + + public void setDeposit(String deposit) { + this.deposit = deposit; + } + + public String getBillPayDate() { + return billPayDate; + } + + public void setBillPayDate(String billPayDate) { + this.billPayDate = billPayDate; + } + + public String getRefundDate() { + return refundDate; + } + + public void setRefundDate(String refundDate) { + this.refundDate = refundDate; + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java index 80364d4..9a05fcc 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java @@ -2,7 +2,7 @@ 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.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.po.PageQueryVo; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; @@ -21,7 +21,7 @@ public class FeeRecordService { private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("waeBillService"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.FEERECORDFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.FEERECORDFORMNO); } private String getStringValue(Map fieldsMap,String key) { @@ -43,30 +43,18 @@ public class FeeRecordService { 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 Integer countAll(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + Long count = FormTableExecutor.count(tableContext, null, conditions); + return count.intValue(); + } public PageQueryVo queryBillPayRecord(JSONObject params) throws Exception { TableContext tableContext = getTableContext(); @@ -77,9 +65,9 @@ public class FeeRecordService { 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) { + for (FormColumn data : datas) { PayRecordVo payRecordVo = new PayRecordVo(); - Map fieldsMap = (Map) data; + MapfieldsMap = data.getFieldsMap(); fillVo(fieldsMap,payRecordVo); payRecordVos.add(payRecordVo); } @@ -104,4 +92,15 @@ public class FeeRecordService { payRecordVo.setItemName(getStringValue(fieldsMap,"费用类型")); } } + + public void payCallBack(String billNo, String bizType, String payDate) throws Exception { + if("rent".equals(bizType)) { + billService.payCallBack(billNo,payDate); + }else if("wae".equals(bizType)){ +// waeBillService.payCallBack(billNo,payDate); + }else if("margin".equals(bizType)){ + + } + } + } diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java index 0fec8c3..c8f1a09 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java @@ -2,8 +2,9 @@ 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.constants.AssetsTenantConstants; 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.*; @@ -21,7 +22,7 @@ public class WaeBillService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.WAEBILLFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.WAEBILLFORMNO); } private String getStringValue(Map fieldsMap,String key) { @@ -66,8 +67,8 @@ public class WaeBillService { List vos = new ArrayList<>(); Long count = FormTableExecutor.count(tableContext,null, conditions); if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); BillVo billVo = new BillVo(); fillVo(map, billVo); vos.add(billVo); @@ -114,4 +115,14 @@ public class WaeBillService { billVo.setBillAmount((powerFee.add(waterFee)).toString()); billVo.setBillName("水电费"); } + + public void payCallBack(String billNo, String payDate) throws BusinessException { + TableContext tableContext = getTableContext(); + FormTableBean tableBean = tableContext.getTableBean(); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("档案编号").value(billNo)); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("缴费状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableBean,"缴费状态","结清"))); + FormTableExecutor.update(tableContext,updateFields,conditions); + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java index 6f786ab..d433dae 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java @@ -10,6 +10,16 @@ public class CommunitityVo { private String referenceAvgPrice;//参考均价 private OaFileVo coverImg;//封面图 private String communityName;//楼盘名称 + private String greenRate;//绿化率 + private String address;//地址 + private String completeDate;//竣工时间 + private String transactionOwnership;//交易权属 + private String propertyType;//物业类型 + private String lng;//经度 + private String lat;//纬度 + private String contactPhone;//联系电话 + private String communityNo;//楼盘编号 + private String communityDesc;//楼盘描述 public String getReferenceTotalPrice() { return referenceTotalPrice; @@ -66,4 +76,84 @@ public class CommunitityVo { public void setCommunityName(String communityName) { this.communityName = communityName; } + + public String getGreenRate() { + return greenRate; + } + + public void setGreenRate(String greenRate) { + this.greenRate = greenRate; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCompleteDate() { + return completeDate; + } + + public void setCompleteDate(String completeDate) { + this.completeDate = completeDate; + } + + public String getTransactionOwnership() { + return transactionOwnership; + } + + public void setTransactionOwnership(String transactionOwnership) { + this.transactionOwnership = transactionOwnership; + } + + public String getPropertyType() { + return propertyType; + } + + public void setPropertyType(String propertyType) { + this.propertyType = propertyType; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getContactPhone() { + return contactPhone; + } + + public void setContactPhone(String contactPhone) { + this.contactPhone = contactPhone; + } + + public String getCommunityNo() { + return communityNo; + } + + public void setCommunityNo(String communityNo) { + this.communityNo = communityNo; + } + + public String getCommunityDesc() { + return communityDesc; + } + + public void setCommunityDesc(String communityDesc) { + this.communityDesc = communityDesc; + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutAggVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutAggVo.java new file mode 100644 index 0000000..bfed9f5 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutAggVo.java @@ -0,0 +1,52 @@ +package com.seeyon.apps.assetstenant.community; + +import java.util.List; +import java.util.Map; + +public class CommunityLayoutAggVo { + private Integer totalCount; // 总户型数 + private Map layoutTypeCount; // 户型类型统计(key: 三室/四室) + private Map buildingLayoutCount; // 按楼栋统计户型 + private String avgPrice; // 平均参考均价 + private List layoutList; // 原始户型列表 + + public Integer getTotalCount() { + return totalCount; + } + + public void setTotalCount(Integer totalCount) { + this.totalCount = totalCount; + } + + public Map getLayoutTypeCount() { + return layoutTypeCount; + } + + public void setLayoutTypeCount(Map layoutTypeCount) { + this.layoutTypeCount = layoutTypeCount; + } + + public Map getBuildingLayoutCount() { + return buildingLayoutCount; + } + + public void setBuildingLayoutCount(Map buildingLayoutCount) { + this.buildingLayoutCount = buildingLayoutCount; + } + + public String getAvgPrice() { + return avgPrice; + } + + public void setAvgPrice(String avgPrice) { + this.avgPrice = avgPrice; + } + + public List getLayoutList() { + return layoutList; + } + + public void setLayoutList(List layoutList) { + this.layoutList = layoutList; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java index 2a4394e..b97e826 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java @@ -1,4 +1,107 @@ package com.seeyon.apps.assetstenant.community; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + public class CommunityLayoutVo { + + private String completeTime; // 明细-竣工时间 + private String saleStatus; // 明细-售卖状态 + private String buildType; // 明细-建筑类型 + private String decoration; // 明细-装修标准 + private String saleBuilding; // 明细-售卖楼栋 + private String saleLayout; // 明细-售卖户型 + private String openTime; // 明细-开盘时间 + private String deliveryTime; // 明细-交房时间 + private String avgPrice; // 明细-参考均价 + private OaFileVo img; //户型图 + private String communityNo; //小区编号 + + public String getCompleteTime() { + return completeTime; + } + + public void setCompleteTime(String completeTime) { + this.completeTime = completeTime; + } + + public String getSaleStatus() { + return saleStatus; + } + + public void setSaleStatus(String saleStatus) { + this.saleStatus = saleStatus; + } + + public String getBuildType() { + return buildType; + } + + public void setBuildType(String buildType) { + this.buildType = buildType; + } + + public String getDecoration() { + return decoration; + } + + public void setDecoration(String decoration) { + this.decoration = decoration; + } + + public String getSaleBuilding() { + return saleBuilding; + } + + public void setSaleBuilding(String saleBuilding) { + this.saleBuilding = saleBuilding; + } + + public String getSaleLayout() { + return saleLayout; + } + + public void setSaleLayout(String saleLayout) { + this.saleLayout = saleLayout; + } + + public String getOpenTime() { + return openTime; + } + + public void setOpenTime(String openTime) { + this.openTime = openTime; + } + + public String getDeliveryTime() { + return deliveryTime; + } + + public void setDeliveryTime(String deliveryTime) { + this.deliveryTime = deliveryTime; + } + + public String getAvgPrice() { + return avgPrice; + } + + public void setAvgPrice(String avgPrice) { + this.avgPrice = avgPrice; + } + + public OaFileVo getImg() { + return img; + } + + public void setImg(OaFileVo img) { + this.img = img; + } + + public String getCommunityNo() { + return communityNo; + } + + public void setCommunityNo(String communityNo) { + this.communityNo = communityNo; + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java index 5066a7f..254d714 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java @@ -2,14 +2,13 @@ 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.constants.AssetsTenantConstants; 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; @@ -24,7 +23,7 @@ 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); + return configProvider.getBizConfigByKey(AssetsTenantConstants.COMMUNITYFORMNO); } public PageQueryVo pageQuery(JSONObject params) throws Exception { @@ -38,10 +37,11 @@ public class CommunityService { List vos = new ArrayList<>(); Long count = FormTableExecutor.count(master,null, conditions); if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); CommunitityVo communitityVo = new CommunitityVo(); - fillVo(map, communitityVo); + fillPageQueryVo(map, communitityVo); + communitityVo.setCommunityId(data.getId()); vos.add(communitityVo); } pageQueryVo.setDatas(vos); @@ -60,64 +60,21 @@ public class CommunityService { 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"))) { + if(StringUtils.isNotBlank(params.getString("communityId"))){ + conditions.add(FormWhereCondition.build().display("ID").value(params.getString("communityId"))); + } + return conditions; + } + + private List buildSubTableQueryConditions(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)); - } + if(StringUtils.isNotBlank(params.getString("buildingNo"))) { + conditions.add(FormWhereCondition.build().display("明细-售卖楼栋").value(params.getString("buildingNo"))); } return conditions; } @@ -133,13 +90,14 @@ public class CommunityService { return communitityVo; } Map fieldsMap = formColumn.getFieldsMap(); - fillVo(fieldsMap,communitityVo); + fillDetailVo(fieldsMap,communitityVo); + communitityVo.setCommunityId(formColumn.getId()); return communitityVo; } public List queryBuildingList(JSONObject params) throws Exception { TableContext tableContext = getSubTableContext(); - List conditions = buildConditions(params,tableContext.getTableBean()); + List conditions = buildSubTableQueryConditions(params,tableContext.getTableBean()); List formColumns = FormTableExecutor.query(tableContext, null, conditions, true); if(formColumns.size() == 0) { return new ArrayList<>(); @@ -154,8 +112,9 @@ public class CommunityService { communityBuildingVo.setBuildingNo(buildingNo); communityBuildingVo.setBuildType(getStringValue(fieldsMap,"明细-建筑类型")); communityBuildingVo.setOpenTime(getStringValue(fieldsMap,"明细-开盘时间")); - communityBuildingVo.setUnitNo(buildingNo); + communityBuildingVo.setUnitNo(getStringValue(fieldsMap,"明细-所属单元")); communityBuildingVo.setSaleHouseCount(1); + buildingVoMap.put(buildingNo, communityBuildingVo); }else { CommunityBuildingVo buildingVo = buildingVoMap.get(buildingNo); buildingVo.setSaleHouseCount(buildingVo.getSaleHouseCount() + 1); @@ -165,11 +124,91 @@ public class CommunityService { 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; + // ====================== 从子表获取户型列表 + 聚合统计 ====================== + public CommunityLayoutAggVo getLayoutListWithAgg(JSONObject params) throws Exception { + TableContext sub = FormTableExecutor.sub(getFormNo(), "楼盘明细"); + List conditions = buildSubTableQueryConditions(params, sub.getTableBean()); + List columnList = FormTableExecutor.query(sub, null, conditions, true); + List voList = new ArrayList<>(); + Map layoutTypeCount = new HashMap<>(); + Map buildingLayoutCount = new HashMap<>(); + BigDecimal totalPrice = BigDecimal.ZERO; + int priceCount = 0; + for (FormColumn column : columnList) { + Map map = column.getFieldsMap(); + CommunityLayoutVo vo = new CommunityLayoutVo(); + fillLayoutVo(map, vo); + voList.add(vo); + + // 1. 户型类型统计(从枚举值映射为名称,再提取类型) + String layoutType = extractLayoutType(vo.getSaleLayout()); + layoutTypeCount.merge(layoutType, 1, Integer::sum); + // 2. 按楼栋统计户型 + buildingLayoutCount.merge(vo.getSaleBuilding(), 1, Integer::sum); + + } + + CommunityLayoutAggVo agg = new CommunityLayoutAggVo(); + agg.setLayoutList(voList); + agg.setTotalCount(voList.size()); + agg.setLayoutTypeCount(layoutTypeCount); + agg.setBuildingLayoutCount(buildingLayoutCount); + return agg; + } + + public List getLayoutList(JSONObject params) throws BusinessException { + TableContext sub = FormTableExecutor.sub(getFormNo(), "楼盘明细"); + TableContext master = FormTableExecutor.master(getFormNo()); + List masterTableQueryConditions = buildConditions(params, master.getTableBean()); + FormColumn formColumn = FormTableExecutor.queryOne(master, masterTableQueryConditions, true); + if(formColumn == null) { + return null; + } + String communityNo = (String)formColumn.getFieldsMap().get("台账编号"); + List conditions = buildSubTableQueryConditions(params, sub.getTableBean()); + List columnList = FormTableExecutor.query(sub, null, conditions, true); + List voList = new ArrayList<>(); + Map voMap = new HashMap<>(); + for (FormColumn column : columnList) { + Map map = column.getFieldsMap(); + if(!voMap.containsKey(map.get("户型"))) { + CommunityLayoutVo vo = new CommunityLayoutVo(); + vo.setSaleStatus(getStringValue(map, "明细-售卖状态")); + vo.setSaleBuilding(getStringValue(map, "明细-售卖楼栋")); + vo.setSaleLayout(getStringValue(map, "明细-售卖户型")); + vo.setCommunityNo(communityNo); + if(map.get("户型图片") != null) { + vo.setImg(OaFileVo.getInstance(map.get("户型图片"),attachmentManager)); + } + voMap.put((String)map.get("户型"),vo); + } + } + voList.addAll(voMap.values()); + return voList; + } + + // ====================== 填充户型VO(严格映射子表字段) ====================== + private void fillLayoutVo(Map map, CommunityLayoutVo vo) throws BusinessException { + vo.setCompleteTime(getStringValue(map, "明细-竣工时间")); + vo.setSaleStatus(getStringValue(map, "明细-售卖状态")); + vo.setBuildType(getStringValue(map, "明细-建筑类型")); + vo.setDecoration(getStringValue(map, "明细-装修标准")); + vo.setSaleBuilding(getStringValue(map, "明细-售卖楼栋")); + vo.setSaleLayout(getStringValue(map, "明细-售卖户型")); + vo.setOpenTime(getStringValue(map, "明细-开盘时间")); + vo.setDeliveryTime(getStringValue(map, "明细-交房时间")); + vo.setAvgPrice(getStringValue(map, "明细-参考均价")); + // 若面积/总价需从其他表获取,在此补充逻辑 + // vo.setArea(getBigDecimal(map, "户型面积")); + // vo.setTotalPrice(vo.getAvgPrice().multiply(vo.getArea()).setScale(2, RoundingMode.HALF_UP)); + } + + // ====================== 辅助方法:提取户型类型(如"三室两厅两卫" → "三室") ====================== + private String extractLayoutType(String saleLayoutName) { + if (StringUtils.isBlank(saleLayoutName)) return "其他"; + if (saleLayoutName.contains("三室")) return "三室"; + if (saleLayoutName.contains("四室")) return "四室"; + return "其他"; } private String getStringValue(Map fieldsMap,String key) { @@ -180,18 +219,53 @@ public class CommunityService { 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)); + public void fillPageQueryVo(Map fieldsMap,CommunitityVo communitityVo) throws BusinessException { + communitityVo.setCommunityName(getStringValue(fieldsMap,"楼盘名称")); //楼盘名称 + communitityVo.setRenovation(getStringValue(fieldsMap,"装修标准")); //装修情况 + communitityVo.setReferenceAvgPrice(getStringValue(fieldsMap,"参考均价")); //楼盘参考均价 + communitityVo.setReferenceTotalPrice(getStringValue(fieldsMap,"参考总价"));//楼盘参考总价 + communitityVo.setCommunityNo(getStringValue(fieldsMap,"台账编号")); + String lnglat = getStringValue(fieldsMap,"坐落经纬度"); + if(StringUtils.isNotBlank(lnglat)) { + // 统一替换逗号为分号,然后分割,兼容 ; 和 , 两种格式 + String[] lnglatArr = lnglat.replace(",", ";").split(";"); + // 增加数组长度判断,防止越界异常 + if (lnglatArr.length >= 2) { + communitityVo.setLng(lnglatArr[0].trim()); // trim() 去除多余空格 + communitityVo.setLat(lnglatArr[1].trim()); + } + } + if(fieldsMap.get("小区图片") != null) { + communitityVo.setCoverImg(OaFileVo.getInstance(fieldsMap.get("小区图片"),attachmentManager)); + } + } + + public void fillDetailVo(Map fieldsMap,CommunitityVo communitityVo) throws BusinessException { + communitityVo.setCommunityName(getStringValue(fieldsMap,"楼盘名称")); //楼盘名称 + communitityVo.setRenovation(getStringValue(fieldsMap,"装修标准")); //装修情况 + communitityVo.setFeatures(getStringValue(fieldsMap,"楼盘特色"));//楼盘特点 + communitityVo.setGreenRate(getStringValue(fieldsMap,"绿化率"));//绿化率 + communitityVo.setContactPhone(getStringValue(fieldsMap,"联系电话")); //联系电话 + communitityVo.setReferenceAvgPrice(getStringValue(fieldsMap,"参考均价")); //楼盘参考均价 + communitityVo.setReferenceTotalPrice(getStringValue(fieldsMap,"参考总价"));//楼盘参考总价 + communitityVo.setAddress(getStringValue(fieldsMap,"楼盘地址")); //地址 + communitityVo.setCompleteDate(getStringValue(fieldsMap,"竣工时间")); //竣工时间 + communitityVo.setTransactionOwnership(getStringValue(fieldsMap,"交易权属")); //交易权属 + communitityVo.setPropertyType(getStringValue(fieldsMap,"物业类型")); //物业类型 + communitityVo.setCommunityNo(getStringValue(fieldsMap,"台账编号")); //楼盘编号 + communitityVo.setCommunityDesc(getStringValue(fieldsMap,"小区详情")); //楼盘描述 + String lnglat = getStringValue(fieldsMap,"坐落经纬度"); + if(StringUtils.isNotBlank(lnglat)) { + // 统一替换逗号为分号,然后分割,兼容 ; 和 , 两种格式 + String[] lnglatArr = lnglat.replace(",", ";").split(";"); + // 增加数组长度判断,防止越界异常 + if (lnglatArr.length >= 2) { + communitityVo.setLng(lnglatArr[0].trim()); // trim() 去除多余空格 + communitityVo.setLat(lnglatArr[1].trim()); + } + } + if(fieldsMap.get("小区图片") != null) { + communitityVo.setCoverImg(OaFileVo.getInstance(fieldsMap.get("小区图片"),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 index 49c339b..4baf783 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java +++ b/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java @@ -1,17 +1,17 @@ package com.seeyon.apps.assetstenant.config; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; 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; +import static com.seeyon.apps.assetstenant.constants.AssetsTenantConstants.getPluginId; public class AssetsTenantConfigProvider { protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); - public String getBizConfigByKey(RentConstants key) { + public String getBizConfigByKey(AssetsTenantConstants 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/AssetsTenantConstants.java similarity index 77% rename from src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java rename to src/main/java/com/seeyon/apps/assetstenant/constants/AssetsTenantConstants.java index 80012af..f15c1ac 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java +++ b/src/main/java/com/seeyon/apps/assetstenant/constants/AssetsTenantConstants.java @@ -1,18 +1,17 @@ package com.seeyon.apps.assetstenant.constants; -public enum RentConstants { +public enum AssetsTenantConstants { plugin("assetstenant","插件ID"), OA_HOST("",""), FORMEDITLOGINNAME("","表单修改登录名"), - updateAccountName("表单",""), + updateAccountName("表单","OA组织名称"), restName("",""), restPwd("",""), formLoginName("2019","表单数据录入登录名"), ASSETS_FORMNO("","资产运营档案编码"), CONTRACT_FORMNO("","租赁合同表单编码"), DISCHARGE_TEMPLATECODE("","退租申请模板编码"), - DISCHARGE_FORMNO("","退租申请表单编码"), FALLBACK_FORMNO("","留言板表单编码"), RESERVE_FORMNO("","看房预约表单编码"), VIEWRECORD_FORMNO("","浏览记录表单编码"), @@ -23,9 +22,12 @@ public enum RentConstants { CUSDOCFORMNO("","客商档案表单编码"), NOTICEFORMNO("","招商公告表单编码"), WECHATBACKENDHOST("","微信小程序后端host"), - WEAPPCONFIGFORMNO("","小程序配置表") + WEAPPCONFIGFORMNO("","小程序配置表"), + COMMUNITYFORMNO("","楼盘表单编码"), + BILLCREATEFORMNO("","租赁账单生成台账表单编码"), + PAYMENT_REGISTRATION_TEMPLATECODE("","收款登记模板编码"), ; - RentConstants(String defaultValue, String description) { + AssetsTenantConstants(String defaultValue, String description) { this.defaultValue = defaultValue; this.description = description; } diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java index 85be01d..0e78206 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java @@ -16,6 +16,8 @@ public class ContractAssetsVo { private String powerFeeUnit; //电费单位 private String footPrint; //占地大小 private String manager;//管理员 + private String zone;//所在区域 + private String address;//详细地址 public String getAssetsNo() { return assetsNo; @@ -104,4 +106,20 @@ public class ContractAssetsVo { public void setManager(String manager) { this.manager = manager; } + + public String getZone() { + return zone; + } + + public void setZone(String zone) { + this.zone = zone; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java index 43758c2..e35fb1b 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java @@ -1,14 +1,7 @@ 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 { diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractFeeInfo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractFeeInfo.java new file mode 100644 index 0000000..a89d16f --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractFeeInfo.java @@ -0,0 +1,4 @@ +package com.seeyon.apps.assetstenant.contract; + +public class ContractFeeInfo { +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractPayBaseInfo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractPayBaseInfo.java new file mode 100644 index 0000000..81427e6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractPayBaseInfo.java @@ -0,0 +1,86 @@ +package com.seeyon.apps.assetstenant.contract; + +public class ContractPayBaseInfo { + + private String contractNo; + private String startDate; + private String endDate; + private String totalRentFee;//总租金 + private String deposit; //押金 + private String paidTermNum; //已付期数 + private String totalTermNum; //总期数 + private String assetsName; //资产名称 + private String assetsNo; + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getAssetsName() { + return assetsName; + } + + public void setAssetsName(String assetsName) { + this.assetsName = assetsName; + } + + public String getAssetsNo() { + return assetsNo; + } + + public void setAssetsNo(String assetsNo) { + this.assetsNo = assetsNo; + } + + 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 getDeposit() { + return deposit; + } + + public void setDeposit(String deposit) { + this.deposit = deposit; + } + + public String getPaidTermNum() { + return paidTermNum; + } + + public void setPaidTermNum(String paidTermNum) { + this.paidTermNum = paidTermNum; + } + + public String getTotalTermNum() { + return totalTermNum; + } + + public void setTotalTermNum(String totalTermNum) { + this.totalTermNum = totalTermNum; + } + + public String getTotalRentFee() { + return totalRentFee; + } + + public void setTotalRentFee(String totalRentFee) { + this.totalRentFee = totalRentFee; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java index 8144935..4c8c2f0 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.AssetsService; import com.seeyon.apps.assetstenant.assets.OaAssetsVo; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.file.OaFileVo; import com.seeyon.apps.assetstenant.po.PageQueryVo; import com.seeyon.apps.esign.service.SignLinkService; @@ -33,7 +33,7 @@ public class ContractService { private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.CONTRACT_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.CONTRACT_FORMNO); } private String getStringValue(Map fieldsMap,String key) { @@ -58,8 +58,7 @@ public class ContractService { } public PageQueryVo pageQuery(JSONObject params) throws Exception { - TableContext tableContext = getTableContext(); - List conditions = buildConditions(params); + 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(); @@ -69,9 +68,9 @@ public class ContractService { pageQueryVo.setDatas(oaContractVos); pageQueryVo.setTotalCount(count); TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); - for (Object data : datas) { + for (FormColumn data : datas) { OaContractVo oaContractVo = new OaContractVo(); - Map dataMap = (Map) data; + Map dataMap = data.getFieldsMap(); fillVo(dataMap,oaContractVo); Long id = Long.parseLong((String)dataMap.get("id")); List subConditions = new ArrayList<>(); @@ -79,7 +78,7 @@ public class ContractService { List subDatas = FormTableExecutor.pageQuery(subTableContext, null, subConditions, 1, 10,true); log.info("查询到的关联资产数量: " + subDatas.size()); if(subDatas.size() > 0) { - Map subOneRowData = (Map) subDatas.get(0); + Map subOneRowData = subDatas.get(0).getFieldsMap(); String assetsNo = (String) subOneRowData.get("资产编号"); JSONObject temp = new JSONObject(); temp.put("assetsNo",assetsNo); @@ -89,17 +88,19 @@ public class ContractService { } oaContractVo.setTenantName(getStringValue(dataMap,"承租方名称")); oaContractVo.setDeposit(getStringValue(dataMap,"履约保证金")); - oaContractVo.setRentFee(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; + String payWay = getStringValue(dataMap,"缴费方式"); + if(payWay != null) { + 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); } @@ -138,8 +139,8 @@ public class ContractService { 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; + for (FormColumn subData : subDatas) { + Map subOneRowData = subData.getFieldsMap(); String assetsNo = (String) subOneRowData.get("资产编号"); JSONObject temp = new JSONObject(); temp.put("assetsNo",assetsNo); @@ -154,6 +155,34 @@ public class ContractService { return oaContractVos; } + public void fillDetailVo(Map fieldsMap, OaContractDetailVo oaContractVo) { + //合同基本信息 + oaContractVo.setContractNo(getStringValue(fieldsMap,"合同编号")); + oaContractVo.setTenantName(getStringValue(fieldsMap,"承租方名称")); //租客姓名 + Integer years = parseInt(fieldsMap.get("文本-年")); + Integer months = parseInt(fieldsMap.get("文本-月")); + Integer days = parseInt(fieldsMap.get("文本-日")); + oaContractVo.setLeaseTerm(getLeaseTermText(years,months,days)); //租赁期限 + oaContractVo.setEndDate(getStringValue(fieldsMap,"合同截止日期")); //到期日期 + oaContractVo.setStartDate(getStringValue(fieldsMap,"合同开始日期")); + if(fieldsMap.get("盖章后合同附件") != null) { + oaContractVo.seteContractFile(OaFileVo.getInstance(fieldsMap.get("盖章后合同附件"),attachmentManager)); + } + oaContractVo.seteContractFlowId(getStringValue(fieldsMap,"电子签合同流程ID")); + oaContractVo.setSignStatus(getStringValue(fieldsMap,"签署状态")); + + //房屋费用信息 + oaContractVo.setContractFee(getStringValue(fieldsMap,"合同金额")); //租金 + oaContractVo.setDeposit(getStringValue(fieldsMap,"押金")); //押金 + oaContractVo.setRentFeeUnit(getRentUnit(getStringValue(fieldsMap,"缴费方式"))); //租金单位 + + oaContractVo.setDeposit(getStringValue(fieldsMap,"履约保证金")); + if(fieldsMap.get("盖章后合同附件") != null) { + oaContractVo.seteContractFile(OaFileVo.getInstance(fieldsMap.get("盖章后合同附件"),attachmentManager)); + } + oaContractVo.seteContractFlowId(getStringValue(fieldsMap,"电子签合同流程ID")); + } + public void fillVo(Map fieldsMap, OaContractVo oaContractVo) { oaContractVo.setFormId(getStringValue(fieldsMap, "id")); oaContractVo.setContractNo(getStringValue(fieldsMap,"合同编号")); @@ -164,8 +193,9 @@ public class ContractService { oaContractVo.setContractEndTime(getStringValue(fieldsMap,"合同截止日期")); oaContractVo.setStartDate(oaContractVo.getContractStartTime()); oaContractVo.setEndDate(oaContractVo.getContractEndTime()); + oaContractVo.setDeposit(getStringValue(fieldsMap,"履约保证金")); if(fieldsMap.get("盖章后合同附件") != null) { - oaContractVo.seteContractFile(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("盖章后合同附件")),attachmentManager)); + oaContractVo.seteContractFile(OaFileVo.getInstance(fieldsMap.get("盖章后合同附件"),attachmentManager)); } oaContractVo.seteContractFlowId(getStringValue(fieldsMap,"电子签合同流程ID")); } @@ -198,76 +228,176 @@ public class ContractService { return conditions; } - public String queryContractPayPeriod(String contractNo, String billDate) throws Exception { + public String getLeaseTermText(Integer years, Integer months, Integer days) { + // 处理 null → 0 + int y = years == null ? 0 : years; + int m = months == null ? 0 : months; + int d = days == null ? 0 : days; + + StringBuilder sb = new StringBuilder(); + + // 拼接年 + if (y > 0) { + sb.append(y).append("年"); + } + // 拼接月 + if (m > 0) { + sb.append(m).append("个月"); + } + // 拼接日 + if (d > 0) { + sb.append(d).append("天"); + } + + // 都为0的情况 + if (sb.length() == 0) { + return "0天"; + } + + return sb.toString(); + } + + + public String getRentUnit(String payWay) { + if (payWay == null) { + return ""; + } + switch (payWay.trim()) { + case "月缴": return "月"; + case "季度缴": return "季"; + case "半年缴": return "半年"; + case "年缴": return "年"; + case "一次性": return "年"; // 一次性默认按年单位 + default: return ""; + } + } + + public Integer queryContractPayPeriod(String contractNo, String billDate) throws Exception { + // 1. 基础参数校验 + if (contractNo == null || contractNo.isEmpty() || billDate == null || billDate.isEmpty()) { + return null; + } + // 2. 查询合同数据 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 ""; + return null; + } + Map fieldsMap = formColumn.getFieldsMap(); + // 3. 提取字段并安全转换 + String payWay = toStr(fieldsMap.get("缴费方式")); + Integer years = parseInt(fieldsMap.get("文本-年")); + Integer months = parseInt(fieldsMap.get("文本-月")); + Integer days = parseInt(fieldsMap.get("文本-日")); + String rentStartDateStr = toStr(fieldsMap.get("计租日期")); + // 计租日期为空直接返回 + if (rentStartDateStr.isEmpty()) { + return null; + } + // 4. 日期解析(增加异常捕获,避免格式错误导致程序崩溃) + LocalDate startDate; + LocalDate billLocalDate; + try { + startDate = LocalDate.parse(rentStartDateStr); + billLocalDate = LocalDate.parse(billDate); + } catch (Exception e) { + return null; + } + // 计算合同结束日期 + LocalDate endDate = startDate.plusYears(years).plusMonths(months).plusDays(days); + // 计算合同总月数 + int totalMonths = years * 12 + months; + // 5. 核心业务逻辑 + // 一次性/年缴 固定返回1期 + if ("一次性".equals(payWay)) { + return 1; + } + // 账单日期早于计租开始日 → 第1期 + if (billLocalDate.isBefore(startDate)) { + return 1; + } + // 账单日期超过合同结束日 → 返回总期数 + if (billLocalDate.isAfter(endDate)) { + return calculateTotalPeriod(payWay, totalMonths); + } + // 账单日期在合同期内 → 计算当前期数 + return calculateCurrentPeriod(startDate, billLocalDate, payWay); + } + + public Integer countTotalPeriod(String contractNo) throws BusinessException { + 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 null; } Map fieldsMap = formColumn.getFieldsMap(); String payWay = toStr(fieldsMap.get("缴费方式")); - int years = parseInt(fieldsMap.get("文本-年")); - int months = parseInt(fieldsMap.get("文本-月")); - int days = parseInt(fieldsMap.get("文本-日")); - + Integer years = parseInt(fieldsMap.get("文本-年")); + Integer months = parseInt(fieldsMap.get("文本-月")); + Integer days = parseInt(fieldsMap.get("文本-日")); String rentStartDateStr = toStr(fieldsMap.get("计租日期")); - if (rentStartDateStr.isEmpty() || billDate == null || billDate.isEmpty()) { - return ""; - } + return calculateTotalPeriod(payWay, years * 12 + months); + } - 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"; - } - } - - // 账单在合同期内 + /** + * 计算账单超出合同结束日时的【总期数】 + */ + private Integer calculateTotalPeriod(String payWay, int totalMonths) { + int period; switch (payWay) { case "季度缴": - long monthsBetweenQ = ChronoUnit.MONTHS.between(startDate, billLocalDate); - return ((monthsBetweenQ / 3) + 1) + ""; + period = totalMonths / 3; + break; case "月缴": - long monthsBetween = ChronoUnit.MONTHS.between(startDate, billLocalDate); - return (monthsBetween + 1) + ""; - // 修复后 半年缴 + period = totalMonths; + break; case "半年缴": - long monthsBetweenHalf = ChronoUnit.MONTHS.between(startDate, billLocalDate); - return (monthsBetweenHalf / 6 + 1) + ""; + period = totalMonths / 6; + break; + case "年缴": + period = totalMonths / 12; + break; default: - return "1"; + return 1; } + return Math.max(period, 1); } + /** + * 计算账单在合同期内的【当前期数】 + */ + private Integer calculateCurrentPeriod(LocalDate startDate, LocalDate billLocalDate, String payWay) { + long monthsBetween = ChronoUnit.MONTHS.between(startDate, billLocalDate); + int period; + + switch (payWay) { + case "季度缴": + period = (int) (monthsBetween / 3) + 1; + break; + case "月缴": + period = (int) monthsBetween + 1; + break; + case "半年缴": + period = (int) (monthsBetween / 6) + 1; + break; + case "年缴": + period = (int) (monthsBetween / 12) + 1; + break; + default: + return 1; + } + return Math.max(period, 1); + } + + + + private String toStr(Object obj) { return obj == null ? "" : obj.toString().trim(); } @@ -281,34 +411,31 @@ public class ContractService { } } - public OaContractVo queryContractDetail(JSONObject params) throws Exception { + public OaContractDetailVo queryContractDetail(JSONObject params) throws Exception { List conditions = buildConditions(params); FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(),conditions,true); if(formColumn == null) { - return new OaContractVo(); + return new OaContractDetailVo(); } Map dataMap = formColumn.getFieldsMap(); - OaContractVo oaContractVo = new OaContractVo(); - fillVo(dataMap,oaContractVo); + OaContractDetailVo oaContractVo = new OaContractDetailVo(); + oaContractVo.setId(formColumn.getId()); + fillDetailVo(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); + FormColumn subFormColumn = subDatas.get(0); + Map subOneRowData = subFormColumn.getFieldsMap(); 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); + oaContractVo.setContractAssetsList(vos); } return oaContractVo; } diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractDetailVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractDetailVo.java new file mode 100644 index 0000000..48723e2 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractDetailVo.java @@ -0,0 +1,169 @@ +package com.seeyon.apps.assetstenant.contract; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +import java.util.List; + +public class OaContractDetailVo { + + private String id; + // 合同基本信息 + /** 租客姓名 */ + private String tenantName; + + /** 开始时间 */ + private String startDate; + + /** 合同编号 */ + private String contractNo; + + /** 租赁期限(年) */ + private String leaseTerm; + + /** 截止时间 */ + private String endDate; + + /** 租约状态(如:已退租) */ + private String contractStatus; + + // 房屋费用信息 + /** 合同金额 */ + private String contractFee; + + /** 押金(元) */ + private String deposit; + + /** 付款形式(如:押一付三) */ + private String paymentMethod; + + private List contractAssetsList; + + private String rentFeeUnit; //租金单位 + + private OaFileVo eContractFile; //合同附件 + + private String eContractFlowId; //电子签流程ID + + private String signStatus;//签署状态 + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + + public String getContractStatus() { + return contractStatus; + } + + public void setContractStatus(String contractStatus) { + this.contractStatus = contractStatus; + } + + public String getContractFee() { + return contractFee; + } + + public void setContractFee(String contractFee) { + this.contractFee = contractFee; + } + + public String getDeposit() { + return deposit; + } + + public void setDeposit(String deposit) { + this.deposit = deposit; + } + + public String getPaymentMethod() { + return paymentMethod; + } + + public void setPaymentMethod(String paymentMethod) { + this.paymentMethod = paymentMethod; + } + + public List getContractAssetsList() { + return contractAssetsList; + } + + public void setContractAssetsList(List contractAssetsList) { + this.contractAssetsList = contractAssetsList; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getRentFeeUnit() { + return rentFeeUnit; + } + + public void setRentFeeUnit(String rentFeeUnit) { + this.rentFeeUnit = rentFeeUnit; + } + + public OaFileVo geteContractFile() { + return eContractFile; + } + + public void seteContractFile(OaFileVo eContractFile) { + this.eContractFile = eContractFile; + } + + public String geteContractFlowId() { + return eContractFlowId; + } + + public void seteContractFlowId(String eContractFlowId) { + this.eContractFlowId = eContractFlowId; + } + + public String getSignStatus() { + return signStatus; + } + + public void setSignStatus(String signStatus) { + this.signStatus = signStatus; + } + + 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 getLeaseTerm() { + return leaseTerm; + } + + public void setLeaseTerm(String leaseTerm) { + this.leaseTerm = leaseTerm; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java index 8512cc6..c4c15b3 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java @@ -186,4 +186,5 @@ public class OaContractVo { 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 index 14c72c1..a5bd67c 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java +++ b/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java @@ -8,6 +8,7 @@ public class Customer { private String cusNo; private String orgNo; private String orgManagerName; + private String cusType; private int isOrg = 0; public String getId() { @@ -73,4 +74,12 @@ public class Customer { public void setIsOrg(int isOrg) { this.isOrg = isOrg; } + + public String getCusType() { + return cusType; + } + + public void setCusType(String cusType) { + this.cusType = cusType; + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java index 9f163fa..013c0eb 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java @@ -1,11 +1,10 @@ package com.seeyon.apps.assetstenant.cus; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; 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; @@ -16,7 +15,7 @@ public class CustomerService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.CUSDOCFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.CUSDOCFORMNO); } private TableContext getTableContext() throws BusinessException { @@ -74,7 +73,9 @@ public class CustomerService { customer.setCusPhone(getStringValue(fieldsMap,"客户联系方式")); customer.setOrgManagerName(getStringValue(fieldsMap,"客商联系人")); customer.setOrgNo(getStringValue(fieldsMap,"纳税人识别号或身份证号")); - customer.setIsOrg(StringUtils.isNotEmpty(customer.getOrgNo()) ? 1 : 0); + String cusType = getStringValue(fieldsMap, "客商分类"); + customer.setCusType(cusType); + customer.setIsOrg("企业".equals(cusType) ? 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 index 17e28cb..28910d3 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java @@ -2,19 +2,21 @@ package com.seeyon.apps.assetstenant.discharge; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.OaAssetsVo; +import com.seeyon.apps.assetstenant.bill.BillVo; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.contract.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.apps.assetstenant.utils.ProtUtil; +import com.seeyon.apps.esign.constants.EsignConfigConstants; 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.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -25,7 +27,7 @@ public class DisCharegeService { private ContractService contractService = (ContractService) AppContext.getBean("contractService"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.DISCHARGE_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.DISCHARGE_TEMPLATECODE); } private TableContext getTableContext() throws BusinessException { return FormTableExecutor.master(getFormNo()); @@ -50,8 +52,8 @@ public class DisCharegeService { 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; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); DisChargeRecordVo vo = new DisChargeRecordVo(); fillVo(map,vo); vos.add(vo); @@ -74,8 +76,8 @@ public class DisCharegeService { List subFormDataList = new ArrayList<>(); Map data = new HashMap<>(); subFormDataMap.put(subDbTableName,subFormDataList); - String templateCode = configProvider.getBizConfigByKey(RentConstants.DISCHARGE_TEMPLATECODE); - String appName = configProvider.getBizConfigByKey(RentConstants.FORMAPPNAME); + String templateCode = configProvider.getBizConfigByKey(AssetsTenantConstants.DISCHARGE_TEMPLATECODE); + String appName = configProvider.getBizConfigByKey(AssetsTenantConstants.FORMAPPNAME); mainFormData.put(tableName,data); String contractNo = params.getString("contractNo"); List assetsNoList = (List) params.get("assetsNoList"); @@ -101,6 +103,40 @@ public class DisCharegeService { flowCreateService.flowStart("退租申请",mainFormData,subFormDataMap,appName,templateCode); } + public void cancelApply(String id) throws BusinessException, IOException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("ID").value(id)); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), conditions, true); + if(formColumn == null) { + throw new BusinessException("未找到退租申请"); + } + Map fieldsMap = formColumn.getFieldsMap(); + String nodeId = (String)fieldsMap.get("流程节点ID"); + JSONObject params = new JSONObject(); + params.put("message", "租户取消退租申请"); + params.put("returnCode", 5); + ProtUtil.sendPostNotification(configProvider,params.toString(),"/seeyon/rest/flow/notification/", nodeId); + } + + public void forwardApply(String id) throws BusinessException, IOException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("ID").value(id)); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), conditions, true); + if(formColumn == null) { + throw new BusinessException("未找到退租申请"); + } + Map fieldsMap = formColumn.getFieldsMap(); + String nodeId = (String)fieldsMap.get("流程节点ID"); + JSONObject params = new JSONObject(); + params.put("message", "租户已确认清退费用"); + params.put("returnCode", 1); + ProtUtil.sendPostNotification(configProvider,params.toString(),"/seeyon/rest/flow/notification/", nodeId); + } + +// public List queryDisChargeBill(String id) { +// List +// } + public void fillVo(Map fieldsMap,DisChargeRecordVo vo) throws BusinessException { vo.setContractName(getStringValue(fieldsMap,"合同名称")); vo.setId(getStringValue(fieldsMap,"id")); diff --git a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java index c28812a..700bbab 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java @@ -2,11 +2,21 @@ package com.seeyon.apps.assetstenant.fallback; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; +import com.seeyon.apps.assetstenant.cus.Customer; +import com.seeyon.apps.assetstenant.cus.CustomerService; +import com.seeyon.apps.assetstenant.file.OaFileVo; import com.seeyon.apps.assetstenant.flow.FlowCreateService; import com.seeyon.apps.assetstenant.po.PageQueryVo; 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.common.filemanager.manager.FileManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.common.po.filemanager.V3XFile; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; import com.seeyon.utils.form.*; import com.seeyon.v3x.services.form.FormFactory; import org.apache.commons.lang3.StringUtils; @@ -21,9 +31,12 @@ public class FallbackService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService"); private FormFactory factory = (FormFactory) AppContext.getBean("formFactory"); + private FileManager fileManager = (FileManager)AppContext.getBean("fileManager"); + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private CustomerService customerService = (CustomerService) AppContext.getBean("customerService"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.FALLBACK_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.FALLBACK_FORMNO); } private TableContext getMasterTableContext() throws BusinessException { return FormTableExecutor.master(getFormNo()); @@ -38,10 +51,10 @@ public class FallbackService { Long count = FormTableExecutor.count(getMasterTableContext(),null, conditions); List vos = new ArrayList<>(); if(datas.size() > 0) { - for (Object data : datas) { + for (FormColumn data : datas) { FallbackVo fallbackVo = new FallbackVo(); - Map dataMap = (Map) data; - fillVo(dataMap,fallbackVo); + Map dataMap = data.getFieldsMap(); + fillPageQueryVo(dataMap,fallbackVo); vos.add(fallbackVo); } } @@ -55,7 +68,7 @@ public class FallbackService { FormColumn formColumn = FormTableExecutor.queryOne(getMasterTableContext(),conditions, true); Map fieldsMap = formColumn.getFieldsMap(); FallbackVo fallbackVo = new FallbackVo(); - fillVo(fieldsMap,fallbackVo); + fillDetailVo(fieldsMap,fallbackVo); return fallbackVo; } @@ -63,17 +76,71 @@ public class FallbackService { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map mainFormData = new HashMap<>(); TableContext tableContext = getMasterTableContext(); + String refId = String.valueOf(Math.abs(UUID.randomUUID().getLeastSignificantBits())); mainFormData.put("承租方编号", params.getString("cusNo")); - mainFormData.put("承租方姓名", params.getString("tenantName")); - mainFormData.put("承租方类型", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "承租方类型", params.getString("tenantType"))); + Customer customer = customerService.getCustomerInfo(params.getString("cusNo")); + if(customer != null) { + mainFormData.put("承租方姓名", customer.getCusName()); + mainFormData.put("承租方类型", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "承租方类型", customer.getCusType())); + } mainFormData.put("承租方手机号", params.getString("tenantPhone")); mainFormData.put("留言内容", params.getString("content")); mainFormData.put("留言日期", df.format(new Date())); + mainFormData.put("图片索引ID文本",refId); mainFormData.put("处理状态", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "处理状态", "未处理")); String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); mainFormData.put("档案编号",docNo); - String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + String loginName = configProvider.getBizConfigByKey(AssetsTenantConstants.formLoginName); FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); + List imgUrls = (ArrayList)params.get("imgUrls"); + if(imgUrls != null && imgUrls.size() > 0) { + buildImgRef(refId,imgUrls); + } + } + + private void buildImgRef(String refId, List imgUrls) throws BusinessException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("图片索引ID文本").value(refId)); + FormColumn formColumn = FormTableExecutor.queryOne(getMasterTableContext(), conditions, true); + if(formColumn == null) { + return; + } + String formId = formColumn.getId(); + List attachments = new ArrayList<>(); + int index = 0; + for (String url : imgUrls) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Map attachMeta = new HashMap<>(); + attachMeta.put("type", "0"); + attachMeta.put("fileUrl", url); + V3XFile v3xfile = fileManager.getV3XFile(Long.parseLong(url)); + if(v3xfile != null) { + attachMeta.put("size", String.valueOf(v3xfile.getSize())); + } + attachMeta.put("subReference", refId); + attachMeta.put("category", "66"); + attachMeta.put("createdate", sdf.format(new Date())); + attachMeta.put("filename", index +""); + attachMeta.put("reference", formId); + attachMeta.put("mimeType", "application/" + "octet-stream"); + attachments.add(new Attachment(attachMeta)); + index++; + } + OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + V3xOrgMember member = orgManager.getMemberByLoginName(configProvider.getBizConfigByKey(AssetsTenantConstants.formLoginName)); + V3xOrgAccount account = orgManager.getAccountByName(configProvider.getBizConfigByKey(AssetsTenantConstants.updateAccountName)); + AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + attachmentManager.create(attachments, member.getId(), account.getId()); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("留言图片").value(refId)); + conditions.clear(); + conditions.add(FormWhereCondition.build().display("ID").value(formId)); + System.out.println("开始绑定图片关系"); + try { + FormTableExecutor.update(getMasterTableContext(),updateFields,conditions); + }catch (Exception e) { + e.printStackTrace(); + } } private String getStringValue(Map fieldsMap,String key) { @@ -95,14 +162,28 @@ public class FallbackService { return conditions; } - private void fillVo(Map fieldMap, FallbackVo vo) { + private void fillPageQueryVo(Map fieldMap, FallbackVo vo) { vo.setId(getStringValue(fieldMap,"id")); vo.setContent(getStringValue(fieldMap,"留言内容")); vo.setStatus(getStringValue(fieldMap,"处理状态")); - vo.setComment(getStringValue(fieldMap,"处理意见")); + vo.setComment(getStringValue(fieldMap,"处理回复")); vo.setSummitDate(getStringValue(fieldMap,"留言日期")); if(StringUtils.isNotBlank(vo.getComment())) { vo.setHandleDate(getStringValue(fieldMap,"modify_date")); } } + + private void fillDetailVo(Map fieldMap, FallbackVo vo) { + vo.setId(getStringValue(fieldMap,"id")); + vo.setContent(getStringValue(fieldMap,"留言内容")); + vo.setStatus(getStringValue(fieldMap,"处理状态")); + vo.setComment(getStringValue(fieldMap,"处理回复")); + vo.setSummitDate(getStringValue(fieldMap,"留言日期")); + if(StringUtils.isNotBlank(vo.getComment())) { + vo.setHandleDate(getStringValue(fieldMap,"modify_date")); + } + if(fieldMap.get("留言图片") != null) { + vo.setImgs(OaFileVo.getInstance(fieldMap.get("资产图片"),attachmentManager)); + } + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java index ed742ba..4987e7f 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java @@ -1,5 +1,7 @@ package com.seeyon.apps.assetstenant.fallback; +import com.seeyon.apps.assetstenant.file.OaFileVo; + public class FallbackVo { private String id; private String content; @@ -7,6 +9,7 @@ public class FallbackVo { private String comment; private String summitDate; private String handleDate; + private OaFileVo imgs; public String getId() { return id; @@ -55,4 +58,12 @@ public class FallbackVo { public void setHandleDate(String handleDate) { this.handleDate = handleDate; } + + public OaFileVo getImgs() { + return imgs; + } + + public void setImgs(OaFileVo imgs) { + this.imgs = imgs; + } } \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java b/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java index d1d72d4..05ba7fa 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java @@ -6,8 +6,6 @@ import com.seeyon.ctp.common.filemanager.manager.FileManager; import com.seeyon.ctp.common.po.filemanager.Attachment; import javax.servlet.http.HttpServletResponse; -import java.io.BufferedOutputStream; -import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; @@ -38,7 +36,7 @@ public class FileHandlerService { response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader( "Content-Disposition", - "attachment; filename=\"" + attachment.getFilename() + "\"; filename*=UTF-8''" + encodedFileName + "attachment; filename*=UTF-8''" + encodedFileName ); // ⭐ 输出流 diff --git a/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java b/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java index 3af82aa..0a15afe 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java +++ b/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java @@ -25,13 +25,18 @@ public class OaFileVo { this.mainRefId = mainRefId; } - public static OaFileVo getInstance(Long refId, AttachmentManager attachmentManager) { + public static OaFileVo getInstance(Object refId, AttachmentManager attachmentManager) { if(refId == null) { return null; } OaFileVo oaFileVo = new OaFileVo(); List subRefIds = new ArrayList<>(); - List fileUrls = attachmentManager.getBySubReference(refId); + List fileUrls = null; + if(refId instanceof java.lang.Long) { + fileUrls = attachmentManager.getBySubReference((Long)refId); + }else if( refId instanceof java.lang.String){ + fileUrls = attachmentManager.getBySubReference(Long.parseLong((String)refId)); + } oaFileVo.setMainRefId(refId + ""); for (Long fileUrl : fileUrls) { subRefIds.add(fileUrl + ""); diff --git a/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java b/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java index e7e47b1..2f4a381 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java @@ -2,7 +2,7 @@ package com.seeyon.apps.assetstenant.flow; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.ctp.common.AppContext; import com.seeyon.utils.http.OaResp; import com.seeyon.utils.http.OaRestClient; @@ -16,9 +16,9 @@ public class FlowCreateService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); public void flowStart(String flowName,Map mainFormData, Map> subFormDatas,String appName,String templateCode) throws Exception { - OaRestClient client = new OaRestClient(configProvider.getBizConfigByKey(RentConstants.OA_HOST), - configProvider.getBizConfigByKey(RentConstants.restName), - configProvider.getBizConfigByKey(RentConstants.restPwd),false); + OaRestClient client = new OaRestClient(configProvider.getBizConfigByKey(AssetsTenantConstants.OA_HOST), + configProvider.getBizConfigByKey(AssetsTenantConstants.restName), + configProvider.getBizConfigByKey(AssetsTenantConstants.restPwd),false); String url = "/bpm/process/start"; Map params = new HashMap<>(); Map datas = new HashMap<>(); @@ -40,4 +40,17 @@ public class FlowCreateService { } } + public void flowStop(String flowName,String affairId,String member) throws Exception { + OaRestClient client = new OaRestClient(configProvider.getBizConfigByKey(AssetsTenantConstants.OA_HOST), + configProvider.getBizConfigByKey(AssetsTenantConstants.restName), + configProvider.getBizConfigByKey(AssetsTenantConstants.restPwd),false); + String url = "/affair/stop"; + Map params = new HashMap<>(); + params.put("affairId", affairId); + params.put("member", member);//当前处理人登录名; + OaResp oaResp = client.sendPost(flowName +"流程终止", url, params); + if(oaResp.getCode() != 0) { + throw new Exception(flowName + "流程终止失败:" + oaResp.getMessage()); + } + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/node/DisChargeFeeConfirmNode.java b/src/main/java/com/seeyon/apps/assetstenant/node/DisChargeFeeConfirmNode.java new file mode 100644 index 0000000..b24d3ff --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/node/DisChargeFeeConfirmNode.java @@ -0,0 +1,39 @@ +package com.seeyon.apps.assetstenant.node; + +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.cap4.form.bean.FormDataMasterBean; + +public class DisChargeFeeConfirmNode extends ACommonSuperNode { + + @Override + public String getPluginId() { + return AssetsTenantConstants.getPluginId(); + } + + @Override + public String getFormParse() { + return ""; + } + + @Override + public SuperNodeContext proceed(String s, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + context.setNeedSave(true); + String nodeId = formDataVo.getToken(); + formDataVo.getNewFieldDataMap().put("流程节点ID", nodeId); + return context.wait("等待租户确认"); + } + + @Override + public String getNodeId() { + return "ndDis20260520"; + } + + @Override + public String getNodeName() { + return "退租申请清退费用确认节点"; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java index fee90da..e44a22b 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java @@ -2,7 +2,7 @@ package com.seeyon.apps.assetstenant.notice; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.file.OaFileVo; import com.seeyon.apps.assetstenant.po.PageQueryVo; import com.seeyon.ctp.common.AppContext; @@ -21,7 +21,7 @@ public class NoticeService { private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.NOTICEFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.NOTICEFORMNO); } private TableContext getMasterTableContext() throws BusinessException { return FormTableExecutor.master(getFormNo()); @@ -36,8 +36,8 @@ public class NoticeService { Long count = FormTableExecutor.count(getMasterTableContext(),null, conditions); List vos = new ArrayList<>(); if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); NoticeVo vo = new NoticeVo(); fillVo(map, vo); vos.add(vo); @@ -88,11 +88,11 @@ public class NoticeService { vo.setNoticeContent(getStringValue(fieldsMap,"招租公告")); vo.setCreateTime(fieldsMap.get("申请日期") + ""); if(fieldsMap.get("相关附件") != null) { - vo.setAttachments(OaFileVo.getInstance((Long)fieldsMap.get("相关附件"),attachmentManager)); + vo.setAttachments(OaFileVo.getInstance(fieldsMap.get("相关附件"),attachmentManager)); } if(fieldsMap.get("VR文件") != null) { - vo.setImgs(OaFileVo.getInstance((Long)fieldsMap.get("VR文件"),attachmentManager)); + vo.setImgs(OaFileVo.getInstance(fieldsMap.get("VR文件"),attachmentManager)); } vo.setNoticeType("bussiness"); } diff --git a/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java index fbf2787..10e32a2 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java @@ -4,8 +4,9 @@ import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.AssetsService; import com.seeyon.apps.assetstenant.assets.OaAssetsVo; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.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.*; @@ -20,7 +21,7 @@ public class ReserveService { private FormFactory factory = (FormFactory) AppContext.getBean("formFactory"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.RESERVE_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.RESERVE_FORMNO); } private TableContext getMasterTableContext() throws BusinessException { return FormTableExecutor.master(getFormNo()); @@ -35,8 +36,8 @@ public class ReserveService { List datas = FormTableExecutor.pageQuery(getMasterTableContext(), null,conditions, pageNo, pageSize,true); Long count = FormTableExecutor.count(getMasterTableContext(),null, conditions); if(datas.size() > 0){ - for (Object data : datas) { - Map map = (Map) data; + for (FormColumn data : datas) { + Map map = data.getFieldsMap(); ReservationVo vo = new ReservationVo(); fillVo(map,vo); vos.add(vo); @@ -63,6 +64,13 @@ public class ReserveService { return count.intValue(); } + public Integer countAll(JSONObject params) throws BusinessException { + List conditions = buildConditions(params); + TableContext tableContext = getMasterTableContext(); + Long count = FormTableExecutor.count(tableContext,null, conditions); + return count.intValue(); + } + public void fillVo(Map fieldsMap,ReservationVo vo) throws Exception { String assetsNo = getStringValue(fieldsMap,"资产编号"); OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(assetsNo); @@ -89,13 +97,40 @@ public class ReserveService { mainFormData.put("看房人手机号", params.getString("phone")); mainFormData.put("微信openId", params.getString("openId")); mainFormData.put("预约时间", params.getString("reserveTime")); + String tenantType = params.getString("tenantType"); + if(StringUtils.isNotBlank(tenantType)) { + TableContext tableContext = getMasterTableContext(); + FormTableBean tableBean = tableContext.getTableBean(); + if("0".equals(tenantType)) { + mainFormData.put("客户属性",EnumMapUtils.getEnumItemValueByDisplayValue(tableBean,"客户属性","个人")); + }else { + mainFormData.put("客户属性",EnumMapUtils.getEnumItemValueByDisplayValue(tableBean,"客户属性","企业")); + } + } String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); mainFormData.put("档案编号",docNo); + mainFormData.put("运营类型",getManageType(params.getString("assetsNo"))); mainFormData.put("处理状态", EnumMapUtils.getEnumItemValueByDisplayValue(getMasterTableContext().getTableBean(), "处理状态", "未处理")); - String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + String loginName = configProvider.getBizConfigByKey(AssetsTenantConstants.formLoginName); FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); } + public String getManageType(String assetsNo) throws Exception { + JSONObject param = new JSONObject(); + param.put("assetsNo", assetsNo); + OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(param); + if(oaAssetsVo == null) { + return null; + } + return oaAssetsVo.getManageType(); + } + + public void cancelReserve(String id) throws BusinessException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("ID").value(id)); + FormTableExecutor.delete(getMasterTableContext(),conditions); + } + private List buildConditions(JSONObject params) { List conditions = new ArrayList<>(); if(StringUtils.isNotBlank(params.getString("openId"))){ diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/ProtUtil.java b/src/main/java/com/seeyon/apps/assetstenant/utils/ProtUtil.java new file mode 100644 index 0000000..d5dd2a1 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/ProtUtil.java @@ -0,0 +1,83 @@ +package com.seeyon.apps.assetstenant.utils; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicHeader; +import org.apache.http.util.EntityUtils; +import www.seeyon.com.utils.StringUtil; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Map; + + +public class ProtUtil { + + private static final Log log = LogFactory.getLog(ProtUtil.class); + + /** + * 获取一个token + * + * @return + * @throws IOException + * @throws FileNotFoundException + */ + private static String getToken(AssetsTenantConfigProvider configProvider, String oatokenurl, String restName, String restPassword, String loginName) throws FileNotFoundException, IOException { + String address = oatokenurl + restName + "/" + restPassword; + if(StringUtil.isNotEmpty(loginName)){ + address = address +"?loginName="+loginName; + } + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + // 添加 Headers 信息 + get.addHeader(new BasicHeader("Accept", "application/json")); + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + String token = ""; + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + token = jsObj.get("id").toString(); + }else { + token = result; + } + return token; + } + + + /** + * 调用post接口 + * @return + */ + public static String sendPostNotification(AssetsTenantConfigProvider configProvider,String params, String urlParam, String token) throws IOException { + String host = configProvider.getBizConfigByKey(AssetsTenantConstants.OA_HOST); + String tokenGetUrl = "/seeyon/rest/token/"; + String restName = configProvider.getBizConfigByKey(AssetsTenantConstants.restName); + String restPwd = configProvider.getBizConfigByKey(AssetsTenantConstants.restPwd); + String oatoken = getToken(configProvider,host + tokenGetUrl,restName,restPwd,null); + String url = host + urlParam+ token+"?token="+oatoken; + log.info("调用恢复超级节点接口请求地址为: " + url); + String respStr = HttpClient.httpPostRaw(url, params, null, null); + log.info("调用恢复超级节点接口响应结果: " + respStr); + if(!"1".equals(respStr)) { + Map map = JsonUtils.parseObject(respStr, Map.class); + throw new RuntimeException("恢复阻塞的超级节点失败: " + map.get("message")); + } + return respStr; + } + +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java b/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java index 7fc1c5a..7edc610 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java @@ -3,18 +3,17 @@ package com.seeyon.apps.assetstenant.viewrecord; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.AssetsService; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; +import com.seeyon.cap4.form.bean.FormTableBean; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.rest.resources.BaseResource; -import com.seeyon.utils.form.FormSaveUtil; +import com.seeyon.utils.form.*; import com.seeyon.v3x.services.form.FormFactory; +import org.apache.commons.lang3.StringUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; public class ViewRecordService extends BaseResource { @@ -23,7 +22,7 @@ public class ViewRecordService extends BaseResource { private FormFactory factory = (FormFactory) AppContext.getBean("formFactory"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.VIEWRECORD_FORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.VIEWRECORD_FORMNO); } public void record(JSONObject params) throws Exception { @@ -35,7 +34,22 @@ public class ViewRecordService extends BaseResource { String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); mainFormData.put("档案编号",docNo); mainFormData.put("浏览时间",df.format(new Date())); - String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + String loginName = configProvider.getBizConfigByKey(AssetsTenantConstants.formLoginName); FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); } + + private List buildConditions(JSONObject params) { + List conditions = new ArrayList<>(); + if (StringUtils.isNotBlank(params.getString("phone"))) { + conditions.add(FormWhereCondition.build().display("浏览人手机号").value(params.getString("phone"))); + } + return conditions; + } + + public Integer countViewHistory(JSONObject params) throws Exception { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + List conditions = buildConditions(params); + Long count = FormTableExecutor.count(tableContext, null, conditions); + return count.intValue(); + } } diff --git a/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java index d2c1c5b..23a0876 100644 --- a/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java +++ b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java @@ -3,7 +3,7 @@ package com.seeyon.apps.assetstenant.weappconfig; import com.fasterxml.jackson.core.type.TypeReference; import com.seeyon.aicloud.common.JsonUtils; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; -import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.constants.AssetsTenantConstants; import com.seeyon.apps.assetstenant.file.OaFileVo; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; @@ -22,7 +22,7 @@ public class WeAppConfigService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.WEAPPCONFIGFORMNO); + return configProvider.getBizConfigByKey(AssetsTenantConstants.WEAPPCONFIGFORMNO); } private TableContext getMasterTableContext() throws BusinessException { @@ -48,7 +48,7 @@ public class WeAppConfigService { } BannerConfigVo bannerConfigVo = new BannerConfigVo(); if(fieldsMap.get("图片") != null) { - bannerConfigVo.setImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("图片")),attachmentManager)); + bannerConfigVo.setImg(OaFileVo.getInstance(fieldsMap.get("图片"),attachmentManager)); } bannerConfigVo.setFormId(formColumn.getId()); bannerConfigVo.setShowStatus((String)fieldsMap.get("显示状态")); @@ -60,8 +60,8 @@ public class WeAppConfigService { } public List getAssetsTypeList() throws BusinessException { - TableContext tableContext = getMasterTableContext(); - Set sets = EnumMapUtils.getEnumItemValues(tableContext.getTableBean(), "资产类型"); + TableContext tableContext = FormTableExecutor.master(configProvider.getBizConfigByKey(AssetsTenantConstants.ASSETS_FORMNO)); + Set sets = EnumMapUtils.getEnumItemValues(tableContext.getTableBean(), "资产二级类型"); return new ArrayList<>(sets); } diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/BillResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/BillResource.java index 8d1a3be..2a43ce7 100644 --- a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/BillResource.java +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/BillResource.java @@ -8,10 +8,9 @@ import com.seeyon.apps.assetstenant.bill.WaeBillService; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.rest.resources.BaseResource; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.IOException; @@ -69,20 +68,6 @@ public class BillResource extends BaseResource { } } - @POST - @Path("/pay/callback") - @Produces({"application/json"}) - @Consumes({"application/json"}) - public Response onlinePayCallback(JSONObject params) throws IOException { - log.info("支付回调信息参数为:"+params); - try{ - return success(waeBillService.pageQueryWaeBill(params)); - } catch (Exception e) { - log.error(e.getMessage(),e); - return fail(e.getMessage()); - } - } - @POST @Path("/countUnpay/rent") @Produces({"application/json"}) @@ -98,6 +83,21 @@ public class BillResource extends BaseResource { } } + @POST + @Path("/countAllPayHistory") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countAllPayHistory(JSONObject params) throws IOException { + log.info("统计交易数量:" + params, new Object[0]); + + try { + return this.success(feeRecordService.countAll(params)); + } catch (Exception e) { + log.error(e.getMessage(), new Object[]{e}); + return this.fail(e.getMessage()); + } + } + @POST @Path("/countUnpay/wae") @Produces({"application/json"}) @@ -113,4 +113,38 @@ public class BillResource extends BaseResource { } } + @GET + @Path("/contractBill/baseInfoList") + @Produces({"application/json"}) + public Response queryContractBillBaseInfo(@Context HttpServletRequest request) throws IOException { + String contractNo = request.getParameter("contractNo"); + log.info("查询合同账单基本信息的参数:" + contractNo, new Object[0]); + + try { + return this.success(billService.queryContractPayBaseInfoList(contractNo)); + } catch (Exception e) { + log.error(e.getMessage(), new Object[]{e}); + return this.fail(e.getMessage()); + } + } + + + @POST + @Path("/pay/callback") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response onlinePayCallback(JSONObject params) throws IOException { + String billNo = params.getString("billNo"); + String bizType = params.getString("bizType"); + String payDate = params.getString("payDate"); + log.info("支付回调信息参数为:"+ billNo +"," + bizType + "," + payDate); + try{ + feeRecordService.payCallBack(billNo,bizType,payDate); + return this.success("回调处理成功"); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + } diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CommunityResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CommunityResource.java index 8f73ae6..08e6992 100644 --- a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CommunityResource.java +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CommunityResource.java @@ -61,4 +61,18 @@ public class CommunityResource extends BaseResource { return fail(e.getMessage()); } } + + @POST + @Path("/layout/queryList") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryList(JSONObject params) throws IOException { + log.info("查询户型信息参数为:"+params); + try{ + return success(communityService.getLayoutList(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } } diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java index f00e694..cfc51c7 100644 --- a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java @@ -30,4 +30,5 @@ public class FileTransportResource extends BaseResource { log.error(e.getMessage(), e); } } + } diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java index 7fc3345..1c11450 100644 --- a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java @@ -6,10 +6,9 @@ import com.seeyon.apps.assetstenant.reserve.ReserveService; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.rest.resources.BaseResource; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.IOException; @@ -52,6 +51,20 @@ public class ReserveResource extends BaseResource { } } + @POST + @Path("/countAll") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countAll(JSONObject params) throws IOException { + log.info("统计所有预约数量:"+params); + try{ + return success(reserveService.countAll(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + @POST @Path("/apply") @Produces({"application/json"}) @@ -67,4 +80,19 @@ public class ReserveResource extends BaseResource { } } + @GET + @Path("/cancel") + @Produces({"application/json"}) + public Response cancel(@Context HttpServletRequest request) throws IOException { + String id = request.getParameter("id"); + log.info("取消预约看房参数为:"+ id); + try{ + reserveService.cancelReserve(id); + return success("取消成功"); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + } diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ViewRecordResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ViewRecordResource.java index 8e95c21..037fb79 100644 --- a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ViewRecordResource.java +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ViewRecordResource.java @@ -36,4 +36,18 @@ public class ViewRecordResource extends BaseResource { return fail(e.getMessage()); } } + + @POST + @Path("/countViewHistory") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countViewHistory(JSONObject params) throws IOException { + log.info("统计浏览记录:"+params); + try{ + return success(viewRecordService.countViewHistory(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } }