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

366 lines
14 KiB
Java
Raw Normal View History

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) {
2021-11-14 15:29:16 +08:00
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;
}
/**
*
*/
2021-12-02 10:51:11 +08:00
public void createContract(Map<String, Object> mainMap) {
2021-11-14 15:29:16 +08:00
// 查询配置参数
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()
2021-12-02 16:30:10 +08:00
TODO signed_status
2021-11-14 15:29:16 +08:00
*/
// 将合同的基本信息更新到流程主表中保存
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());
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);
2021-11-14 15:29:16 +08:00
// 1表示创建 2表示等待对方签署3表示等待本方签署4表示完成
updateMap.put("contract_status", 1);
2021-12-02 10:51:11 +08:00
// 对方应该签署的数量
updateMap.put("should_signed_num", detailMaps.size());
2021-12-02 10:51:11 +08:00
// 现在已经签署的数量
updateMap.put("signed_num", 0);
updateMap.put("signed_type", 3);
2021-12-02 10:51:11 +08:00
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());
2021-12-02 10:51:11 +08:00
// 如果需要控制签署规则
if (faDaDaConfigDTO.getSignedType() == 1) {
// 需要控制签署规则
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOwn()) {
// 只需要本方签署
updateMap.put("contract_status", 3);
2021-12-02 10:51:11 +08:00
// 对方应该签署的数量
updateMap.put("should_signed_num", 0);
2021-12-02 10:51:11 +08:00
// 现在已经签署的数量
updateMap.put("signed_num", 0);
updateMap.put("queue_signed", 0);
updateMap.put("signed_type", 1);
2021-12-02 10:51:11 +08:00
}
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOther()) {
updateMap.put("signed_type", 2);
2021-12-02 10:51:11 +08:00
}
}
2021-11-14 15:29:16 +08:00
// 查询合同信息中,是否存在该信息,如果存在着更新,不存在则插入
String query = "select * from " + contractInfoTable + " where workflow_request_id = ?";
rs.executeQuery(query, requestId);
2021-11-14 15:29:16 +08:00
String formModeId = "52";
if (rs.next()) {
sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, updateMap,
2021-11-14 15:29:16 +08:00
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
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");
toolUtil.writeDebuggerLog("id" + dataId);
mri.rebuildModeDataShareByEdit(1, Util.getIntValue(formModeId, -1), dataId);
} else {
2021-11-14 15:29:16 +08:00
ModeDataIdUpdate mdu = ModeDataIdUpdate.getInstance();
int dataId = mdu.getModeDataNewId(contractInfoTable,
Util.getIntValue(formModeId, -1),
2021-11-14 15:29:16 +08:00
1, 0, TimeUtil.getCurrentDateString(),
TimeUtil.getOnlyCurrentTimeString());
sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, updateMap,
Util.createPrepWhereImpl().whereAnd("id").whereEqual(dataId));
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);
2021-11-14 15:29:16 +08:00
}
}
/**
*
*
* @param contractField
* @return
*/
public List<FileInfo> contractHandle(String contractField) {
String fileIds = Util.null2String(this.mainMap.get(contractField));
2021-11-14 15:29:16 +08:00
// 如果没有合同字段的数据,则返回一个空的
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(Map<String, Object> mainMap) {
2021-11-14 15:29:16 +08:00
// 获取配置表信息
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) {
2021-11-14 15:29:16 +08:00
toolUtil.writeErrorLog("签署合同错误错误原因maps为null!");
throw new RuntimeException("签署合同错误错误原因maps为null");
}
if (maps.size() == 0) {
2021-11-14 15:29:16 +08:00
return;
}
RecordSet rs = new RecordSet();
Map<String, Object> update = new HashMap<>();
2021-11-14 15:29:16 +08:00
// 顺序签署合同
if ("true".equals(queueSigned)) {
2021-11-14 15:29:16 +08:00
Map<String, Object> map = maps.get(0);
if (faDaDaConfigDTO.getSignedType() == 1) {
// 需要控制签署规则
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOther()) {
// 只需要对方签署
map.put("autoArchive", 2);
}
// 双方签署
}
signedRequest(map, apiConfigMainDTO);
2021-11-14 15:29:16 +08:00
// 将合同签署信息更新到合同信息表中
update.put("contract_status", 2);
2021-12-02 10:51:11 +08:00
// update.put("single_signed_num",0);
2021-11-14 15:29:16 +08:00
PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, update,
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
2021-11-14 15:29:16 +08:00
update.clear();
// 更新明细表合同信息 TODO 明细表添加字段signed_status合同方签署状态
// 签署状态1 已发送待签署2 已签蜀
update.put("signed_status", 1);
2021-11-14 15:29:16 +08:00
sqlResult = Util.createSqlBuilder().updateSql(tableName, update,
Util.createPrepWhereImpl().whereAnd("id").whereEqual(String.valueOf(map.get("id"))));
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
2021-11-14 15:29:16 +08:00
return;
}
2021-12-02 10:51:11 +08:00
// 不是顺序签署
2021-11-14 15:29:16 +08:00
for (Map<String, Object> map : maps) {
if (faDaDaConfigDTO.getSignedType() == 1) {
// 需要控制签署规则
if (Integer.parseInt(Util.null2String(mainMap.get(faDaDaConfigDTO.getFieldControl1()))) == faDaDaConfigDTO.getOnlyOther()) {
// 只需要对方签署
map.put("autoArchive", 2);
}
// 双方签署
}
signedRequest(map, apiConfigMainDTO);
2021-11-14 15:29:16 +08:00
}
// 将合同签署信息更新到合同信息表中
update.put("contract_status", 2);
2021-11-14 15:29:16 +08:00
PrepSqlResultImpl sqlResult = Util.createSqlBuilder().updateSql(contractInfoTable, update,
Util.createPrepWhereImpl().whereAnd("workflow_request_id").whereEqual(requestId));
rs.executeUpdate(sqlResult.getSqlStr(), sqlResult.getArgs());
2021-11-14 15:29:16 +08:00
}
/**
*
*
2021-11-14 15:29:16 +08:00
* @param map
* @param apiConfigMainDTO
*/
private void signedRequest(Map<String, Object> map, ApiConfigMainDTO apiConfigMainDTO) {
2021-11-14 15:29:16 +08:00
String contractNos = Util.null2String(map.get("contractNo"));
String[] split = contractNos.split(",");
2021-12-02 10:51:11 +08:00
// RecordSet rs = new RecordSet();
2021-11-14 15:29:16 +08:00
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;
}
}