diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/QiChenRentPluginApi.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/QiChenRentPluginApi.java index b41058b..5a7d78c 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/QiChenRentPluginApi.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/QiChenRentPluginApi.java @@ -3,9 +3,7 @@ package com.seeyon.apps.src_rent; import com.seeyon.apps.common.plugin.api.APluginInfoApi; import com.seeyon.apps.common.plugin.vo.ConfigVo; import com.seeyon.apps.src_rent.constants.RentConstants; -import org.springframework.stereotype.Component; -@Component public class QiChenRentPluginApi extends APluginInfoApi { public QiChenRentPluginApi() { } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/AssetsService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/AssetsService.java index 3dbf891..b5b17cc 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/AssetsService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/AssetsService.java @@ -13,21 +13,14 @@ import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; import com.seeyon.ctp.organization.bo.V3xOrgMember; import com.seeyon.ctp.organization.manager.OrgManager; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; -@Component public class AssetsService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); @@ -70,23 +63,81 @@ public class AssetsService { if(StringUtils.isNotBlank(params.getString("assetsType"))) { handleAssetsSubType(conditions,params.getString("assetsType")); } + if(StringUtils.isNotBlank(params.getString("bizZone"))) { + conditions.add(FormWhereCondition.build().display("商圈位置") + .value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"商圈位置",params.getString("bizZone")))); + } + if(StringUtils.isNotBlank(params.getString("renovationStatus"))) { + conditions.add(FormWhereCondition.build().display("装修情况") + .value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"装修情况",params.getString("renovationStatus")))); + } + if(StringUtils.isNotBlank(params.getString("layout"))) { + conditions.add(FormWhereCondition.build().display("房屋户型") + .value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"房屋户型",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.getMasterTableEnumItemValue(getFormNo(),"基础配套",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)); - conditions.add(FormWhereCondition.build().display("管理区域") - .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; } + public Set getAllBizZones(){ + return EnumMapUtils.getEnumItemValues(getFormNo(),"商圈位置"); + } + + public Set getFeatures(){ + return EnumMapUtils.getEnumItemValues(getFormNo(),"基础配套"); + } + + private void handleBizZoneSet(List conditions,String keyWord) { + if (conditions == null || keyWord == null || keyWord.isEmpty()) { + return; + } + Set allBizZones = getAllBizZones(); + 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.getMasterTableEnumItemValue(getFormNo(),"商圈位置",bizZone); + tempSet.add(enumItemId); + } + } + condition.addAllValue(tempSet); + if(condition.getValues().size() > 0) { + conditions.add(condition); + } + } + private void handleAssetsSubType(List conditions,String type) { if("住房".equals(type)) { conditions @@ -131,6 +182,20 @@ public class AssetsService { return queryAssetsDetail(object); } + public String getContractNoByAssetsNo(String assetsNo) throws Exception { + if(assetsNo == null) { + return null; + } + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo)); + FormColumn formColumn = formDataOperator.queryOneRowFormData(getFormNo(), true, null, conditions); + if(formColumn == null) { + return null; + } + Map fieldsMap = formColumn.getFieldsMap(); + return getStringValue(fieldsMap,"合同编号"); + } + public ContractAssetsVo queryContractAssetsDetail(JSONObject params) throws Exception { List conditions = buildConditions(params); ContractAssetsVo assetsVo = new ContractAssetsVo(); @@ -181,21 +246,46 @@ public class AssetsService { assetsVo.setFloorNo(getStringValue(fieldsMap,"楼层")); assetsVo.setUnitNo(getStringValue(fieldsMap,"单元")); assetsVo.setRoomNo(getStringValue(fieldsMap,"门牌号")); - assetsVo.setBuilding(getStringValue(fieldsMap,"门牌号")); - V3xOrgMember member = orgManager.getMemberById(Long.parseLong((String)fieldsMap.get("运营管理员"))); + 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 price = (BigDecimal)fieldsMap.get("评估-评估单价"); - if(area != null && price != null) { - assetsVo.setRentFee(area.multiply(price).toString()); + 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)); + assetsVo.setVrImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("VR文件上传")),attachmentManager)); } if(fieldsMap.get("资产图片") != null) { assetsVo.setDetailImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("资产图片")),attachmentManager)); } + if(fieldsMap.get("封面展示图") != null) { + assetsVo.setCoverImg(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("封面展示图")),attachmentManager)); + } + } + + public Map getAssetsManagerInfo(String assetsNo) throws Exception { + String formNo = configProvider.getBizConfigByKey(RentConstants.ASSETS_INFO_FORMNO); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("资产编号").value(assetsNo)); + FormColumn formColumn = formDataOperator.queryOneRowFormData(formNo, false, null, conditions); + if(formColumn == null || formColumn.getFieldsMap() == null) { + return null; + } + return formColumn.getFieldsMap(); } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/OaAssetsVo.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/OaAssetsVo.java index 0e9e97d..6538c35 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/OaAssetsVo.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/assets/OaAssetsVo.java @@ -2,6 +2,8 @@ package com.seeyon.apps.src_rent.assets; import com.seeyon.apps.src_rent.file.OaFileVo; +import java.util.List; + public class OaAssetsVo { private String assetsNo; // 资产编号 @@ -12,6 +14,7 @@ public class OaAssetsVo { private String footPrint; //占地大小 private String formId; //表单记录ID private OaFileVo detailImg; //详情图片 + private OaFileVo coverImg; //封面图片 private OaFileVo vrImg; //vr图 private String assetsDesc; //资产描述 private String assetsAddress; //资产地址 @@ -20,7 +23,7 @@ public class OaAssetsVo { private String unitNo; //单元号 private String floorNo; //楼层号 private String roomNo; //房间号 - private Boolean hasLift;//有无电梯 + private String hasLift;//有无电梯 private String managerPhone; //管理员电话 private String managerName; //管理员姓名 private String layout; //户型 @@ -30,6 +33,9 @@ public class OaAssetsVo { private String waterFeeUnit; //水费单位 private String powerFee; //电费 private String powerFeeUnit; //电费单位 + private String bizZone; + private List features; + private String renovationStatus; //装修状态 public String getAssetsNo() { return assetsNo; @@ -159,11 +165,11 @@ public class OaAssetsVo { this.roomNo = roomNo; } - public Boolean getHasLift() { + public String getHasLift() { return hasLift; } - public void setHasLift(Boolean hasLift) { + public void setHasLift(String hasLift) { this.hasLift = hasLift; } @@ -238,4 +244,36 @@ public class OaAssetsVo { 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 OaFileVo getCoverImg() { + return coverImg; + } + + public void setCoverImg(OaFileVo coverImg) { + this.coverImg = coverImg; + } } \ No newline at end of file diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/BillService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/BillService.java index 04fdc6b..5b8dbf5 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/BillService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/BillService.java @@ -1,29 +1,46 @@ package com.seeyon.apps.src_rent.bill; +import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.apps.src_rent.assets.AssetsService; +import com.seeyon.apps.src_rent.assets.OaAssetsVo; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; +import com.seeyon.apps.src_rent.contract.ContractDocService; import com.seeyon.apps.src_rent.contract.ContractService; +import com.seeyon.apps.src_rent.flow.FlowCreateService; import com.seeyon.apps.src_rent.form.*; import com.seeyon.apps.src_rent.po.PageQueryVo; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.math.RoundingMode; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; -@Component public class BillService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private ContractService contractService; + private static final Log log = Log.get(BillService.class); + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private ContractService contractService = (ContractService) AppContext.getBean("qcContractService"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); + private ContractDocService contractDocService = (ContractDocService) AppContext.getBean("qcContractDocService"); + private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("qcFlowCreateService"); + private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.CONTRACTBILLFORMNO); @@ -47,9 +64,10 @@ public class BillService { } if(StringUtils.isNotBlank(params.getString("billStatus"))) { if("已缴费".equals(params.getString("billStatus"))) { - conditions.add(FormWhereCondition.build().display("收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NOT_NULL)); }else { - conditions.add(FormWhereCondition.build().display("收款结果反馈").clauseFactor(ClauseFactor.NULL)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"账单-收款结果反馈","未收款")).endWithBracket(true)); } } return conditions; @@ -75,7 +93,8 @@ public class BillService { public Integer countUnpayRentBills(JSONObject params) throws Exception { List conditions = buildConditions(params); - conditions.add(FormWhereCondition.build().display("收款结果反馈").clauseFactor(ClauseFactor.NULL)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("账单-收款结果反馈").value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"账单-收款结果反馈","未收款")).endWithBracket(true)); Long count = formDataOperator.countConditon(getFormNo(), conditions); return count.intValue(); } @@ -115,15 +134,19 @@ public class BillService { public void fillVo(Map fieldsMap, BillVo billVo) throws Exception { billVo.setBillType("CONTRACT"); - billVo.setBillNo(getStringValue(fieldsMap,"租赁账单编号" )); - String payStatus = fieldsMap.get("收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap,"收款结果反馈"); + billVo.setBillNo(getStringValue(fieldsMap,"账单-账单明细编号" )); + String payStatus = fieldsMap.get("账单-收款结果反馈") == null ? "待缴费" : getStringValue(fieldsMap,"收款结果反馈"); billVo.setBillStatus(payStatus); billVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); - billVo.setBillStartDate(getStringValue(fieldsMap,"开始日期")); + billVo.setBillStartDate(getStringValue(fieldsMap,"账单-开始日期")); billVo.setContractNo(getStringValue(fieldsMap,"合同编号")); billVo.setBillPayEndDate(getStringValue(fieldsMap,"账单-当前缴费时限")); - billVo.setBillEndDate(getStringValue(fieldsMap,"结束日期")); - String asssetsName = fieldsMap.get("资产名称") == null ? "" : fieldsMap.get("资产名称") + "-"; + 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); @@ -134,9 +157,147 @@ public class BillService { private String buildBillName(Map fieldsMap) throws Exception { String contractNo = getStringValue(fieldsMap,"合同编号"); - String term = contractService.queryContractPayPeriod(contractNo,getStringValue(fieldsMap,"开始日期")) + "-"; - String asssetsName = fieldsMap.get("资产名称") == null ? "" : fieldsMap.get("资产名称") + "-"; + 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; } + + public String getBillPayReceiver(String billNo) throws Exception { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("账单-账单明细编号").value(billNo)); + FormColumn formColumn = formDataOperator.queryOneRowFormData(getFormNo(), true, null, conditions); + if(formColumn == null) { + return null; + } + Map fieldsMap = formColumn.getFieldsMap(); + String contractNo = getStringValue(fieldsMap, "合同编号"); + return contractDocService.getAssetsManagerOrg(contractNo); + } + + public void payCallBack(String billNo) throws Exception { + // 1. 获取Bean + 非空校验 + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + if (formApi4Cap4 == null) { + throw new Exception("Spring容器中未找到formApi4Cap4 Bean"); + } + + // 2. 复用配置,避免重复查询 + String templateCode = this.configProvider.getBizConfigByKey(RentConstants.PAYMENT_REGISTRATION_TEMPLATECODE); + String appName = this.configProvider.getBizConfigByKey(RentConstants.FORMAPPNAME); + + // 3. 获取表单结构 + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(templateCode); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + String tableName = masterTableBean.getTableName(); + List subTableBeanList = cap4FormBean.getSubTableBean(); + FormTableBean subTableBean = null; + // 4. 获取子表名 + 非空校验 + String subDbTableName = null; + for (FormTableBean tableBean : subTableBeanList) { + if ("租赁收款明细".equals(tableBean.getDisplay())) { + subDbTableName = tableBean.getTableName(); + subTableBean = tableBean; + break; + } + } + // 5. 构造数据结构(规范泛型) + Map mainFormData = new HashMap<>(); + Map> subFormDataMap = new HashMap<>(); + List subFormDataList = new ArrayList<>(); + + Map mainData = new HashMap<>(); + mainFormData.put(tableName, mainData); + if (subDbTableName != null) { + log.info("明细表表名为: " + subDbTableName); + subFormDataMap.put(subDbTableName, subFormDataList); + } + + // 6. 查询账单数据 + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("账单-账单明细编号").value(billNo)); + FormColumn formColumn = this.formDataOperator.queryOneRowFormData(this.getFormNo(), false, null, conditions); + + // 7. 主数据非空判断 + if (formColumn == null || formColumn.getFieldsMap() == null) { + throw new Exception("根据账单编号:" + billNo + "未查询到账单数据"); + } + + Map fieldsMap = formColumn.getFieldsMap(); + BigDecimal accountsReceivable = BigDecimal.ZERO; + // 初始化实际收款金额(避免null) + BigDecimal actualReceipts = BigDecimal.ZERO; + BigDecimal rate = new BigDecimal("0.997"); + + // 8. 组装子表数据 + Map subTableRowData = new HashMap<>(); + subTableRowData.put("账单明细编号", fieldsMap.get("账单-账单明细编号")); + subTableRowData.put("开始日期", df.format((Date)fieldsMap.get("账单-开始日期"))); + subTableRowData.put("结束日期", df.format((Date)fieldsMap.get("账单-结束日期"))); + subTableRowData.put("当期缴费时限", fieldsMap.get("账单-当前缴费时限")); + subTableRowData.put("综合减免", fieldsMap.get("账单-减免金额") == null ? BigDecimal.ZERO : fieldsMap.get("账单-减免金额")); + subTableRowData.put("租费递增", fieldsMap.get("账单-租费递增") == null ? BigDecimal.ZERO : fieldsMap.get("账单-租费递增")); + + // 应收金额计算 + BigDecimal receivable = (BigDecimal) fieldsMap.get("账单-应收租金"); + if (receivable != null) { + accountsReceivable = accountsReceivable.add(receivable); + // 修复BigDecimal.setScale不生效问题 + actualReceipts = accountsReceivable.multiply(rate).setScale(2, RoundingMode.HALF_UP); + } + subTableRowData.put("应收租金", receivable); + subTableRowData.put("未收租金", fieldsMap.get("账单-未收租金")); + subTableRowData.put("资产编号", fieldsMap.get("资产编号")); + subTableRowData.put("资产名称", fieldsMap.get("资产名称")); + subTableRowData.put("本次收租金", receivable); + subTableRowData.put("本次开票金额",receivable ); + subTableRowData.put("未开票金额", receivable); + FormFieldBean formFieldBean = subTableBean.getFieldBeanByDisplay("收款结果"); + subTableRowData.put("收款结果", EnumMapUtils.getEnumItemValueByEnumId("已结清",formFieldBean.getEnumId())); + subFormDataList.add(subTableRowData); + + // 9. 获取合同信息 + 非空校验 + String contractNo = (String) fieldsMap.get("合同编号"); + Map contractInfo = this.contractDocService.getContractInfoByContractNo(contractNo); + if (contractInfo != null) { + mainData.put("合同名称", contractInfo.get("合同名称")); + mainData.put("合同金额", contractInfo.get("合同金额")); + mainData.put("承租方类型", contractInfo.get("承租方类型")); + mainData.put("承租方名称", contractInfo.get("承租方名称")); + } + + // 10. 经办人/部门信息(安全赋值) + String assetNo = (String) fieldsMap.get("资产编号"); + Map assetsManagerInfo = this.assetsService.getAssetsManagerInfo(assetNo); + if (assetsManagerInfo != null && assetsManagerInfo.get("经办人") != null) { + String managerId = String.valueOf(assetsManagerInfo.get("经办人")); + try { + V3xOrgMember member = this.orgManager.getMemberById(Long.parseLong(managerId)); + if (member != null) { + mainData.put("经办部门", member.getOrgDepartmentId()); + mainData.put("经办单位", member.getOrgAccountId()); + mainData.put("经办人员", managerId); + } + } catch (Exception e) { + log.warn("获取经办人信息失败", e); + } + } + + // 11. 组装主表数据(线程安全日期) + mainData.put("收款项", EnumMapUtils.getMasterTableEnumItemValue(templateCode, "收款项", "租金")); + mainData.put("经办日期", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + mainData.put("合同编号", contractNo); + mainData.put("本次收款金额", actualReceipts); + + + // 12. 启动流程 + this.flowCreateService.flowStart("微信小程序支付完成收款登记", + mainFormData, subFormDataMap, appName, templateCode); + } + + } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/FeeRecordService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/FeeRecordService.java index 8ae782d..4a8ec77 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/FeeRecordService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/FeeRecordService.java @@ -3,30 +3,25 @@ package com.seeyon.apps.src_rent.bill; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; +import com.seeyon.apps.src_rent.form.ClauseFactor; import com.seeyon.apps.src_rent.form.EnumMapUtils; import com.seeyon.apps.src_rent.form.FormDataOperator; import com.seeyon.apps.src_rent.form.FormWhereCondition; import com.seeyon.apps.src_rent.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; -@Component public class FeeRecordService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private BillService billService; - @Autowired - private WaeBillService waeBillService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private BillService billService = (BillService) AppContext.getBean("qcBillService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("qcWaeBillService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.FEERECORDFORMNO); @@ -51,6 +46,21 @@ public class FeeRecordService { 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.getMasterTableEnumItemValue(getFormNo(),"收支类型",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; } @@ -67,6 +77,7 @@ public class FeeRecordService { PayRecordVo payRecordVo = new PayRecordVo(); Map fieldsMap = (Map) data; fillVo(fieldsMap,payRecordVo); + payRecordVos.add(payRecordVo); } pageQueryVo.setDatas(payRecordVos); pageQueryVo.setTotalCount(count); @@ -74,7 +85,7 @@ public class FeeRecordService { } public void fillVo(Map fieldsMap, PayRecordVo payRecordVo) throws Exception { - payRecordVo.setInOutType(EnumMapUtils.getEnumShowValue(getStringValue(fieldsMap,"收支类型"))); + payRecordVo.setInOutType(getStringValue(fieldsMap,"收支类型")); payRecordVo.setPayDate(getStringValue(fieldsMap,"收付款日期")); payRecordVo.setInDate(getStringValue(fieldsMap,"收付款日期")); BigDecimal amount = (BigDecimal) fieldsMap.get("收付款金额"); @@ -89,4 +100,12 @@ public class FeeRecordService { payRecordVo.setItemName(getStringValue(fieldsMap,"费用类型")); } } + + public void payCallBack(String billNo,String bizType) throws Exception { + if("rent".equals(bizType)) { + billService.payCallBack(billNo); + }else { + waeBillService.payCallBack(billNo); + } + } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/WaeBillService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/WaeBillService.java index 50f323f..13f886c 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/WaeBillService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/bill/WaeBillService.java @@ -1,29 +1,29 @@ package com.seeyon.apps.src_rent.bill; import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_rent.assets.AssetsService; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; -import com.seeyon.apps.src_rent.form.ClauseFactor; -import com.seeyon.apps.src_rent.form.FormDataOperator; -import com.seeyon.apps.src_rent.form.FormWhereCondition; +import com.seeyon.apps.src_rent.contract.ContractDocService; +import com.seeyon.apps.src_rent.form.*; import com.seeyon.apps.src_rent.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; -@Component public class WaeBillService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; + + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); + private ContractDocService docService = (ContractDocService) AppContext.getBean("qcContractDocService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.WAEBILLFORMNO); @@ -42,6 +42,14 @@ public class WaeBillService { 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.getMasterTableEnumItemValue(getFormNo(),"缴费状态","未结清")).endWithBracket(true)); + } + } return conditions; } @@ -67,9 +75,28 @@ public class WaeBillService { return pageQueryVo; } + public PageQueryVo queryAllWaeBill(List conditions) throws Exception {; + PageQueryVo pageQueryVo = new PageQueryVo(); + List datas = formDataOperator.queryFormDataPageCondition(getFormNo(), true,null, conditions, null,null); + List vos = new ArrayList<>(); + Long count = formDataOperator.countConditon(getFormNo(), 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 Integer countUnpayWaeBills(JSONObject params) throws Exception { List conditions = buildConditions(params); - conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NULL)); + conditions.add(FormWhereCondition.build().display("缴费状态").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR)); + conditions.add(FormWhereCondition.build().display("缴费状态").value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"缴费状态","未结清")).endWithBracket(true)); Long count = formDataOperator.countConditon(getFormNo(), conditions); return count.intValue(); } @@ -81,9 +108,30 @@ public class WaeBillService { billVo.setBillStatus(getStringValue(fieldsMap,"缴费状态")); billVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); billVo.setBillNo(getStringValue(fieldsMap,"档案编号")); - BigDecimal powerFee = (BigDecimal) fieldsMap.get("本次应缴电费"); - BigDecimal waterFee = (BigDecimal) fieldsMap.get("本次应缴水费"); + 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("水电费"); } + + public String getBillPayReceiver(String billNo) throws Exception { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("档案编号").value(billNo)); + FormColumn formColumn = formDataOperator.queryOneRowFormData(getFormNo(), true, null, conditions); + if(formColumn == null) { + return null; + } + Map fieldsMap = formColumn.getFieldsMap(); + String assetsNo = getStringValue(fieldsMap, "资产编号"); + String contractNoByAssetsNo = assetsService.getContractNoByAssetsNo(assetsNo); + return docService.getAssetsManagerOrg(contractNoByAssetsNo); + } + + public void payCallBack(String billNo) throws BusinessException { + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("档案编号").value(billNo)); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("缴费状态").value(EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"缴费状态","结清"))); + formDataOperator.updateMasterForm(getFormNo(),updateFields,conditions); + } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/config/RentConfigProvider.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/config/RentConfigProvider.java index 34834fd..837f97e 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/config/RentConfigProvider.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/config/RentConfigProvider.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Component; import static com.seeyon.apps.src_rent.constants.RentConstants.getPluginId; -@Component public class RentConfigProvider { protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/constants/RentConstants.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/constants/RentConstants.java index 7a6e21e..c77f54a 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/constants/RentConstants.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/constants/RentConstants.java @@ -3,18 +3,17 @@ package com.seeyon.apps.src_rent.constants; public enum RentConstants { plugin("src_rent","插件ID"), - APP_ID("7438886882",""), - APP_SECRET("325c8cc6c2a303d6cf1fb5657a16e591",""), - OA_HOST("",""), - ESIGN_HOST("",""), - SIGN_SERVICE_PROVIDER("ESIGN",""), + APP_ID("7438886882","e签宝appId"), + APP_SECRET("325c8cc6c2a303d6cf1fb5657a16e591","e签宝appSecret"), + OA_HOST("","oa地址"), + ESIGN_HOST("","e签宝地址"), UNITNAME("","平台方组织名称"), FORMEDITLOGINNAME("","表单修改登录名"), - updateAccountName("表单",""), + updateAccountName("表单","表单修改单位/组织名"), getTokenUrl("/seeyon/rest/token/","调用获取TOKEN地址"), nodeTokenUrl("/seeyon/rest/flow/notification/","超级节点回调URL"), - restName("",""), - restPwd("",""), + restName("","rest用户名"), + restPwd("","rest密码"), signAutoDate("","是否自动加盖签署日期"), eSignOrgId("61f735dd368c45a191f43a6711c3c88a","e签宝平台方组织id"), formLoginName("2019","表单数据录入登录名"), @@ -22,7 +21,6 @@ public enum RentConstants { ASSETS_FORMNO("","资产运营档案编码"), CONTRACT_FORMNO("","租赁合同表单编码"), DISCHARGE_TEMPLATECODE("","退租申请模板编码"), - DISCHARGE_FORMNO("","退租申请表单编码"), FALLBACK_FORMNO("","留言板表单编码"), RESERVE_FORMNO("","看房预约表单编码"), VIEWRECORD_FORMNO("","浏览记录表单编码"), @@ -33,6 +31,15 @@ public enum RentConstants { CUSDOCFORMNO("","客商档案表单编码"), NOTICEFORMNO("","招商公告表单编码"), WECHATBACKENDHOST("","微信小程序后端host"), + aSignPositionKeyword("甲方盖章(签字)","甲方签署位置关键字"), + bSignPositionKeyword("乙方盖章(签字)","乙方签署位置关键字"), + lpSignPositionKeyword("法定代表人","法人签署位置关键字"), + legalSealId("","法人章ID"), + contractDocFormCode("","合同档案编码"), + PAYMENT_REGISTRATION_TEMPLATECODE("","收款登记模板编码"), + ASSETS_INFO_FORMNO("","资产信息台账表单编码"), + ESIGN_APP_UNITMAP("","E签宝应用APPID与公司映射关系"), + ESIGN_APP_SECRETMAP("325c8cc6c2a303d6cf1fb5657a16e591","e签宝appIDSecret映射"), ; RentConstants(String defaultValue, String description) { this.defaultValue = defaultValue; diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractDocService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractDocService.java new file mode 100644 index 0000000..fa0c849 --- /dev/null +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractDocService.java @@ -0,0 +1,48 @@ +package com.seeyon.apps.src_rent.contract; + +import com.seeyon.apps.src_rent.config.RentConfigProvider; +import com.seeyon.apps.src_rent.constants.RentConstants; +import com.seeyon.apps.src_rent.form.FormColumn; +import com.seeyon.apps.src_rent.form.FormDataOperator; +import com.seeyon.apps.src_rent.form.FormWhereCondition; +import com.seeyon.ctp.common.AppContext; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ContractDocService { + + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + + 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); + 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/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractService.java index 87f6592..f6cb759 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/contract/ContractService.java @@ -15,30 +15,22 @@ import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -@Component public class ContractService { private static final Log log = LogFactory.getLog(ContractService.class); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private AssetsService assetsService; - @Autowired - private SignLinkService signLinkService; + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); + private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("qcSignLinkService"); private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); private String getFormNo() { @@ -71,6 +63,7 @@ public class ContractService { queryColumnVos.add("合同截止日期"); queryColumnVos.add("签署状态"); queryColumnVos.add("合同名称"); + queryColumnVos.add("签约时效"); PageQueryVo pageQueryVo = new PageQueryVo(); List datas = formDataOperator.queryFormDataPageCondition(getFormNo(), true,queryColumnVos, conditions, pageNo, pageSize); List oaContractVos = new ArrayList<>(); @@ -128,7 +121,7 @@ public class ContractService { assetsVos.add(assetsVo); } oaContractVo.setAssetsVos(assetsVos); - + oaContractVos.add(oaContractVo); } return oaContractVos; } @@ -140,7 +133,7 @@ public class ContractService { oaContractVo.setSignStatus(getStringValue(fieldsMap,"签署状态")); oaContractVo.setCusNo(getStringValue(fieldsMap,"承租方编号")); oaContractVo.setContractStartTime(getStringValue(fieldsMap,"合同开始日期")); - oaContractVo.setContractEndTime(getStringValue(fieldsMap,"合同结束日期")); + oaContractVo.setContractEndTime(getStringValue(fieldsMap,"合同截止日期")); oaContractVo.setStartDate(oaContractVo.getContractStartTime()); oaContractVo.setEndDate(oaContractVo.getContractEndTime()); if(fieldsMap.get("盖章后合同附件") != null) { @@ -167,6 +160,12 @@ public class ContractService { 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; } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/controller/EsignCallBackController.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/controller/EsignCallBackController.java index 4c6544f..bcb62cd 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/controller/EsignCallBackController.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/controller/EsignCallBackController.java @@ -25,10 +25,10 @@ public class EsignCallBackController extends BaseController { private static final Log log = Log.get(EsignCallBackController.class); - private EsignByUploadFileService esignByUploadFileService = (EsignByUploadFileService) AppContext.getBean("esignByUploadFileService"); - private EsignCallbackBizService esignCallbackBizService = (EsignCallbackBizService) AppContext.getBean("esignCallbackBizService"); - private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("signLinkService"); - private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("thirdMessageService"); + private EsignByUploadFileService esignByUploadFileService = (EsignByUploadFileService) AppContext.getBean("qcEsignByUploadFileService"); + private EsignCallbackBizService esignCallbackBizService = (EsignCallbackBizService) AppContext.getBean("qcEsignCallbackBizService"); + private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("qcSignLinkService"); + private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("qcThirdMessageService"); public void callback(HttpServletRequest request, HttpServletResponse response) { try { @@ -56,6 +56,9 @@ public class EsignCallBackController extends BaseController { if(callbackParams.getSignFlowStatus() == 2) { Map fileInfo = esignByUploadFileService.getDownloadFileInfo(flowId); esignCallbackBizService.handleSuccessSignCallbackBiz(tableName,updatefield,statusfield,formId,(String)fileInfo.get("downloadUrl"),(String)fileInfo.get("fileName")); + }else if(callbackParams.getSignFlowStatus() == 5){ + //合同过期 + esignCallbackBizService.handleExpiredSignCallbackBiz(tableName,statusfield,formId); }else { esignCallbackBizService.handleFailSignCallbackBiz(tableName,statusfield,formId,callbackParams.getResultDescription()); } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/cus/CustomerService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/cus/CustomerService.java index e9af2bd..41ea45a 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/cus/CustomerService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/cus/CustomerService.java @@ -3,22 +3,18 @@ package com.seeyon.apps.src_rent.cus; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.form.*; +import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; -@Component public class CustomerService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.CUSDOCFORMNO); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/discharge/DisCharegeService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/discharge/DisCharegeService.java index e77f7fd..472c783 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/discharge/DisCharegeService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/discharge/DisCharegeService.java @@ -16,27 +16,20 @@ import com.seeyon.cap4.form.bean.FormTableBean; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.*; import java.util.stream.Collectors; -@Component public class DisCharegeService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private FlowCreateService flowCreateService; - @Autowired - private ContractService contractService; + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("qcFlowCreateService"); + private ContractService contractService = (ContractService) AppContext.getBean("qcContractService"); private String getFormNo() { - return configProvider.getBizConfigByKey(RentConstants.DISCHARGE_FORMNO); + return configProvider.getBizConfigByKey(RentConstants.PAYMENT_REGISTRATION_TEMPLATECODE); } private String getStringValue(Map fieldsMap,String key) { @@ -77,8 +70,8 @@ public class DisCharegeService { List subTableBean = cap4FormBean.getSubTableBean(); String subDbTableName = null; for (FormTableBean formTableBean : subTableBean) { - if("租赁资产".equals(formTableBean.getTableName())){ - subDbTableName = formTableBean.getDbTableName(); + if("租赁资产".equals(formTableBean.getDisplay())){ + subDbTableName = formTableBean.getTableName(); } } Map mainFormData = new HashMap<>(); @@ -93,19 +86,23 @@ public class DisCharegeService { List assetsNoList = (List) params.get("assetsNoList"); Set assetsNoSet = assetsNoList.stream().collect(Collectors.toSet()); List oaAssetsVos = contractService.queryContractAllAssets(contractNo); - oaAssetsVos.forEach(oaAssetsVo -> { - if(assetsNoSet.contains(oaAssetsVo.getAssetsNo())){ - Map tempMap = new HashMap<>(); - tempMap.put("资产编号",oaAssetsVo.getAssetsNo()); - subFormDataList.add(tempMap); - } - }); + 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.getMasterTableEnumItemValue(getFormNo(),"承租方类型",params.getString("cusType"))); data.put("承租方名称",params.getString("cusName")); data.put("联系方式",params.getString("phone")); data.put("终止原因",params.getString("reason")); + data.put("退租申请状态",EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"退租申请状态","申请中")); + data.put("清算状态",EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"清算状态","未清算")); flowCreateService.flowStart("退租申请",mainFormData,subFormDataMap,appName,templateCode); } @@ -114,6 +111,18 @@ public class DisCharegeService { 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)); + List subDatas = formDataOperator.pageQuerySubFormDatas(getFormNo(), "租赁资产", true, null, subConditions, null, null); + StringBuilder dischargeItem = new StringBuilder(""); + for (Object subData : subDatas) { + Map subOneRowData = (Map) subData; + String assetsName = (String) subOneRowData.get("品牌名称"); + dischargeItem.append(assetsName).append(","); + } + vo.setDischargeItem(dischargeItem.toString()); } private List buildConditions(JSONObject params) { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/fallback/FallbackService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/fallback/FallbackService.java index ffebfb8..872c5c2 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/fallback/FallbackService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/fallback/FallbackService.java @@ -9,23 +9,19 @@ import com.seeyon.apps.src_rent.form.FormColumn; import com.seeyon.apps.src_rent.form.FormDataOperator; import com.seeyon.apps.src_rent.form.FormWhereCondition; import com.seeyon.apps.src_rent.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; -@Component public class FallbackService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private FlowCreateService flowCreateService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("qcFlowCreateService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.FALLBACK_FORMNO); @@ -67,7 +63,7 @@ public class FallbackService { mainFormData.put("承租方编号", params.getString("cusNo")); mainFormData.put("承租方姓名", params.getString("tenantName")); mainFormData.put("承租方类型", EnumMapUtils.getMasterTableEnumItemValue(getFormNo(),"承租方类型",params.getString("tenantType"))); - mainFormData.put("看房人手机号", params.getString("tenantPhone")); + mainFormData.put("承租方手机号", params.getString("tenantPhone")); mainFormData.put("留言内容", params.getString("content")); mainFormData.put("留言日期", df.format(new Date())); mainFormData.put("处理状态", EnumMapUtils.getMasterTableEnumItemValue(getFormNo(), "处理状态", "未处理")); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/file/FileHandlerService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/file/FileHandlerService.java index 553e418..e4c3ae8 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/file/FileHandlerService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/file/FileHandlerService.java @@ -4,45 +4,56 @@ 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 org.springframework.stereotype.Component; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; -@Component 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 { - File file = null; + InputStream inputStream = null; try { Attachment attachment = attachmentManager.getAttachmentByFileURL(Long.valueOf(refId)); - InputStream inputStream = fileManager.getFileInputStream(attachment.getFileUrl()); + inputStream = fileManager.getFileInputStream(attachment.getFileUrl()); + + // ⭐ 关键:重置 + response.reset(); + + // ⭐ 必须设置类型 + response.setContentType("application/octet-stream"); + + // ⭐ 文件名处理 String encodedFileName = URLEncoder.encode(attachment.getFilename(), "UTF-8") .replaceAll("\\+", "%20"); + response.setHeader( "Content-Disposition", - "attachment; filename=\"" + attachment.getFilename() + "\"; " + - "filename*=UTF-8''" + encodedFileName + "attachment; filename=\"" + attachment.getFilename() + "\"; filename*=UTF-8''" + encodedFileName ); - try (OutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) { - byte[] buffer = new byte[2048]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - outputStream.flush(); - } catch (Exception e) { + // ⭐ 输出流 + OutputStream outputStream = response.getOutputStream(); + + byte[] buffer = new byte[2048]; + int len; + + while ((len = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); } - }finally { - if(file != null) { - file.delete(); - } + + outputStream.flush(); + + } catch (Exception e) { + e.printStackTrace(); // ❗不要吞异常 + } finally { + try { + if (inputStream != null) inputStream.close(); + } catch (Exception ignored) {} } } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/flow/FlowCreateService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/flow/FlowCreateService.java index 572fec2..9368984 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/flow/FlowCreateService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/flow/FlowCreateService.java @@ -4,18 +4,15 @@ import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.po.OaResp; import com.seeyon.apps.src_rent.utils.OaRestClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; import java.util.HashMap; import java.util.List; import java.util.Map; -@Component public class FlowCreateService { - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); public void flowStart(String flowName,Map mainFormData, Map> subFormDatas,String appName,String templateCode) throws Exception { OaRestClient client = new OaRestClient(configProvider.getBizConfigByKey(RentConstants.OA_HOST), diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/ClauseFactor.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/ClauseFactor.java index c28386f..e5a487f 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/ClauseFactor.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/ClauseFactor.java @@ -11,7 +11,9 @@ public enum ClauseFactor { NOT_NULL, //非空 LIKE, //模糊 AND, - OR + OR, + IN, + NOT_IN ; public boolean isNullType() { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/EnumMapUtils.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/EnumMapUtils.java index 27b48de..ac9a056 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/EnumMapUtils.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/EnumMapUtils.java @@ -12,9 +12,7 @@ import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; import com.seeyon.ctp.util.JDBCAgent; import org.apache.commons.lang3.StringUtils; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; public class EnumMapUtils { @@ -98,6 +96,35 @@ public class EnumMapUtils { return ""; } + public static Set getEnumItemValues(String formNo,String fieldDisplay) { + Set set = new HashSet<>(); + try { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(fieldDisplay); + if(beanByDisplay == null || beanByDisplay.getEnumId() == 0l) { + return set; + } + EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(beanByDisplay.getEnumId()); + + if(ctpEnumBean == null) { + return set; + } + List ctpEnumItems = ctpEnumBean.getItems(); + if(ctpEnumBean.getItems() == null) { + return set; + } + for (CtpEnumItem enumItem : ctpEnumItems) { + set.add(enumItem.getShowvalue()); + } + } catch (Exception e) { + + } + return set; + } + public static String getEnumItemValueByEnumId(String showValue,long enumId) { EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(enumId); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormDataOperator.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormDataOperator.java index 83ef6cd..f94dbfd 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormDataOperator.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormDataOperator.java @@ -2,26 +2,22 @@ package com.seeyon.apps.src_rent.form; import com.seeyon.aicloud.common.JsonUtils; -import com.seeyon.apps.src_rent.po.PageQueryVo; import com.seeyon.cap4.form.api.FormApi4Cap4; import com.seeyon.cap4.form.bean.FormBean; import com.seeyon.cap4.form.bean.FormFieldBean; import com.seeyon.cap4.form.bean.FormTableBean; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; -import com.seeyon.ctp.services.ServiceException; import com.seeyon.ctp.util.JDBCAgent; import com.seeyon.v3x.services.form.FormFactory; import com.seeyon.v3x.services.form.bean.FormExport; import com.seeyon.v3x.services.form.bean.ValueExport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.stereotype.Component; import java.util.*; import java.util.stream.Collectors; -@Component public class FormDataOperator { private static final Log log = LogFactory.getLog(FormDataOperator.class); @@ -157,9 +153,9 @@ public class FormDataOperator { FormFieldBean fieldBean = fieldMap4Name.get(key); fieldVo.setDisplayName(fieldBean.getDisplay()); fieldVo.setValue(columnMap.get(key)); - if(changeEnum && fieldBean.isEnumField()){ + if(changeEnum){ //转换枚举值 - fieldVo.setValue(EnumMapUtils.getEnumShowValue(fieldVo.getValue())); + convert2ShowValue(fieldVo, fieldBean); } vos.add(fieldVo); } @@ -419,9 +415,9 @@ public class FormDataOperator { FormFieldBean fieldBean = fieldMap4Name.get(key); fieldVo.setDisplayName(fieldBean.getDisplay()); fieldVo.setValue(columnMap.get(key)); - if(changeEnum && fieldBean.isEnumField()){ + if(changeEnum){ //转换枚举值 - fieldVo.setValue(EnumMapUtils.getEnumShowValue(fieldVo.getValue())); + convert2ShowValue(fieldVo,fieldBean); } vos.add(fieldVo); } @@ -587,9 +583,9 @@ public class FormDataOperator { FormFieldBean fieldBean = fieldMap4Name.get(key); fieldVo.setDisplayName(fieldBean.getDisplay()); fieldVo.setValue(columnMap.get(key)); - if(changeEnum && fieldBean.isEnumField()){ + if(changeEnum){ //转换枚举值 - fieldVo.setValue(EnumMapUtils.getEnumShowValue(fieldVo.getValue())); + convert2ShowValue(fieldVo,fieldBean); } vos.add(fieldVo); } @@ -866,19 +862,21 @@ public class FormDataOperator { } } - public void handleEnumDeptEtc(Map map,String formNo) throws BusinessException { - FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); - FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); - FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); - for (String key : map.keySet()) { - FormFieldBean fieldBean = masterTableBean.getFieldBeanByDisplay(key); - if(fieldBean == null) { - continue; - } + public void convert2ShowValue(FormFieldVo fieldVo,FormFieldBean fieldBean) throws BusinessException { switch (fieldBean.getInputType()) { - case "select": if(fieldBean.getEnumId() != 0l) { - String enumItemId = EnumMapUtils.getEnumItemValueByEnumId((String)map.get(key),fieldBean.getEnumId()); - map.put(key,enumItemId); + case "select": if(fieldBean.isEnumField() && fieldVo.getValue() != null) { + String value = EnumMapUtils.getEnumShowValue(fieldVo.getValue() + ""); + fieldVo.setValue(value); + } break; + case "multiselect": if(fieldBean.isEnumField() && fieldVo.getValue() != null) { + String str = (String)fieldVo.getValue(); + String[] split = str.split(","); + List showValueList = new ArrayList<>(); + for (String enumId : split) { + String value = EnumMapUtils.getEnumShowValue(enumId + ""); + showValueList.add(value); + } + fieldVo.setValue(showValueList); } break; case "image":break; case "attachment": break; @@ -892,7 +890,7 @@ public class FormDataOperator { default: break; } - } + } public void handleSubTableEnumDeptEtc(Map map,String formNo) throws BusinessException { @@ -994,56 +992,74 @@ public class FormDataOperator { if (conditions == null || conditions.isEmpty()) { return ""; } - - StringBuilder whereClause = new StringBuilder(" WHERE "); - int conditionIndex = 0; - - for (FormWhereCondition condition : conditions) { - // 处理括号起始 - if (condition.isStartWithBracket()) { - whereClause.append("("); + StringBuilder whereCause = new StringBuilder(" WHERE "); + for (int i = 0; i < conditions.size(); i++) { + FormWhereCondition c = conditions.get(i); + // 左括号 + if (c.isStartWithBracket()) { + whereCause.append("("); } - - // 字段名校验 - String fieldName = condition.getFieldName(); - ClauseFactor factor = condition.getClauseFactor(); + String field = c.getFieldName(); + ClauseFactor factor = c.getClauseFactor(); String operator = parseOperator(factor); - - // 构建条件表达式 - String conditionExpr; + // NULL / NOT NULL if (factor.isNullType()) { - // 处理 NULL/NOT NULL 条件(无需参数) - conditionExpr = String.format("%s %s", fieldName, operator); + whereCause.append(field).append(" ").append(operator); + } else if (ClauseFactor.IN.equals(factor) || ClauseFactor.NOT_IN.equals(factor)) { + appendInClause(whereCause, field, operator, c.getValue(), params); } else { - // 处理普通条件(带占位符) - conditionExpr = String.format("%s %s ?", fieldName, operator); - // 处理函数模板(如 TO_DATE) - if (condition.getIndex() != null) { - conditionExpr = conditionExpr.replace("?", condition.getIndex()); - } - // 添加参数值 - if(ClauseFactor.LIKE.equals(factor)){ - params.add("%" + condition.getValue() + "%"); + String placeholder = "?"; + // 函数模板(如 TO_DATE(?)) + if (c.getIndex() != null) { + placeholder = c.getIndex(); + whereCause.append(" ").append(placeholder).append(",").append(field).append(")").append(operator).append(" ").append("0"); }else { - params.add(condition.getValue()); + whereCause.append(field).append(" ").append(operator).append(" ").append(placeholder); + } + if (ClauseFactor.LIKE.equals(factor)) { + params.add("%" + c.getValue() + "%"); + } else { + params.add(c.getValue()); } } - - whereClause.append(conditionExpr); - - // 处理括号闭合 - if (condition.isEndWithBracket()) { - whereClause.append(")"); + // 右括号 + if (c.isEndWithBracket()) { + whereCause.append(")"); } - - // 添加连接符(AND/OR) - if (conditionIndex < conditions.size() - 1) { - whereClause.append(" ").append(condition.getConcatFactor()).append(" "); + // AND / OR + if (i < conditions.size() - 1) { + whereCause.append(" ").append(c.getConcatFactor()).append(" "); } - conditionIndex++; } + return whereCause.toString(); + } - return whereClause.toString(); + private void appendInClause( + StringBuilder sql, + String field, + String operator, + Object value, + List params) { + if (!(value instanceof Collection)) { + throw new IllegalArgumentException("IN 条件的值必须是 Collection"); + } + Collection values = (Collection) value; + if (values.isEmpty()) { + // 防止 SQL 语法错误 + sql.append("1 = 0"); + return; + } + sql.append(field).append(" ").append(operator).append(" ("); + int index = 0; + for (Object v : values) { + if (index > 0) { + sql.append(", "); + } + sql.append("?"); + params.add(v); + index++; + } + sql.append(")"); } /** @@ -1070,6 +1086,7 @@ public class FormDataOperator { case GE: return ">="; case LT: return "<"; case LE: return "<="; + case IN: return "in"; case LIKE: return "LIKE"; case NULL: return "IS NULL"; // 空值判断 case NOT_NULL: return "IS NOT NULL"; // 非空判断 diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormWhereCondition.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormWhereCondition.java index 9cffe20..7be1989 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormWhereCondition.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/form/FormWhereCondition.java @@ -1,10 +1,15 @@ package com.seeyon.apps.src_rent.form; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + public class FormWhereCondition { private String display; private String fieldName; //字段名 private Object value; //值 + private List values; //值 private ClauseFactor clauseFactor = ClauseFactor.EQ; //条件因子 eq lt gt not_null null private ClauseFactor concatFactor = ClauseFactor.AND; //拼接因子 private boolean startWithBracket = false; //是否以括号开头生成子条件 @@ -12,6 +17,7 @@ public class FormWhereCondition { private String index; public FormWhereCondition() { + this.values = new ArrayList<>(); } public String getDisplay() { @@ -124,4 +130,21 @@ public class FormWhereCondition { public void setEndWithBracket(boolean endWithBracket) { this.endWithBracket = endWithBracket; } + + public List getValues() { + return values; + } + public FormWhereCondition addValue(Object value) { + this.values.add(value); + return this; + } + + public FormWhereCondition addAllValue(Collection values) { + this.values.addAll(values); + return this; + } + + public void setValues(List values) { + this.values = values; + } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/BillPayUrgeJob.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/BillPayUrgeJob.java index 7d37cee..d6f03e9 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/BillPayUrgeJob.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/BillPayUrgeJob.java @@ -3,13 +3,14 @@ package com.seeyon.apps.src_rent.job; import com.seeyon.apps.ext.quartz.AbstractQuartzTask; import com.seeyon.apps.src_rent.bill.BillService; import com.seeyon.apps.src_rent.bill.BillVo; +import com.seeyon.apps.src_rent.bill.WaeBillService; import com.seeyon.apps.src_rent.form.ClauseFactor; import com.seeyon.apps.src_rent.form.FormWhereCondition; import com.seeyon.apps.src_rent.message.ThirdMessageService; import com.seeyon.apps.src_rent.message.MessageVo; import com.seeyon.apps.src_rent.po.PageQueryVo; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; + import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -17,22 +18,22 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -@Component + public class BillPayUrgeJob extends AbstractQuartzTask { - @Autowired - private BillService billService; - @Autowired - private ThirdMessageService thirdMessageService; + private BillService billService = (BillService) AppContext.getBean("qcBillService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("qcWaeBillService"); + private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("qcThirdMessageService"); @Override public String taskRun(String s) throws Exception { + hanleContractBill(); return ""; } @Override public String getName() { - return ""; + return "账单催缴消息发送定时任务"; } private void hanleContractBill() { @@ -49,11 +50,45 @@ public class BillPayUrgeJob extends AbstractQuartzTask { for (BillVo data : datas) { //发送消息到小程序后端 MessageVo messageVo = new MessageVo(); - String context = "尊敬的用户,"; + String context = "尊敬的用户,您有一笔" + data.getBillAmount() + "元的" + data.getBillName() + "账单尚未支付,请尽快支付"; messageVo.setMessageContent(context); messageVo.setMessageTime(df.format(new Date())); - messageVo.setMessageType("UNPAIDBILL"); + messageVo.setMessageType("BILL"); messageVo.setMessageReceiver(data.getCusNo()); + messageVo.setBizId(data.getBillNo()); + messageVo.setMessageText(context); + messageVo.setTitle("账单催缴"); + thirdMessageService.sendMessage(messageVo); + } + }while (pageQueryVo != null && pageQueryVo.getDatas() != null); + }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)); + PageQueryVo pageQueryVo = null; + do{ + pageQueryVo = waeBillService.queryAllWaeBill(conditions); + List datas = pageQueryVo.getDatas(); + for (BillVo data : datas) { + //发送消息到小程序后端 + 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 (pageQueryVo != null && pageQueryVo.getDatas() != null); }catch (Exception e) { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/ContractSignUrgeJob.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/ContractSignUrgeJob.java new file mode 100644 index 0000000..7246023 --- /dev/null +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/ContractSignUrgeJob.java @@ -0,0 +1,67 @@ +package com.seeyon.apps.src_rent.job; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.apps.src_rent.contract.ContractService; +import com.seeyon.apps.src_rent.contract.OaContractVo; +import com.seeyon.apps.src_rent.message.MessageVo; +import com.seeyon.apps.src_rent.message.ThirdMessageService; +import com.seeyon.apps.src_rent.po.PageQueryVo; +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 = (ContractService) AppContext.getBean("qcContractService"); + private ThirdMessageService thirdMessageService = (ThirdMessageService) AppContext.getBean("qcThirdMessageService"); + + @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/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/SealDocSyncJob.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/SealDocSyncJob.java index 5152c34..54b870d 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/SealDocSyncJob.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/job/SealDocSyncJob.java @@ -11,23 +11,18 @@ import com.seeyon.apps.src_rent.po.SealInfoVo; import com.seeyon.apps.src_rent.service.SealService; import com.seeyon.apps.src_rent.service.TokenCacheManager; import com.seeyon.apps.src_rent.utils.HttpClient; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.Map; -@Component public class SealDocSyncJob extends AbstractQuartzTask { private static final Log log = LogFactory.getLog(SealDocSyncJob.class); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private TokenCacheManager tokenCacheManager; - @Autowired - private SealService sealService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("qcTokenCacheManager"); + private SealService sealService = (SealService) AppContext.getBean("qcSealService"); @Override public String taskRun(String s) throws Exception { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/logfile/EsignParamRecordUtils.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/logfile/EsignParamRecordUtils.java new file mode 100644 index 0000000..d2da796 --- /dev/null +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/logfile/EsignParamRecordUtils.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_rent.logfile; + +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.v3x.dee.util.DateUtil; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.util.Date; +import java.util.Map; + +public class EsignParamRecordUtils { + + public static void saveEsignParamRecord(Map params) { + try { + String str = "/home/seeyon/Seeyon/A8/ApacheJetspeed/logs_sy"; + String date = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + FileUtils.writeStringToFile(new File(str+"/esignParams/" + date + ".json"), JsonUtils.toJSONString(params), "UTF-8"); + }catch (Exception e){ + + } + } +} diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/MessageVo.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/MessageVo.java index aa49b01..8070a6d 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/MessageVo.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/MessageVo.java @@ -1,12 +1,19 @@ package com.seeyon.apps.src_rent.message; +import java.util.Map; + public class MessageVo { + private String title; private String messageType; private String messageContent; + private String messageText; private String messageTime; private String messageReceiver; private String bizId; + private Boolean sendSubscribeMsg; + private String subscribeMsgMode; + private Map templateValue; public String getMessageType() { return messageType; @@ -47,4 +54,44 @@ public class MessageVo { public void setBizId(String bizId) { this.bizId = bizId; } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getMessageText() { + return messageText; + } + + public void setMessageText(String messageText) { + this.messageText = messageText; + } + + public Boolean getSendSubscribeMsg() { + return sendSubscribeMsg; + } + + public void setSendSubscribeMsg(Boolean sendSubscribeMsg) { + this.sendSubscribeMsg = sendSubscribeMsg; + } + + public String getSubscribeMsgMode() { + return subscribeMsgMode; + } + + public void setSubscribeMsgMode(String subscribeMsgMode) { + this.subscribeMsgMode = subscribeMsgMode; + } + + public Map getTemplateValue() { + return templateValue; + } + + public void setTemplateValue(Map templateValue) { + this.templateValue = templateValue; + } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/ThirdMessageService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/ThirdMessageService.java index df95061..b92ae93 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/ThirdMessageService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/message/ThirdMessageService.java @@ -5,17 +5,14 @@ import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.utils.AESUtils; import com.seeyon.apps.src_rent.utils.HttpClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; import java.util.HashMap; import java.util.Map; -@Component public class ThirdMessageService { - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); public void sendMessage(MessageVo messageVo) { String url = configProvider.getBizConfigByKey(RentConstants.WECHATBACKENDHOST) + "/message/send"; diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignMultipleSignerNode.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignMultipleSignerNode.java index bdac9eb..e622d95 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignMultipleSignerNode.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignMultipleSignerNode.java @@ -9,6 +9,7 @@ import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.form.FormDataOperator; import com.seeyon.apps.src_rent.form.FormUpdateField; import com.seeyon.apps.src_rent.form.FormWhereCondition; +import com.seeyon.apps.src_rent.logfile.EsignParamRecordUtils; import com.seeyon.apps.src_rent.po.NormalSignFieldConfig; import com.seeyon.apps.src_rent.po.SignField; import com.seeyon.apps.src_rent.po.SignFieldPosition; @@ -21,17 +22,14 @@ import com.seeyon.cap4.form.bean.FormFieldBean; import com.seeyon.cap4.form.service.CAP4FormManager; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; -@Component public class EsignMultipleSignerNode extends ACommonSuperNode { private static final Log log = LogFactory.getLog(EsignMultipleSignerNode.class); @@ -40,14 +38,11 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { private static final String CONTRACT_ATTACHMENT_FIELD = "合同审批附件"; private static final String B_UNIT_NAME_FIELD = "乙方单位名称"; private static CAP4FormManager cap4FormManager = (CAP4FormManager) AppContext.getBean("cap4FormManager"); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private EsignByUploadFileService uploadFileService; - @Autowired - private EsignByTemplateService templateService; - @Autowired - private SignLinkService signLinkService; + private final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private EsignByUploadFileService uploadFileService = (EsignByUploadFileService) AppContext.getBean("qcEsignByUploadFileService"); + private EsignByTemplateService templateService = (EsignByTemplateService) AppContext.getBean("qcEsignByTemplateService"); + private SignLinkService signLinkService = (SignLinkService) AppContext.getBean("qcSignLinkService"); @Override public String getPluginId() { @@ -68,6 +63,7 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { try { Map signParams = buildSignParams(formDataVo, formDataMasterBean, true); if (signParams == null) throw new RuntimeException("签署参数构建失败"); + EsignParamRecordUtils.saveEsignParamRecord(signParams); String esignFlowId = templateService.createBySignTemplate(signParams); signLinkService.saveGetLinkParam(formDataVo, formDataMasterBean,esignFlowId); log.info("E签宝签署流程ID: " + esignFlowId + " , OA超级节点ID:" + formDataVo.getToken()); @@ -91,6 +87,11 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { config.put("signFlowTitle", contractName); config.put("autoFinish", true); config.put("notifyUrl", signCallBackUrl); + if(formDataVo.getFieldData("签约时效") != null) { + FieldDataVo signEndTime = formDataVo.getFieldData("签约时效"); + Date date = (Date) signEndTime.getDbValue(); + config.put("signFlowExpireTime",date.getTime()); + } Map noticeConfig = new HashMap<>(); noticeConfig.put("noticeTypes", "1"); config.put("noticeConfig", noticeConfig); @@ -100,10 +101,11 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { return config; } - private List buildSigners(FormDataVo formDataVo, String fileId, boolean qifengSign) throws Exception { + private List buildSigners(FormDataVo formDataVo, String fileId) throws Exception { List positions = uploadFileService.getSignPosition(fileId); - List bPositions = extractPosition(positions, "乙方盖章/签字"); - List aPositions = extractPosition(positions, "甲方盖章/签字"); + List bPositions = extractPosition(positions, configProvider.getBizConfigByKey(RentConstants.bSignPositionKeyword)); + List aPositions = extractPosition(positions, configProvider.getBizConfigByKey(RentConstants.aSignPositionKeyword)); + List lpPositions = extractPosition(positions, configProvider.getBizConfigByKey(RentConstants.lpSignPositionKeyword)); String bSignerType = formDataVo.getFieldData("乙方签署类型").getStringValue(); SignFieldPosition aQiFengposition = new SignFieldPosition(); @@ -112,7 +114,6 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { SignFieldPosition bQiFengposition = new SignFieldPosition(); bQiFengposition.setAcrossPageMode("ALL"); bQiFengposition.setPositionY(720f); - aPositions.add(aQiFengposition); bPositions.add(bQiFengposition); String sealId = getStringField(formDataVo,"甲方印章ID"); @@ -130,12 +131,29 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { Signer aSigner = createOrgSigner( fileId,null, aPositions, 1, null, null, null, null, null, null,true ,sealId); + buildALegalSignField(true,lpPositions,fileId,aSigner.getSignFields()); List signers = new ArrayList<>(); signers.add(bSigner); signers.add(aSigner); return signers; } + private void buildALegalSignField(Boolean autoSign,List lpPositions,String fileId,List signFields){ + for (SignFieldPosition lpPosition : lpPositions) { + NormalSignFieldConfig fieldConfig = new NormalSignFieldConfig(); + lpPosition.setPositionX(lpPosition.getPositionX() + 100f); + fieldConfig.setSignFieldPosition(lpPosition); + fieldConfig.setAssignedSealId(configProvider.getBizConfigByKey(RentConstants.legalSealId)); + fieldConfig.setAutoSign(autoSign); + fieldConfig.setSignFieldStyle(1); + SignField field = new SignField(); + field.setSignFieldType(0); + field.setNormalSignFieldConfig(fieldConfig); + field.setFileId(fileId); + signFields.add(field); + } + } + private Map buildSignParams(FormDataVo formDataVo, FormDataMasterBean formDataMasterBean, boolean byFile) throws Exception { log.info("开始构建签署方参数"); String fileId = null; @@ -154,7 +172,7 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { List docs = new ArrayList<>(); docs.add(docMap); Map signFlowConfig = buildSignFlowConfig(formDataVo, formDataMasterBean); - List signers = buildSigners(formDataVo, fileId,true); + List signers = buildSigners(formDataVo, fileId); Map signParams = new HashMap<>(); signParams.put("signFlowConfig", signFlowConfig); signParams.put("signers", signers); @@ -288,6 +306,9 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { } private List extractPosition(List positions, String keyword) { + if(StringUtils.isBlank(keyword)) { + return new ArrayList<>(); + } List posList = new ArrayList<>(); for (Object obj : positions) { Map position = (Map) obj; @@ -300,7 +321,7 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { Map tempMap = (Map) coord; SignFieldPosition sfp = new SignFieldPosition(); sfp.setPositionPage(posMap.get("pageNum") + ""); - sfp.setPositionX(toFloat(tempMap.get("positionX")) + 150f); + sfp.setPositionX(toFloat(tempMap.get("positionX")) + 200f); sfp.setPositionY(toFloat(tempMap.get("positionY"))); posList.add(sfp); } @@ -327,11 +348,11 @@ public class EsignMultipleSignerNode extends ACommonSuperNode { @Override public String getNodeId() { - return "nd_20250703"; + return "nd_20250803"; } @Override public String getNodeName() { - return "E签宝甲乙双方签署节点"; + return "启辰E签宝甲乙双方签署节点"; } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignOneSignerNode.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignOneSignerNode.java index 120647b..68b5b83 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignOneSignerNode.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/node/EsignOneSignerNode.java @@ -9,6 +9,7 @@ import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.form.FormDataOperator; import com.seeyon.apps.src_rent.form.FormUpdateField; import com.seeyon.apps.src_rent.form.FormWhereCondition; +import com.seeyon.apps.src_rent.logfile.EsignParamRecordUtils; import com.seeyon.apps.src_rent.po.NormalSignFieldConfig; import com.seeyon.apps.src_rent.po.SignField; import com.seeyon.apps.src_rent.po.SignFieldPosition; @@ -20,17 +21,16 @@ import com.seeyon.cap4.form.bean.FormFieldBean; import com.seeyon.cap4.form.service.CAP4FormManager; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -@Component public class EsignOneSignerNode extends ACommonSuperNode { private static final Log log = LogFactory.getLog(EsignOneSignerNode.class); @@ -39,12 +39,10 @@ public class EsignOneSignerNode extends ACommonSuperNode { private static final String CONTRACT_ATTACHMENT_FIELD = "合同审批附件"; private static final String B_UNIT_NAME_FIELD = "乙方单位名称"; private static CAP4FormManager cap4FormManager = (CAP4FormManager) AppContext.getBean("cap4FormManager"); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private EsignByUploadFileService uploadFileService; - @Autowired - private EsignByTemplateService templateService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private EsignByUploadFileService uploadFileService = (EsignByUploadFileService) AppContext.getBean("qcEsignByUploadFileService"); + private EsignByTemplateService templateService = (EsignByTemplateService) AppContext.getBean("qcEsignByTemplateService"); + private OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); @Override public String getPluginId() { @@ -65,6 +63,7 @@ public class EsignOneSignerNode extends ACommonSuperNode { try { Map signParams = buildSignParams(formDataVo, formDataMasterBean, true); if (signParams == null) throw new RuntimeException("签署参数构建失败"); + EsignParamRecordUtils.saveEsignParamRecord(signParams); String esignFlowId = templateService.createBySignTemplate(signParams); log.info("E签宝签署流程ID: " + esignFlowId + " , OA超级节点ID:" + formDataVo.getToken()); log.info("E签宝单方签署合同已发送: " + esignFlowId); @@ -102,34 +101,31 @@ public class EsignOneSignerNode extends ACommonSuperNode { aQiFengposition.setAcrossPageMode("ALL"); aQiFengposition.setPositionY(520f); String sealId = getStringField(formDataVo,"甲方印章ID"); - String psnName = getStringField(formDataVo,"甲方签署经办人"); + FieldDataVo psn = formDataVo.getFieldData("甲方签署经办人"); + String psnName = null; + if(psn != null) { + try { + V3xOrgMember member = orgManager.getMemberById(Long.parseLong((String) psn.getDbValue())); + psnName = member.getName(); + }catch (Exception e){ + + } + } + if(psnName == null) { + throw new RuntimeException("甲方签署经办人为空"); + } String psnMobile = getStringField(formDataVo,"甲方签署经办人联系方式"); String orgName = configProvider.getBizConfigByKey(RentConstants.UNITNAME); List pos = new ArrayList<>(); - Map> subFormMap = formDataVo.getSubFormMap(); - List subDataVos = subFormMap.get("甲方签署位置"); - Boolean autoSign = true; - if(subDataVos!= null && subDataVos.size() > 0 && !subDataVos.get(0).isEmpty()){ - for (FormDataVo subDataVo : subDataVos) { - Map fieldDataVoMap = subDataVo.getFieldDataVoMap(); - String pageNo = fieldDataVoMap.get("页码").getStringValue(); - String positionX = fieldDataVoMap.get("X坐标").getStringValue(); - String positionY = fieldDataVoMap.get("Y坐标").getStringValue(); - SignFieldPosition position = new SignFieldPosition(); - position.setPositionPage(pageNo); - position.setPositionX(Float.parseFloat(positionX)); - position.setPositionY(Float.parseFloat(positionY)); - pos.add(position); - } - pos.add(aQiFengposition); - }else { - autoSign = false; - } Signer aSigner = createOrgSigner( - fileId,orgName, pos, 1, null, null, null, psnMobile, psnName, null,autoSign + fileId,orgName, pos, null, null, null, psnMobile, psnName, null,false ,sealId); + Signer lpSigner = createLpSigner( + fileId,orgName, pos, null, null, null, psnMobile, psnName, null,false + ,sealId); List signers = new ArrayList<>(); signers.add(aSigner); + signers.add(lpSigner); return signers; } @@ -228,12 +224,67 @@ public class EsignOneSignerNode extends ACommonSuperNode { return signer; } - private Signer createOrgSigner(String fileId ,String orgName, List pos, int order, + private Signer createLpSigner(String fileId ,String orgName, List pos, + String legalName, String legalId, String orgCode, + String transPhone, String psnName, String psnId,Boolean autoSign,String sealId) { + Signer signer = new Signer(); + signer.setSignerType(2); + List signFields = new ArrayList<>(); + signer.setSignFields(signFields); + if(Boolean.FALSE.equals(autoSign)){ + signer.setNoticeConfig(mapOf("noticeTypes", "1")); + + Map orgInfo = mapOf("orgName", orgName, + "transactorInfo", mapOf( + "psnAccount", transPhone, + "psnInfo", mapOf( + "psnName", psnName + ) + ) + ); + signer.setOrgSignerInfo(orgInfo); + NormalSignFieldConfig normalSignFieldConfig = new NormalSignFieldConfig(); + normalSignFieldConfig.setAssignedSealId(sealId); + normalSignFieldConfig.setFreeMode(true); + normalSignFieldConfig.setAutoSign(false); + normalSignFieldConfig.setAdaptableSignFieldSize(true); + SignField field = new SignField(); + field.setSignFieldType(0); + field.setNormalSignFieldConfig(normalSignFieldConfig); + field.setFileId(fileId); + signFields.add(field); + }else { + for (SignFieldPosition po : pos) { + NormalSignFieldConfig fieldConfig = new NormalSignFieldConfig(); + fieldConfig.setAssignedSealId(sealId); + fieldConfig.setAutoSign(autoSign); + if("ALL".equals(po.getAcrossPageMode())){ + fieldConfig.setSignFieldPosition(po); + fieldConfig.setSignFieldStyle(2); + SignField qiFengfield = new SignField(); + qiFengfield.setSignFieldType(0); + qiFengfield.setNormalSignFieldConfig(fieldConfig); + qiFengfield.setFileId(fileId); + signFields.add(qiFengfield); + }else { + fieldConfig.setSignFieldPosition(po); + fieldConfig.setSignFieldStyle(1); + SignField field = new SignField(); + field.setSignFieldType(0); + field.setNormalSignFieldConfig(fieldConfig); + field.setFileId(fileId); + signFields.add(field); + } + } + } + return signer; + } + + private Signer createOrgSigner(String fileId ,String orgName, List pos, String legalName, String legalId, String orgCode, String transPhone, String psnName, String psnId,Boolean autoSign,String sealId) { Signer signer = new Signer(); signer.setSignerType(1); - signer.setSignConfig(mapOf("signOrder", order)); List signFields = new ArrayList<>(); signer.setSignFields(signFields); if(Boolean.FALSE.equals(autoSign)){ @@ -365,11 +416,11 @@ public class EsignOneSignerNode extends ACommonSuperNode { @Override public String getNodeId() { - return "nd_20250702"; + return "nd_20250802"; } @Override public String getNodeName() { - return "E签宝甲方单方签署节点"; + return "启辰E签宝甲方单方签署节点"; } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/notice/NoticeService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/notice/NoticeService.java index 1711d80..424c9f7 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/notice/NoticeService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/notice/NoticeService.java @@ -5,29 +5,26 @@ import com.seeyon.apps.src_rent.assets.OaAssetsVo; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.file.OaFileVo; -import com.seeyon.apps.src_rent.form.EnumMapUtils; -import com.seeyon.apps.src_rent.form.FormColumn; -import com.seeyon.apps.src_rent.form.FormDataOperator; -import com.seeyon.apps.src_rent.form.FormWhereCondition; +import com.seeyon.apps.src_rent.form.*; import com.seeyon.apps.src_rent.po.PageQueryVo; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; -@Component public class NoticeService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; + private RentConfigProvider configProvider = (RentConfigProvider)AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); private AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + private DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.NOTICEFORMNO); @@ -37,6 +34,9 @@ public class NoticeService { List conditions = buildConditions(params); Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); + Date date = new Date(); + conditions.add(FormWhereCondition.build().display("开始日期").clauseFactor(ClauseFactor.LE).value(df.format(date))); + conditions.add(FormWhereCondition.build().display("过期日期").clauseFactor(ClauseFactor.GT).value(df.format(date))); PageQueryVo pageQueryVo = new PageQueryVo(); List datas = formDataOperator.queryFormDataPageCondition(getFormNo(), true,null, conditions, pageNo, pageSize); List vos = new ArrayList<>(); @@ -93,11 +93,10 @@ public class NoticeService { vo.setNoticeContent(getStringValue(fieldsMap,"招租公告")); vo.setCreateTime(fieldsMap.get("申请日期") + ""); if(fieldsMap.get("相关附件") != null) { - vo.setAttachments(OaFileVo.getInstance((Long)fieldsMap.get("相关附件"),attachmentManager)); + vo.setAttachments(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("相关附件")),attachmentManager)); } if(fieldsMap.get("VR文件") != null) { - - vo.setImgs(OaFileVo.getInstance((Long)fieldsMap.get("VR文件"),attachmentManager)); + vo.setImgs(OaFileVo.getInstance(Long.parseLong((String)fieldsMap.get("VR文件")),attachmentManager)); } vo.setNoticeType("bussiness"); } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/reserve/ReserveService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/reserve/ReserveService.java index 976a405..e0c8091 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/reserve/ReserveService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/reserve/ReserveService.java @@ -10,21 +10,16 @@ import com.seeyon.apps.src_rent.form.FormDataOperator; import com.seeyon.apps.src_rent.form.FormWhereCondition; import com.seeyon.apps.src_rent.po.PageQueryVo; +import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.*; -@Component public class ReserveService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private AssetsService assetsService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.RESERVE_FORMNO); @@ -98,7 +93,7 @@ public class ReserveService { formDataOperator.insertFormData(loginName,getFormNo(),mainFormData,null); } - private List buildConditions(JSONObject params) { + 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"))); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignAuthService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignAuthService.java index 0a7e7d9..4414e0f 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignAuthService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignAuthService.java @@ -7,16 +7,14 @@ import com.seeyon.apps.src_rent.constants.RentConstants; import com.seeyon.apps.src_rent.po.EsignApiHeader; import com.seeyon.apps.src_rent.po.EsignBaseResp; import com.seeyon.apps.src_rent.utils.HttpClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; + import java.util.Map; -@Component public class EsignAuthService { - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); public void personAuth(Map authParams) throws Exception { EsignApiHeader esignApiHeader = EsignApiHeader.build(); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByTemplateService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByTemplateService.java index 281fecd..0e49213 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByTemplateService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByTemplateService.java @@ -8,20 +8,17 @@ import com.seeyon.apps.src_rent.po.EsignApiHeader; import com.seeyon.apps.src_rent.po.EsignBaseResp; import com.seeyon.apps.src_rent.utils.HttpClient; import com.seeyon.apps.src_rent.utils.JsonCleaner; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.Map; -@Component + public class EsignByTemplateService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private TokenCacheManager tokenCacheManager; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("qcTokenCacheManager"); private static final Log log = LogFactory.getLog(EsignByTemplateService.class); public void signByTemplate(Map params) { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByUploadFileService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByUploadFileService.java index e53f273..034c200 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByUploadFileService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignByUploadFileService.java @@ -9,9 +9,8 @@ import com.seeyon.apps.src_rent.utils.EsignHttpHelper; import com.seeyon.apps.src_rent.utils.EsignRequestType; import com.seeyon.apps.src_rent.utils.FileUtil; import com.seeyon.apps.src_rent.utils.HttpClient; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.codec.binary.Base64; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.io.File; import java.io.FileInputStream; @@ -22,13 +21,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@Component public class EsignByUploadFileService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - protected TokenCacheManager tokenCacheManager; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + protected TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("qcTokenCacheManager"); public Map getDownloadFileInfo(String flowId) throws Exception { @@ -79,8 +75,9 @@ public class EsignByUploadFileService { String url = configProvider.getBizConfigByKey(RentConstants.ESIGN_HOST) + reqPath; EsignApiHeader esignApiHeader = EsignApiHeader.build().appId(configProvider.getBizConfigByKey(RentConstants.APP_ID)); List keywords = new ArrayList<>(); - keywords.add("甲方盖章/签字"); - keywords.add("乙方盖章/签字"); + keywords.add(configProvider.getBizConfigByKey(RentConstants.bSignPositionKeyword)); + keywords.add(configProvider.getBizConfigByKey(RentConstants.aSignPositionKeyword)); + keywords.add(configProvider.getBizConfigByKey(RentConstants.lpSignPositionKeyword)); Map params = new HashMap<>(); params.put("keywords",keywords); esignApiHeader.token(tokenCacheManager.getToken()); diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignCallbackBizService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignCallbackBizService.java index 1fff75c..eaf530b 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignCallbackBizService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignCallbackBizService.java @@ -9,25 +9,20 @@ import com.seeyon.apps.src_rent.form.FormUpdateField; import com.seeyon.apps.src_rent.form.FormWhereCondition; import com.seeyon.apps.src_rent.utils.FileUtil; import com.seeyon.apps.src_rent.utils.ProtUtil; +import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.util.JDBCAgent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.Map; - -@Component public class EsignCallbackBizService { private static final Log log = LogFactory.getLog(EsignCallbackBizService.class); - @Autowired - private ProtUtil protUtil; - @Autowired - private RentConfigProvider configProvider; + private ProtUtil protUtil = (ProtUtil) AppContext.getBean("qcProtUtil"); + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); public void handleSuccessSignCallbackBiz(String tablename,String updatefield,String statusField,String formId,String fileUrl,String fileName) throws Exception { String[] strings = formId.split("_"); @@ -55,6 +50,26 @@ public class EsignCallbackBizService { formDataOperator.updateMasterForm(updateFields,tablename,conditions); } + public void handleExpiredSignCallbackBiz(String tableName,String statusField,String formId) throws Exception { + String[] strings = formId.split("_"); + String oaFlowId = strings[0]; + String tempFormId = strings[1]; + String[] statusParams = statusField.split("_"); + String status = statusParams[0]; + String enumId = statusParams[1]; + String enumItemId = EnumMapUtils.getEnumItemValueByEnumId("已过期",Long.parseLong(enumId)); + FormDataOperator formDataOperator = new FormDataOperator(); + List conditions = new ArrayList<>(); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().fieldName(status).value(enumItemId)); + conditions.add(FormWhereCondition.build().value(tempFormId).fieldName("ID")); + JSONObject params = new JSONObject(); + params.put("message", "签署失败: 合同已过最大签署期限未签署"); + params.put("returnCode", 2); + protUtil.sendPostNotification(params.toString(), configProvider.getBizConfigByKey(RentConstants.nodeTokenUrl), oaFlowId); + formDataOperator.updateMasterForm(updateFields,tableName,conditions); + } + public void handleFailSignCallbackBiz(String tableName,String statusField,String formId,String failMsg) throws Exception { String[] strings = formId.split("_"); String oaFlowId = strings[0]; diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignFileTemplateService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignFileTemplateService.java index b951bcf..31d2eb0 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignFileTemplateService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/EsignFileTemplateService.java @@ -9,30 +9,24 @@ import com.seeyon.apps.src_rent.po.EsignBaseResp; import com.seeyon.apps.src_rent.po.SignFile; import com.seeyon.apps.src_rent.po.TemplateComponent; import com.seeyon.apps.src_rent.utils.HttpClient; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.*; -@Component public class EsignFileTemplateService { private static final String ORI_TEMPLATE = "原始合同模板文件"; private static final Log log = LogFactory.getLog(EsignFileTemplateService.class); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private TokenCacheManager tokenCacheManager; - @Autowired - private EsignByUploadFileService uploadFileService; - private String orgId; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("qcTokenCacheManager"); + private EsignByUploadFileService uploadFileService = (EsignByUploadFileService)AppContext.getBean("qcEsignByUploadFileService"); - private void fillOrgId() { + private String getOrgId(String appId) { EsignApiHeader esignApiHeader = EsignApiHeader.build(); try { - esignApiHeader.token(tokenCacheManager.getToken()).appId(configProvider.getBizConfigByKey(RentConstants.APP_ID)); + esignApiHeader.token(tokenCacheManager.getToken()).appId(appId); } catch (Exception e) { e.printStackTrace(); } @@ -42,7 +36,7 @@ public class EsignFileTemplateService { String orgInfoRespStr = HttpClient.httpGet(reqUrl, esignApiHeader.convert2Headers(), "UTF-8"); EsignBaseResp orgInfoResp = JsonUtils.parseObject(orgInfoRespStr, EsignBaseResp.class); Map orgData = (Map) orgInfoResp.getData(); - orgId = (String) orgData.get("orgId"); + return (String) orgData.get("orgId"); } //填充模板 @@ -81,18 +75,18 @@ public class EsignFileTemplateService { } //获取模板详细信息 - public Map getTemplateDetail(String signTemplateId,String orgId) { + public Map getTemplateDetail(String appId,String signTemplateId,String orgId) { String url = configProvider.getBizConfigByKey(RentConstants.ESIGN_HOST) + EsignApiUrl.QUERY_TEMPLATE_DETAIL_URL + "?" +"orgId=" + orgId + "&signTemplateId=" + signTemplateId; - EsignApiHeader apiHeader = EsignApiHeader.build().token(tokenCacheManager.getToken()).appId(configProvider.getBizConfigByKey(RentConstants.APP_ID)); + EsignApiHeader apiHeader = EsignApiHeader.build().token(tokenCacheManager.getToken()).appId(appId); String resp = HttpClient.httpGet(url, apiHeader.convert2Headers(), "UTF-8"); EsignBaseResp esignBaseResp = JsonUtils.parseObject(resp, EsignBaseResp.class); Map data = (Map) esignBaseResp.getData(); return data; } - public Map queryTemplates(Integer pageNo) throws Exception { - EsignApiHeader esignApiHeader = EsignApiHeader.build().appId(configProvider.getBizConfigByKey(RentConstants.APP_ID)); - String queryStr = EsignApiUrl.QUERY_TEMPLATES_URL + "?" + "orgId=" + obtainOrgId() + "&pageNum=" + pageNo + "&pageSize=" + 20 + "&status=" + 1; + public Map queryTemplates(Integer pageNo,String appId) throws Exception { + EsignApiHeader esignApiHeader = EsignApiHeader.build().appId(appId); + String queryStr = EsignApiUrl.QUERY_TEMPLATES_URL + "?" + "orgId=" + obtainOrgId(appId) + "&pageNum=" + pageNo + "&pageSize=" + 20 + "&status=" + 1; esignApiHeader.token(tokenCacheManager.getToken()); String url = configProvider.getBizConfigByKey(RentConstants.ESIGN_HOST) + queryStr; String templateListRespStr = HttpClient.httpGet(url, esignApiHeader.convert2Headers(), "UTF-8"); @@ -106,7 +100,7 @@ public class EsignFileTemplateService { return pageMap; } - public String getCompareDetailUrl(String templateRefId,String contractRefId) throws Exception { + public String getCompareDetailUrl(String appId,String templateRefId,String contractRefId) throws Exception { String templateFileId = uploadFileService.uploadFileToEsign(templateRefId); String contractFileId = uploadFileService.uploadFileToEsign(contractRefId); String url = configProvider.getBizConfigByKey(RentConstants.ESIGN_HOST) + EsignApiUrl.CONTRACT_COMPARE_GETURL; @@ -114,7 +108,7 @@ public class EsignFileTemplateService { params.put("standardFileId",templateFileId); params.put("comparativeFileId",contractFileId); String jsonString = JsonUtils.toJSONString(params); - EsignApiHeader esignApiHeader = EsignApiHeader.build().appId(configProvider.getBizConfigByKey(RentConstants.APP_ID)); + EsignApiHeader esignApiHeader = EsignApiHeader.build().appId(appId); esignApiHeader.token(tokenCacheManager.getToken()); String respStr = HttpClient.httpPostRaw(url, jsonString, esignApiHeader.convert2Headers(), null); EsignBaseResp esignBaseResp = JsonUtils.parseObject(respStr, EsignBaseResp.class); @@ -124,10 +118,7 @@ public class EsignFileTemplateService { return contractCompareUrl; } - private String obtainOrgId() { - if(orgId == null) { - fillOrgId(); - } - return orgId; + private String obtainOrgId(String appId) { + return getOrgId(appId); } } diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SealService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SealService.java index 2f3ace1..ebfd397 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SealService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SealService.java @@ -21,17 +21,13 @@ import com.seeyon.v3x.services.form.bean.FormExport; import com.seeyon.v3x.services.form.bean.ValueExport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import java.util.*; -@Component public class SealService { private static final Log log = LogFactory.getLog(SealService.class); - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); private FormFactory formFactory; public FormFactory getFormFactory() { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SignLinkService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SignLinkService.java index 4303122..7381d4b 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SignLinkService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/SignLinkService.java @@ -9,11 +9,11 @@ import com.seeyon.apps.src_rent.po.EsignApiHeader; import com.seeyon.apps.src_rent.po.EsignBaseResp; import com.seeyon.apps.src_rent.utils.HttpClient; import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.util.JDBCAgent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; + import www.seeyon.com.utils.UUIDUtil; import java.util.ArrayList; @@ -21,14 +21,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@Component public class SignLinkService { private static final Log log = LogFactory.getLog(SignLinkService.class); - @Autowired - private RentConfigProvider configProvider; - @Autowired - private TokenCacheManager tokenCacheManager; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("qcTokenCacheManager"); public void saveGetLinkParam(FormDataVo formDataVo, FormDataMasterBean formDataMasterBean,String eFlowId) { try { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/TokenCacheManager.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/TokenCacheManager.java index cf8fe70..f91ca12 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/TokenCacheManager.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/TokenCacheManager.java @@ -8,8 +8,7 @@ import com.seeyon.apps.src_rent.po.EsignApiHeader; import com.seeyon.apps.src_rent.po.EsignBaseResp; import com.seeyon.apps.src_rent.po.EsignToken; import com.seeyon.apps.src_rent.utils.HttpClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; import java.util.Map; import java.util.concurrent.Executors; @@ -17,18 +16,16 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -@Component public class TokenCacheManager { - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); private final AtomicReference tokenRef = new AtomicReference<>(); private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); private static final long CHECK_INTERVAL = 2 * 60 * 60 * 1000; // 120分钟检查一次 - + public TokenCacheManager() { // 启动定期检查任务 - scheduler.scheduleAtFixedRate(this::checkTokenExpiry, + scheduler.scheduleAtFixedRate(this::checkTokenExpiry, CHECK_INTERVAL, CHECK_INTERVAL, TimeUnit.MILLISECONDS); } @@ -98,4 +95,5 @@ public class TokenCacheManager { public void shutdown() { scheduler.shutdown(); } + } \ No newline at end of file diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/WeAppContractSyncService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/WeAppContractSyncService.java index 36043ab..7accf86 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/WeAppContractSyncService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/service/WeAppContractSyncService.java @@ -2,7 +2,7 @@ package com.seeyon.apps.src_rent.service; import org.springframework.stereotype.Service; -@Service + public class WeAppContractSyncService { public void syncContract() { diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/utils/ProtUtil.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/utils/ProtUtil.java index de7ab72..e61dc45 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/utils/ProtUtil.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/utils/ProtUtil.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.seeyon.aicloud.common.JsonUtils; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; +import com.seeyon.ctp.common.AppContext; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -20,12 +21,11 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.Map; -@Component + public class ProtUtil { private static final Log log = LogFactory.getLog(ProtUtil.class); - @Autowired - private RentConfigProvider configProvider; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); public String getPluginId() {return RentConstants.getPluginId();} /** diff --git a/apps-customize/src/main/java/com/seeyon/apps/src_rent/viewrecord/ViewRecordService.java b/apps-customize/src/main/java/com/seeyon/apps/src_rent/viewrecord/ViewRecordService.java index f675414..ed1e13f 100644 --- a/apps-customize/src/main/java/com/seeyon/apps/src_rent/viewrecord/ViewRecordService.java +++ b/apps-customize/src/main/java/com/seeyon/apps/src_rent/viewrecord/ViewRecordService.java @@ -4,10 +4,8 @@ import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.assets.AssetsService; import com.seeyon.apps.src_rent.config.RentConfigProvider; import com.seeyon.apps.src_rent.constants.RentConstants; -import com.seeyon.apps.src_rent.form.EnumMapUtils; import com.seeyon.apps.src_rent.form.FormDataOperator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import com.seeyon.ctp.common.AppContext; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -16,15 +14,11 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -@Component public class ViewRecordService { - @Autowired - private RentConfigProvider configProvider; - @Autowired - private FormDataOperator formDataOperator; - @Autowired - private AssetsService assetsService; + private RentConfigProvider configProvider = (RentConfigProvider) AppContext.getBean("rentConfigProvider"); + private FormDataOperator formDataOperator = (FormDataOperator) AppContext.getBean("qcFormDataOperator"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.VIEWRECORD_FORMNO); @@ -35,7 +29,7 @@ public class ViewRecordService { Map mainFormData = new HashMap<>(); mainFormData.put("资产编号", params.getString("assetsNo")); mainFormData.put("资产名称", params.getString("assetsName")); - mainFormData.put("浏览人手机号", params.getString("appointeePhone")); + mainFormData.put("浏览人手机号", params.getString("phone")); String docNo = "weChat_" + UUID.randomUUID().toString().replace("-",""); mainFormData.put("档案编号",docNo); mainFormData.put("浏览时间",df.format(new Date())); diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/AssetsQueryResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/AssetsQueryResource.java similarity index 61% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/AssetsQueryResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/AssetsQueryResource.java index 9c1bc2b..90c10e1 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/AssetsQueryResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/AssetsQueryResource.java @@ -1,14 +1,12 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.assets.AssetsService; 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.*; import javax.ws.rs.core.Response; import java.io.IOException; @@ -18,10 +16,10 @@ import java.io.IOException; */ @Path("/assets") @Produces({"application/json", "application/xml"}) -public class AssetsQueryResource extends BaseResource{ +public class AssetsQueryResource extends BaseResource { private static final Log log = Log.get(AssetsQueryResource.class); - private AssetsService assetsService = (AssetsService) AppContext.getBean("assetsService"); + private AssetsService assetsService = (AssetsService) AppContext.getBean("qcAssetsService"); @POST @Path("/queryPage") @@ -51,4 +49,27 @@ public class AssetsQueryResource extends BaseResource{ } } + @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/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/BillResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/BillResource.java similarity index 69% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/BillResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/BillResource.java index 2c234d7..97af0fc 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/BillResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/BillResource.java @@ -1,4 +1,4 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; @@ -6,11 +6,11 @@ import com.seeyon.apps.src_rent.bill.BillService; import com.seeyon.apps.src_rent.bill.FeeRecordService; import com.seeyon.apps.src_rent.bill.WaeBillService; import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.IOException; @@ -20,12 +20,12 @@ import java.io.IOException; */ @Path("/bill") @Produces({"application/json", "application/xml"}) -public class BillResource extends BaseResource{ +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"); + private BillService billService = (BillService) AppContext.getBean("qcBillService"); + private WaeBillService waeBillService = (WaeBillService) AppContext.getBean("qcWaeBillService"); + private FeeRecordService feeRecordService = (FeeRecordService) AppContext.getBean("qcFeeRecordService"); @POST @Path("/contractBill/queryPage") @@ -68,14 +68,16 @@ public class BillResource extends BaseResource{ } } - @POST + @GET @Path("/pay/callback") @Produces({"application/json"}) - @Consumes({"application/json"}) - public Response onlinePayCallback(JSONObject params) throws IOException { - log.info("支付回调信息参数为:"+params); + public Response onlinePayCallback(@Context HttpServletRequest request) throws IOException { + String billNo = request.getParameter("billNo"); + String bizType = request.getParameter("bizType"); + log.info("支付回调信息参数为:"+ billNo +"," + bizType); try{ - return success(waeBillService.pageQueryWaeBill(params)); + feeRecordService.payCallBack(billNo,bizType); + return this.success("回调处理成功"); } catch (Exception e) { log.error(e.getMessage(),e); return fail(e.getMessage()); @@ -112,4 +114,23 @@ public class BillResource extends BaseResource{ } } + @POST + @Path("/payreceiver") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response getBillPayReceiver(JSONObject params) throws IOException { + log.info("获取账单收款方的参数:" + params, new Object[0]); + try { + String bizType = params.getString("bizType"); + if("rent".equals(bizType)){ + return this.success(billService.getBillPayReceiver(params.getString("billNo"))); + }else { + return this.success(waeBillService.getBillPayReceiver(params.getString("billNo"))); + } + } catch (Exception e) { + log.error(e.getMessage(), new Object[]{e}); + return this.fail(e.getMessage()); + } + } + } diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ContractResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ContractResource.java similarity index 94% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ContractResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ContractResource.java index d1efbf5..bcfeec4 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ContractResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ContractResource.java @@ -1,17 +1,16 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; -import com.seeyon.apps.src_rent.assets.AssetsService; import com.seeyon.apps.src_rent.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; -import java.net.URLDecoder; /** @@ -19,10 +18,10 @@ import java.net.URLDecoder; */ @Path("/contract") @Produces({"application/json", "application/xml"}) -public class ContractResource extends BaseResource{ +public class ContractResource extends BaseResource { private static final Log log = Log.get(ContractResource.class); - private ContractService contractService = (ContractService) AppContext.getBean("contractService"); + private ContractService contractService = (ContractService) AppContext.getBean("qcContractService"); @POST @Path("/queryPage") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/CustomerMatchResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/CustomerMatchResource.java similarity index 91% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/CustomerMatchResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/CustomerMatchResource.java index 81c4484..259ca9c 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/CustomerMatchResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/CustomerMatchResource.java @@ -1,10 +1,11 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.cus.Customer; import com.seeyon.apps.src_rent.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; @@ -18,10 +19,10 @@ import java.io.IOException; */ @Path("/cus") @Produces({"application/json", "application/xml"}) -public class CustomerMatchResource extends BaseResource{ +public class CustomerMatchResource extends BaseResource { private static final Log log = Log.get(CustomerMatchResource.class); - private CustomerService customerService = (CustomerService) AppContext.getBean("customerService"); + private CustomerService customerService = (CustomerService) AppContext.getBean("qcCustomerService"); @POST @Path("/matchPerson") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/DisChargeResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/DisChargeResource.java similarity index 88% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/DisChargeResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/DisChargeResource.java index cd1cd78..2b39f66 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/DisChargeResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/DisChargeResource.java @@ -1,9 +1,10 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.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; @@ -18,10 +19,10 @@ import java.io.IOException; */ @Path("/discharge") @Produces({"application/json", "application/xml"}) -public class DisChargeResource extends BaseResource{ +public class DisChargeResource extends BaseResource { private static final Log log = Log.get(DisChargeResource.class); - private DisCharegeService disCharegeService = (DisCharegeService) AppContext.getBean("disCharegeService"); + private DisCharegeService disCharegeService = (DisCharegeService) AppContext.getBean("qcDisCharegeService"); @POST @Path("/queryPage") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FallbackResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FallbackResource.java similarity index 90% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FallbackResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FallbackResource.java index e25ede8..981b274 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FallbackResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FallbackResource.java @@ -1,9 +1,10 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.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; @@ -18,10 +19,10 @@ import java.io.IOException; */ @Path("/fallback") @Produces({"application/json", "application/xml"}) -public class FallbackResource extends BaseResource{ +public class FallbackResource extends BaseResource { private static final Log log = Log.get(FallbackResource.class); - private FallbackService fallbackService = (FallbackService) AppContext.getBean("fallbackService"); + private FallbackService fallbackService = (FallbackService) AppContext.getBean("qcFallbackService"); @POST @Path("/queryPage") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FileTransportResource.java similarity index 81% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FileTransportResource.java index 49e672c..746707b 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/FileTransportResource.java @@ -1,8 +1,9 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.seeyon.apps.src_rent.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; @@ -14,10 +15,10 @@ import javax.ws.rs.core.Context; * 提供给外部下载OA文件 */ @Path("/fileTransport") -public class FileTransportResource extends BaseResource{ +public class FileTransportResource extends BaseResource { private static final Log log = Log.get(FileTransportResource.class); - private FileHandlerService fileHandlerService = (FileHandlerService) AppContext.getBean("fileHandlerService"); + private FileHandlerService fileHandlerService = (FileHandlerService) AppContext.getBean("qcFileHandlerService"); @GET @Path("/downloadFile") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/NoticeResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/NoticeResource.java similarity index 81% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/NoticeResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/NoticeResource.java index bfa8e15..86d6e63 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/NoticeResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/NoticeResource.java @@ -1,15 +1,12 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; -import com.seeyon.apps.src_rent.file.FileHandlerService; import com.seeyon.apps.src_rent.notice.NoticeService; 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.*; -import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.IOException; @@ -17,10 +14,10 @@ import java.io.IOException; * 招商公告 */ @Path("/notice") -public class NoticeResource extends BaseResource{ +public class NoticeResource extends BaseResource { private static final Log log = Log.get(NoticeResource.class); - private NoticeService noticeService = (NoticeService) AppContext.getBean("noticeService"); + private NoticeService noticeService = (NoticeService) AppContext.getBean("qcNoticeService"); @POST @Path("/queryPage") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReserveResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ReserveResource.java similarity index 91% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReserveResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ReserveResource.java index 3ec5ad8..f039bec 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReserveResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ReserveResource.java @@ -1,9 +1,10 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.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; @@ -18,10 +19,10 @@ import java.io.IOException; */ @Path("/reserve") @Produces({"application/json", "application/xml"}) -public class ReserveResource extends BaseResource{ +public class ReserveResource extends BaseResource { private static final Log log = Log.get(ReserveResource.class); - private ReserveService reserveService = (ReserveService) AppContext.getBean("reserveService"); + private ReserveService reserveService = (ReserveService) AppContext.getBean("qcReserveService"); @POST @Path("/queryPage") diff --git a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ViewRecordResource.java b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ViewRecordResource.java similarity index 82% rename from apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ViewRecordResource.java rename to apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ViewRecordResource.java index 65992a3..bcaffdc 100644 --- a/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ViewRecordResource.java +++ b/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/rent/ViewRecordResource.java @@ -1,9 +1,10 @@ -package com.seeyon.ctp.rest.resources; +package com.seeyon.ctp.rest.resources.rent; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.src_rent.viewrecord.ViewRecordService; import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.rest.resources.BaseResource; import javax.ws.rs.*; import javax.ws.rs.core.Response; @@ -13,10 +14,10 @@ import java.io.IOException; * 记录微信小程序租户浏览资产记录 */ @Path("/potential") -public class ViewRecordResource extends BaseResource{ +public class ViewRecordResource extends BaseResource { private static final Log log = Log.get(ViewRecordResource.class); - private ViewRecordService viewRecordService = (ViewRecordService) AppContext.getBean("viewRecordService"); + private ViewRecordService viewRecordService = (ViewRecordService) AppContext.getBean("qcViewRecordService"); @POST @Path("/add") diff --git a/apps-customize/src/main/resources/needless_check_login.xml b/apps-customize/src/main/resources/needless_check_login.xml index f52b410..7a85dc7 100644 --- a/apps-customize/src/main/resources/needless_check_login.xml +++ b/apps-customize/src/main/resources/needless_check_login.xml @@ -1,5 +1,11 @@ + + /assetsmap.do + + index + + /esigncallback.do diff --git a/apps-customize/src/main/resources/needless_check_login_recheck.xml b/apps-customize/src/main/resources/needless_check_login_recheck.xml index 1f764a4..d54e90c 100644 --- a/apps-customize/src/main/resources/needless_check_login_recheck.xml +++ b/apps-customize/src/main/resources/needless_check_login_recheck.xml @@ -1,7 +1,13 @@ - + + /assetsmap.do + com.seeyon.apps.src_rent.controller.AssetsMapController + + index + + /esigncallback.do com.seeyon.apps.src_rent.controller.EsignCallBackController diff --git a/seeyon/WEB-INF/cfgHome/component/src_rent/spring/spring-bean.xml b/seeyon/WEB-INF/cfgHome/component/src_rent/spring/spring-bean.xml index 016b020..ca5b6df 100644 --- a/seeyon/WEB-INF/cfgHome/component/src_rent/spring/spring-bean.xml +++ b/seeyon/WEB-INF/cfgHome/component/src_rent/spring/spring-bean.xml @@ -1,12 +1,36 @@ - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +