2021-11-14 15:29:16 +08:00
|
|
|
|
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() {
|
|
|
|
|
// 查询配置参数
|
|
|
|
|
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(文件名称)
|
|
|
|
|
*/
|
|
|
|
|
// 将合同的基本信息更新到流程主表中保存
|
|
|
|
|
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")));
|
2021-11-23 11:05:14 +08:00
|
|
|
|
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
|
2021-11-14 15:29:16 +08:00
|
|
|
|
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("main_id",String.valueOf(mainMap.get("id")));
|
|
|
|
|
updateMap.put("queue_signed","true".equals(queueSigned) ? 1 : 0);
|
|
|
|
|
updateMap.put("single_contract_file_num",contractNoIds.size());
|
|
|
|
|
// 查询合同信息中,是否存在该信息,如果存在着更新,不存在则插入
|
|
|
|
|
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));
|
2021-11-23 11:05:14 +08:00
|
|
|
|
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
|
2021-11-14 15:29:16 +08:00
|
|
|
|
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
|
|
|
|
|
// 权限重构
|
|
|
|
|
ModeRightInfo mri = new ModeRightInfo();
|
|
|
|
|
int dataId = rs.getInt("id");
|
2021-11-23 11:05:14 +08:00
|
|
|
|
toolUtil.writeDebuggerLog("id:" + dataId);
|
2021-11-14 15:29:16 +08:00
|
|
|
|
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));
|
2021-11-23 11:05:14 +08:00
|
|
|
|
toolUtil.writeDebuggerLog(sqlResult.getSqlStr() + ",参数:" + sqlResult.getArgs());
|
2021-11-14 15:29:16 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|