package com.seeyon.apps.assetstenant.discharge; import com.alibaba.fastjson.JSONObject; import com.seeyon.apps.assetstenant.assets.OaAssetsVo; import com.seeyon.apps.assetstenant.config.AssetsTenantConfigProvider; import com.seeyon.apps.assetstenant.constants.RentConstants; import com.seeyon.apps.assetstenant.contract.ContractService; import com.seeyon.apps.assetstenant.flow.FlowCreateService; import com.seeyon.apps.assetstenant.po.PageQueryVo; import com.seeyon.cap4.form.api.FormApi4Cap4; import com.seeyon.cap4.form.bean.FormBean; import com.seeyon.cap4.form.bean.FormTableBean; import com.seeyon.ctp.common.AppContext; import com.seeyon.ctp.common.exceptions.BusinessException; import com.seeyon.utils.form.*; import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; public class DisCharegeService { private AssetsTenantConfigProvider configProvider = (AssetsTenantConfigProvider) AppContext.getBean("assetsTenantConfigProvider"); private FlowCreateService flowCreateService = (FlowCreateService) AppContext.getBean("flowCreateService"); private ContractService contractService = (ContractService) AppContext.getBean("contractService"); private String getFormNo() { return configProvider.getBizConfigByKey(RentConstants.DISCHARGE_FORMNO); } private TableContext getTableContext() throws BusinessException { return FormTableExecutor.master(getFormNo()); } private String getStringValue(Map fieldsMap,String key) { Object o = fieldsMap.get(key); if(o == null) { return null; } return o + ""; } public PageQueryVo pageQuery(JSONObject params) throws Exception { List conditions = buildConditions(params); Integer pageNo = params.getInteger("pageNo") == null ? 1 : params.getInteger("pageNo"); Integer pageSize = params.getInteger("pageSize") == null ? 10 : params.getInteger("pageSize"); List queryColumnVos = new ArrayList<>(); PageQueryVo pageQueryVo = new PageQueryVo(); List vos = new ArrayList<>(); TableContext tableContext = getTableContext(); List datas = FormTableExecutor.pageQuery(tableContext, queryColumnVos, conditions, pageNo, pageSize,true); Long count = FormTableExecutor.count(tableContext,null, conditions); if(datas.size() > 0){ for (Object data : datas) { Map map = (Map) data; DisChargeRecordVo vo = new DisChargeRecordVo(); fillVo(map,vo); vos.add(vo); } pageQueryVo.setDatas(vos); pageQueryVo.setTotalCount(count); } return pageQueryVo; } public void saveApplay(JSONObject params) throws Exception { TableContext tableContext = getTableContext(); FormTableBean masterTableBean = tableContext.getTableBean(); String tableName = masterTableBean.getTableName(); String subDbTableName = null; TableContext sub = FormTableExecutor.sub(getFormNo(), "租赁资产"); subDbTableName = sub.getTableName(); Map mainFormData = new HashMap<>(); Map> subFormDataMap = new HashMap<>(); List subFormDataList = new ArrayList<>(); Map data = new HashMap<>(); subFormDataMap.put(subDbTableName,subFormDataList); String templateCode = configProvider.getBizConfigByKey(RentConstants.DISCHARGE_TEMPLATECODE); String appName = configProvider.getBizConfigByKey(RentConstants.FORMAPPNAME); mainFormData.put(tableName,data); String contractNo = params.getString("contractNo"); List assetsNoList = (List) params.get("assetsNoList"); Set assetsNoSet = assetsNoList.stream().collect(Collectors.toSet()); List oaAssetsVos = contractService.queryContractAllAssets(contractNo); if(oaAssetsVos != null) { oaAssetsVos.forEach(oaAssetsVo -> { if(assetsNoSet.contains(oaAssetsVo.getAssetsNo())){ Map tempMap = new HashMap<>(); tempMap.put("资产编号",oaAssetsVo.getAssetsNo()); subFormDataList.add(tempMap); } }); } data.put("合同名称",params.getString("contractName")); data.put("合同编号",contractNo); data.put("承租方类型", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(), "承租方类型", params.getString("cusType"))); data.put("承租方名称",params.getString("cusName")); data.put("联系方式",params.getString("phone")); data.put("终止原因",params.getString("reason")); data.put("退租申请状态",EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"退租申请状态","申请中")); data.put("清算状态",EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"清算状态","未清算")); flowCreateService.flowStart("退租申请",mainFormData,subFormDataMap,appName,templateCode); } public void fillVo(Map fieldsMap,DisChargeRecordVo vo) throws BusinessException { vo.setContractName(getStringValue(fieldsMap,"合同名称")); vo.setId(getStringValue(fieldsMap,"id")); vo.setRemark(getStringValue(fieldsMap,"审批意见")); vo.setStatus(getStringValue(fieldsMap,"退租申请状态")); vo.setApplyDate(getStringValue(fieldsMap,"经办日期")); Long id = Long.parseLong(vo.getId()); List subConditions = new ArrayList<>(); subConditions.add(FormWhereCondition.build().display("formmain_id").value(id)); TableContext subtableContext = FormTableExecutor.sub(getFormNo(), "租赁资产"); List subDatas = FormTableExecutor.query(subtableContext, null,subConditions,true); StringBuilder dischargeItem = new StringBuilder(""); for (FormColumn subData : subDatas) { Map subDataFieldsMap = subData.getFieldsMap(); String assetsName = (String) subDataFieldsMap.get("资产名称"); dischargeItem.append(assetsName).append(","); } vo.setDischargeItem(dischargeItem.toString()); } private List buildConditions(JSONObject params) { List conditions = new ArrayList<>(); if(StringUtils.isNotBlank(params.getString("cusNo"))) { conditions.add(FormWhereCondition.build().display("承租方编号").value(params.getString("cusNo"))); } return conditions; } }