commit b1097e86e2b83c2808be0bcdcb2e648049c5445b Author: RuicyWu <1063154311@qq.com> Date: Wed May 6 16:04:39 2026 +0800 初步封装 diff --git a/seeyon/WEB-INF/assetstenant/pluginCfg.xml b/seeyon/WEB-INF/assetstenant/pluginCfg.xml new file mode 100644 index 0000000..27ab835 --- /dev/null +++ b/seeyon/WEB-INF/assetstenant/pluginCfg.xml @@ -0,0 +1,6 @@ + + + assetstenant + 资产租赁数据集成 + 20260412 + diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml new file mode 100644 index 0000000..8c9bd1a --- /dev/null +++ b/seeyon/WEB-INF/assetstenant/spring/spring-bean.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml b/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml new file mode 100644 index 0000000..c3bf19e --- /dev/null +++ b/seeyon/WEB-INF/assetstenant/spring/spring-controller.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/seeyon/WEB-INF/assetstenant/spring/spring.xml b/seeyon/WEB-INF/assetstenant/spring/spring.xml new file mode 100644 index 0000000..ad72735 --- /dev/null +++ b/seeyon/WEB-INF/assetstenant/spring/spring.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java new file mode 100644 index 0000000..0cba1dc --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/AssetsTenantPluginApi.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.assetstenant; + +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import org.springframework.stereotype.Component; + +public class AssetsTenantPluginApi extends APluginInfoApi { + public AssetsTenantPluginApi() { + } + + public String getPluginId() { + return RentConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "资产租户端数据集成"; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + RentConstants[] var2 = RentConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + RentConstants value = var2[var4]; + if (value != RentConstants.plugin) { + configVo.getDevParams().put(value.name(), value.getDefaultValue()); + configVo.getProdParams().put(value.name(), value.getDefaultValue()); + configVo.getParamMap().put(value.name(), value.getDescription()); + } + } + + return configVo; + } + +} + diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java new file mode 100644 index 0000000..a3a7b3e --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/assets/AssetsService.java @@ -0,0 +1,312 @@ +package com.seeyon.apps.assetstenant.assets; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.contract.ContractAssetsVo; +import com.seeyon.apps.assetstenant.file.OaFileVo; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.util.*; + +public class AssetsService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("AssetsTenantConfigProvider"); + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.ASSETS_FORMNO); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); + List conditions = buildConditions(params,masterTableBean); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(master,null,conditions,pageNo,pageSize,true); + List vos = new ArrayList<>(); + Long count = FormTableExecutor.count(master,null, conditions); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + OaAssetsVo oaAssetsVo = new OaAssetsVo(); + fillPageQueryVo(map, oaAssetsVo); + vos.add(oaAssetsVo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + private List buildConditions(JSONObject params, FormTableBean formTableBean) throws BusinessException { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("租户-租户编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("assetsNo"))) { + conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo"))); + } + if(StringUtils.isNotBlank(params.getString("assetsStatus"))) { + conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"资产状态",params.getString("assetsStatus")))); + } + if(StringUtils.isNotBlank(params.getString("assetsType"))) { + handleAssetsSubType(conditions,params.getString("assetsType")); + } + if(StringUtils.isNotBlank(params.getString("manageType"))) { + conditions.add(FormWhereCondition.build().display("运营类型") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"运营类型",params.getString("manageType")))); + } + if(StringUtils.isNotBlank(params.getString("bizZone"))) { + conditions.add(FormWhereCondition.build().display("商圈位置") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"商圈位置",params.getString("bizZone")))); + } + if(StringUtils.isNotBlank(params.getString("renovationStatus"))) { + conditions.add(FormWhereCondition.build().display("装修情况") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"装修情况",params.getString("renovationStatus")))); + } + if(StringUtils.isNotBlank(params.getString("layout"))) { + conditions.add(FormWhereCondition.build().display("房屋户型") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"房屋户型",params.getString("layout")))); + } + if(StringUtils.isNotBlank(params.getString("rentFeeRange"))) { + String[] split = params.getString("rentFeeRange").split("-"); + String rentFeeStart = null; + if(split.length > 1) { + rentFeeStart = split[0]; + } + String rentFeeEnd = split[split.length - 1]; + if(rentFeeStart != null) { + conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.GE) + .value(new BigDecimal(rentFeeStart))); + } + conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.LE) + .value(new BigDecimal(rentFeeEnd))); + } + if(StringUtils.isNotBlank(params.getString("features"))){ + String[] features = params.getString("features").split(","); + for (Object feature : features) { + conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + "")) + .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT)); + } + } + if(StringUtils.isNotBlank(params.getString("keyWord"))){ + conditions.add(FormWhereCondition.build().display("品牌名称") + .startWithBracket(true) + .concatFactor(ClauseFactor.OR) + .value(params.getString("keyWord")) + .clauseFactor(ClauseFactor.LIKE)); + handleBizZoneSet(conditions,params.getString("keyWord")); + conditions.add(FormWhereCondition.build().display("所在位置") + .value(params.getString("keyWord")) + .endWithBracket(true) + .clauseFactor(ClauseFactor.LIKE)); + } + return conditions; + } + + private Set getAllBizZones(FormTableBean formTableBean){ + return EnumMapUtils.getEnumItemValues(formTableBean,"商圈位置"); + } + + public Set getAllBizZones() throws BusinessException { + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); + return getAllBizZones(masterTableBean); + } + + private Set getFeatures(FormTableBean formTableBean){ + return EnumMapUtils.getEnumItemValues(formTableBean,"基础配套"); + } + + public Set getFeatures() throws BusinessException { + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); + return getFeatures(masterTableBean); + } + + private void handleBizZoneSet(List conditions,String keyWord) throws BusinessException { + if (conditions == null || keyWord == null || keyWord.isEmpty()) { + return; + } + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); + Set allBizZones = getAllBizZones(masterTableBean); + Set tempSet = new HashSet<>(); + FormWhereCondition condition = FormWhereCondition.build().display("商圈位置").clauseFactor(ClauseFactor.IN).concatFactor(ClauseFactor.OR); + for (String bizZone : allBizZones) { + if(bizZone.contains(keyWord)){ + String enumItemId = EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"商圈位置",bizZone); + tempSet.add(enumItemId); + } + } + condition.setValues(Collections.singletonList(tempSet)); + if(condition.getValues().size() > 0) { + conditions.add(condition); + } + } + + private void handleAssetsSubType(List conditions,String type) throws BusinessException { + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); +// if("住房".equals(type)) { +// conditions +// .add(FormWhereCondition.build().display("资产二级类型") +// .startWithBracket(true) +// .concatFactor(ClauseFactor.OR) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","住宅"))); +// conditions.add(FormWhereCondition.build().display("资产二级类型") +// .endWithBracket(true) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","保障性住房"))); +// } +// if("商铺".equals(type)) { +// conditions +// .add(FormWhereCondition.build().display("资产二级类型") +// .startWithBracket(true) +// .concatFactor(ClauseFactor.OR) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","写字楼"))); +// conditions.add(FormWhereCondition.build().display("资产二级类型") +// .concatFactor(ClauseFactor.OR) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","商业门面"))); +// conditions.add(FormWhereCondition.build().display("资产二级类型") +// .concatFactor(ClauseFactor.OR) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","商业用房"))); +// conditions.add(FormWhereCondition.build().display("资产二级类型") +// .endWithBracket(true) +// .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","政府机构"))); +// } +// if("厂房".equals(type)) { +// conditions.add(FormWhereCondition.build().display("资产二级类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","厂房"))); +// } +// if("停车场".equals(type)) { +// conditions.add(FormWhereCondition.build().display("资产二级类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型","车房"))); +// } + conditions + .add(FormWhereCondition.build().display("资产二级类型") + .startWithBracket(true) + .value(EnumMapUtils.getEnumItemValueByDisplayValue(masterTableBean,"资产二级类型",type))); + } + + public OaAssetsVo queryAssetsDetail(String id) throws Exception { + if(id == null) { + return null; + } + JSONObject object = new JSONObject(); + object.put("assetsNo", id); + return queryAssetsDetail(object); + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + public ContractAssetsVo queryContractAssetsDetail(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + ContractAssetsVo assetsVo = new ContractAssetsVo(); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext,conditions,true); + if(formColumn == null) { + return assetsVo; + } + Map fieldsMap = formColumn.getFieldsMap(); + assetsVo.setFormId(formColumn.getId()); + assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); + assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); + assetsVo.setManager(getStringValue(fieldsMap,"资产管理员")); + if(fieldsMap.get("资产图片") != null) { + assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + } + return assetsVo; + } + + public OaAssetsVo queryAssetsDetail(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + OaAssetsVo assetsVo = new OaAssetsVo(); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,true); + if(formColumn == null) { + return assetsVo; + } + Map fieldsMap = formColumn.getFieldsMap(); + fillDetailVo(fieldsMap,assetsVo); + return assetsVo; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public void fillDetailVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException { + assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); + assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); + assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息")); + assetsVo.setFormId(getStringValue(fieldsMap,"id")); + assetsVo.setAssetsStatus(getStringValue(fieldsMap,"资产状态")); + assetsVo.setAssetsType(getStringValue(fieldsMap,"资产类型")); + assetsVo.setAssetsAddress(getStringValue(fieldsMap,"所在位置")); + assetsVo.setLongitude(getStringValue(fieldsMap,"坐落经度")); //经度 + assetsVo.setLatitude(getStringValue(fieldsMap,"坐落纬度")); //纬度 + assetsVo.setFloorNo(getStringValue(fieldsMap,"楼层")); + assetsVo.setUnitNo(getStringValue(fieldsMap,"单元")); + assetsVo.setRoomNo(getStringValue(fieldsMap,"门牌号")); + assetsVo.setBuilding(getStringValue(fieldsMap,"楼栋")); + assetsVo.setHasLift(getStringValue(fieldsMap,"有无电梯")); + assetsVo.setManagerPhone(getStringValue(fieldsMap,"管理员联系方式")); + assetsVo.setBizZone(getStringValue(fieldsMap,"商圈位置")); + assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型")); + assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况")); + V3xOrgMember member = null; + try { + member = orgManager.getMemberById(Long.parseLong((String)fieldsMap.get("运营管理员"))); + }catch (Exception e) { + + } + if(member != null) { + assetsVo.setManagerName(member.getName().substring(0,1) + "管家"); + } + BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积"); + BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金"); + assetsVo.setFootPrint(area.toString()); + if(area != null && rentFee != null) { + assetsVo.setRentFee(rentFee.toString()); + } + if(fieldsMap.get("VR文件上传") != null) { + assetsVo.setVrImg(OaFileVo.getInstance((Long)fieldsMap.get("VR文件上传"),attachmentManager)); + } + if(fieldsMap.get("资产图片") != null) { + assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + } + } + + public void fillPageQueryVo(Map fieldsMap,OaAssetsVo assetsVo) throws BusinessException { + assetsVo.setAssetsNo(getStringValue(fieldsMap,"资产编号")); + assetsVo.setAssetsName(getStringValue(fieldsMap,"品牌名称")); + assetsVo.setAssetsDesc(getStringValue(fieldsMap,"详情信息")); + assetsVo.setFormId(getStringValue(fieldsMap,"id")); + assetsVo.setLayout(getStringValue(fieldsMap,"房屋户型")); + assetsVo.setRenovationStatus(getStringValue(fieldsMap,"装修情况")); + String area = getStringValue(fieldsMap,"建筑面积"); + String rentFee = Optional.ofNullable(getStringValue(fieldsMap,"月租金")).orElse(getStringValue(fieldsMap,"年租金")); + assetsVo.setFootPrint(area); + assetsVo.setRentFee(rentFee); + if(fieldsMap.get("资产图片") != null) { + assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java new file mode 100644 index 0000000..45af8fc --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/assets/OaAssetsVo.java @@ -0,0 +1,279 @@ +package com.seeyon.apps.assetstenant.assets; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +import java.util.List; + +public class OaAssetsVo { + + private String assetsNo; // 资产编号 + private String assetsName; // 资产名称 + private String assetsType; //资产类型 + private String assetsStatus; //资产状态 + private String rentFee; //租金 + private String rentFeeUnit; //租金单位 + private String footPrint; //占地大小 + private String formId; //表单记录ID + private OaFileVo detailImg; //详情图片 + private OaFileVo vrImg; //vr图 + private String assetsDesc; //资产描述 + private String assetsAddress; //资产地址 + private String latitude; //纬度 + private String longitude; //经度 + private String unitNo; //单元号 + private String floorNo; //楼层号 + private String roomNo; //房间号 + private String hasLift;//有无电梯 + private String managerPhone; //管理员电话 + private String managerName; //管理员姓名 + private String layout; //户型 + private String orientation; //朝向 + private String building; //楼栋 + private String waterFee; //水费 + private String waterFeeUnit; //水费单位 + private String powerFee; //电费 + private String powerFeeUnit; //电费单位 + private String bizZone; + private List features; + private String renovationStatus; //装修状态 + + public String getAssetsNo() { + return assetsNo; + } + + public void setAssetsNo(String assetsNo) { + this.assetsNo = assetsNo; + } + + public String getAssetsName() { + return assetsName; + } + + public void setAssetsName(String assetsName) { + this.assetsName = assetsName; + } + + public String getAssetsType() { + return assetsType; + } + + public void setAssetsType(String assetsType) { + this.assetsType = assetsType; + } + + public String getAssetsStatus() { + return assetsStatus; + } + + public void setAssetsStatus(String assetsStatus) { + this.assetsStatus = assetsStatus; + } + + public String getRentFee() { + return rentFee; + } + + public void setRentFee(String rentFee) { + this.rentFee = rentFee; + } + + public String getFootPrint() { + return footPrint; + } + + public void setFootPrint(String footPrint) { + this.footPrint = footPrint; + } + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public OaFileVo getDetailImg() { + return detailImg; + } + + public void setDetailImg(OaFileVo detailImg) { + this.detailImg = detailImg; + } + + public OaFileVo getVrImg() { + return vrImg; + } + + public void setVrImg(OaFileVo vrImg) { + this.vrImg = vrImg; + } + + public String getAssetsDesc() { + return assetsDesc; + } + + public void setAssetsDesc(String assetsDesc) { + this.assetsDesc = assetsDesc; + } + + public String getAssetsAddress() { + return assetsAddress; + } + + public void setAssetsAddress(String assetsAddress) { + this.assetsAddress = assetsAddress; + } + + public String getLatitude() { + return latitude; + } + + public void setLatitude(String latitude) { + this.latitude = latitude; + } + + public String getLongitude() { + return longitude; + } + + public void setLongitude(String longitude) { + this.longitude = longitude; + } + + public String getUnitNo() { + return unitNo; + } + + public void setUnitNo(String unitNo) { + this.unitNo = unitNo; + } + + public String getFloorNo() { + return floorNo; + } + + public void setFloorNo(String floorNo) { + this.floorNo = floorNo; + } + + public String getRoomNo() { + return roomNo; + } + + public void setRoomNo(String roomNo) { + this.roomNo = roomNo; + } + + public String getHasLift() { + return hasLift; + } + + public void setHasLift(String hasLift) { + this.hasLift = hasLift; + } + + public String getManagerPhone() { + return managerPhone; + } + + public void setManagerPhone(String managerPhone) { + this.managerPhone = managerPhone; + } + + public String getLayout() { + return layout; + } + + public void setLayout(String layout) { + this.layout = layout; + } + + public String getOrientation() { + return orientation; + } + + public void setOrientation(String orientation) { + this.orientation = orientation; + } + + public String getBuilding() { + return building; + } + + public void setBuilding(String building) { + this.building = building; + } + + public String getWaterFee() { + return waterFee; + } + + public void setWaterFee(String waterFee) { + this.waterFee = waterFee; + } + + public String getWaterFeeUnit() { + return waterFeeUnit; + } + + public void setWaterFeeUnit(String waterFeeUnit) { + this.waterFeeUnit = waterFeeUnit; + } + + public String getPowerFee() { + return powerFee; + } + + public void setPowerFee(String powerFee) { + this.powerFee = powerFee; + } + + public String getPowerFeeUnit() { + return powerFeeUnit; + } + + public void setPowerFeeUnit(String powerFeeUnit) { + this.powerFeeUnit = powerFeeUnit; + } + + public String getManagerName() { + return managerName; + } + + public void setManagerName(String managerName) { + this.managerName = managerName; + } + + public String getBizZone() { + return bizZone; + } + + public void setBizZone(String bizZone) { + this.bizZone = bizZone; + } + + public List getFeatures() { + return features; + } + + public void setFeatures(List features) { + this.features = features; + } + + public String getRenovationStatus() { + return renovationStatus; + } + + public void setRenovationStatus(String renovationStatus) { + this.renovationStatus = renovationStatus; + } + + public String getRentFeeUnit() { + return rentFeeUnit; + } + + public void setRentFeeUnit(String rentFeeUnit) { + this.rentFeeUnit = rentFeeUnit; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java new file mode 100644 index 0000000..34b9cea --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillService.java @@ -0,0 +1,156 @@ +package com.seeyon.apps.assetstenant.bill; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.assets.AssetsService; +import com.seeyon.apps.assetstenant.assets.OaAssetsVo; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.contract.ContractService; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class BillService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private ContractService contractService = (ContractService) AppContext.getBean("contractService"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.CONTRACTBILLFORMNO); + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + private List buildConditions(JSONObject params, FormTableBean formTableBean) { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("billNo"))) { + conditions.add(FormWhereCondition.build().display("租赁账单编号").value(params.getString("billNo"))); + } + if(StringUtils.isNotBlank(params.getString("billStatus"))) { + if("已缴费".equals(params.getString("billStatus"))) { + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL)); + }else { + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean, "账单-收款结果反馈", "未收款")).endWithBracket(true)); + } + } + return conditions; + } + + public List queryAllContractBill(List conditions) throws Exception {; + TableContext tableContext = getTableContext(); + List datas = FormTableExecutor.query(tableContext, null, conditions,true); + List vos = new ArrayList<>(); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + BillVo billVo = new BillVo(); + fillVo(map, billVo); + vos.add(billVo); + } + } + return vos; + } + + public Integer countUnpayRentBills(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"账单-收款结果反馈","未收款")).endWithBracket(true)); + Long count = FormTableExecutor.count(tableContext, null,conditions); + return count.intValue(); + } + + public PageQueryVo pageQueryContractBill(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(tableContext, null,conditions, pageNo, pageSize,true); + List vos = new ArrayList<>(); + Long count = FormTableExecutor.count(tableContext,null, conditions); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + BillVo billVo = new BillVo(); + fillVo(map, billVo); + vos.add(billVo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + public BillVo queryOne(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext,conditions,true); + if(formColumn == null) { + return null; + } + Map fieldsMap = formColumn.getFieldsMap(); + BillVo billVo = new BillVo(); + fillVo(fieldsMap, billVo); + return billVo; + } + + public void fillVo(Map fieldsMap, BillVo billVo) throws Exception { + billVo.setBillType("CONTRACT"); + billVo.setBillNo(getStringValue(fieldsMap,"租赁账单编号" )); + String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap,"收款结果反馈"); + billVo.setBillStatus(payStatus); + billVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); + billVo.setBillStartDate(getStringValue(fieldsMap,"账单-开始日期")); + billVo.setContractNo(getStringValue(fieldsMap,"合同编号")); + billVo.setBillPayEndDate(getStringValue(fieldsMap,"账单-当前缴费时限")); + billVo.setBillEndDate(getStringValue(fieldsMap,"账单-结束日期")); + OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号")); + String asssetsName = null; + if(oaAssetsVo != null) { + asssetsName = oaAssetsVo.getAssetsName(); + } + String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-"; + String billTerm = "(" + billVo.getBillStartDate() + "-" + billVo.getBillEndDate() + ")"; + billVo.setBillName(asssetsName + roomNo + billTerm); + BigDecimal bigDecimal = (BigDecimal) fieldsMap.get("账单-租费"); + billVo.setBillAmount(bigDecimal == null ? null : bigDecimal.toString()); + billVo.setBillPayTime(getStringValue(fieldsMap,"账单-实际收款时间")); + } + + private String buildBillName(Map fieldsMap) throws Exception { + String contractNo = getStringValue(fieldsMap,"合同编号"); + String term = contractService.queryContractPayPeriod(contractNo,getStringValue(fieldsMap,"账单-开始日期")) + "-"; + OaAssetsVo oaAssetsVo = assetsService.queryAssetsDetail(getStringValue(fieldsMap,"资产编号")); + String asssetsName = null; + if(oaAssetsVo != null) { + asssetsName = oaAssetsVo.getAssetsName(); + } + String roomNo = fieldsMap.get("门牌号") == null ? "" : fieldsMap.get("门牌号") + "-"; + return asssetsName + roomNo + term; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java new file mode 100644 index 0000000..18d3e05 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/BillVo.java @@ -0,0 +1,112 @@ +package com.seeyon.apps.assetstenant.bill; + +public class BillVo { + private String billType; //账单类型 + private String billNo; //账单编号 + private String cusNo; //租户编号 + private String contractNo; //合同编号 + private String billAmount; //账单金额 + private String billStatus; //账单状态 + private String billStartDate; //账单开始日期 + private String billEndDate; //账单结束日期 + private String billPayEndDate; //账单支付截止日期 + private String billName;// 账单名称 + private String billPayTime; + private String formId; + + public String getBillType() { + return billType; + } + + public void setBillType(String billType) { + this.billType = billType; + } + + public String getBillNo() { + return billNo; + } + + public void setBillNo(String billNo) { + this.billNo = billNo; + } + + public String getCusNo() { + return cusNo; + } + + public void setCusNo(String cusNo) { + this.cusNo = cusNo; + } + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getBillAmount() { + return billAmount; + } + + public void setBillAmount(String billAmount) { + this.billAmount = billAmount; + } + + public String getBillStatus() { + return billStatus; + } + + public void setBillStatus(String billStatus) { + this.billStatus = billStatus; + } + + public String getBillEndDate() { + return billEndDate; + } + + public void setBillEndDate(String billEndDate) { + this.billEndDate = billEndDate; + } + + public String getBillName() { + return billName; + } + + public void setBillName(String billName) { + this.billName = billName; + } + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public String getBillPayTime() { + return billPayTime; + } + + public void setBillPayTime(String billPayTime) { + this.billPayTime = billPayTime; + } + + public String getBillStartDate() { + return billStartDate; + } + + public void setBillStartDate(String billStartDate) { + this.billStartDate = billStartDate; + } + + public String getBillPayEndDate() { + return billPayEndDate; + } + + public void setBillPayEndDate(String billPayEndDate) { + this.billPayEndDate = billPayEndDate; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java new file mode 100644 index 0000000..80364d4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/FeeRecordService.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.assetstenant.bill; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class FeeRecordService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private BillService billService = (BillService) AppContext.getBean("billService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("waeBillService"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.FEERECORDFORMNO); + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + private List buildConditions(JSONObject params) throws BusinessException { + TableContext tableContext = getTableContext(); + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("客商编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("assetsNo"))) { + conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo"))); + } + if(StringUtils.isNotBlank(params.getString("contractNo"))) { + conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo"))); + } + if(StringUtils.isNotBlank(params.getString("leType"))) { + conditions.add(FormWhereCondition.build().display("收支类型").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "收支类型", params.getString("leType")))); + } + if(StringUtils.isNotBlank(params.getString("year"))) { + conditions.add(FormWhereCondition.build() + .display("收付款日期") + .startWithBracket(true) + .clauseFactor(ClauseFactor.GE) + .value(params.getString("year") + "-01-01")); + conditions.add(FormWhereCondition.build() + .display("收付款日期") + .endWithBracket(true) + .clauseFactor(ClauseFactor.LE) + .value(params.getString("year") + "-12-31")); + } + return conditions; + } + + + public PageQueryVo queryBillPayRecord(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(tableContext, null,conditions, pageNo, pageSize,true); + List payRecordVos = new ArrayList<>(); + Long count = FormTableExecutor.count(tableContext, null,conditions); + for (Object data : datas) { + PayRecordVo payRecordVo = new PayRecordVo(); + Map fieldsMap = (Map) data; + fillVo(fieldsMap,payRecordVo); + payRecordVos.add(payRecordVo); + } + pageQueryVo.setDatas(payRecordVos); + pageQueryVo.setTotalCount(count); + return pageQueryVo; + } + + public void fillVo(Map fieldsMap, PayRecordVo payRecordVo) throws Exception { + payRecordVo.setInOutType(getStringValue(fieldsMap,"收支类型")); + payRecordVo.setPayDate(getStringValue(fieldsMap,"收付款日期")); + payRecordVo.setInDate(getStringValue(fieldsMap,"收付款日期")); + BigDecimal amount = (BigDecimal) fieldsMap.get("收付款金额"); + payRecordVo.setItemAmount(amount.toString()); + JSONObject billQueryParam = new JSONObject(); + billQueryParam.put("billNo", fieldsMap.get("账单编号")); + BillVo billVo = billService.queryOne(billQueryParam); + if(billVo != null) { + String itemName = billVo.getBillName(); + payRecordVo.setItemName(itemName); + }else { + payRecordVo.setItemName(getStringValue(fieldsMap,"费用类型")); + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java b/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java new file mode 100644 index 0000000..9b900ff --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/PayRecordVo.java @@ -0,0 +1,50 @@ +package com.seeyon.apps.assetstenant.bill; + +public class PayRecordVo { + private String itemName; //记录项名称 + private String itemAmount; //记录项金额 + private String payDate; //支付日期 + private String inDate; //入账日期 + private String inOutType; //收支类型 + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getItemAmount() { + return itemAmount; + } + + public void setItemAmount(String itemAmount) { + this.itemAmount = itemAmount; + } + + public String getPayDate() { + return payDate; + } + + public void setPayDate(String payDate) { + this.payDate = payDate; + } + + public String getInDate() { + return inDate; + } + + public void setInDate(String inDate) { + this.inDate = inDate; + } + + public String getInOutType() { + return inOutType; + } + + public void setInOutType(String inOutType) { + this.inOutType = inOutType; + } + +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java new file mode 100644 index 0000000..0fec8c3 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/bill/WaeBillService.java @@ -0,0 +1,117 @@ +package com.seeyon.apps.assetstenant.bill; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class WaeBillService { + + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.WAEBILLFORMNO); + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + + private List buildConditions(JSONObject params) throws BusinessException { + TableContext tableContext = getTableContext(); + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("billStatus"))) { + if("已缴费".equals(params.getString("billStatus"))) { + conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NOT_NULL)); + }else { + conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("缴费状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "缴费状态", "未结清")).endWithBracket(true)); + } + } + return conditions; + } + + + public PageQueryVo pageQueryWaeBill(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(tableContext, null,conditions, pageNo, pageSize,true); + List vos = new ArrayList<>(); + Long count = FormTableExecutor.count(tableContext,null, conditions); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + BillVo billVo = new BillVo(); + fillVo(map, billVo); + vos.add(billVo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + public List queryAllWaeBill(List conditions) throws Exception {; + TableContext tableContext = getTableContext(); + List datas = FormTableExecutor.query(tableContext, null,conditions,true); + List vos = new ArrayList<>(); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + BillVo billVo = new BillVo(); + fillVo(map, billVo); + vos.add(billVo); + } + } + return vos; + } + + public Integer countUnpayWaeBills(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("缴费状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"缴费状态","未结清")).endWithBracket(true)); + Long count = FormTableExecutor.count(tableContext,null, conditions); + return count.intValue(); + } + + public void fillVo(Map fieldsMap, BillVo billVo) { + billVo.setBillType("WAE"); + billVo.setBillStartDate(getStringValue(fieldsMap,"账单开始日期")); + billVo.setBillEndDate(getStringValue(fieldsMap,"账单结束日期")); + billVo.setBillStatus(getStringValue(fieldsMap,"缴费状态")); + billVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); + billVo.setBillNo(getStringValue(fieldsMap,"档案编号")); + BigDecimal powerFee = fieldsMap.get("本次应缴电费") == null ? BigDecimal.ZERO : (BigDecimal) fieldsMap.get("本次应缴电费"); + BigDecimal waterFee = fieldsMap.get("本次应缴水费") == null ? BigDecimal.ZERO : (BigDecimal) fieldsMap.get("本次应缴水费"); + billVo.setBillAmount((powerFee.add(waterFee)).toString()); + billVo.setBillName("水电费"); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java new file mode 100644 index 0000000..6f786ab --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunitityVo.java @@ -0,0 +1,69 @@ +package com.seeyon.apps.assetstenant.community; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +public class CommunitityVo { + private String referenceTotalPrice;//参考总价 + private String renovation;//装修 + private String features;//特色 + private String communityId; + private String referenceAvgPrice;//参考均价 + private OaFileVo coverImg;//封面图 + private String communityName;//楼盘名称 + + public String getReferenceTotalPrice() { + return referenceTotalPrice; + } + + public void setReferenceTotalPrice(String referenceTotalPrice) { + this.referenceTotalPrice = referenceTotalPrice; + } + + public String getRenovation() { + return renovation; + } + + public void setRenovation(String renovation) { + this.renovation = renovation; + } + + public String getFeatures() { + return features; + } + + public void setFeatures(String features) { + this.features = features; + } + + public String getCommunityId() { + return communityId; + } + + public void setCommunityId(String communityId) { + this.communityId = communityId; + } + + public String getReferenceAvgPrice() { + return referenceAvgPrice; + } + + public void setReferenceAvgPrice(String referenceAvgPrice) { + this.referenceAvgPrice = referenceAvgPrice; + } + + public OaFileVo getCoverImg() { + return coverImg; + } + + public void setCoverImg(OaFileVo coverImg) { + this.coverImg = coverImg; + } + + public String getCommunityName() { + return communityName; + } + + public void setCommunityName(String communityName) { + this.communityName = communityName; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java new file mode 100644 index 0000000..66ac88e --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityBuildingVo.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.assetstenant.community; + +public class CommunityBuildingVo { + private String sort; // 序号 + private String openTime; // 开盘时间 → UI:2022-01-09 + private String layers; // 层数 → UI:16层 + private String unitNo; // 单元号 + private Integer saleHouseCount; // 在售户数 → UI:6户 + private String buildType; // 建筑类型 → UI:高层 + private String liftRatio; // 户梯比 → UI:1梯1户 + private String buildingNo; // 楼栋号 → UI:1栋 + + public String getOpenTime() { + return openTime; + } + + public void setOpenTime(String openTime) { + this.openTime = openTime; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getLayers() { + return layers; + } + + public void setLayers(String layers) { + this.layers = layers; + } + + public String getUnitNo() { + return unitNo; + } + + public void setUnitNo(String unitNo) { + this.unitNo = unitNo; + } + + public Integer getSaleHouseCount() { + return saleHouseCount; + } + + public void setSaleHouseCount(Integer saleHouseCount) { + this.saleHouseCount = saleHouseCount; + } + + public String getBuildType() { + return buildType; + } + + public void setBuildType(String buildType) { + this.buildType = buildType; + } + + public String getLiftRatio() { + return liftRatio; + } + + public void setLiftRatio(String liftRatio) { + this.liftRatio = liftRatio; + } + + public String getBuildingNo() { + return buildingNo; + } + + public void setBuildingNo(String buildingNo) { + this.buildingNo = buildingNo; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java new file mode 100644 index 0000000..2a4394e --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityLayoutVo.java @@ -0,0 +1,4 @@ +package com.seeyon.apps.assetstenant.community; + +public class CommunityLayoutVo { +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java new file mode 100644 index 0000000..5066a7f --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/community/CommunityService.java @@ -0,0 +1,197 @@ +package com.seeyon.apps.assetstenant.community; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.file.OaFileVo; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CommunityService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.ASSETS_FORMNO); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + TableContext master = FormTableExecutor.master(getFormNo()); + FormTableBean masterTableBean = master.getTableBean(); + List conditions = buildConditions(params,masterTableBean); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(master,null,conditions,pageNo,pageSize,true); + List vos = new ArrayList<>(); + Long count = FormTableExecutor.count(master,null, conditions); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + CommunitityVo communitityVo = new CommunitityVo(); + fillVo(map, communitityVo); + vos.add(communitityVo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + private TableContext getSubTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.sub(getFormNo(),"楼盘明细"); + return tableContext; + } + + // ====================== 填充楼栋VO(严格匹配UI字段) ====================== + private void fillBuildingVo(Map map, CommunityBuildingVo vo) { + vo.setSort(getStringValue(map, "序号1")); + vo.setOpenTime(getStringValue(map, "明细-开盘时间")); + // 注意:如果数据库没有直接的"层数/单元数/在售户数/户梯比"字段,需要从表单字段映射 + // 假设表单字段如下: +// vo.setLayers(getStringValue(map, "层数")); +// vo.setUnitCount(getInteger(map, "单元数")); +// vo.setSaleHouseCount(getInteger(map, "在售户数")); +// vo.setBuildType(getStr(map, "明细-建筑类型")); +// vo.setLiftRatio(getStr(map, "户梯比")); +// vo.setAvgPrice(getBigDecimal(map, "明细-参考均价")); + } + + private List buildConditions(JSONObject params, FormTableBean formTableBean) throws BusinessException { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("communityId"))) { + conditions.add(FormWhereCondition.build().display("formmain_id").value(params.getString("communityId"))); + } + if(StringUtils.isNotBlank(params.getString("assetsStatus"))) { + conditions.add(FormWhereCondition.build().display("资产状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"资产状态",params.getString("assetsStatus")))); + } + if(StringUtils.isNotBlank(params.getString("manageType"))) { + conditions.add(FormWhereCondition.build().display("运营类型") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"运营类型",params.getString("manageType")))); + } + if(StringUtils.isNotBlank(params.getString("bizZone"))) { + conditions.add(FormWhereCondition.build().display("商圈位置") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"商圈位置",params.getString("bizZone")))); + } + if(StringUtils.isNotBlank(params.getString("renovationStatus"))) { + conditions.add(FormWhereCondition.build().display("装修情况") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"装修情况",params.getString("renovationStatus")))); + } + if(StringUtils.isNotBlank(params.getString("layout"))) { + conditions.add(FormWhereCondition.build().display("房屋户型") + .value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"房屋户型",params.getString("layout")))); + } + if(StringUtils.isNotBlank(params.getString("rentFeeRange"))) { + String[] split = params.getString("rentFeeRange").split("-"); + String rentFeeStart = null; + if(split.length > 1) { + rentFeeStart = split[0]; + } + String rentFeeEnd = split[split.length - 1]; + if(rentFeeStart != null) { + conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.GE) + .value(new BigDecimal(rentFeeStart))); + } + conditions.add(FormWhereCondition.build().display("评估-参考租金").clauseFactor(ClauseFactor.LE) + .value(new BigDecimal(rentFeeEnd))); + } + if(StringUtils.isNotBlank(params.getString("features"))){ + String[] features = params.getString("features").split(","); + for (Object feature : features) { + conditions.add(FormWhereCondition.build().display("基础配套").value(EnumMapUtils.getEnumItemValueByDisplayValue(formTableBean,"基础配套",feature + "")) + .index("FIND_IN_SET(?").clauseFactor(ClauseFactor.GT)); + } + } + return conditions; + } + + public CommunitityVo queryCommunityDetail(String communityId) throws Exception { + TableContext tableContext = getTableContext(); + JSONObject params = new JSONObject(); + params.put("communityId",communityId); + List conditions = buildConditions(params,tableContext.getTableBean()); + CommunitityVo communitityVo = new CommunitityVo(); + FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions,true); + if(formColumn == null) { + return communitityVo; + } + Map fieldsMap = formColumn.getFieldsMap(); + fillVo(fieldsMap,communitityVo); + return communitityVo; + } + + public List queryBuildingList(JSONObject params) throws Exception { + TableContext tableContext = getSubTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + List formColumns = FormTableExecutor.query(tableContext, null, conditions, true); + if(formColumns.size() == 0) { + return new ArrayList<>(); + } + List buildingVos = new ArrayList<>(); + Map buildingVoMap = new HashMap<>(); + for(FormColumn formColumn : formColumns) { + Map fieldsMap = formColumn.getFieldsMap(); + String buildingNo = getStringValue(fieldsMap,"明细-售卖楼栋"); + if(!buildingVoMap.containsKey(buildingNo)) { + CommunityBuildingVo communityBuildingVo = new CommunityBuildingVo(); + communityBuildingVo.setBuildingNo(buildingNo); + communityBuildingVo.setBuildType(getStringValue(fieldsMap,"明细-建筑类型")); + communityBuildingVo.setOpenTime(getStringValue(fieldsMap,"明细-开盘时间")); + communityBuildingVo.setUnitNo(buildingNo); + communityBuildingVo.setSaleHouseCount(1); + }else { + CommunityBuildingVo buildingVo = buildingVoMap.get(buildingNo); + buildingVo.setSaleHouseCount(buildingVo.getSaleHouseCount() + 1); + } + } + buildingVos.addAll(buildingVoMap.values()); + return buildingVos; + } + + public List queryLayoutList(JSONObject params) throws Exception { + TableContext tableContext = getSubTableContext(); + List conditions = buildConditions(params,tableContext.getTableBean()); + List formColumns = FormTableExecutor.query(tableContext, null, conditions, true); + return null; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public void fillVo(Map fieldsMap,CommunitityVo communitityVo) throws BusinessException { + communitityVo.setCommunityId(getStringValue(fieldsMap,"资产编号")); //楼盘id + communitityVo.setCommunityName(getStringValue(fieldsMap,"品牌名称")); //楼盘名称 + communitityVo.setFeatures(getStringValue(fieldsMap,"详情信息")); //楼盘特点 + communitityVo.setRenovation(getStringValue(fieldsMap,"id")); //装修情况 + communitityVo.setReferenceAvgPrice(getStringValue(fieldsMap,"资产状态")); //楼盘参考均价 + communitityVo.setReferenceTotalPrice(getStringValue(fieldsMap,"资产类型"));//楼盘参考总价 + V3xOrgMember member = null; + BigDecimal area = (BigDecimal)fieldsMap.get("评估-评估面积"); + BigDecimal rentFee = (BigDecimal)fieldsMap.get("评估-参考租金"); + if(fieldsMap.get("VR文件上传") != null) { + communitityVo.setCoverImg(OaFileVo.getInstance((Long)fieldsMap.get("VR文件上传"),attachmentManager)); + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java b/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java new file mode 100644 index 0000000..49c339b --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/config/AssetsTenantConfigProvider.java @@ -0,0 +1,18 @@ +package com.seeyon.apps.assetstenant.config; + +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.ctp.common.AppContext; + +import static com.seeyon.apps.assetstenant.constants.RentConstants.getPluginId; + +public class AssetsTenantConfigProvider { + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + public String getBizConfigByKey(RentConstants key) { + ConfigVo config = cstConfigApi.getConfig(getPluginId()); + return config.getParamVal(key.name()); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java b/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java new file mode 100644 index 0000000..80012af --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/constants/RentConstants.java @@ -0,0 +1,47 @@ +package com.seeyon.apps.assetstenant.constants; + +public enum RentConstants { + + plugin("assetstenant","插件ID"), + OA_HOST("",""), + FORMEDITLOGINNAME("","表单修改登录名"), + updateAccountName("表单",""), + restName("",""), + restPwd("",""), + formLoginName("2019","表单数据录入登录名"), + ASSETS_FORMNO("","资产运营档案编码"), + CONTRACT_FORMNO("","租赁合同表单编码"), + DISCHARGE_TEMPLATECODE("","退租申请模板编码"), + DISCHARGE_FORMNO("","退租申请表单编码"), + FALLBACK_FORMNO("","留言板表单编码"), + RESERVE_FORMNO("","看房预约表单编码"), + VIEWRECORD_FORMNO("","浏览记录表单编码"), + FORMAPPNAME("","表单应用名称"), + FEERECORDFORMNO("","费用收支台账表单编码"), + CONTRACTBILLFORMNO("","合同账单表单编码"), + WAEBILLFORMNO("","水电费账单表单编码"), + CUSDOCFORMNO("","客商档案表单编码"), + NOTICEFORMNO("","招商公告表单编码"), + WECHATBACKENDHOST("","微信小程序后端host"), + WEAPPCONFIGFORMNO("","小程序配置表") + ; + RentConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + private String defaultValue; + private String description; + + public String getDefaultValue() { + return defaultValue; + } + + public String getDescription() { + return description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java new file mode 100644 index 0000000..85be01d --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractAssetsVo.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.assetstenant.contract; + + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +public class ContractAssetsVo { + + private String assetsNo; // 资产编号 + private String assetsName; // 资产名称 + private String rentFee; //租金 + private String formId; //表单记录ID + private OaFileVo detailImg; //详情图片 + private String waterFee; //水费 + private String waterFeeUnit; //水费单位 + private String powerFee; //电费 + private String powerFeeUnit; //电费单位 + private String footPrint; //占地大小 + private String manager;//管理员 + + public String getAssetsNo() { + return assetsNo; + } + + public void setAssetsNo(String assetsNo) { + this.assetsNo = assetsNo; + } + + public String getAssetsName() { + return assetsName; + } + + public void setAssetsName(String assetsName) { + this.assetsName = assetsName; + } + + public String getRentFee() { + return rentFee; + } + + public void setRentFee(String rentFee) { + this.rentFee = rentFee; + } + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public OaFileVo getDetailImg() { + return detailImg; + } + + public void setDetailImg(OaFileVo detailImg) { + this.detailImg = detailImg; + } + + public String getWaterFee() { + return waterFee; + } + + public void setWaterFee(String waterFee) { + this.waterFee = waterFee; + } + + public String getWaterFeeUnit() { + return waterFeeUnit; + } + + public void setWaterFeeUnit(String waterFeeUnit) { + this.waterFeeUnit = waterFeeUnit; + } + + public String getPowerFee() { + return powerFee; + } + + public void setPowerFee(String powerFee) { + this.powerFee = powerFee; + } + + public String getPowerFeeUnit() { + return powerFeeUnit; + } + + public void setPowerFeeUnit(String powerFeeUnit) { + this.powerFeeUnit = powerFeeUnit; + } + + public String getFootPrint() { + return footPrint; + } + + public void setFootPrint(String footPrint) { + this.footPrint = footPrint; + } + + public String getManager() { + return manager; + } + + public void setManager(String manager) { + this.manager = manager; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java new file mode 100644 index 0000000..43758c2 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDocService.java @@ -0,0 +1,48 @@ +package com.seeyon.apps.assetstenant.contract; + +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.utils.form.FormWhereCondition; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ContractDocService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + +// public String getAssetsManagerOrg(String contractNo) throws Exception { +// String formNo = configProvider.getBizConfigByKey(RentConstants.contractDocFormCode); +// List conditions = new ArrayList<>(); +// conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo)); +// FormColumn formColumn = formDataOperator.queryOneRowFormData(formNo, true, null, conditions); +// if(formColumn == null || formColumn.getFieldsMap() == null) { +// return null; +// } +// Map fieldsMap = formColumn.getFieldsMap(); +// return (String)fieldsMap.get("签订单位"); +// } +// +// public Map getContractInfoByContractNo(String contractNo) throws Exception { +// String formNo = configProvider.getBizConfigByKey(RentConstants.contractDocFormCode); +// List conditions = new ArrayList<>(); +// conditions.add(FormWhereCondition.build().display("合同编号").value(contractNo)); +// FormColumn formColumn = formDataOperator.queryOneRowFormData(formNo, false, null, conditions); +// if(formColumn == null) { +// return null; +// } +// Map fieldsMap = formColumn.getFieldsMap(); +// Map map = new HashMap<>(); +// if(fieldsMap == null) { +// return map; +// } +// map.put("合同名称",fieldsMap.get("合同名称")); +// map.put("合同金额",fieldsMap.get("合同金额")); +// map.put("承租方名称",fieldsMap.get("承租方名称")); +// map.put("承租方类型",fieldsMap.get("承租方类型")); +// return map; +// } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java new file mode 100644 index 0000000..beb3ba6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractDurationUtil.java @@ -0,0 +1,45 @@ +package com.seeyon.apps.assetstenant.contract; + +import java.time.LocalDate; +import java.time.Period; +import java.time.format.DateTimeFormatter; + +public class ContractDurationUtil { + + /** + * 计算合同生效时长,格式化为:x年x月x日 + * @param startDateStr 合同开始日期 格式:yyyy-MM-dd + * @param endDateStr 合同结束日期 格式:yyyy-MM-dd + * @return 格式化后的时长文本,例如:2年3月5天、6月2天、10天 + */ + public static String calculateContractDuration(String startDateStr, String endDateStr) { + // 日期格式化器 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + // 字符串转日期 + LocalDate startDate = LocalDate.parse(startDateStr, formatter); + LocalDate endDate = LocalDate.parse(endDateStr, formatter); + + // 计算两个日期之间的年、月、日(Java8+ 标准API,自动处理大小月、闰年) + Period period = Period.between(startDate, endDate); + + int years = period.getYears(); + int months = period.getMonths(); + int days = period.getDays(); + + // 拼接结果(自动忽略0值) + StringBuilder sb = new StringBuilder(); + if (years > 0) { + sb.append(years).append("年"); + } + if (months > 0) { + sb.append(months).append("月"); + } + if (days > 0) { + sb.append(days).append("天"); + } + + // 防止开始结束同一天 + return sb.length() == 0 ? "0天" : sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java new file mode 100644 index 0000000..8144935 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/ContractService.java @@ -0,0 +1,377 @@ +package com.seeyon.apps.assetstenant.contract; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.assets.AssetsService; +import com.seeyon.apps.assetstenant.assets.OaAssetsVo; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.file.OaFileVo; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.apps.esign.service.SignLinkService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ContractService { + + private static final Log log = LogFactory.getLog(ContractService.class); + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("signLinkService"); + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.CONTRACT_FORMNO); + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + public Integer countUnSign(JSONObject params) throws BusinessException { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + conditions.add(FormWhereCondition.build().display("签署状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "签署状态", "待签署"))); + Long count = FormTableExecutor.count(tableContext,null, conditions); + return count.intValue(); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(tableContext, null, conditions, pageNo, pageSize,true); + List oaContractVos = new ArrayList<>(); + Long count = FormTableExecutor.count(tableContext,null, conditions); + pageQueryVo.setDatas(oaContractVos); + pageQueryVo.setTotalCount(count); + TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); + for (Object data : datas) { + OaContractVo oaContractVo = new OaContractVo(); + Map dataMap = (Map) data; + fillVo(dataMap,oaContractVo); + Long id = Long.parseLong((String)dataMap.get("id")); + List subConditions = new ArrayList<>(); + subConditions.add(FormWhereCondition.build().display("formmain_id").value(id)); + List subDatas = FormTableExecutor.pageQuery(subTableContext, null, subConditions, 1, 10,true); + log.info("查询到的关联资产数量: " + subDatas.size()); + if(subDatas.size() > 0) { + Map subOneRowData = (Map) subDatas.get(0); + String assetsNo = (String) subOneRowData.get("资产编号"); + JSONObject temp = new JSONObject(); + temp.put("assetsNo",assetsNo); + ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp); + oaContractVo.setAssetsName(assetsVo.getAssetsName()); + oaContractVo.setManager(assetsVo.getManager()); + } + oaContractVo.setTenantName(getStringValue(dataMap,"承租方名称")); + oaContractVo.setDeposit(getStringValue(dataMap,"履约保证金")); + oaContractVo.setRentFee(getStringValue(dataMap,"租金")); + oaContractVo.setRentTotalTime(ContractDurationUtil.calculateContractDuration(getStringValue(dataMap,"合同开始日期"),getStringValue(dataMap,"合同截止日期"))); + oaContractVo.setRentFee(getViewRentFee(dataMap)); + String payWay = getStringValue(dataMap,"租金单位"); + switch (payWay) { + case "季度缴": oaContractVo.setRentFeeUnit("季");break; + case "月缴": oaContractVo.setRentFeeUnit("月");break; + case "年缴": oaContractVo.setRentFeeUnit("年");break; + case "一次性": oaContractVo.setRentFeeUnit(null);break; + case "半年缴": oaContractVo.setRentFeeUnit("半年");break; + default: oaContractVo.setRentFeeUnit(null);break; + } + oaContractVos.add(oaContractVo); + } + return pageQueryVo; + } + + private String getViewRentFee(Map dataMap) { + String feeCountType = getStringValue(dataMap, "计费方式"); + if("固定租金".equals(feeCountType)){ + return getStringValue(dataMap,"固定租金标准"); + }else { + String totalArea = getStringValue(dataMap,"租赁总面积"); + String price = getStringValue(dataMap,"实际租赁单价"); + if(StringUtils.isAnyBlank(totalArea,price)){ + return null; + } + return String.valueOf(Double.parseDouble(totalArea) * Double.parseDouble(price)); + } + } + + public List queryAll(JSONObject params) throws Exception { + List conditions = buildConditions(params); + List queryColumns = new ArrayList<>(); + queryColumns.add("合同编号"); + queryColumns.add("合同名称"); + TableContext tableContext = getTableContext(); + List datas = FormTableExecutor.query(tableContext, queryColumns,conditions,true); + List oaContractVos = new ArrayList<>(); + TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); + for (FormColumn data : datas) { + OaContractVo oaContractVo = new OaContractVo(); + Map dataMap = data.getFieldsMap(); + fillVo(dataMap,oaContractVo); + Long id = Long.parseLong((String)dataMap.get("id")); + List subConditions = new ArrayList<>(); + subConditions.add(FormWhereCondition.build().display("formmain_id").value(id)); + List subDatas = FormTableExecutor.query(subTableContext, null, subConditions, true); + List assetsVos = new ArrayList<>(); + for (Object subData : subDatas) { + Map subOneRowData = (Map) subData; + String assetsNo = (String) subOneRowData.get("资产编号"); + JSONObject temp = new JSONObject(); + temp.put("assetsNo",assetsNo); + ContractAssetsVo assetsVo = new ContractAssetsVo(); + assetsVo.setAssetsNo(subOneRowData.get("资产编号") + ""); + assetsVo.setAssetsName(subOneRowData.get("资产名称") + ""); + assetsVos.add(assetsVo); + } + oaContractVo.setAssetsVos(assetsVos); + oaContractVos.add(oaContractVo); + } + return oaContractVos; + } + + public void fillVo(Map fieldsMap, OaContractVo oaContractVo) { + oaContractVo.setFormId(getStringValue(fieldsMap, "id")); + oaContractVo.setContractNo(getStringValue(fieldsMap,"合同编号")); + oaContractVo.setContractName(getStringValue(fieldsMap,"合同名称")); + oaContractVo.setSignStatus(getStringValue(fieldsMap,"签署状态")); + oaContractVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); + oaContractVo.setContractStartTime(getStringValue(fieldsMap,"合同开始日期")); + oaContractVo.setContractEndTime(getStringValue(fieldsMap,"合同截止日期")); + oaContractVo.setStartDate(oaContractVo.getContractStartTime()); + oaContractVo.setEndDate(oaContractVo.getContractEndTime()); + if(fieldsMap.get("盖章后合同附件") != null) { + oaContractVo.seteContractFile(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("盖章后合同附件")),attachmentManager)); + } + oaContractVo.seteContractFlowId(getStringValue(fieldsMap,"电子签合同流程ID")); + } + + private List buildConditions(JSONObject params) throws BusinessException { + TableContext tableContext = getTableContext(); + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("contractNo"))) { + conditions.add(FormWhereCondition.build().display("合同编号").value(params.getString("contractNo"))); + } + if(StringUtils.isNotBlank(params.getString("formmainId"))) { + conditions.add(FormWhereCondition.build().display("formmainId").value(params.getString("formmainId"))); + } + if(StringUtils.isNotBlank(params.getString("signStatus"))) { + conditions.add(FormWhereCondition.build().display("签署状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"签署状态",params.getString("signStatus")))); + } + if(StringUtils.isNotBlank(params.getString("signWay"))) { + String enumId = EnumMapUtils.getEnumItemIdByGroupNameAndItemShowValue("签订方式",params.getString("signWay")); + conditions.add(FormWhereCondition.build().display("签订方式").value(enumId).clauseFactor(ClauseFactor.NEQ)); + } + if(StringUtils.isNotBlank(params.getString("startDate"))) { + conditions.add(FormWhereCondition.build().display("合同开始日期").clauseFactor(ClauseFactor.GE).value(params.getString("startDate"))); + } + if(StringUtils.isNotBlank(params.getString("endDate"))) { + conditions.add(FormWhereCondition.build().display("合同截止日期").clauseFactor(ClauseFactor.LE).value(params.getString("endDate"))); + } + return conditions; + } + + public String queryContractPayPeriod(String contractNo, String billDate) throws Exception { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build() + .display("合同编号") + .value(contractNo)); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), conditions, true); + if (formColumn == null || formColumn.getFieldsMap() == null) { + return ""; + } + Map fieldsMap = formColumn.getFieldsMap(); + String payWay = toStr(fieldsMap.get("缴费方式")); + int years = parseInt(fieldsMap.get("文本-年")); + int months = parseInt(fieldsMap.get("文本-月")); + int days = parseInt(fieldsMap.get("文本-日")); + + String rentStartDateStr = toStr(fieldsMap.get("计租日期")); + if (rentStartDateStr.isEmpty() || billDate == null || billDate.isEmpty()) { + return ""; + } + + LocalDate startDate = LocalDate.parse(rentStartDateStr); + LocalDate billLocalDate = LocalDate.parse(billDate); + LocalDate endDate = startDate.plusYears(years).plusMonths(months).plusDays(days); + + // 一次性/年付 1期 + if ("一次性".equals(payWay) || "年缴".equals(payWay)) { + return "1"; + } + + // 账单早于开始日 + if (billLocalDate.isBefore(startDate)) { + return "1"; + } + + int totalMonths = years * 12 + months; + + // 账单超过结束日 + if (billLocalDate.isAfter(endDate)) { + switch (payWay) { + case "季度缴": + int quarterPeriod = totalMonths / 3; + return (quarterPeriod > 0 ? quarterPeriod : 1) + ""; + case "月缴": + return (totalMonths > 0 ? totalMonths : 1) + ""; + // 修复后 半年缴 + case "半年缴": + int halfYearPeriod = totalMonths / 6; + return (halfYearPeriod > 0 ? halfYearPeriod : 1) + ""; + default: + return "1"; + } + } + + // 账单在合同期内 + switch (payWay) { + case "季度缴": + long monthsBetweenQ = ChronoUnit.MONTHS.between(startDate, billLocalDate); + return ((monthsBetweenQ / 3) + 1) + ""; + case "月缴": + long monthsBetween = ChronoUnit.MONTHS.between(startDate, billLocalDate); + return (monthsBetween + 1) + ""; + // 修复后 半年缴 + case "半年缴": + long monthsBetweenHalf = ChronoUnit.MONTHS.between(startDate, billLocalDate); + return (monthsBetweenHalf / 6 + 1) + ""; + default: + return "1"; + } + } + + private String toStr(Object obj) { + return obj == null ? "" : obj.toString().trim(); + } + + private int parseInt(Object obj) { + if (obj == null) return 0; + try { + return Integer.parseInt(obj.toString().trim()); + } catch (NumberFormatException e) { + return 0; + } + } + + public OaContractVo queryContractDetail(JSONObject params) throws Exception { + List conditions = buildConditions(params); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(),conditions,true); + if(formColumn == null) { + return new OaContractVo(); + } + Map dataMap = formColumn.getFieldsMap(); + OaContractVo oaContractVo = new OaContractVo(); + fillVo(dataMap,oaContractVo); + Long id = Long.parseLong((String)dataMap.get("id")); + List subConditions = new ArrayList<>(); + subConditions.add(FormWhereCondition.build().display("formmain_id").value(id)); + TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); + List subDatas = FormTableExecutor.pageQuery(subTableContext, null, subConditions, 1, 10,true); + if(subDatas.size() > 0) { + Map subOneRowData = (Map) subDatas.get(0); + String assetsNo = (String) subOneRowData.get("资产编号"); + BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价"); + BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积"); + String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null; + JSONObject temp = new JSONObject(); + temp.put("assetsNo",assetsNo); + ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp); + assetsVo.setRentFee(rentFee); + assetsVo.setFootPrint(rentArea.toString()); + List vos = new ArrayList<>(); + vos.add(assetsVo); + oaContractVo.setAssetsVos(vos); + } + return oaContractVo; + } + + public List queryContractAllAssets(String contractNo) throws Exception { + List tempConditions = new ArrayList<>(); + tempConditions.add(FormWhereCondition.build().display("合同编号").value(contractNo)); + FormColumn formColumn = FormTableExecutor.queryOne(getTableContext(), tempConditions,true); + if(formColumn == null) { + return null; + } + String id = formColumn.getId(); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("formmain_id").value(id)); + TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); + List subDatas = FormTableExecutor.query(subTableContext,null,conditions,true); + List assetsVos = new ArrayList<>(); + if(subDatas.size() > 0) { + for (Object subData : subDatas) { + Map subOneRowData = (Map) subData; + String assetsNo = (String) subOneRowData.get("资产编号"); + BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价"); + BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积"); + String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null; + JSONObject temp = new JSONObject(); + temp.put("assetsNo",assetsNo); + OaAssetsVo assetsVo = assetsService.queryAssetsDetail(temp); + assetsVo.setRentFee(rentFee); + assetsVo.setFootPrint(rentArea.toString()); + assetsVos.add(assetsVo); + } + } + return assetsVos; + } + + public PageQueryVo pageQueryContractAssetsInfoWithFee(JSONObject params) throws Exception { + List conditions = buildConditions(params); + TableContext subTableContext = FormTableExecutor.sub(getFormNo(), "租赁资产明细"); + List subDatas = FormTableExecutor.pageQuery(subTableContext, null, conditions, 1, 10,true); + PageQueryVo< ContractAssetsVo> pageQueryVo = new PageQueryVo(); + List assetsVos = new ArrayList<>(); + if(subDatas.size() > 0) { + for (Object subData : subDatas) { + Map subOneRowData = (Map) subData; + String assetsNo = (String) subOneRowData.get("资产编号"); + BigDecimal unitFee = (BigDecimal) subOneRowData.get("租赁单价"); + BigDecimal rentArea = (BigDecimal)subOneRowData.get("租赁面积"); + String rentFee = unitFee != null && rentArea != null ?unitFee.multiply(rentArea).toString() : null; + JSONObject temp = new JSONObject(); + temp.put("assetsNo",assetsNo); + ContractAssetsVo assetsVo = assetsService.queryContractAssetsDetail(temp); + assetsVo.setRentFee(rentFee); + assetsVo.setFootPrint(rentArea.toString()); + assetsVos.add(assetsVo); + } + } + Long totalCount = FormTableExecutor.count(subTableContext, null, conditions); + pageQueryVo.setTotalCount(totalCount); + pageQueryVo.setDatas(assetsVos); + return pageQueryVo; + } + + public String getSignLink(String eFlowId) { + return signLinkService.getSignLink(eFlowId); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java new file mode 100644 index 0000000..8512cc6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/contract/OaContractVo.java @@ -0,0 +1,189 @@ +package com.seeyon.apps.assetstenant.contract; + + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +import java.util.List; + +public class OaContractVo { + private String formId; //表单ID + private String contractNo; //合同编号 + private String contractName; //合同名称 + private String signStatus; //签订状态 + private String startDate; //开始日期 + private String endDate; //开始日期 + private OaFileVo eContractFile; //电子合同文件 + private String eContractFlowId; //电子合同签署流程ID + private String contractStartTime; //合同开始时间 + private String contractEndTime; //合同结束时间 + private List assetsVos; //资产信息 + private String contractType; //合同类型 + private String cusNo; //客商编码 + private String deposit;//押金 + private String assetsName;//资产名称 + private String manager; //管理员 + private String rentTotalTime; //租期 + private String tenantName; //租户名称 + private String rentFee;//预估租金 + private String rentFeeUnit;//租金单位 + + public String getContractNo() { + return contractNo; + } + + public void setContractNo(String contractNo) { + this.contractNo = contractNo; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public String getSignStatus() { + return signStatus; + } + + public void setSignStatus(String signStatus) { + this.signStatus = signStatus; + } + + public List getAssetsVos() { + return assetsVos; + } + + public void setAssetsVos(List assetsVos) { + this.assetsVos = assetsVos; + } + + public OaFileVo geteContractFile() { + return eContractFile; + } + + public void seteContractFile(OaFileVo eContractFile) { + this.eContractFile = eContractFile; + } + + public String getCusNo() { + return cusNo; + } + + public void setCusNo(String cusNo) { + this.cusNo = cusNo; + } + + public String geteContractFlowId() { + return eContractFlowId; + } + + public void seteContractFlowId(String eContractFlowId) { + this.eContractFlowId = eContractFlowId; + } + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public String getContractStartTime() { + return contractStartTime; + } + + public void setContractStartTime(String contractStartTime) { + this.contractStartTime = contractStartTime; + } + + public String getContractEndTime() { + return contractEndTime; + } + + public void setContractEndTime(String contractEndTime) { + this.contractEndTime = contractEndTime; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getContractType() { + return contractType; + } + + public void setContractType(String contractType) { + this.contractType = contractType; + } + + public String getDeposit() { + return deposit; + } + + public void setDeposit(String deposit) { + this.deposit = deposit; + } + + public String getAssetsName() { + return assetsName; + } + + public void setAssetsName(String assetsName) { + this.assetsName = assetsName; + } + + public String getManager() { + return manager; + } + + public void setManager(String manager) { + this.manager = manager; + } + + public String getRentTotalTime() { + return rentTotalTime; + } + + public void setRentTotalTime(String rentTotalTime) { + this.rentTotalTime = rentTotalTime; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public String getRentFee() { + return rentFee; + } + + public void setRentFee(String rentFee) { + this.rentFee = rentFee; + } + + public String getRentFeeUnit() { + return rentFeeUnit; + } + + public void setRentFeeUnit(String rentFeeUnit) { + this.rentFeeUnit = rentFeeUnit; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java b/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java new file mode 100644 index 0000000..14c72c1 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/cus/Customer.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.assetstenant.cus; + +public class Customer { + private String id; + private String cusName; + private String cusPhone; + private String cardNo; + private String cusNo; + private String orgNo; + private String orgManagerName; + private int isOrg = 0; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCusName() { + return cusName; + } + + public void setCusName(String cusName) { + this.cusName = cusName; + } + + public String getCusPhone() { + return cusPhone; + } + + public void setCusPhone(String cusPhone) { + this.cusPhone = cusPhone; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getCusNo() { + return cusNo; + } + + public void setCusNo(String cusNo) { + this.cusNo = cusNo; + } + + public String getOrgManagerName() { + return orgManagerName; + } + + public void setOrgManagerName(String orgManagerName) { + this.orgManagerName = orgManagerName; + } + + public String getOrgNo() { + return orgNo; + } + + public void setOrgNo(String orgNo) { + this.orgNo = orgNo; + } + + public int getIsOrg() { + return isOrg; + } + + public void setIsOrg(int isOrg) { + this.isOrg = isOrg; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java new file mode 100644 index 0000000..9f163fa --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/cus/CustomerService.java @@ -0,0 +1,82 @@ +package com.seeyon.apps.assetstenant.cus; + +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class CustomerService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.CUSDOCFORMNO); + } + + private TableContext getTableContext() throws BusinessException { + TableContext tableContext = FormTableExecutor.master(getFormNo()); + return tableContext; + } + + + public String matchCusPerson(Customer customer) throws Exception { + String cardNo = customer.getCardNo(); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("纳税人识别号或身份证号").value(cardNo).clauseFactor(ClauseFactor.EQ)); + TableContext tableContext = getTableContext(); + conditions.add(FormWhereCondition.build().display("客商分类").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"客商分类","个人"))); + List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true); + if(formColumnList != null && formColumnList.size() > 0){ + Map fieldsMap = formColumnList.get(0).getFieldsMap(); + return (String)fieldsMap.get("客商编号"); + } + return null; + } + + public String matchCusOrg(Customer customer) throws BusinessException { + String orgNo = customer.getOrgNo(); + List conditions = new ArrayList<>(); + TableContext tableContext = getTableContext(); + conditions.add(FormWhereCondition.build().display("纳税人识别号或身份证号").value(orgNo).clauseFactor(ClauseFactor.EQ)); + conditions.add(FormWhereCondition.build().display("客商分类").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"客商分类","企业"))); + List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true); + if(formColumnList != null && formColumnList.size() > 0){ + Map fieldsMap = formColumnList.get(0).getFieldsMap(); + return (String)fieldsMap.get("客商编码"); + } + return null; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public Customer getCustomerInfo(String cusNo) throws BusinessException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("客商编号").value(cusNo).clauseFactor(ClauseFactor.EQ)); + TableContext tableContext = getTableContext(); + List formColumnList = FormTableExecutor.query(tableContext,null,conditions,true); + if(formColumnList != null && formColumnList.size() > 0){ + Map fieldsMap = formColumnList.get(0).getFieldsMap(); + Customer customer = new Customer(); + customer.setCusName(getStringValue(fieldsMap,"客商名称")); + customer.setCusNo(getStringValue(fieldsMap,"客商编码")); + customer.setCusPhone(getStringValue(fieldsMap,"客户联系方式")); + customer.setOrgManagerName(getStringValue(fieldsMap,"客商联系人")); + customer.setOrgNo(getStringValue(fieldsMap,"纳税人识别号或身份证号")); + customer.setIsOrg(StringUtils.isNotEmpty(customer.getOrgNo()) ? 1 : 0); + return customer; + } + return null; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java new file mode 100644 index 0000000..17e28cb --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisCharegeService.java @@ -0,0 +1,131 @@ +package com.seeyon.apps.assetstenant.discharge; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.assets.OaAssetsVo; +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.apps.assetstenant.contract.ContractService; +import com.seeyon.apps.assetstenant.flow.FlowCreateService; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +public class DisCharegeService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService"); + private ContractService contractService = (ContractService) AppContext.getBean("contractService"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.DISCHARGE_FORMNO); + } + private TableContext getTableContext() throws BusinessException { + return FormTableExecutor.master(getFormNo()); + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + List queryColumnVos = new ArrayList<>(); + PageQueryVo pageQueryVo = new PageQueryVo(); + List vos = new ArrayList<>(); + TableContext tableContext = getTableContext(); + List datas = FormTableExecutor.pageQuery(tableContext, queryColumnVos, conditions, pageNo, pageSize,true); + Long count = FormTableExecutor.count(tableContext,null, conditions); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + DisChargeRecordVo vo = new DisChargeRecordVo(); + fillVo(map,vo); + vos.add(vo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + public void saveApplay(JSONObject params) throws Exception { + TableContext tableContext = getTableContext(); + FormTableBean masterTableBean = tableContext.getTableBean(); + String tableName = masterTableBean.getTableName(); + String subDbTableName = null; + TableContext sub = FormTableExecutor.sub(getFormNo(), "租赁资产"); + subDbTableName = sub.getTableName(); + Map mainFormData = new HashMap<>(); + Map> subFormDataMap = new HashMap<>(); + List subFormDataList = new ArrayList<>(); + Map data = new HashMap<>(); + subFormDataMap.put(subDbTableName,subFormDataList); + String templateCode = configProvider.getBizConfigByKey(RentConstants.DISCHARGE_TEMPLATECODE); + String appName = configProvider.getBizConfigByKey(RentConstants.FORMAPPNAME); + mainFormData.put(tableName,data); + String contractNo = params.getString("contractNo"); + List assetsNoList = (List) params.get("assetsNoList"); + Set assetsNoSet = assetsNoList.stream().collect(Collectors.toSet()); + List oaAssetsVos = contractService.queryContractAllAssets(contractNo); + if(oaAssetsVos != null) { + oaAssetsVos.forEach(oaAssetsVo -> { + if(assetsNoSet.contains(oaAssetsVo.getAssetsNo())){ + Map tempMap = new HashMap<>(); + tempMap.put("资产编号",oaAssetsVo.getAssetsNo()); + subFormDataList.add(tempMap); + } + }); + } + data.put("合同名称",params.getString("contractName")); + data.put("合同编号",contractNo); + data.put("承租方类型", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "承租方类型", params.getString("cusType"))); + data.put("承租方名称",params.getString("cusName")); + data.put("联系方式",params.getString("phone")); + data.put("终止原因",params.getString("reason")); + data.put("退租申请状态",EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"退租申请状态","申请中")); + data.put("清算状态",EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"清算状态","未清算")); + flowCreateService.flowStart("退租申请",mainFormData,subFormDataMap,appName,templateCode); + } + + public void fillVo(Map fieldsMap,DisChargeRecordVo vo) throws BusinessException { + vo.setContractName(getStringValue(fieldsMap,"合同名称")); + vo.setId(getStringValue(fieldsMap,"id")); + vo.setRemark(getStringValue(fieldsMap,"审批意见")); + vo.setStatus(getStringValue(fieldsMap,"退租申请状态")); + vo.setApplyDate(getStringValue(fieldsMap,"经办日期")); + Long id = Long.parseLong(vo.getId()); + List subConditions = new ArrayList<>(); + subConditions.add(FormWhereCondition.build().display("formmain_id").value(id)); + TableContext subtableContext = FormTableExecutor.sub(getFormNo(), "租赁资产"); + List subDatas = FormTableExecutor.query(subtableContext, null,subConditions,true); + StringBuilder dischargeItem = new StringBuilder(""); + for (FormColumn subData : subDatas) { + Map subDataFieldsMap = subData.getFieldsMap(); + String assetsName = (String) subDataFieldsMap.get("资产名称"); + dischargeItem.append(assetsName).append(","); + } + vo.setDischargeItem(dischargeItem.toString()); + } + + private List buildConditions(JSONObject params) { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))) { + conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); + } + return conditions; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/discharge/DisChargeRecordVo.java b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisChargeRecordVo.java new file mode 100644 index 0000000..c7811c4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/discharge/DisChargeRecordVo.java @@ -0,0 +1,58 @@ +package com.seeyon.apps.assetstenant.discharge; + +public class DisChargeRecordVo { + private String contractName; + private String dischargeItem; + private String id; + private String status; + private String applyDate; + private String remark; + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getApplyDate() { + return applyDate; + } + + public void setApplyDate(String applyDate) { + this.applyDate = applyDate; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public String getDischargeItem() { + return dischargeItem; + } + + public void setDischargeItem(String dischargeItem) { + this.dischargeItem = dischargeItem; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java new file mode 100644 index 0000000..c28812a --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackService.java @@ -0,0 +1,108 @@ +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.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.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.*; + +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 String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.FALLBACK_FORMNO); + } + private TableContext getMasterTableContext() throws BusinessException { + return FormTableExecutor.master(getFormNo()); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(getMasterTableContext(), null,conditions, pageNo, pageSize,true); + Long count = FormTableExecutor.count(getMasterTableContext(),null, conditions); + List vos = new ArrayList<>(); + if(datas.size() > 0) { + for (Object data : datas) { + FallbackVo fallbackVo = new FallbackVo(); + Map dataMap = (Map) data; + fillVo(dataMap,fallbackVo); + vos.add(fallbackVo); + } + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + return pageQueryVo; + } + + public FallbackVo detail(JSONObject params) throws Exception { + List conditions = buildConditions(params); + FormColumn formColumn = FormTableExecutor.queryOne(getMasterTableContext(),conditions, true); + Map fieldsMap = formColumn.getFieldsMap(); + FallbackVo fallbackVo = new FallbackVo(); + fillVo(fieldsMap,fallbackVo); + return fallbackVo; + } + + public void saveFallback(JSONObject params) throws Exception { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Map mainFormData = new HashMap<>(); + TableContext tableContext = getMasterTableContext(); + mainFormData.put("承租方编号", params.getString("cusNo")); + mainFormData.put("承租方姓名", params.getString("tenantName")); + mainFormData.put("承租方类型", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "承租方类型", params.getString("tenantType"))); + mainFormData.put("承租方手机号", params.getString("tenantPhone")); + mainFormData.put("留言内容", params.getString("content")); + mainFormData.put("留言日期", df.format(new Date())); + mainFormData.put("处理状态", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "处理状态", "未处理")); + String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); + mainFormData.put("档案编号",docNo); + String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + private List buildConditions(JSONObject params) { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("cusNo"))){ + conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); + } + if(StringUtils.isNotBlank(params.getString("id"))){ + conditions.add(FormWhereCondition.build().display("id").value(params.getString("id"))); + } + return conditions; + } + + private void fillVo(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")); + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java new file mode 100644 index 0000000..ed742ba --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/fallback/FallbackVo.java @@ -0,0 +1,58 @@ +package com.seeyon.apps.assetstenant.fallback; + +public class FallbackVo { + private String id; + private String content; + private String status; + private String comment; + private String summitDate; + private String handleDate; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getSummitDate() { + return summitDate; + } + + public void setSummitDate(String summitDate) { + this.summitDate = summitDate; + } + + public String getHandleDate() { + return handleDate; + } + + public void setHandleDate(String handleDate) { + this.handleDate = handleDate; + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/fieldCtrl/ContractCompareFieldCtrl.java b/src/main/java/com/seeyon/apps/assetstenant/fieldCtrl/ContractCompareFieldCtrl.java new file mode 100644 index 0000000..38c19f9 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/fieldCtrl/ContractCompareFieldCtrl.java @@ -0,0 +1,61 @@ +package com.seeyon.apps.assetstenant.fieldCtrl; + +import com.seeyon.cap4.form.bean.ParamDefinition; +import com.seeyon.cap4.form.bean.fieldCtrl.FormFieldCustomCtrl; +import com.seeyon.cap4.form.util.Enums; + +//@Component +public class ContractCompareFieldCtrl extends FormFieldCustomCtrl { + @Override + public String getPCInjectionInfo() { + return "{path:'apps_res/cap/customCtrlResources/esignContractCompareBtnResources',jsUri:'/js/compareinit.js',initMethod:'init',nameSpace:'" + getNameSpace() + "'}"; + } + + @Override + public String getMBInjectionInfo() { + return "{path:'http://mapResource.v5.cmp/v1.0.0/',weixinpath:'invoice',jsUri:'js/location.js',initMethod:'init',nameSpace:'"+getNameSpace()+"'}"; + } + + @Override + public String getKey() { + return "8899554679928334458"; + } + + @Override + public boolean canUse(Enums.FormType formType) { + return true; + } + + @Override + public String[] getDefaultVal(String s) { + return new String[0]; + } + + public String getNameSpace() { + return "field_" + this.getKey(); + } + + public String getFieldLength() { + return "20"; + } + @Override + public String getText() { + return "e签宝合同比对按钮"; + } + + /** + * 控件初始化接口,此接口在控件初始化的时候,会调用,主要用于定义控件所属插件id、在表单编辑器中的图标、表单编辑器中有哪些属性可以设置。 + * 使用举例:在接口中定义自定义控件在在表单编辑器中有哪些控件属性需要配置 + */ + @Override + public void init() { + //设置图标和插件ID + setPluginId("src_esign"); + setIcon("cap-icon-custom-button"); + // 自定义参数 + + ParamDefinition esignContractCompareBtnParam = new ParamDefinition(); + esignContractCompareBtnParam.setParamType(Enums.ParamType.button); + addDefinition(esignContractCompareBtnParam); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java b/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java new file mode 100644 index 0000000..d1d72d4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/file/FileHandlerService.java @@ -0,0 +1,64 @@ +package com.seeyon.apps.assetstenant.file; + +import com.seeyon.ctp.common.AppContext; +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 javax.servlet.http.HttpServletResponse; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; + + + +public class FileHandlerService { + + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private FileManager fileManager = (FileManager) AppContext.getBean("fileManager"); + + public void handleFile(String refId, HttpServletResponse response) throws Exception { + InputStream inputStream = null; + try { + Attachment attachment = attachmentManager.getAttachmentByFileURL(Long.valueOf(refId)); + inputStream = fileManager.getFileInputStream(attachment.getFileUrl()); + + // ⭐ 关键:重置 + response.reset(); + + // ⭐ 必须设置类型 + response.setContentType("application/octet-stream"); + + // ⭐ 文件名处理 + String encodedFileName = URLEncoder.encode(attachment.getFilename(), "UTF-8") + .replaceAll("\\+", "%20"); + + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader( + "Content-Disposition", + "attachment; filename=\"" + attachment.getFilename() + "\"; filename*=UTF-8''" + encodedFileName + ); + + // ⭐ 输出流 + OutputStream outputStream = response.getOutputStream(); + + byte[] buffer = new byte[2048]; + int len; + + while ((len = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); + } + + outputStream.flush(); + + } catch (Exception e) { + e.printStackTrace(); // ❗不要吞异常 + } finally { + try { + if (inputStream != null) inputStream.close(); + } catch (Exception ignored) {} + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java b/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java new file mode 100644 index 0000000..3af82aa --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/file/OaFileVo.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.assetstenant.file; + +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; + +import java.util.ArrayList; +import java.util.List; + +public class OaFileVo { + private String mainRefId; + private List subRefIds; + + public List getSubRefIds() { + return subRefIds; + } + + public void setSubRefIds(List subRefIds) { + this.subRefIds = subRefIds; + } + + public String getMainRefId() { + return mainRefId; + } + + public void setMainRefId(String mainRefId) { + this.mainRefId = mainRefId; + } + + public static OaFileVo getInstance(Long refId, AttachmentManager attachmentManager) { + if(refId == null) { + return null; + } + OaFileVo oaFileVo = new OaFileVo(); + List subRefIds = new ArrayList<>(); + List fileUrls = attachmentManager.getBySubReference(refId); + oaFileVo.setMainRefId(refId + ""); + for (Long fileUrl : fileUrls) { + subRefIds.add(fileUrl + ""); + } + oaFileVo.setSubRefIds(subRefIds); + return oaFileVo; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java b/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java new file mode 100644 index 0000000..e7e47b1 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/flow/FlowCreateService.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.assetstenant.flow; + + +import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; +import com.seeyon.apps.assetstenant.constants.RentConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.utils.http.OaResp; +import com.seeyon.utils.http.OaRestClient; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +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); + String url = "/bpm/process/start"; + Map params = new HashMap<>(); + Map datas = new HashMap<>(); + Map formDatas = new HashMap<>(); + params.put("appName",appName); + params.put("data",datas); + datas.put("templateCode",templateCode); + datas.put("draft","0"); + datas.put("data",formDatas); + for (String key : mainFormData.keySet()) { + formDatas.put(key,mainFormData.get(key)); + } + for (String key : subFormDatas.keySet()) { + formDatas.put(key,subFormDatas.get(key)); + } + 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/job/BillPayUrgeJob.java b/src/main/java/com/seeyon/apps/assetstenant/job/BillPayUrgeJob.java new file mode 100644 index 0000000..fcc388d --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/job/BillPayUrgeJob.java @@ -0,0 +1,94 @@ +package com.seeyon.apps.assetstenant.job; + +import com.seeyon.apps.assetstenant.bill.BillService; +import com.seeyon.apps.assetstenant.bill.BillVo; +import com.seeyon.apps.assetstenant.bill.WaeBillService; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.apps.esign.msg.MessageVo; +import com.seeyon.apps.esign.msg.ThirdMessageService; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.utils.form.ClauseFactor; +import com.seeyon.utils.form.FormWhereCondition; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class BillPayUrgeJob extends AbstractQuartzTask { + + private BillService billService = (BillService) AppContext.getBean("billService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("waeBillService"); + private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("thirdMessageService"); + + @Override + public String taskRun(String s) throws Exception { + hanleContractBill(); + return ""; + } + + @Override + public String getName() { + return "账单催缴消息发送定时任务"; + } + + private void hanleContractBill() { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + //拉取收款结果反馈为空,且存在催缴时间的账单记录 + List conditions = new ArrayList<>();; + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL)); + conditions.add(FormWhereCondition.build().display("账单-催缴时间").clauseFactor(ClauseFactor.NOT_NULL)); + List billVos = null; + do{ + billVos = billService.queryAllContractBill(conditions); + for (BillVo data : billVos) { + //发送消息到小程序后端 + MessageVo messageVo = new MessageVo(); + String context = "尊敬的用户,您有一笔" + data.getBillAmount() + "元的" + data.getBillName() + "账单尚未支付,请尽快支付"; + messageVo.setMessageContent(context); + messageVo.setMessageTime(df.format(new Date())); + messageVo.setMessageType("BILL"); + messageVo.setMessageReceiver(data.getCusNo()); + messageVo.setBizId(data.getBillNo()); + messageVo.setMessageText(context); + messageVo.setTitle("账单催缴"); + thirdMessageService.sendMessage(messageVo); + } + }while (billVos != null && billVos.size() > 0); + }catch (Exception e) { + + } + } + + private void hanleWaeBill() { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + //拉取收款结果反馈为空,且存在催缴时间的账单记录 + List conditions = new ArrayList<>();; + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL)); + conditions.add(FormWhereCondition.build().display("账单-催缴时间").clauseFactor(ClauseFactor.NOT_NULL)); + List billVos = null; + do{ + billVos = waeBillService.queryAllWaeBill(conditions);; + for (BillVo data : billVos) { + //发送消息到小程序后端 + MessageVo messageVo = new MessageVo(); + String context = "尊敬的用户,您有一笔" + data.getBillAmount() + "元的" + data.getBillName() + "水电费账单尚未支付,请尽快支付"; + messageVo.setMessageContent(context); + messageVo.setMessageTime(df.format(new Date())); + messageVo.setMessageType("BILL"); + messageVo.setMessageReceiver(data.getCusNo()); + messageVo.setBizId(data.getBillNo()); + messageVo.setMessageText(context); + messageVo.setTitle("账单催缴"); + thirdMessageService.sendMessage(messageVo); + } + }while (billVos != null && billVos.size() > 0); + }catch (Exception e) { + + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/job/ContractSignUrgeJob.java b/src/main/java/com/seeyon/apps/assetstenant/job/ContractSignUrgeJob.java new file mode 100644 index 0000000..aad7cf4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/job/ContractSignUrgeJob.java @@ -0,0 +1,66 @@ +package com.seeyon.apps.assetstenant.job; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.contract.ContractService; +import com.seeyon.apps.assetstenant.contract.OaContractVo; +import com.seeyon.apps.assetstenant.po.PageQueryVo; +import com.seeyon.apps.esign.msg.MessageVo; +import com.seeyon.apps.esign.msg.ThirdMessageService; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.ctp.common.AppContext; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +public class ContractSignUrgeJob extends AbstractQuartzTask { + + private ContractService contractService; + private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("thirdMessageService"); + + @Override + public String taskRun(String s) throws Exception { + return ""; + } + + @Override + public String getName() { + return ""; + } + + void urgeSign() throws Exception { + JSONObject param = new JSONObject(); + Integer pageNo = 1; + Integer pageSize = 20; + param.put("pageNo",pageNo); + param.put("pageSize",pageSize); + param.put("signStatus","未签署"); + List contracts = null; + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + do{ + PageQueryVo queryVo = contractService.pageQuery(param); + contracts = queryVo.getDatas(); + if(contracts == null || contracts.size() == 0) { + break; + } + for (OaContractVo contract : contracts) { + String endDate = contract.getEndDate(); + Date date = df.parse(endDate); + Date nowDate = new Date(); + if(date.getTime() - nowDate.getTime() <= 259200000 ) { + //还有三天到期则发消息提醒签署 + MessageVo messageVo = new MessageVo(); + messageVo.setBizId(contract.getContractNo()); + messageVo.setTitle("合同签署即将超期提醒"); + messageVo.setMessageText("您有一份租赁合同即将到期,请尽快登录伍家启辰资产小程序进行签署"); + messageVo.setMessageReceiver(contract.getCusNo()); + thirdMessageService.sendMessage(messageVo); + } + + } + pageNo++; + }while (contracts != null && contracts.size() > 0); + + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java new file mode 100644 index 0000000..fee90da --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeService.java @@ -0,0 +1,99 @@ +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.file.OaFileVo; +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.utils.form.*; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class NoticeService { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.NOTICEFORMNO); + } + private TableContext getMasterTableContext() throws BusinessException { + return FormTableExecutor.master(getFormNo()); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = FormTableExecutor.pageQuery(getMasterTableContext(), null,conditions, pageNo, pageSize,true); + Long count = FormTableExecutor.count(getMasterTableContext(),null, conditions); + List vos = new ArrayList<>(); + if(datas.size() > 0){ + for (Object data : datas) { + Map map = (Map) data; + NoticeVo vo = new NoticeVo(); + fillVo(map, vo); + vos.add(vo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + private List buildConditions(JSONObject params) throws BusinessException { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("assetsNo"))) { + conditions.add(FormWhereCondition.build().display("资产编号").value(params.getString("assetsNo"))); + } + if(StringUtils.isNotBlank(params.getString("id"))) { + conditions.add(FormWhereCondition.build().display("id").value(params.getString("id"))); + } + TableContext tableContext = getMasterTableContext(); + conditions.add(FormWhereCondition.build().display("是否同步小程序").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"是否同步小程序","是"))); + conditions.add(FormWhereCondition.build().display("招商状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"招商状态","上架"))); + return conditions; + } + + public NoticeVo queryNoticeDetail(JSONObject params) throws Exception { + List conditions = buildConditions(params); + NoticeVo vo = new NoticeVo(); + FormColumn formColumn = FormTableExecutor.queryOne(getMasterTableContext(),conditions, true); + if(formColumn == null) { + return vo; + } + Map fieldsMap = formColumn.getFieldsMap(); + fillVo(fieldsMap,vo); + return vo; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public void fillVo(Map fieldsMap,NoticeVo vo) { + vo.setNoticeId(getStringValue(fieldsMap,"id")); + vo.setNoticeTitle(getStringValue(fieldsMap,"公告标题")); + vo.setNoticeContent(getStringValue(fieldsMap,"招租公告")); + vo.setCreateTime(fieldsMap.get("申请日期") + ""); + if(fieldsMap.get("相关附件") != null) { + vo.setAttachments(OaFileVo.getInstance((Long)fieldsMap.get("相关附件"),attachmentManager)); + } + if(fieldsMap.get("VR文件") != null) { + + vo.setImgs(OaFileVo.getInstance((Long)fieldsMap.get("VR文件"),attachmentManager)); + } + vo.setNoticeType("bussiness"); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeVo.java b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeVo.java new file mode 100644 index 0000000..f814d57 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/notice/NoticeVo.java @@ -0,0 +1,113 @@ +package com.seeyon.apps.assetstenant.notice; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +public class NoticeVo { + private String noticeId; + private String noticeTitle; + private String noticeType; + private String noticeContent; + private String status; + private String createBy; + private String createTime; + private String updateBy; + private String updateTime; + private String remark; + private OaFileVo attachments; //详情图片 + private OaFileVo imgs; //vr图 + public String getNoticeId() { + return noticeId; + } + + public void setNoticeId(String noticeId) { + this.noticeId = noticeId; + } + + public String getNoticeTitle() { + return noticeTitle; + } + + public void setNoticeTitle(String noticeTitle) { + this.noticeTitle = noticeTitle; + } + + public String getNoticeType() { + return noticeType; + } + + public void setNoticeType(String noticeType) { + this.noticeType = noticeType; + } + + public String getNoticeContent() { + return noticeContent; + } + + public void setNoticeContent(String noticeContent) { + this.noticeContent = noticeContent; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public OaFileVo getAttachments() { + return attachments; + } + + public void setAttachments(OaFileVo attachments) { + this.attachments = attachments; + } + + public OaFileVo getImgs() { + return imgs; + } + + public void setImgs(OaFileVo imgs) { + this.imgs = imgs; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/AuthPsnInfo.java b/src/main/java/com/seeyon/apps/assetstenant/po/AuthPsnInfo.java new file mode 100644 index 0000000..2d6ead1 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/AuthPsnInfo.java @@ -0,0 +1,61 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class AuthPsnInfo { + private String psnName; + private String psnIDCardNum; + private String psnIDCardType; + private String psnMobile; + private String bankCardNum; + private Boolean psnIdentityVerify; + + public String getPsnName() { + return psnName; + } + + public void setPsnName(String psnName) { + this.psnName = psnName; + } + + public String getPsnIDCardNum() { + return psnIDCardNum; + } + + public void setPsnIDCardNum(String psnIDCardNum) { + this.psnIDCardNum = psnIDCardNum; + } + + public String getPsnIDCardType() { + return psnIDCardType; + } + + public void setPsnIDCardType(String psnIDCardType) { + this.psnIDCardType = psnIDCardType; + } + + public String getPsnMobile() { + return psnMobile; + } + + public void setPsnMobile(String psnMobile) { + this.psnMobile = psnMobile; + } + + public String getBankCardNum() { + return bankCardNum; + } + + public void setBankCardNum(String bankCardNum) { + this.bankCardNum = bankCardNum; + } + + public Boolean getPsnIdentityVerify() { + return psnIdentityVerify; + } + + public void setPsnIdentityVerify(Boolean psnIdentityVerify) { + this.psnIdentityVerify = psnIdentityVerify; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/ContractFile.java b/src/main/java/com/seeyon/apps/assetstenant/po/ContractFile.java new file mode 100644 index 0000000..568cb97 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/ContractFile.java @@ -0,0 +1,61 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class ContractFile { + private String fileId; + private String fileName; + private Boolean neededPwd; + private String fileEditPwd; + private String contractBizTypeId; + private int order; + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public Boolean getNeededPwd() { + return neededPwd; + } + + public void setNeededPwd(Boolean neededPwd) { + this.neededPwd = neededPwd; + } + + public String getFileEditPwd() { + return fileEditPwd; + } + + public void setFileEditPwd(String fileEditPwd) { + this.fileEditPwd = fileEditPwd; + } + + public String getContractBizTypeId() { + return contractBizTypeId; + } + + public void setContractBizTypeId(String contractBizTypeId) { + this.contractBizTypeId = contractBizTypeId; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignApiHeader.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignApiHeader.java new file mode 100644 index 0000000..24237a9 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignApiHeader.java @@ -0,0 +1,219 @@ +package com.seeyon.apps.assetstenant.po; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +public class EsignApiHeader { + private String xTsignOpenAppId; + private String xTsignOpenAuthMode; + private String xTsignOpenCaSignature; + private String xTsignOpenCaTimestamp; + private String accept; + private String contentType = "application/json; charset=UTF-8"; + private String contentMd5; + private String httpMethod; + private String date; + private String headers; + private String pathAndParameters; + private String token; + + public String getxTsignOpenAppId() { + return xTsignOpenAppId; + } + + public void setxTsignOpenAppId(String xTsignOpenAppId) { + this.xTsignOpenAppId = xTsignOpenAppId; + } + + public String getX_Tsign_Open_Auth_Mode() { + return xTsignOpenAuthMode; + } + + public void setX_Tsign_Open_Auth_Mode(String x_Tsign_Open_Auth_Mode) { + this.xTsignOpenAuthMode = x_Tsign_Open_Auth_Mode; + } + + public String getxTsignOpenCaSignature() { + return xTsignOpenCaSignature; + } + + public void setxTsignOpenCaSignature(String xTsignOpenCaSignature) { + this.xTsignOpenCaSignature = xTsignOpenCaSignature; + } + + public String getxTsignOpenCaTimestamp() { + return xTsignOpenCaTimestamp; + } + + public void setxTsignOpenCaTimestamp(String xTsignOpenCaTimestamp) { + this.xTsignOpenCaTimestamp = xTsignOpenCaTimestamp; + } + + public String getAccept() { + return accept; + } + + public void setAccept(String accept) { + this.accept = accept; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getContentMd5() { + return contentMd5; + } + + public void setContentMd5(String contentMd5) { + this.contentMd5 = contentMd5; + } + + public static EsignApiHeader build() { + EsignApiHeader header = new EsignApiHeader(); + header.setAccept("*/*"); + header.setX_Tsign_Open_Auth_Mode("Signature"); + return header; + } + + public EsignApiHeader pathAndParameters(String pathAndParameters) { + this.pathAndParameters = pathAndParameters; + return this; + } + + public EsignApiHeader appId(String appId) { + this.xTsignOpenAppId = appId; + return this; + } + + public EsignApiHeader heads(String headers) { + this.headers = headers; + return this; + } + + public EsignApiHeader timeStamp() { + this.xTsignOpenCaTimestamp = System.currentTimeMillis() + ""; + return this; + } + + public EsignApiHeader token(String token) { + this.token = token; + return this; + } + + public EsignApiHeader contentMD5(String body) { + this.contentMd5 = getBodyContentMD5(body); + return this; + } + + public EsignApiHeader httpMethod(String httpMethod) { + this.httpMethod = httpMethod; + return this; + } + + public EsignApiHeader signature(String secret) throws Exception { + StringBuffer strBuff = new StringBuffer(); + strBuff.append(httpMethod).append("\n").append(accept).append("\n").append(contentMd5).append("\n") + .append(contentType).append("\n").append("").append("\n"); + if ("".equals(headers)) { + strBuff.append(headers).append(pathAndParameters); + } else { + strBuff.append(headers).append("\n").append(pathAndParameters); + } + String StringToSign = strBuff.toString(); + this.setxTsignOpenCaSignature(doSignatureBase64(StringToSign, secret)); + return this; + } + + + public String doSignatureBase64(String message, String secret) throws Exception { + String algorithm = "HmacSHA256"; + Mac hmacSha256; + String digestBase64 = null; + try { + hmacSha256 = Mac.getInstance(algorithm); + byte[] keyBytes = secret.getBytes("UTF-8"); + byte[] messageBytes = message.getBytes("UTF-8"); + hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, algorithm)); + // 使用HmacSHA256对二进制数据消息Bytes计算摘要 + byte[] digestBytes = hmacSha256.doFinal(messageBytes); + // 把摘要后的结果digestBytes使用Base64进行编码 + digestBase64 = new String(Base64.encodeBase64(digestBytes), "UTF-8"); + } catch (NoSuchAlgorithmException e) { + String msg = MessageFormat.format("不支持此算法: {0}", e.getMessage()); + Exception ex = new Exception(msg); + ex.initCause(e); + throw ex; + } catch (UnsupportedEncodingException e) { + String msg = MessageFormat.format("不支持的字符编码: {0}", e.getMessage()); + Exception ex = new Exception(msg); + ex.initCause(e); + throw ex; + } catch (InvalidKeyException e) { + String msg = MessageFormat.format("无效的密钥规范: {0}", e.getMessage()); + Exception ex = new Exception(msg); + ex.initCause(e); + throw ex; + } + return digestBase64; + } + + /*** + * 计算请求Body体的Content-MD5 + * @param bodyData 请求Body体数据 + * @return + */ + public String getBodyContentMD5(String bodyData) { + if("".equals(bodyData)) { + return bodyData; + } + // 获取Body体的MD5的二进制数组(128位) + byte[] bytes = getBodyMD5Bytes128(bodyData); + // 对Body体MD5的二进制数组进行Base64编码 + return new String(Base64.encodeBase64(bytes)); + } + + public byte[] getBodyMD5Bytes128(String bodyData) { + byte[] md5Bytes = null; + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + md5.update(bodyData.getBytes(StandardCharsets.UTF_8)); + md5Bytes = md5.digest(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return md5Bytes; + } + + public Map convert2Headers(){ + Map headers = new HashMap<>(); + if(xTsignOpenAppId != null) { + headers.put("X-Tsign-Open-App-Id", xTsignOpenAppId); + } + if(token != null) { + headers.put("X-Tsign-Open-Token", token); + } + if(contentType != null) { + headers.put("Content-Type", contentType); + } + if(!StringUtils.isBlank(contentMd5)) { + headers.put("Content-MD5", contentMd5); + } + return headers; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignBaseResp.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignBaseResp.java new file mode 100644 index 0000000..01158a2 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignBaseResp.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.assetstenant.po; + +public class EsignBaseResp { + private int code; + private String message; + private Object data; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignException.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignException.java new file mode 100644 index 0000000..8a0a9e7 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignException.java @@ -0,0 +1,36 @@ +package com.seeyon.apps.assetstenant.po; + +/** + * description 自定义全局异常 + * @author 澄泓 + * datetime 2019年7月1日上午10:43:24 + */ +public class EsignException extends Exception { + + private static final long serialVersionUID = 4359180081622082792L; + private Exception e; + + public EsignException(String msg) { + super(msg); + } + + public EsignException(String msg, Throwable cause) { + super(msg,cause); + } + + public EsignException(){ + + } + + public Exception getE() { + return e; + } + + public void setE(Exception e) { + this.e = e; + } + + + + +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignFileUploadParams.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignFileUploadParams.java new file mode 100644 index 0000000..10c53fa --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignFileUploadParams.java @@ -0,0 +1,49 @@ +package com.seeyon.apps.assetstenant.po; + +public class EsignFileUploadParams { + private String contentMd5; + private String contentType; + private String fileName; + private Long fileSize; + private Boolean convertToPDF = false; + + public String getContentMd5() { + return contentMd5; + } + + public void setContentMd5(String contentMd5) { + this.contentMd5 = contentMd5; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public Long getFileSize() { + return fileSize; + } + + public void setFileSize(Long fileSize) { + this.fileSize = fileSize; + } + + public Boolean getConvertToPDF() { + return convertToPDF; + } + + public void setConvertToPDF(Boolean convertToPDF) { + this.convertToPDF = convertToPDF; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignHttpResponse.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignHttpResponse.java new file mode 100644 index 0000000..a7c6671 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignHttpResponse.java @@ -0,0 +1,27 @@ +package com.seeyon.apps.assetstenant.po; +/** + * 网络请求的response类 + * @author 澄泓 + * @date 2022/2/21 17:28 + * @version + */ +public class EsignHttpResponse { + private int status; + private String body; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/EsignToken.java b/src/main/java/com/seeyon/apps/assetstenant/po/EsignToken.java new file mode 100644 index 0000000..e17308f --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/EsignToken.java @@ -0,0 +1,34 @@ +package com.seeyon.apps.assetstenant.po; + +import java.io.Serializable; + +public class EsignToken implements Serializable { + + private String tokenStr; + private Long ttl; + private String refreshToken; + + public String getTokenStr() { + return tokenStr; + } + + public void setTokenStr(String tokenStr) { + this.tokenStr = tokenStr; + } + + public Long getTtl() { + return ttl; + } + + public void setTtl(Long ttl) { + this.ttl = ttl; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/GetUploadUrlResp.java b/src/main/java/com/seeyon/apps/assetstenant/po/GetUploadUrlResp.java new file mode 100644 index 0000000..0783342 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/GetUploadUrlResp.java @@ -0,0 +1,23 @@ +package com.seeyon.apps.assetstenant.po; + +public class GetUploadUrlResp { + + private String fileId; + private String fileUploadUrl; + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public String getFileUploadUrl() { + return fileUploadUrl; + } + + public void setFileUploadUrl(String fileUploadUrl) { + this.fileUploadUrl = fileUploadUrl; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/NormalSignFieldConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/NormalSignFieldConfig.java new file mode 100644 index 0000000..628d31d --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/NormalSignFieldConfig.java @@ -0,0 +1,58 @@ +package com.seeyon.apps.assetstenant.po; + +public class NormalSignFieldConfig { + private Boolean autoSign; + private Integer signFieldStyle; + private SignFieldPosition signFieldPosition; + private String assignedSealId; //指定签章id + private Boolean freeMode = false; + private Boolean adaptableSignFieldSize;//是否自适应签章大小 + + public Boolean getAutoSign() { + return autoSign; + } + + public void setAutoSign(Boolean autoSign) { + this.autoSign = autoSign; + } + + public Integer getSignFieldStyle() { + return signFieldStyle; + } + + public void setSignFieldStyle(Integer signFieldStyle) { + this.signFieldStyle = signFieldStyle; + } + + public SignFieldPosition getSignFieldPosition() { + return signFieldPosition; + } + + public void setSignFieldPosition(SignFieldPosition signFieldPosition) { + this.signFieldPosition = signFieldPosition; + } + + public String getAssignedSealId() { + return assignedSealId; + } + + public void setAssignedSealId(String assignedSealId) { + this.assignedSealId = assignedSealId; + } + + public Boolean getFreeMode() { + return freeMode; + } + + public void setFreeMode(Boolean freeMode) { + this.freeMode = freeMode; + } + + public Boolean getAdaptableSignFieldSize() { + return adaptableSignFieldSize; + } + + public void setAdaptableSignFieldSize(Boolean adaptableSignFieldSize) { + this.adaptableSignFieldSize = adaptableSignFieldSize; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/OaResp.java b/src/main/java/com/seeyon/apps/assetstenant/po/OaResp.java new file mode 100644 index 0000000..dfa4cfb --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/OaResp.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.assetstenant.po; + +public class OaResp { + private Integer code; + private String message; + private Object data; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + } \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/OrgBaseInfo.java b/src/main/java/com/seeyon/apps/assetstenant/po/OrgBaseInfo.java new file mode 100644 index 0000000..2b0ab54 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/OrgBaseInfo.java @@ -0,0 +1,6 @@ +package com.seeyon.apps.assetstenant.po; + +public class OrgBaseInfo { + private String orgIDCardNum; + private String legalRepName; +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/OrgInitiator.java b/src/main/java/com/seeyon/apps/assetstenant/po/OrgInitiator.java new file mode 100644 index 0000000..d91b080 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/OrgInitiator.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.assetstenant.po; + +public class OrgInitiator { + private String orgId; + private Transactor transactor; + + public String getOrgId() { + return orgId; + } + + public void setOrgId(String orgId) { + this.orgId = orgId; + } + + public Transactor getTransactor() { + return transactor; + } + + public void setTransactor(Transactor transactor) { + this.transactor = transactor; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/PageQueryVo.java b/src/main/java/com/seeyon/apps/assetstenant/po/PageQueryVo.java new file mode 100644 index 0000000..29b9bae --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/PageQueryVo.java @@ -0,0 +1,24 @@ +package com.seeyon.apps.assetstenant.po; + +import java.util.List; + +public class PageQueryVo{ + private Long totalCount = 0l; + private List datas; + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public List getDatas() { + return datas; + } + + public void setDatas(List datas) { + this.datas = datas; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthConfig.java new file mode 100644 index 0000000..f38db47 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthConfig.java @@ -0,0 +1,40 @@ +package com.seeyon.apps.assetstenant.po; + +public class PsnAuthConfig { + private String psnAccount; + private String psnId; + private AuthPsnInfo psnInfo; + private PsnAuthPageConfig psnAuthPageConfig; + + public String getPsnAccount() { + return psnAccount; + } + + public void setPsnAccount(String psnAccount) { + this.psnAccount = psnAccount; + } + + public String getPsnId() { + return psnId; + } + + public void setPsnId(String psnId) { + this.psnId = psnId; + } + + public AuthPsnInfo getPsnInfo() { + return psnInfo; + } + + public void setPsnInfo(AuthPsnInfo psnInfo) { + this.psnInfo = psnInfo; + } + + public PsnAuthPageConfig getPsnAuthPageConfig() { + return psnAuthPageConfig; + } + + public void setPsnAuthPageConfig(PsnAuthPageConfig psnAuthPageConfig) { + this.psnAuthPageConfig = psnAuthPageConfig; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthPageConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthPageConfig.java new file mode 100644 index 0000000..31492e0 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/PsnAuthPageConfig.java @@ -0,0 +1,45 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class PsnAuthPageConfig { + private String psnDefaultAuthMode; + private List psnAvailableAuthModes; + private List advancedVersion; + private List psnEditableFields; + + public String getPsnDefaultAuthMode() { + return psnDefaultAuthMode; + } + + public void setPsnDefaultAuthMode(String psnDefaultAuthMode) { + this.psnDefaultAuthMode = psnDefaultAuthMode; + } + + public List getPsnAvailableAuthModes() { + return psnAvailableAuthModes; + } + + public void setPsnAvailableAuthModes(List psnAvailableAuthModes) { + this.psnAvailableAuthModes = psnAvailableAuthModes; + } + + public List getAdvancedVersion() { + return advancedVersion; + } + + public void setAdvancedVersion(List advancedVersion) { + this.advancedVersion = advancedVersion; + } + + public List getPsnEditableFields() { + return psnEditableFields; + } + + public void setPsnEditableFields(List psnEditableFields) { + this.psnEditableFields = psnEditableFields; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/PsnInitiator.java b/src/main/java/com/seeyon/apps/assetstenant/po/PsnInitiator.java new file mode 100644 index 0000000..81a0225 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/PsnInitiator.java @@ -0,0 +1,13 @@ +package com.seeyon.apps.assetstenant.po; + +public class PsnInitiator { + private String psnId; + + public String getPsnId() { + return psnId; + } + + public void setPsnId(String psnId) { + this.psnId = psnId; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/RemarkSignFieldConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/RemarkSignFieldConfig.java new file mode 100644 index 0000000..ce1b7a6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/RemarkSignFieldConfig.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.assetstenant.po; + +public class RemarkSignFieldConfig { + + private boolean freeMode = false; + private int inputType = 1; + private String remarkContent = ""; + + public boolean isFreeMode() { + return freeMode; + } + + public void setFreeMode(boolean freeMode) { + this.freeMode = freeMode; + } + + public int getInputType() { + return inputType; + } + + public void setInputType(int inputType) { + this.inputType = inputType; + } + + public String getRemarkContent() { + return remarkContent; + } + + public void setRemarkContent(String remarkContent) { + this.remarkContent = remarkContent; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/RestUser.java b/src/main/java/com/seeyon/apps/assetstenant/po/RestUser.java new file mode 100644 index 0000000..1e9ab91 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/RestUser.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.assetstenant.po; + +public class RestUser { + + private String restName; + private String restPassword; + private String loginName; + + public String getRestName() { + return restName; + } + + public void setRestName(String restName) { + this.restName = restName; + } + + public String getRestPassword() { + return restPassword; + } + + public void setRestPassword(String restPassword) { + this.restPassword = restPassword; + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SealInfoVo.java b/src/main/java/com/seeyon/apps/assetstenant/po/SealInfoVo.java new file mode 100644 index 0000000..d149026 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SealInfoVo.java @@ -0,0 +1,50 @@ +package com.seeyon.apps.assetstenant.po; + +public class SealInfoVo { + + private String sealId; //印章ID + private String sealName; //印章名称 + private String sealBizTypeDescription; //印章描述 + private String statusDescription; //印章状态描述 + private String sealImageDownloadUrl; //印章图片下载地址 + + public String getSealId() { + return sealId; + } + + public void setSealId(String sealId) { + this.sealId = sealId; + } + + public String getSealName() { + return sealName; + } + + public void setSealName(String sealName) { + this.sealName = sealName; + } + + public String getSealBizTypeDescription() { + return sealBizTypeDescription; + } + + public void setSealBizTypeDescription(String sealBizTypeDescription) { + this.sealBizTypeDescription = sealBizTypeDescription; + } + + public String getStatusDescription() { + return statusDescription; + } + + public void setStatusDescription(String statusDescription) { + this.statusDescription = statusDescription; + } + + public String getSealImageDownloadUrl() { + return sealImageDownloadUrl; + } + + public void setSealImageDownloadUrl(String sealImageDownloadUrl) { + this.sealImageDownloadUrl = sealImageDownloadUrl; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignDateConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignDateConfig.java new file mode 100644 index 0000000..867af65 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignDateConfig.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.assetstenant.po; + +public class SignDateConfig { + private String dateFormat = "yyyy年MM月dd日"; + private Integer fontSize = 20; + private Integer showSignDate = 1; + + public String getDateFormat() { + return dateFormat; + } + + public void setDateFormat(String dateFormat) { + this.dateFormat = dateFormat; + } + + public Integer getFontSize() { + return fontSize; + } + + public void setFontSize(Integer fontSize) { + this.fontSize = fontSize; + } + + public Integer getShowSignDate() { + return showSignDate; + } + + public void setShowSignDate(Integer showSignDate) { + this.showSignDate = showSignDate; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignField.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignField.java new file mode 100644 index 0000000..72d94eb --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignField.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.assetstenant.po; + +public class SignField { + + private String fileId; + private Integer signFieldType; + private NormalSignFieldConfig normalSignFieldConfig; + private RemarkSignFieldConfig remarkSignFieldConfig; + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public Integer getSignFieldType() { + return signFieldType; + } + + public void setSignFieldType(Integer signFieldType) { + this.signFieldType = signFieldType; + } + + public NormalSignFieldConfig getNormalSignFieldConfig() { + return normalSignFieldConfig; + } + + public void setNormalSignFieldConfig(NormalSignFieldConfig normalSignFieldConfig) { + this.normalSignFieldConfig = normalSignFieldConfig; + } + + public RemarkSignFieldConfig getRemarkSignFieldConfig() { + return remarkSignFieldConfig; + } + + public void setRemarkSignFieldConfig(RemarkSignFieldConfig remarkSignFieldConfig) { + this.remarkSignFieldConfig = remarkSignFieldConfig; + } + +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignFieldPosition.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignFieldPosition.java new file mode 100644 index 0000000..5d0688e --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignFieldPosition.java @@ -0,0 +1,41 @@ +package com.seeyon.apps.assetstenant.po; + +public class SignFieldPosition { + + private String acrossPageMode; + private String positionPage; + private Float positionX; + private Float positionY; + + public String getAcrossPageMode() { + return acrossPageMode; + } + + public void setAcrossPageMode(String acrossPageMode) { + this.acrossPageMode = acrossPageMode; + } + + public String getPositionPage() { + return positionPage; + } + + public void setPositionPage(String positionPage) { + this.positionPage = positionPage; + } + + public Float getPositionX() { + return positionX; + } + + public void setPositionX(Float positionX) { + this.positionX = positionX; + } + + public Float getPositionY() { + return positionY; + } + + public void setPositionY(Float positionY) { + this.positionY = positionY; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignFile.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignFile.java new file mode 100644 index 0000000..cb7218c --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignFile.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.assetstenant.po; + +public class SignFile { + private String fileName; + private String fileId; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowConfig.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowConfig.java new file mode 100644 index 0000000..b8c2a55 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowConfig.java @@ -0,0 +1,127 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class SignFlowConfig { + private String signFlowTitle; + private Long signFlowExpireTime; + private Boolean autoStart; + private Boolean autoFinish; + private Boolean identifyVerify; + private String notifyUrl; + private Map redirectConfig; + private Map signConfig; + private Map noticeConfig; + private Map authConfig; + private Map contractConfig; + private List contractGroupIds; + private Boolean docsViewLimited; + + public String getSignFlowTitle() { + return signFlowTitle; + } + + public void setSignFlowTitle(String signFlowTitle) { + this.signFlowTitle = signFlowTitle; + } + + public Long getSignFlowExpireTime() { + return signFlowExpireTime; + } + + public void setSignFlowExpireTime(Long signFlowExpireTime) { + this.signFlowExpireTime = signFlowExpireTime; + } + + public Boolean getAutoStart() { + return autoStart; + } + + public void setAutoStart(Boolean autoStart) { + this.autoStart = autoStart; + } + + public Boolean getAutoFinish() { + return autoFinish; + } + + public void setAutoFinish(Boolean autoFinish) { + this.autoFinish = autoFinish; + } + + public Boolean getIdentifyVerify() { + return identifyVerify; + } + + public void setIdentifyVerify(Boolean identifyVerify) { + this.identifyVerify = identifyVerify; + } + + public String getNotifyUrl() { + return notifyUrl; + } + + public void setNotifyUrl(String notifyUrl) { + this.notifyUrl = notifyUrl; + } + + public Map getRedirectConfig() { + return redirectConfig; + } + + public void setRedirectConfig(Map redirectConfig) { + this.redirectConfig = redirectConfig; + } + + public Map getSignConfig() { + return signConfig; + } + + public void setSignConfig(Map signConfig) { + this.signConfig = signConfig; + } + + public Map getNoticeConfig() { + return noticeConfig; + } + + public void setNoticeConfig(Map noticeConfig) { + this.noticeConfig = noticeConfig; + } + + public Map getAuthConfig() { + return authConfig; + } + + public void setAuthConfig(Map authConfig) { + this.authConfig = authConfig; + } + + public Map getContractConfig() { + return contractConfig; + } + + public void setContractConfig(Map contractConfig) { + this.contractConfig = contractConfig; + } + + public List getContractGroupIds() { + return contractGroupIds; + } + + public void setContractGroupIds(List contractGroupIds) { + this.contractGroupIds = contractGroupIds; + } + + public Boolean getDocsViewLimited() { + return docsViewLimited; + } + + public void setDocsViewLimited(Boolean docsViewLimited) { + this.docsViewLimited = docsViewLimited; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowInitiator.java b/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowInitiator.java new file mode 100644 index 0000000..b28cc28 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/SignFlowInitiator.java @@ -0,0 +1,37 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class SignFlowInitiator { + + private OrgInitiator orgInitiator; + private PsnInitiator psnInitiator; + private List initialRemarks; + + public PsnInitiator getPsnInitiator() { + return psnInitiator; + } + + public void setPsnInitiator(PsnInitiator psnInitiator) { + this.psnInitiator = psnInitiator; + } + + public List getInitialRemarks() { + return initialRemarks; + } + + public void setInitialRemarks(List initialRemarks) { + this.initialRemarks = initialRemarks; + } + + public OrgInitiator getOrgInitiator() { + return orgInitiator; + } + + public void setOrgInitiator(OrgInitiator orgInitiator) { + this.orgInitiator = orgInitiator; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/Signer.java b/src/main/java/com/seeyon/apps/assetstenant/po/Signer.java new file mode 100644 index 0000000..9176dd6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/Signer.java @@ -0,0 +1,64 @@ +package com.seeyon.apps.assetstenant.po; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; +import java.util.Map; + +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class Signer { + private int signerType; + private Map signConfig; + private Map noticeConfig; + private Map orgSignerInfo; + private Map psnSignerInfo; + private List signFields; + + public int getSignerType() { + return signerType; + } + + public void setSignerType(int signerType) { + this.signerType = signerType; + } + + public Map getNoticeConfig() { + return noticeConfig; + } + + public void setNoticeConfig(Map noticeConfig) { + this.noticeConfig = noticeConfig; + } + + public Map getOrgSignerInfo() { + return orgSignerInfo; + } + + public void setOrgSignerInfo(Map orgSignerInfo) { + this.orgSignerInfo = orgSignerInfo; + } + + public Map getPsnSignerInfo() { + return psnSignerInfo; + } + + public void setPsnSignerInfo(Map psnSignerInfo) { + this.psnSignerInfo = psnSignerInfo; + } + + public List getSignFields() { + return signFields; + } + + public void setSignFields(List signFields) { + this.signFields = signFields; + } + + public Map getSignConfig() { + return signConfig; + } + + public void setSignConfig(Map signConfig) { + this.signConfig = signConfig; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/TemplateComponent.java b/src/main/java/com/seeyon/apps/assetstenant/po/TemplateComponent.java new file mode 100644 index 0000000..6a38415 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/TemplateComponent.java @@ -0,0 +1,31 @@ +package com.seeyon.apps.assetstenant.po; + +public class TemplateComponent { + private String componentId; + private String componentKey; + private String componentValue; + + public String getComponentId() { + return componentId; + } + + public void setComponentId(String componentId) { + this.componentId = componentId; + } + + public String getComponentKey() { + return componentKey; + } + + public void setComponentKey(String componentKey) { + this.componentKey = componentKey; + } + + public String getComponentValue() { + return componentValue; + } + + public void setComponentValue(String componentValue) { + this.componentValue = componentValue; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/TemplateInfo.java b/src/main/java/com/seeyon/apps/assetstenant/po/TemplateInfo.java new file mode 100644 index 0000000..5378daf --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/TemplateInfo.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.assetstenant.po; + +public class TemplateInfo { + private String signTemplateName; + private String signTemplateId; + + public String getSignTemplateName() { + return signTemplateName; + } + + public void setSignTemplateName(String signTemplateName) { + this.signTemplateName = signTemplateName; + } + + public String getSignTemplateId() { + return signTemplateId; + } + + public void setSignTemplateId(String signTemplateId) { + this.signTemplateId = signTemplateId; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/po/Transactor.java b/src/main/java/com/seeyon/apps/assetstenant/po/Transactor.java new file mode 100644 index 0000000..a209cd6 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/po/Transactor.java @@ -0,0 +1,13 @@ +package com.seeyon.apps.assetstenant.po; + +public class Transactor { + private String psnId; + + public String getPsnId() { + return psnId; + } + + public void setPsnId(String psnId) { + this.psnId = psnId; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/reserve/ReservationVo.java b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReservationVo.java new file mode 100644 index 0000000..3c6fabb --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReservationVo.java @@ -0,0 +1,94 @@ +package com.seeyon.apps.assetstenant.reserve; + +public class ReservationVo { + private String openId; + private String id; //id + private String date; //预约时间 + private String status; //状态 + private String assetName; //资产名称 + private String assetAddress; //资产地址 + private String managerName; //管理员姓名 + private String managerPhone; //管理员电话 + private String lat; //纬度 + private String lng; //经度 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getAssetName() { + return assetName; + } + + public void setAssetName(String assetName) { + this.assetName = assetName; + } + + public String getAssetAddress() { + return assetAddress; + } + + public void setAssetAddress(String assetAddress) { + this.assetAddress = assetAddress; + } + + public String getManagerName() { + return managerName; + } + + public void setManagerName(String managerName) { + this.managerName = managerName; + } + + public String getManagerPhone() { + return managerPhone; + } + + public void setManagerPhone(String managerPhone) { + this.managerPhone = managerPhone; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java new file mode 100644 index 0000000..fbf2787 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/reserve/ReserveService.java @@ -0,0 +1,106 @@ +package com.seeyon.apps.assetstenant.reserve; + +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.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.utils.form.*; +import com.seeyon.v3x.services.form.FormFactory; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; + +public class ReserveService { + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + private FormFactory factory = (FormFactory) AppContext.getBean("formFactory"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.RESERVE_FORMNO); + } + private TableContext getMasterTableContext() throws BusinessException { + return FormTableExecutor.master(getFormNo()); + } + + public PageQueryVo pageQuery(JSONObject params) throws Exception { + List conditions = buildConditions(params); + Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); + Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + List vos = new ArrayList<>(); + PageQueryVo pageQueryVo = new PageQueryVo(); + 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; + ReservationVo vo = new ReservationVo(); + fillVo(map,vo); + vos.add(vo); + } + pageQueryVo.setDatas(vos); + pageQueryVo.setTotalCount(count); + } + return pageQueryVo; + } + + private String getStringValue(Map fieldsMap,String key) { + Object o = fieldsMap.get(key); + if(o == null) { + return null; + } + return o + ""; + } + + public Integer countHandling(JSONObject params) throws BusinessException { + List conditions = buildConditions(params); + TableContext tableContext = getMasterTableContext(); + conditions.add(FormWhereCondition.build().display("处理状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"处理状态","未处理"))); + 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); + if(oaAssetsVo != null) { + vo.setAssetName(oaAssetsVo.getAssetsName()); + vo.setAssetAddress(oaAssetsVo.getAssetsAddress()); + vo.setManagerName(oaAssetsVo.getManagerName()); + vo.setManagerPhone(oaAssetsVo.getManagerPhone()); + vo.setLat(oaAssetsVo.getLatitude()); + vo.setLng(oaAssetsVo.getLongitude()); + } + vo.setId(getStringValue(fieldsMap,"id")); + vo.setOpenId(getStringValue(fieldsMap,"微信openId")); + vo.setDate(getStringValue(fieldsMap,"预约时间")); + String status = "已处理".equals(fieldsMap.get("处理状态")) ? "done" : "pending"; + vo.setStatus(status); + } + + public void saveReserve(JSONObject params) throws Exception { + Map mainFormData = new HashMap<>(); + mainFormData.put("资产编号", params.getString("assetsNo")); + mainFormData.put("资产名称", params.getString("assetsName")); + mainFormData.put("看房人姓名", params.getString("reserveName")); + mainFormData.put("看房人手机号", params.getString("phone")); + mainFormData.put("微信openId", params.getString("openId")); + mainFormData.put("预约时间", params.getString("reserveTime")); + String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); + mainFormData.put("档案编号",docNo); + mainFormData.put("处理状态", EnumMapUtils.getEnumItemValueByDisplayValue(getMasterTableContext().getTableBean(), "处理状态", "未处理")); + String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); + } + + private List buildConditions(JSONObject params) { + List conditions = new ArrayList<>(); + if(StringUtils.isNotBlank(params.getString("openId"))){ + conditions.add(FormWhereCondition.build().display("微信openId").value(params.getString("openId"))); + } + return conditions; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/service/WeAppContractSyncService.java b/src/main/java/com/seeyon/apps/assetstenant/service/WeAppContractSyncService.java new file mode 100644 index 0000000..623540f --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/service/WeAppContractSyncService.java @@ -0,0 +1,12 @@ +package com.seeyon.apps.assetstenant.service; + +import org.springframework.stereotype.Service; + + +public class WeAppContractSyncService { + + public void syncContract() { + // TODO: 同步合同信息到微信小程序 + + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/AESUtils.java b/src/main/java/com/seeyon/apps/assetstenant/utils/AESUtils.java new file mode 100644 index 0000000..8e31433 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/AESUtils.java @@ -0,0 +1,67 @@ +package com.seeyon.apps.assetstenant.utils; + +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import java.security.Key; +import java.security.SecureRandom; + +public class AESUtils { + public static final String encrypt(String oristr, String key) { + Key secretKey = getKey(key); + + try { + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(1, secretKey); + byte[] p = oristr.getBytes("UTF-8"); + byte[] result = cipher.doFinal(p); + BASE64Encoder encoder = new BASE64Encoder(); + String encoded = encoder.encode(result); + return encoded; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static final String decrypt(String cipherText, String key) { + Key secretKey = getKey(key); + + try { + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(2, secretKey); + BASE64Decoder decoder = new BASE64Decoder(); + byte[] c = decoder.decodeBuffer(cipherText); + byte[] result = cipher.doFinal(c); + String plainText = new String(result, "UTF-8"); + return plainText; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static Key getKey(String keySeed) { + if (keySeed == null) { + keySeed = System.getenv("AES_SYS_KEY"); + } + + if (keySeed == null) { + keySeed = System.getProperty("AES_SYS_KEY"); + } + + if (keySeed == null || keySeed.trim().length() == 0) { + keySeed = "abcd1234!@#$"; + } + + try { + SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); + secureRandom.setSeed(keySeed.getBytes()); + KeyGenerator generator = KeyGenerator.getInstance("AES"); + generator.init(secureRandom); + return generator.generateKey(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/AttachmentUtils.java b/src/main/java/com/seeyon/apps/assetstenant/utils/AttachmentUtils.java new file mode 100644 index 0000000..77b8f00 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/AttachmentUtils.java @@ -0,0 +1,17 @@ +package com.seeyon.apps.assetstenant.utils; + + +import java.util.ArrayList; +import java.util.List; + +public class AttachmentUtils { + + public void fileFillBack(String url,String fileName,String loginName,String unitName,String tableName,String updateField,String formId,String formNo) throws Exception { + String refId = FileUtil.uploadContractToOA(url, fileName, formId, loginName, unitName); + if(formNo != null) { + + }else { + + } + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/EnHancedMap.java b/src/main/java/com/seeyon/apps/assetstenant/utils/EnHancedMap.java new file mode 100644 index 0000000..d906561 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/EnHancedMap.java @@ -0,0 +1,17 @@ +package com.seeyon.apps.assetstenant.utils; + +import java.util.Map; + +public class EnHancedMap { + + private Map map; + + public EnHancedMap of(String key, Object value) { + map.put(key, value); + return this; + } + + public Map getMap() { + return map; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/FileUtil.java b/src/main/java/com/seeyon/apps/assetstenant/utils/FileUtil.java new file mode 100644 index 0000000..78ad4fc --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/FileUtil.java @@ -0,0 +1,517 @@ +package com.seeyon.apps.assetstenant.utils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +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.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.FileUploadExporter; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import www.seeyon.com.utils.StringUtil; +import www.seeyon.com.utils.UUIDUtil; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; + +public class FileUtil { + + private static final long MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB + private static final String TEMP_DIR = System.getProperty("java.io.tmpdir") + File.separator + "seeyontempfile"; + private static final String DEFAULT_FILENAME_PREFIX = "没有文件名_"; + private static final String CATEGORY_CODE = "66"; + private FileManager fileManager; + + public void setFileManager(FileManager fileManager) { + this.fileManager = fileManager; + } + + public FileManager getFileManager() { + if (fileManager == null) { + fileManager = (FileManager) AppContext.getBean("fileManager"); + } + return fileManager; + } + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManager() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + public void isFilePath(String filePath) { + File directory = new File(filePath); + if (!directory.exists()) { + directory.mkdirs(); + } + + } + + + /** + * 上传附件 + * + * @param fileNames + * @throws Exception + * @throws NumberFormatException + */ + public List fileUpload(List fileNames, String summaryId, Long memberId, Long accountId) throws NumberFormatException, Exception { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// List> lists = dataDao.findAttachAll(id); + FileUploadExporter fileUpload = new FileUploadExporter(); + List attachments = new ArrayList(); + File f = null; + long l = UUIDUtil.getUUIDLong(); + for (int i = 0; i < fileNames.size(); i++) { + String fileName = fileNames.get(i); + if (StringUtils.isNotEmpty(fileName)) { + f = new File(fileName); + if (!f.exists()) { + return null; + } + if (f.length() > 102400000) { + return null; + } + } + String[] strs = new String[]{f.getAbsolutePath()}; + String s = fileUpload.processUpload(strs); + +// if(StringUtils.isNotEmpty(s)) { + Map map = new HashMap(); + String attachName = f.getName(); + String[] suffixNames = attachName.split("\\."); + map.put("type", "0"); + map.put("fileUrl", s); + map.put("mimeType", "application/" + suffixNames[suffixNames.length - 1].toLowerCase()); +// if(suffixNames[suffixNames.length-1].equals("docx")) { +// map.put("mimeType", "application/docx"); +// }else { +// map.put("mimeType", "image/png"); +// } + map.put("size", f.length() + ""); +// System.out.println(beanId); + + map.put("subReference", l + ""); + map.put("category", "66"); + map.put("createdate", sdf.format(new Date())); + map.put("filename", f.getName()); + map.put("reference", summaryId); + Attachment attachment = new Attachment(map); + + attachments.add(attachment); + } + +// } + String str = getAttachmentManager().create(attachments, memberId, accountId); +// attachmentManager.create(attachments); +// System.out.println(str); + return attachments; + } + + + public List fieldFileDownload(Long refId, String path) throws BusinessException { +// 判断路径是否存在 + File file = new File(path); + if (!file.exists()) { + file.mkdirs(); + } + List fileUrls = getAttachmentManager().getBySubReference(refId); + System.out.println(fileUrls.size()); + List filepaths = new ArrayList<>(); + for (Long fileUrl : fileUrls) { + Attachment attachment = getAttachmentManager().getAttachmentByFileURL(fileUrl); + InputStream inputStream = getFileManager().getFileInputStream(attachment.getFileUrl()); + String filepath = path + attachment.getFilename(); + try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filepath))) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + filepaths.add(filepath); + } + return filepaths; + } + + + public JSONArray getFileContent(String filePath) throws IOException { + JSONArray jsonArray = new JSONArray(); + String houzhui = filePath.substring(filePath.lastIndexOf(".") + 1); + // 创建文件输入流 + FileInputStream file = new FileInputStream(new File(filePath)); + // 创建工作簿对象 + Workbook workbook; + System.out.println("当前文件为"+houzhui+"后缀"); + if ("xlsx".equals(houzhui) || "XLSX".equals(houzhui)) { + workbook = new XSSFWorkbook(file); + } else { + workbook = new HSSFWorkbook(file); + } + // 获取第一个工作表 + Sheet sheet = workbook.getSheetAt(0); + // 迭代行 + Iterator rowIterator = sheet.iterator(); +// 根据行跳过设置 + row : while (rowIterator.hasNext()) { + Row row = rowIterator.next(); + if (row.getRowNum() < 2) { + continue; + } + int num = 0; + int bj = 0; + JSONObject jsonObject = new JSONObject(); + JSONArray SPS = new JSONArray(); + JSONObject SP = new JSONObject(); + boolean isddh = false; + + // 迭代单元格 + Iterator cellIterator = row.cellIterator(); + cell : while (cellIterator.hasNext()) { +// 获取单元格对象 + Cell cell = cellIterator.next(); +// 单元格索引为1的数据(订单号) + if (cell.getColumnIndex() == 1) { + String ddh = ""; + switch (cell.getCellType()) { + case STRING: + ddh = cell.getStringCellValue(); + break; + case NUMERIC: + ddh = cell.getNumericCellValue()+""; + break; + default: + ddh = ""; + } +// 如果当前订单号为空,则跳过当前行数据 +// 查询当前订单号是否已经存在 + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject json = jsonArray.getJSONObject(i); + if (ddh.equals(json.getString("DDH"))) { +// 订单号已经存在 + bj = i; + isddh = true; + jsonObject = json; + SPS = jsonObject.getJSONArray("SPS"); + } else { + num++; + } + } + if (num == jsonArray.size()) { +// switch (cell.getCellType()) { +// case STRING: + jsonObject.put("DDH",ddh); +// break; +// case NUMERIC: +// jsonObject.put("DDH", cell.getNumericCellValue()); +// break; +// default: +// jsonObject.put("DDH", ""); +// } +//// jsonObject.put("DDH", cell.getStringCellValue()); + } + } + switch (cell.getColumnIndex()) { + case 3: + if (!isddh) { + switch (cell.getCellType()) { + case STRING: + jsonObject.put("GMFMC", cell.getStringCellValue()); + break; + case NUMERIC: + jsonObject.put("GMFMC", cell.getNumericCellValue()); + break; + default: + jsonObject.put("GMFMC", ""); + } + } + break; + case 4: + if (!isddh) { + switch (cell.getCellType()) { + case STRING: + jsonObject.put("GMFNSRSBH", cell.getStringCellValue()); + break; + case NUMERIC: + jsonObject.put("GMFNSRSBH", cell.getNumericCellValue()); + break; + default: + jsonObject.put("GMFNSRSBH", ""); + } + } + break; + case 5: + if (!isddh) { + switch (cell.getCellType()) { + case STRING: + jsonObject.put("GMFYX", cell.getStringCellValue()); + break; + case NUMERIC: + jsonObject.put("GMFYX", cell.getNumericCellValue()); + break; + default: + jsonObject.put("GMFYX", ""); + } + } + break; + case 6: + if (!isddh) { + switch (cell.getCellType()) { + case STRING: + jsonObject.put("GMFSJ", cell.getStringCellValue()); + break; + case NUMERIC: + jsonObject.put("GMFSJ", cell.getNumericCellValue()); + break; + default: + jsonObject.put("GMFSJ", ""); + } + } + break; + case 17: + if (!isddh) { + switch (cell.getCellType()) { + case STRING: + jsonObject.put("BZ", cell.getStringCellValue()); + break; + case NUMERIC: + jsonObject.put("BZ", cell.getNumericCellValue()); + break; + default: + jsonObject.put("BZ", ""); + } + } + break; + case 2: + switch (cell.getCellType()) { + case STRING: + SP.put("FXHXZ", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("FXHXZ", cell.getNumericCellValue()); + break; + default: + SP.put("FXHXZ", ""); + } + break; + case 7: + switch (cell.getCellType()) { + case STRING: + SP.put("XMMC", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("XMMC", cell.getNumericCellValue()); + break; + default: + SP.put("XMMC", ""); + } + break; + case 8: + switch (cell.getCellType()) { + case STRING: + SP.put("SPBM", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("SPBM", cell.getNumericCellValue()); + break; + default: + SP.put("SPBM", ""); + } + break; + case 9: + switch (cell.getCellType()) { + case STRING: + SP.put("GGXH", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("GGXH", cell.getNumericCellValue()); + break; + default: + SP.put("GGXH", ""); + } + break; + case 10: + switch (cell.getCellType()) { + case STRING: + SP.put("DW", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("DW", cell.getNumericCellValue()); + break; + default: + SP.put("DW", ""); + } + break; + case 11: + switch (cell.getCellType()) { + case STRING: + SP.put("NUM", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("NUM", cell.getNumericCellValue()); + break; + default: + SP.put("NUM", ""); + } + break; + case 12: + switch (cell.getCellType()) { + case STRING: + SP.put("SPDJ", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("SPDJ", cell.getNumericCellValue()); + break; + default: + SP.put("SPDJ", ""); + } + break; + case 13: + switch (cell.getCellType()) { + case STRING: + SP.put("JE", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("JE", cell.getNumericCellValue()); + break; + default: + SP.put("JE", ""); + } + break; + case 14: + switch (cell.getCellType()) { + case STRING: + SP.put("SL", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("SL", cell.getNumericCellValue()); + break; + default: + SP.put("SL", ""); + } + break; + case 15: + switch (cell.getCellType()) { + case STRING: + SP.put("ZKJE", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("ZKJE", cell.getNumericCellValue()); + break; + default: + SP.put("ZKJE", ""); + } + break; + case 16: + switch (cell.getCellType()) { + case STRING: + SP.put("YHZCBS", cell.getStringCellValue()); + break; + case NUMERIC: + SP.put("YHZCBS", cell.getNumericCellValue()); + break; + default: + SP.put("YHZCBS", ""); + } + break; + } + } + if(StringUtil.isEmpty(jsonObject.getString("DDH"))){ + continue row; + } + SPS.add(SP); + jsonObject.put("SPS", SPS); + if (num == jsonArray.size()) { + jsonArray.add(jsonObject); + } else { + jsonArray.set(bj, jsonObject); + } + } + // 关闭工作簿 + workbook.close(); + file.close(); + return jsonArray; + } + + public JSONArray getFileContent(long fileId) throws IOException { + System.out.println("获取参数附件ID"+fileId); +// 附件路径 + String path = SystemEnvironment.getApplicationFolder()+"/hxinvoiceFile/"+fileId+"/"; + System.out.println("文件下载路径"+path); + List fileUrls = getAttachmentManager().getBySubReference(fileId); + Attachment attachment = getAttachmentManager().getAttachmentByFileURL(fileUrls.get(0)); + String filePath = path+attachment.getFilename(); + JSONArray jsonArray = getFileContent(filePath); + return jsonArray; + } + + + public static String uploadContractToOA(String url,String fileName, String formId, String loginName, String updateAccountName) throws Exception { + + OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + V3xOrgMember member = orgManager.getMemberByLoginName(loginName); + V3xOrgAccount account = orgManager.getAccountByName(updateAccountName); + + File tempDir = new File(TEMP_DIR); + if (!tempDir.exists()) { + tempDir.mkdirs(); + } + String savePath = TEMP_DIR + File.separator + fileName; + HttpClient.httpDownloadFile(url, null,savePath,"ITF-8"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + String refId = String.valueOf(Math.abs(UUID.randomUUID().getLeastSignificantBits())); + FileUploadExporter fileUpload = new FileUploadExporter(); + List attachments = new ArrayList<>(); + + File file = new File(savePath); + if (file.exists() && file.length() <= MAX_FILE_SIZE) { + String uploadedPath = fileUpload.processUpload(new String[]{file.getAbsolutePath()}); + Map attachMeta = new HashMap<>(); + attachMeta.put("type", "0"); + attachMeta.put("fileUrl", uploadedPath); + attachMeta.put("size", String.valueOf(file.length())); + attachMeta.put("subReference", refId); + attachMeta.put("category", CATEGORY_CODE); + attachMeta.put("createdate", sdf.format(new Date())); + attachMeta.put("filename", fileName); + attachMeta.put("reference", formId); + attachMeta.put("mimeType", "application/" + "pdf"); + attachments.add(new Attachment(attachMeta)); + } + if (attachments.isEmpty()) return null; + AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + attachmentManager.create(attachments, member.getId(), account.getId()); + file.delete(); + return refId; + } + + private static boolean isBlank(String str) { + return str == null || str.trim().isEmpty(); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/HmacSHA256Util.java b/src/main/java/com/seeyon/apps/assetstenant/utils/HmacSHA256Util.java new file mode 100644 index 0000000..1be581b --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/HmacSHA256Util.java @@ -0,0 +1,27 @@ +package com.seeyon.apps.assetstenant.utils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +public class HmacSHA256Util { + public static String encrypt(String data, String key) + throws NoSuchAlgorithmException, InvalidKeyException { + Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); + SecretKeySpec secret_key = new SecretKeySpec( + key.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + sha256_HMAC.init(secret_key); + byte[] hash = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(hash); + } + + public static void main(String[] args) throws Exception { + String data = "Hello World"; + String key = "secret"; + String result = encrypt(data, key); + System.out.println("HmacSHA256加密结果: " + result); + } +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/HttpClient.java b/src/main/java/com/seeyon/apps/assetstenant/utils/HttpClient.java new file mode 100644 index 0000000..dbb086a --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/HttpClient.java @@ -0,0 +1,483 @@ +package com.seeyon.apps.assetstenant.utils; + +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.*; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.*; +import java.nio.charset.Charset; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @ClassName: HttpClient + * @Description: HTTP请求工具类 + * @Author: GiikJc + * @Date: 2022/7/12 15:03 + */ + +/** + * 发送Get请求:HttpResponse httpGet(String url,Map headers,String encode) + *发送Post请求,同表单Post提交:HttpResponse httpPostForm(String url,Map params, Map headers,String encode) + *发送Post Raw请求:HttpResponse httpPostRaw(String url,String stringJson,Map headers, String encode) + *发送Put Raw请求:HttpResponse httpPutRaw(String url,String stringJson,Map headers, String encode) + *发送Delete请求:HttpResponse httpDelete(String url,Map headers,String encode) + */ +public class HttpClient { + + /** + * 发送 HTTP GET 请求下载文件 + * @param url 下载文件的 URL + * @param headers 请求头 + * @param savePath 文件保存的路径 + * @param encode 文件内容的编码 + * @return 下载成功返回 true,失败返回 false + */ + public static boolean httpDownloadFile(String url, Map headers, String savePath, String encode) { + if (encode == null) { + encode = "utf-8"; // 默认字符编码 + } + + CloseableHttpClient httpClient = null; + CloseableHttpResponse httpResponse = null; + InputStream inputStream = null; + OutputStream outputStream = null; + + try { + // 创建 HttpClient 实例 + httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + + // 设置请求头 + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + + // 执行请求 + httpResponse = httpClient.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + + // 检查响应状态码 + if (httpResponse.getStatusLine().getStatusCode() == 200) { + inputStream = entity.getContent(); + + // 创建输出流,将文件保存到本地 + outputStream = new FileOutputStream(savePath); + + // 设置缓冲区 + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + // 文件下载成功 + return true; + } else { + System.out.println("Download failed, HTTP error code: " + httpResponse.getStatusLine().getStatusCode()); + return false; + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + if (httpResponse != null) { + httpResponse.close(); + } + if (httpClient != null) { + httpClient.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 对queryString参数按key进行字典序升序排序 + * @param queryString 原始参数字符串,如"b=2&a=1&c=3" + * @return 排序后的字符串,如"a=1&b=2&c=3" + */ + public static String sortQueryString(String queryString) { + if (queryString == null || queryString.isEmpty()) { + return queryString; + } + + String[] pairs = queryString.split("&"); + Map params = new TreeMap<>(); + + for (String pair : pairs) { + String[] kv = pair.split("="); + if (kv.length == 2) { + params.put(kv[0], kv[1]); + } else if (kv.length == 1) { + params.put(kv[0], ""); + } + } + + return params.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining("&")); + } + /** + * 发送http get请求 + */ + public static String httpGet(String url,Map headers,String encode){ + + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + closeableHttpClient = HttpClientBuilder.create().build(); + HttpGet httpGet = new HttpGet(url); + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpGet.setHeader(entry.getKey(),entry.getValue()); + } + } + + httpResponse = closeableHttpClient.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + /** + * 发送 http post 请求,参数以form表单键值对的形式提交。 + */ + public static String httpPostForm(String url,Map params, Map headers,String encode){ + + if(encode == null){ + encode = "utf-8"; + } + + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + List paramList = new ArrayList (); + if(params != null && params.size() > 0){ + Set keySet = params.keySet(); + for(String key : keySet) { + paramList.add(new BasicNameValuePair(key, params.get(key))); + } + } + httpost.setEntity(new UrlEncodedFormEntity(paramList, encode)); + + + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http post 请求,参数以原生字符串进行提交 + * @param url + * @param encode + * @return + */ + public static String httpPostRaw(String url,String stringJson,Map headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + httpost.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpost.setEntity(stringEntity); + + + //响应信息 + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http put 请求,参数以原生字符串进行提交 + * @param url + * @param encode + * @return + */ + public static String httpPutRaw(String url,String stringJson,Map headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPut httpput = new HttpPut(url); + + //设置header + httpput.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpput.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpput.setEntity(stringEntity); + //响应信息 + httpResponse = closeableHttpClient.execute(httpput); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + closeableHttpClient.close(); //关闭连接、释放资源 + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + /** + * 发送http delete请求 + */ + public static String httpDelete(String url,Map headers,String encode){ + if(encode == null){ + encode = "utf-8"; + } + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + //since 4.3 不再使用 DefaultHttpClient + closeableHttpClient = HttpClientBuilder.create().build(); + HttpDelete httpdelete = new HttpDelete(url); + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpdelete.setHeader(entry.getKey(),entry.getValue()); + } + } + + httpResponse = closeableHttpClient.execute(httpdelete); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http post 请求,支持文件上传 + */ + public static String httpPostFormMultipart(String url,Map params, List files,Map headers,String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create(); + mEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + mEntityBuilder.setCharset(Charset.forName(encode)); + + // 普通参数 + ContentType contentType = ContentType.create("text/plain",Charset.forName(encode));//解决中文乱码 + if (params != null && params.size() > 0) { + Set keySet = params.keySet(); + for (String key : keySet) { + mEntityBuilder.addTextBody(key, params.get(key),contentType); + } + } + //二进制参数 + if (files != null && files.size() > 0) { + for (File file : files) { + mEntityBuilder.addBinaryBody("file", file); + } + } + httpost.setEntity(mEntityBuilder.build()); + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + + public static String uploadBinaryFile(String url, Map headers, + InputStream io, String fileName) throws IOException { + + CloseableHttpClient client = HttpClients.createDefault(); + HttpPut put = new HttpPut(url); + String responseBody = null; + + try { + // 设置请求头 + for (String key : headers.keySet()) { + put.addHeader(key, headers.get(key)); + } + + // 构建多部分实体 + MultipartEntityBuilder builder = MultipartEntityBuilder.create() + .setMode(HttpMultipartMode.BROWSER_COMPATIBLE) + .setCharset(Charset.forName("UTF-8")); + builder.addBinaryBody("file", io, ContentType.MULTIPART_FORM_DATA, fileName); + + put.setEntity(builder.build()); + + // 执行请求 + CloseableHttpResponse response = null; + try { + response = client.execute(put); + HttpEntity resEntity = response.getEntity(); + responseBody = EntityUtils.toString(resEntity, "UTF-8"); + + // 无论状态码如何,都返回响应体 + return responseBody; + + } finally { + if(response != null) { + response.close(); + } + } + } finally { + client.close(); + io.close(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/utils/JsonCleaner.java b/src/main/java/com/seeyon/apps/assetstenant/utils/JsonCleaner.java new file mode 100644 index 0000000..e4b57d3 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/utils/JsonCleaner.java @@ -0,0 +1,28 @@ +package com.seeyon.apps.assetstenant.utils; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.util.Iterator; +import java.util.Map; + +public class JsonCleaner { + + public static String removeEmptyObjects(String jsonStr) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode node = (ObjectNode) mapper.readTree(jsonStr); + + Iterator> fields = node.fields(); + while (fields.hasNext()) { + Map.Entry entry = fields.next(); + if (entry.getValue().isObject() && entry.getValue().isEmpty()) { + fields.remove(); + } + } + + return mapper.writeValueAsString(node); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java b/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java new file mode 100644 index 0000000..7fc1c5a --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/viewrecord/ViewRecordService.java @@ -0,0 +1,41 @@ +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.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; +import com.seeyon.utils.form.FormSaveUtil; +import com.seeyon.v3x.services.form.FormFactory; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class ViewRecordService extends BaseResource { + + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + private FormFactory factory = (FormFactory) AppContext.getBean("formFactory"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.VIEWRECORD_FORMNO); + } + + public void record(JSONObject params) throws Exception { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Map mainFormData = new HashMap<>(); + mainFormData.put("资产编号", params.getString("assetsNo")); + mainFormData.put("资产名称", params.getString("assetsName")); + mainFormData.put("浏览人手机号", params.getString("phone")); + String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); + mainFormData.put("档案编号",docNo); + mainFormData.put("浏览时间",df.format(new Date())); + String loginName = configProvider.getBizConfigByKey(RentConstants.formLoginName); + FormSaveUtil.formSave(loginName,getFormNo(),factory,mainFormData,null); + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/weappconfig/AssetsSearchFilterCondition.java b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/AssetsSearchFilterCondition.java new file mode 100644 index 0000000..fc34d8b --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/AssetsSearchFilterCondition.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.assetstenant.weappconfig; + +import java.util.List; + +public class AssetsSearchFilterCondition { + private String name; + private String type; + private String value; + private List submenu; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public List getSubmenu() { + return submenu; + } + + public void setSubmenu(List submenu) { + this.submenu = submenu; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/weappconfig/BannerConfigVo.java b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/BannerConfigVo.java new file mode 100644 index 0000000..bd86bb3 --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/BannerConfigVo.java @@ -0,0 +1,51 @@ +package com.seeyon.apps.assetstenant.weappconfig; + +import com.seeyon.apps.assetstenant.file.OaFileVo; + +public class BannerConfigVo { + private String formId; //表单ID + private OaFileVo img; //图片 + private String showStatus; //显示状态 + private String order; //所属顺序 + private String link; //点击后跳转的路径 + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public OaFileVo getImg() { + return img; + } + + public void setImg(OaFileVo img) { + this.img = img; + } + + public String getShowStatus() { + return showStatus; + } + + public void setShowStatus(String showStatus) { + this.showStatus = showStatus; + } + + public String getOrder() { + return order; + } + + public void setOrder(String order) { + this.order = order; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } +} diff --git a/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java new file mode 100644 index 0000000..d2c1c5b --- /dev/null +++ b/src/main/java/com/seeyon/apps/assetstenant/weappconfig/WeAppConfigService.java @@ -0,0 +1,82 @@ +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.file.OaFileVo; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.utils.form.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +public class WeAppConfigService { + + private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); + + private String getFormNo() { + return configProvider.getBizConfigByKey(RentConstants.WEAPPCONFIGFORMNO); + } + + private TableContext getMasterTableContext() throws BusinessException { + return FormTableExecutor.master(getFormNo()); + } + + private TableContext getSubTableContext(String subTableName) throws BusinessException { + return FormTableExecutor.sub(getFormNo(),subTableName); + } + + public List queryBannerConfig() throws BusinessException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("配置类型").value("BANNER")); + List formColumns = FormTableExecutor.query(getMasterTableContext(), null, conditions, true); + List bannerConfigVos = new ArrayList<>(); + if(formColumns == null || formColumns.isEmpty()) { + return null; + } + for (FormColumn formColumn : formColumns) { + Map fieldsMap = formColumn.getFieldsMap(); + if(fieldsMap == null) { + continue; + } + BannerConfigVo bannerConfigVo = new BannerConfigVo(); + if(fieldsMap.get("图片") != null) { + bannerConfigVo.setImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("图片")),attachmentManager)); + } + bannerConfigVo.setFormId(formColumn.getId()); + bannerConfigVo.setShowStatus((String)fieldsMap.get("显示状态")); + bannerConfigVo.setOrder((String)fieldsMap.get("显示顺序")); + bannerConfigVo.setLink((String)fieldsMap.get("跳转地址")); + bannerConfigVos.add(bannerConfigVo); + } + return bannerConfigVos; + } + + public List getAssetsTypeList() throws BusinessException { + TableContext tableContext = getMasterTableContext(); + Set sets = EnumMapUtils.getEnumItemValues(tableContext.getTableBean(), "资产类型"); + return new ArrayList<>(sets); + } + + public List getFilterConditions() throws BusinessException { + List filterConditions = new ArrayList<>(); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("配置类型").value("ASSETSFILTER")); + List formColumns = FormTableExecutor.query(getMasterTableContext(), null, conditions, true); + if(formColumns.isEmpty()){ + return filterConditions; + } + FormColumn formColumn = formColumns.get(0); + Map fieldsMap = formColumn.getFieldsMap(); + String configJson = (String)fieldsMap.get("查询过滤条件配置"); + filterConditions = JsonUtils.parseObject(configJson, new TypeReference>() {}); + return filterConditions; + } +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/AssetsQueryResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/AssetsQueryResource.java new file mode 100644 index 0000000..25a0dcb --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/AssetsQueryResource.java @@ -0,0 +1,75 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.assets.AssetsService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import java.io.IOException; + + +/** + * 查询OA资产档案信息 + */ +@Path("/assets") +@Produces({"application/json", "application/xml"}) +public class AssetsQueryResource extends BaseResource { + + private static final Log log = Log.get(AssetsQueryResource.class); + private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询资产信息参数为:"+params); + try{ + return success(assetsService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/detail") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryDetail(JSONObject params) throws IOException { + log.info("查询资产详情信息参数为:"+params); + try{ + return success(assetsService.queryAssetsDetail(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/getBizZones") + @Produces({"application/json"}) + public Response getBizZones() throws IOException { + try{ + return success(assetsService.getAllBizZones()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/getFeatures") + @Produces({"application/json"}) + public Response getFeatures() throws IOException { + try{ + return success(assetsService.getFeatures()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } +} 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 new file mode 100644 index 0000000..8d1a3be --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/BillResource.java @@ -0,0 +1,116 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.bill.BillService; +import com.seeyon.apps.assetstenant.bill.FeeRecordService; +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.ws.rs.core.Response; +import java.io.IOException; + + +/** + * 账单 + */ +@Path("/bill") +@Produces({"application/json", "application/xml"}) +public class BillResource extends BaseResource { + + private static final Log log = Log.get(BillResource.class); + private BillService billService = (BillService) AppContext.getBean("billService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("waeBillService"); + private FeeRecordService feeRecordService = (FeeRecordService) AppContext.getBean("feeRecordService"); + + @POST + @Path("/contractBill/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response contractBillQueryPage(JSONObject params) throws IOException { + log.info("分页查询合同账单信息参数为:"+params); + try{ + return success(billService.pageQueryContractBill(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + @POST + @Path("/payRecord/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response payRecordQueryPage(JSONObject params) throws IOException { + log.info("分页查询合同账单缴费明细参数为:"+params); + try{ + return success(feeRecordService.queryBillPayRecord(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/waeBill/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response waeBillQueryPage(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("/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"}) + @Consumes({"application/json"}) + public Response countUnpayRentBills(JSONObject params) throws IOException { + log.info("统计待缴租金账单数量:" + params, new Object[0]); + + try { + return this.success(billService.countUnpayRentBills(params)); + } catch (Exception e) { + log.error(e.getMessage(), new Object[]{e}); + return this.fail(e.getMessage()); + } + } + + @POST + @Path("/countUnpay/wae") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countUnpayWaeBills(JSONObject params) throws IOException { + log.info("统计待缴水电费账单数量:" + params, new Object[0]); + + try { + return this.success(waeBillService.countUnpayWaeBills(params)); + } catch (Exception e) { + log.error(e.getMessage(), new Object[]{e}); + return this.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 new file mode 100644 index 0000000..8f73ae6 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CommunityResource.java @@ -0,0 +1,64 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.community.CommunityService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; + +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; + +/** + * 楼盘信息 + */ +@Path("/community") +public class CommunityResource extends BaseResource { + + private static final Log log = Log.get(CommunityResource.class); + private CommunityService communityService = (CommunityService) AppContext.getBean("communityService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询楼盘信息参数为:"+params); + try{ + return success(communityService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/detail") + @Produces({"application/json"}) + public Response queryDetail(@Context HttpServletRequest request) throws IOException { + log.info("查询楼盘详情信息参数为:"+request.getParameter("communityId")); + try{ + return success(communityService.queryCommunityDetail(request.getParameter("communityId"))); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/queryBuildingList") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryBuildingList(JSONObject params) throws IOException { + log.info("查询楼栋信息参数为:"+params); + try{ + return success(communityService.queryBuildingList(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/ContractResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ContractResource.java new file mode 100644 index 0000000..d808a96 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ContractResource.java @@ -0,0 +1,109 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.contract.ContractService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; + +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; + + +/** + * 查询OA资产档案信息 + */ +@Path("/contract") +@Produces({"application/json", "application/xml"}) +public class ContractResource extends BaseResource { + + private static final Log log = Log.get(ContractResource.class); + private ContractService contractService = (ContractService) AppContext.getBean("contractService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询合同信息参数为:"+params); + try{ + return success(contractService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/countUnsign") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countUnSign(JSONObject params) throws IOException { + log.info("查询租户待签署的合同数参数为:"+params); + try{ + return success(contractService.countUnSign(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/queryAll") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryCusAllContract(JSONObject params) throws IOException { + log.info("查询租户所有合同信息参数为:"+params); + try{ + return success(contractService.queryAll(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/detail") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryDetail(JSONObject params) throws IOException { + log.info("查询合同详情信息参数为:"+params); + try{ + return success(contractService.queryContractDetail(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/pageQueryAssets") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response pageQueryAssets(JSONObject params) throws IOException { + log.info("分页查询合同关联资产和费用信息参数为:"+params); + try{ + return success(contractService.pageQueryContractAssetsInfoWithFee(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/getSignLink") + @Produces({"application/json"}) + public Response getEsignLink(@Context HttpServletRequest request) throws IOException { + String eFlowId = request.getParameter("eFlowId"); + log.info("获取电子签链接参数为:"+ eFlowId); + try{ + return success(contractService.getSignLink(eFlowId)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CustomerMatchResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CustomerMatchResource.java new file mode 100644 index 0000000..1054351 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/CustomerMatchResource.java @@ -0,0 +1,61 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.cus.Customer; +import com.seeyon.apps.assetstenant.cus.CustomerService; +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.ws.rs.core.Response; +import java.io.IOException; + +/** + * 匹配OA客商信息 + */ +@Path("/cus") +@Produces({"application/json", "application/xml"}) +public class CustomerMatchResource extends BaseResource { + + private static final Log log = Log.get(CustomerMatchResource.class); + private CustomerService customerService = (CustomerService) AppContext.getBean("customerService"); + + @POST + @Path("/match") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response matchPerson(JSONObject params) throws IOException { + try{ + log.info("匹配客商参数为:" + params); + Customer customer = new Customer(); + String userType = params.getString("userType"); + if("个人".equals(userType)) { + customer.setCardNo(params.getString("cardNo")); + return success(customerService.matchCusPerson(customer)); + }else { + customer.setOrgNo(params.getString("orgNo")); + return success(customerService.matchCusOrg(customer)); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/getCusInfo") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response getCusInfo(JSONObject params) throws IOException { + try{ + return success(customerService.getCustomerInfo(params.getString("cusNo"))); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/DisChargeResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/DisChargeResource.java new file mode 100644 index 0000000..d259d88 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/DisChargeResource.java @@ -0,0 +1,56 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.discharge.DisCharegeService; +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.ws.rs.core.Response; +import java.io.IOException; + + +/** + * 退租 + */ +@Path("/discharge") +@Produces({"application/json", "application/xml"}) +public class DisChargeResource extends BaseResource { + + private static final Log log = Log.get(DisChargeResource.class); + private DisCharegeService disCharegeService = (DisCharegeService) AppContext.getBean("disCharegeService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询退租申请信息参数为:"+params); + try{ + return success(disCharegeService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/apply") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response apply(JSONObject params) throws IOException { + log.info("提交退租申请参数为:"+params); + try{ + disCharegeService.saveApplay(params); + 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/FallbackResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FallbackResource.java new file mode 100644 index 0000000..c89564e --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FallbackResource.java @@ -0,0 +1,71 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.fallback.FallbackService; +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.ws.rs.core.Response; +import java.io.IOException; + + +/** + * 留言板 + */ +@Path("/fallback") +@Produces({"application/json", "application/xml"}) +public class FallbackResource extends BaseResource { + + private static final Log log = Log.get(FallbackResource.class); + private FallbackService fallbackService = (FallbackService) AppContext.getBean("fallbackService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询留言信息参数为:"+params); + try{ + return success(fallbackService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/detail") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response detail(JSONObject params) throws IOException { + log.info("查询详情信息参数为:"+params); + try{ + return success(fallbackService.detail(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + + @POST + @Path("/submit") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response submit(JSONObject params) throws IOException { + log.info("提交留言参数为:"+params); + try{ + fallbackService.saveFallback(params); + 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/FileTransportResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java new file mode 100644 index 0000000..f00e694 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/FileTransportResource.java @@ -0,0 +1,33 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.seeyon.apps.assetstenant.file.FileHandlerService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; + +/** + * 提供给外部下载OA文件 + */ +@Path("/fileTransport") +public class FileTransportResource extends BaseResource { + + private static final Log log = Log.get(FileTransportResource.class); + private FileHandlerService fileHandlerService = (FileHandlerService) AppContext.getBean("fileHandlerService"); + + @GET + @Path("/downloadFile") + public void downloadFile(@Context HttpServletRequest request,@Context HttpServletResponse response) { + try { + fileHandlerService.handleFile(request.getParameter("refId"), response); + } catch (Exception e) { + log.error("外部系统下载oa文件失败"); + log.error(e.getMessage(), e); + } + } +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/NoticeResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/NoticeResource.java new file mode 100644 index 0000000..bbc15e1 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/NoticeResource.java @@ -0,0 +1,52 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.notice.NoticeService; +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.ws.rs.core.Response; +import java.io.IOException; + +/** + * 招商公告 + */ +@Path("/notice") +public class NoticeResource extends BaseResource { + + private static final Log log = Log.get(NoticeResource.class); + private NoticeService noticeService = (NoticeService) AppContext.getBean("noticeService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询招商公告信息参数为:"+params); + try{ + return success(noticeService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/detail") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryDetail(JSONObject params) throws IOException { + log.info("查询招商公告详情信息参数为:"+params); + try{ + return success(noticeService.queryNoticeDetail(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/ReserveResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java new file mode 100644 index 0000000..7fc3345 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ReserveResource.java @@ -0,0 +1,70 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +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.ws.rs.core.Response; +import java.io.IOException; + + +/** + * 预约看房 + */ +@Path("/reserve") +@Produces({"application/json", "application/xml"}) +public class ReserveResource extends BaseResource { + + private static final Log log = Log.get(ReserveResource.class); + private ReserveService reserveService = (ReserveService) AppContext.getBean("reserveService"); + + @POST + @Path("/queryPage") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryPage(JSONObject params) throws IOException { + log.info("分页查询预约看房信息参数为:"+params); + try{ + return success(reserveService.pageQuery(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/countHandling") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response countHandling(JSONObject params) throws IOException { + log.info("统计预约处理中申请数量:"+params); + try{ + return success(reserveService.countHandling(params)); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @POST + @Path("/apply") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response apply(JSONObject params) throws IOException { + log.info("预约看房参数为:"+params); + try{ + reserveService.saveReserve(params); + 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 new file mode 100644 index 0000000..8e95c21 --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/ViewRecordResource.java @@ -0,0 +1,39 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.assetstenant.viewrecord.ViewRecordService; +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.ws.rs.core.Response; +import java.io.IOException; + +/** + * 记录微信小程序租户浏览资产记录 + */ +@Path("/potential") +public class ViewRecordResource extends BaseResource { + + private static final Log log = Log.get(ViewRecordResource.class); + private ViewRecordService viewRecordService = (ViewRecordService) AppContext.getBean("viewRecordService"); + + @POST + @Path("/add") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response add(JSONObject params) throws IOException { + log.info("增加租户浏览记录:"+params); + try{ + viewRecordService.record(params); + 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/WeAppConfigConfigResource.java b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/WeAppConfigConfigResource.java new file mode 100644 index 0000000..383c32a --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/assetstenant/WeAppConfigConfigResource.java @@ -0,0 +1,56 @@ +package com.seeyon.ctp.rest.resources.assetstenant; + +import cn.hutool.log.Log; +import com.seeyon.apps.assetstenant.weappconfig.WeAppConfigService; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import java.io.IOException; + +/** + * 获取小程序相关配置 + */ +@Path("/weappconfig") +public class WeAppConfigConfigResource extends BaseResource { + + private static final Log log = Log.get(WeAppConfigConfigResource.class); + private WeAppConfigService weAppConfigService = (WeAppConfigService) AppContext.getBean("weAppConfigService"); + + @GET + @Path("/getBannerConfig") + @Produces({"application/json"}) + public Response getBannerConfig() throws IOException { + try{ + return success( weAppConfigService.queryBannerConfig()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/getAssetsTypeList") + @Produces({"application/json"}) + public Response getAssetsTypeList() throws IOException { + try{ + return success( weAppConfigService.getAssetsTypeList()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + + @GET + @Path("/getFilterConditions") + @Produces({"application/json"}) + public Response getFilterConditions() throws IOException { + try{ + return success( weAppConfigService.getFilterConditions()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } +} diff --git a/src/main/test/Test.java b/src/main/test/Test.java new file mode 100644 index 0000000..65f1bc7 --- /dev/null +++ b/src/main/test/Test.java @@ -0,0 +1,7 @@ +import com.seeyon.apps.assetstenant.community.CommunityService; + +public class Test { + public static void main(String[] args) { + CommunityService communityService = new CommunityService(); + } +}