ecology_maven/weaver/aiyh_pcn/fadada/util/FaddContractUtil.java

349 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package weaver.aiyh_pcn.fadada.util;
import aiyh.utils.Util;
import aiyh.utils.entity.ApiConfigMainDTO;
import aiyh.utils.httpUtil.ResponeVo;
import aiyh.utils.mapUtil.ParaMap;
import aiyh.utils.sqlUtil.sqlResult.impl.PrepSqlResultImpl;
import aiyh.utils.zwl.common.ToolUtil;
import com.api.aiyh_pcn.fadada.dao.FaDDContractMapping;
import com.api.aiyh_pcn.fadada.entity.FaDaDaConfigDTO;
import com.api.aiyh_pcn.fadada.service.impl.FaDDContractService;
import com.api.aiyh_pcn.fadada.util.FaDDRequestUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.weaver.general.TimeUtil;
import org.h2.util.StringUtils;
import weaver.aiyh_pcn.fadada.entity.FileInfo;
import weaver.conn.RecordSet;
import weaver.file.ImageFileManager;
import weaver.formmode.data.ModeDataIdUpdate;
import weaver.formmode.setup.ModeRightInfo;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author EBU7-dev1-ayh
* @create 2021/11/3 0003 16:50
* heton gonjvlei
*/
public class FaddContractUtil {
private String workflowId;
private String requestId;
private String mainTableName;
private String tableName;
private String customerNo;
private String contractField;
private String queueSigned;
private final String contractInfoTable = "uf_contract_info";
private String customerNoField;
private List<Map<String, Object>> detailMaps;
private Map<String, Object> mainMap;
private FaDDContractMapping faDDContractMapping = new FaDDContractMapping();
private FaDDContractService faDDContractService = new FaDDContractService();
private final ToolUtil toolUtil = new ToolUtil();
public FaddContractUtil() {
}
public FaddContractUtil(String workflowId, String requestId, String mainTableName, String tableName, String customerNo,
String customerNoField, String contractField,String queueSigned, List<Map<String, Object>> detailMaps, Map<String, Object> mainMap) {
this.workflowId = workflowId;
this.requestId = requestId;
this.mainTableName = mainTableName;
this.tableName = tableName;
this.customerNo = customerNo;
this.customerNoField = customerNoField;
this.contractField = contractField;
this.queueSigned = queueSigned;
this.detailMaps = detailMaps;
this.mainMap = mainMap;
}
/**
* 创建合同
*/
public void createContract(Map<String, Object> mainMap) {
// 查询配置参数
FaDaDaConfigDTO faDaDaConfigDTO = faDDContractMapping.queryConfig(workflowId, 2);
// 查询api配置参数
ApiConfigMainDTO apiConfigMainDTO = Util.queryApiConfig(Util.null2String(faDaDaConfigDTO.getParamsConfig()));
RecordSet rs = new RecordSet();
List<FileInfo> fileInfos = this.contractHandle(this.contractField);
List<String> contractNoIds = new ArrayList<>();
List<String> fileNoIds = new ArrayList<>();
List<String> fileName = new ArrayList<>();
if (fileInfos.size() == 0) {
toolUtil.writeErrorLog("fileInfos 为空");
}
// 多文件的时候会遍历文件去创建合同问文件,但是一个流程只创建一次,一次可能回有多份文件需要创建为合同文件
for (FileInfo fileInfo : fileInfos) {
// 发起合同创建
ResponeVo contract = FaDDRequestUtils.createContract(fileInfo, apiConfigMainDTO.getApiUrl());
Map<String, Object> result;
try {
Map<String, Object> entityMap = contract.getEntityMap();
if (!"200".equals(String.valueOf(entityMap.get("code")))) {
toolUtil.writeErrorLog("创建合同失败,错误信息:" + entityMap.get("message"));
throw new RuntimeException("创建合同失败!");
}
result = (Map<String, Object>) entityMap.get("data");
contractNoIds.add(Util.null2String(result.get("contractNo")));
fileNoIds.add(Util.null2String(result.get("fileNo")));
fileName.add(fileInfo.getImagefilename());
} catch (JsonProcessingException e) {
toolUtil.writeErrorLog(e.toString());
throw new RuntimeException("创建合同失败!");
}
}
// 创建合同文件成功之后收集合同编号,文件编号和合同文件的名字
String joinContract = String.join(",", contractNoIds);
String joinFileNoIds = String.join(",", fileNoIds);
String joinFileName = String.join(",", fileName);
/*
TODO 主表创建字段 contract_no(合同编号)、file_no(文件编号)、file_name(文件名称)
TODO 明细表添加字段signed_status合同方签署状态
*/
// 将合同的基本信息更新到流程主表中保存
Map<String, Object> updateMap = ParaMap.create().put("contract_no", joinContract)
.put("file_no", joinFileNoIds)
.put("file_name", joinFileName);
PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(this.mainTableName, updateMap,
Util.createPrepWhereImpl().whereAnd("id").whereEqual(mainMap.get("id")));
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
// 将合同信息和流程表信息保存到自定义的建模表中
updateMap.put("workflow_type",workflowId);
updateMap.put("workflow_request_id",requestId);
updateMap.put("workflow_main_table",mainTableName);
updateMap.put("workflow_detail_table",tableName);
// 1表示创建 2表示等待对方签署3表示等待本方签署4表示完成
updateMap.put("contract_status",1);
// 对方应该签署的数量
updateMap.put("should_signed_num",detailMaps.size());
// 现在已经签署的数量
updateMap.put("signed_num",0);
updateMap.put("signed_type",3);
updateMap.put("main_id",String.valueOf(mainMap.get("id")));
updateMap.put("queue_signed","true".equals(queueSigned) ? 1 : 0);
updateMap.put("single_contract_file_num",contractNoIds.size());
// 如果需要控制签署规则
if (faDaDaConfigDTO.getSignedType() == 1) {
// 需要控制签署规则
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOwn()) {
// 只需要本方签署
updateMap.put("contract_status",3);
// 对方应该签署的数量
updateMap.put("should_signed_num",0);
// 现在已经签署的数量
updateMap.put("signed_num",0);
updateMap.put("queue_signed",0);
updateMap.put("signed_type",1);
}
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOther()) {
updateMap.put("signed_type",2);
}
}
// 查询合同信息中,是否存在该信息,如果存在着更新,不存在则插入
String query = "select * from " + contractInfoTable + " where workflow_request_id = ?";
rs.executeQuery(query,requestId);
String formModeId = "52";
if(rs.next()){
sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable,updateMap,
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
// 权限重构
ModeRightInfo mri = new ModeRightInfo();
int dataId = rs.getInt("id");
toolUtil.writeDebuggerLog("id" + dataId);
mri.rebuildModeDataShareByEdit(1,Util.getIntValue(formModeId,-1),dataId);
}else{
ModeDataIdUpdate mdu = ModeDataIdUpdate.getInstance();
int dataId = mdu.getModeDataNewId(contractInfoTable,
Util.getIntValue(formModeId,-1),
1, 0, TimeUtil.getCurrentDateString(),
TimeUtil.getOnlyCurrentTimeString());
sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, updateMap,
Util.createPrepWhereImpl().whereAnd("id").whereEqual(dataId));
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
ModeRightInfo mri = new ModeRightInfo();
mri.rebuildModeDataShareByEdit(1,Util.getIntValue(formModeId,-1),dataId);
}
}
/**
* 处理合同创建数据
*
* @param contractField
* @return
*/
public List<FileInfo> contractHandle(String contractField) {
String fileIds = Util.null2String(this.mainMap.get(contractField));
// 如果没有合同字段的数据,则返回一个空的
if ("".equals(fileIds)) {
return new ArrayList<>();
}
List<FileInfo> fileInfos = faDDContractMapping.queryImgFileIdByDocIds(fileIds);
String customer = customerNo;
// 查询创建合同的企业编号
if (StringUtils.isNullOrEmpty(customerNo)) {
toolUtil.writeErrorLog("创建合同失败失败原因customerNo 为空!");
}
// 处理数据信息
for (FileInfo fileInfo : fileInfos) {
InputStream inputStreamById = ImageFileManager.getInputStreamById(fileInfo.getImagefileid());
fileInfo.setFile(inputStreamById);
String imagefilename = fileInfo.getImagefilename();
if (imagefilename == null) {
return new ArrayList<>();
}
fileInfo.setContractExtension(imagefilename.substring(imagefilename.lastIndexOf(".")));
fileInfo.setContractTitle(imagefilename);
fileInfo.setCustomerNo(Util.null2String(customer));
if (StringUtils.isNullOrEmpty(fileInfo.getCustomerNo())) {
toolUtil.writeErrorLog("创建合同失败失败原因customer");
// fileInfo.setCustomerNo(Util.null2String(detail.get("companyno")));
}
fileInfo.setUploadType(1);
}
return fileInfos;
}
/**
* 签署合同
*/
public void signedContract() {
// 获取配置表信息
FaDaDaConfigDTO faDaDaConfigDTO = faDDContractMapping.queryConfig(workflowId, 3);
// 查询接口配置树形结构
ApiConfigMainDTO apiConfigMainDTO = Util.queryApiConfigTree(faDaDaConfigDTO.getParamsConfig());
// 查询签署数据
List<Map<String, Object>> dataArr = faDDContractService.getDataArr(requestId, workflowId, mainTableName, tableName);
// 处理数据
List<Map<String, Object>> maps = faDDContractService.objectAndListHandle(apiConfigMainDTO.getDetails(), dataArr);
if(maps == null){
toolUtil.writeErrorLog("签署合同错误错误原因maps为null!");
throw new RuntimeException("签署合同错误错误原因maps为null");
}
if(maps.size() == 0){
return;
}
RecordSet rs = new RecordSet();
Map<String,Object> update = new HashMap<>();
// 顺序签署合同
if("true".equals(queueSigned)){
Map<String, Object> map = maps.get(0);
signedRequest(map,apiConfigMainDTO);
// 将合同签署信息更新到合同信息表中
update.put("contract_status",2);
// update.put("single_signed_num",0);
PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, update,
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
rs.executeUpdate(sqlResult.getSqlStr(),sqlResult.getArgs());
update.clear();
// 更新明细表合同信息 TODO 明细表添加字段signed_status合同方签署状态
// 签署状态1 已发送待签署2 已签蜀
update.put("signed_status",1);
sqlResult = Util.createSqlBuilder().updateSql(tableName, update,
Util.createPrepWhereImpl().whereAnd("id").whereEqual(String.valueOf(map.get("id"))));
rs.executeUpdate(sqlResult.getSqlStr(),sqlResult.getArgs());
return;
}
// 不是顺序签署
for (Map<String, Object> map : maps) {
signedRequest(map,apiConfigMainDTO);
}
// 将合同签署信息更新到合同信息表中
update.put("contract_status",2);
PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, update,
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
rs.executeUpdate(sqlResult.getSqlStr(),sqlResult.getArgs());
}
/**
* 合同签署发送请求
* @param map
* @param apiConfigMainDTO
*/
private void signedRequest(Map<String, Object> map, ApiConfigMainDTO apiConfigMainDTO){
String contractNos = Util.null2String(map.get("contractNo"));
String[] split = contractNos.split(",");
// RecordSet rs = new RecordSet();
for (String s : split) {
map.put("contractNo", s);
ResponeVo responeVo = FaDDRequestUtils.signedContract(map, apiConfigMainDTO.getApiUrl());
Map<String, Object> response = null;
try {
response = responeVo.getEntityMap();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
if (!"200".equals(response.get("code"))) {
toolUtil.writeErrorLog("法大大接口签署合同失败!");
throw new RuntimeException("法大大接口签署合同失败!");
}
}
}
@Override
public String toString() {
return "FaddContractUtil{" +
"workflowId='" + workflowId + '\'' +
", requestId='" + requestId + '\'' +
", mainTableName='" + mainTableName + '\'' +
", tableName='" + tableName + '\'' +
", customerNo='" + customerNo + '\'' +
", contractField='" + contractField + '\'' +
", queueSigned='" + queueSigned + '\'' +
", contractInfoTable='" + contractInfoTable + '\'' +
", customerNoField='" + customerNoField + '\'' +
", detailMaps=" + detailMaps +
", mainMap=" + mainMap +
'}';
}
public String getWorkflowId() {
return workflowId;
}
public void setWorkflowId(String workflowId) {
this.workflowId = workflowId;
}
public String getRequestId() {
return requestId;
}
public void setRequestId(String requestId) {
this.requestId = requestId;
}
public String getMainTableName() {
return mainTableName;
}
public void setMainTableName(String mainTableName) {
this.mainTableName = mainTableName;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
}