2025-07-24主数据集成项目上线代码上传

This commit is contained in:
2025-07-24 16:32:58 +08:00
parent 6e021119c0
commit 6ff417b1d2
49 changed files with 1965 additions and 72 deletions

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="departmentAddNode" class="com.seeyon.apps.src_mainorganization.node.DepartmentAddNode"></bean>
<bean id="departmentCloseNode" class="com.seeyon.apps.src_mainorganization.node.DepartmentCloseNode"></bean>
</beans>

View File

@@ -40,5 +40,8 @@
<bean id="memberSystemAccountClosureTalentsNode" class="com.seeyon.apps.src_membermanage.node.MemberSystemAccountClosureTalentsNode" />
<bean id="accountOpeningNode" class="com.seeyon.apps.src_membermanage.node.AccountOpeningNode" />
<bean id="accountOpeningOrganizationNode" class="com.seeyon.apps.src_membermanage.node.AccountOpeningOrganizationNode" />
<bean id="memberDieNode" class="com.seeyon.apps.src_membermanage.node.MemberDieNode" />
<bean id="memberRetirementNode" class="com.seeyon.apps.src_membermanage.node.MemberRetirementNode" />
<bean id="memberRetirementOrganizationNode" class="com.seeyon.apps.src_membermanage.node.MemberRetirementOrganizationNode" />
</beans>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="srcBeianDao" class="com.seeyon.apps.src_qyba.dao.impl.SrcBeianDao" />
<bean id="multipleViewsPrintManager" class="com.seeyon.apps.src_qyba.manage.impl.MultipleViewsPrintManagerImpl"></bean>
</beans>

View File

@@ -56,7 +56,6 @@ public class NewTongYongNode extends ACommonSuperNode {
} else {
context.back(map.get("msg").toString());
}
return context;
}

View File

@@ -107,11 +107,9 @@ public class FanWeiNewUtil {
* 注意ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8"
*/
public static String PostRestful(Map params, String userid) throws IOException {
//ECOLOGY返回的token
String token = (String) Getoken(PropKit.getProp(PropKit.NEWADDRESS)).get("token");
//封装请求头参数
RSA rsa = new RSA(null, PropKit.getProp(PropKit.NEWSPK));
//对用户信息进行加密传输,暂仅支持传输OA用户ID

View File

@@ -0,0 +1,42 @@
package com.seeyon.apps.src_mainorganization;
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.src_membermanage.constants.MemberManageConstants;
public class MainorganizationPluginApi extends APluginInfoApi {
public MainorganizationPluginApi(){
}
public String getPluginId() {
System.out.println(MemberManageConstants.getPluginId());
return MemberManageConstants.getPluginId();
}
public String getCreateUser() {
return "橙阳科技";
}
public String getDescription() {
return "稻花香主数据同步";
}
public ConfigVo getDefaultConfig() {
ConfigVo configVo = new ConfigVo();
MemberManageConstants[] var2 = MemberManageConstants.values();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
MemberManageConstants value = var2[var4];
if (value != MemberManageConstants.plugin) {
configVo.getDevParams().put(value.name(), value.getDefaultValue());
configVo.getProdParams().put(value.name(), value.getDefaultValue());
configVo.getParamMap().put(value.name(), value.getDescription());
}
}
return configVo;
}
}

View File

@@ -0,0 +1,39 @@
package com.seeyon.apps.src_mainorganization.constants;
public enum MainorganizationConstants {
plugin("src_mainorganization","插件ID"),
dowUrl("http://127.0.0.1:8088/seeyon/rest/attachment/file","附件下载路径"),
uploadUrl("http://10.0.3.55/seeyon/rest/attachment","主数据平台上传接口"),
getTokenUrl("http://127.0.0.1:8088/seeyon/rest/token", "集团TOKEN接口路径"),
restUserName("beian", "集团REST用户名"),
restPassword("f1c4e761-d60b-47ff-a5ff-5953f2b9c9e0", "集团REST密码"),
loginName("BDGLY", "集团管理员登录名"),
getzsjTokenUrl("http://10.0.3.55/seeyon/rest/token", "主数据TOKEN接口路径"),
restzsjUserName("sys", "主数据REST用户名"),
restzsjPassword("751f86d5-2e4c-4fe0-9a90-50d568359a1f", "主数据REST密码"),
zsjloginName("demo1", "主数据管理员账号"),
mainUrl("http://10.0.3.55","主数据平台ip端口");
MainorganizationConstants(String defaultValue, String description) {
this.defaultValue = defaultValue;
this.description = description;
}
private String defaultValue;
private String description;
public String getDefaultValue() {
return defaultValue;
}
public String getDescription() {
return description;
}
public static String getPluginId() {
return plugin.defaultValue;
}
}

View File

@@ -0,0 +1,177 @@
package com.seeyon.apps.src_mainorganization.node;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.common.workflow.constants.WorkFlowType;
import com.seeyon.apps.common.workflow.node.ACommonSuperNode;
import com.seeyon.apps.ext.workflow.vo.FieldDataVo;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.apps.ext.workflow.vo.SuperNodeContext;
import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants;
import com.seeyon.apps.src_mainorganization.util.ProtUtil;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.bo.V3xOrgAccount;
import com.seeyon.ctp.organization.bo.V3xOrgDepartment;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.util.UUIDLong;
import javax.inject.Inject;
import java.util.List;
public class DepartmentAddNode extends ACommonSuperNode {
private static Log log = Log.get(DepartmentAddNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@Inject
private OrgManager orgManager;
@Override
public String getPluginId() {
return MainorganizationConstants.getPluginId();
}
@Override
public String getFormParse() {
return "json";
}
@Override
public WorkFlowType[] getTypes() {
return new WorkFlowType[] {WorkFlowType.superNode};
}
public ConfigVo getMainorganizationConfig() {
return cstConfigApi.getConfig(getPluginId());
}
@Override
public String getNodeId() {
return "DepartmentAddNode";
}
@Override
public String getNodeName() {
return "部门批量新增超级节点";
}
// {
// "data":"jsonArr::明细表1",
// "seeyonFormSon":{
// "明细表1":{
// "deptName":"部门名称",
// "orgAccount":"所属单位",
// "isFirstDept":"是否一级部门",
// "superiorDeptName":"上级部门"
// }
// }
// }
@Override
public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception {
log.info("进入部门新增处理流程"+getNodeId());
ConfigVo configVo = getMainorganizationConfig();
// 创建返回对象
SuperNodeContext context = new SuperNodeContext();
context.setNeedSave(true);
log.info("请求参数"+request);
JSONObject param = JSONObject.parseObject(request);
// 获取部门明细信息
JSONArray datas = param.getJSONArray("data");
// 记录新增返回值
JSONArray requestJson = new JSONArray();
String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name());
String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name());
String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name());
String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name());
String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name());
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
String maindeptsurl = mainUrl+"/seeyon/rest/orgDepartment?token="+mainToken;
log.info("设置部门新增接口路径"+maindeptsurl);
String ret = "";
// 遍历明细表数据
data:for (int i = 0 ; i < datas.size() ; i ++) {
JSONObject data = datas.getJSONObject(i);
// 获取需要新增的部门名称
String deptName = data.getString("deptName");
// 获取新增部门所在单位的控件名称
long orgAccountId = data.getLongValue("orgAccountId");
// 获取是否是一级部门控件
String isFirstDept = data.getString("isFirstDept");
// 获取新增部门所在上级部门的控件名称
long superiorDeptId = data.getLongValue("superiorDeptId");
V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(orgAccountId);
V3xOrgDepartment superiorDepartment = orgManager.getDepartmentById(superiorDeptId);
// 根据部门名称查询部门名称和单位ID查询部门信息
List<V3xOrgDepartment> departmentsByName = orgManager.getDepartmentsByName(deptName,orgAccountId);
// 遍历现存同名部门信息
old:for(V3xOrgDepartment department:departmentsByName){
// 获取上级部门信息
long superiorId = department.getSuperior();
if("".equals(isFirstDept)){
// 当前添加部门为一级部门判断同名上级部门ID是否等于单位ID
if(superiorId==orgAccountId){
// 同名部门已经存在跳过当前明细行处理
ret = ret +deptName + "部门已经存在,跳过处理;";
break data;
}
}else{
// 当前添加部门不为一级部门判断同名上级部门ID是否等于所选择的上级部门ID
if(superiorId==superiorDeptId){
// 同名部门已经存在跳过当前明细行处理
ret = ret +deptName + "部门已经存在,跳过处理;";
break data;
}
}
}
// 封装部门新增参数,新增部门信息
JSONObject deptjson = new JSONObject();
deptjson.put("name",deptName);
deptjson.put("description","");
if("".equals(isFirstDept)){
deptjson.put("superior",orgAccountId);
deptjson.put("superiorName",v3xOrgAccount.getName());
}else{
deptjson.put("superior",superiorDeptId);
deptjson.put("superiorName",superiorDepartment.getName());
}
deptjson.put("enabled",true);
deptjson.put("id", UUIDLong.longUUID());
deptjson.put("orgAccountName",v3xOrgAccount.getName());
deptjson.put("orgAccountId",orgAccountId);
requestJson.add(deptjson);
JSONObject res = ProtUtil.doPost(deptjson.toString(),maindeptsurl);
if(res==null){
ret=ret+deptName+"部门添加返回为空;";
}else{
String success = res.getString("success");
if("false".equals(success)){
JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos");
JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0);
String msgInfo = errorMsgInfo.getString("msgInfo");
ret=ret+deptName+msgInfo+"";
context.back(ret);
context.setErrMsg(ret);
context.setRequest(requestJson.toString());
context.setResponse(ret);
return context;
}else{
ret=ret+deptName+"添加成功;";
}
}
}
context.success(requestJson.toString());
context.setRequest(requestJson.toString());
context.setResponse(ret);
return context;
}
}

View File

@@ -0,0 +1,158 @@
package com.seeyon.apps.src_mainorganization.node;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.common.workflow.constants.WorkFlowType;
import com.seeyon.apps.common.workflow.node.ACommonSuperNode;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.apps.ext.workflow.vo.SuperNodeContext;
import com.seeyon.apps.src_mainorganization.constants.MainorganizationConstants;
import com.seeyon.apps.src_mainorganization.util.ProtUtil;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.bo.V3xOrgDepartment;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.manager.OrgManager;
import javax.inject.Inject;
import java.util.HashMap;
import java.util.List;
public class DepartmentCloseNode extends ACommonSuperNode {
private static Log log = Log.get(MemberManageCommonNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@Inject
private OrgManager orgManager;
@Override
public String getPluginId() {
return MainorganizationConstants.getPluginId();
}
@Override
public String getFormParse() {
return "json";
}
@Override
public WorkFlowType[] getTypes() {
return new WorkFlowType[] {WorkFlowType.superNode};
}
public ConfigVo getMemberMamageConfig() {
return cstConfigApi.getConfig(getPluginId());
}
@Override
public String getNodeId() {
return "DepartmentCloseNode";
}
@Override
public String getNodeName() {
return "部门批量停用超级节点";
}
// {
// "data": "jsonArr::明细表1",
// "seeyonFormSon": {
// "明细表1": {
// "deptId": "部门名称",
// "orgAccountId": "所属单位"
// }
// }
// }
@Override
public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception {
log.info("进入部门新增处理流程"+getNodeId());
ConfigVo configVo = getMemberMamageConfig();
SuperNodeContext context = new SuperNodeContext();
context.setNeedSave(true);
log.info("请求参数"+request);
JSONObject param = JSONObject.parseObject(request);
// 获取部门明细信息
JSONArray datas = param.getJSONArray("data");
// 记录新增返回值
JSONArray requestJson = new JSONArray();
String mainUrl = configVo.getParamVal(MainorganizationConstants.mainUrl.name());
String getzsjTokenUrl = configVo.getParamVal(MainorganizationConstants.getzsjTokenUrl.name());
String restzsjUserName = configVo.getParamVal(MainorganizationConstants.restzsjUserName.name());
String restzsjPassword = configVo.getParamVal(MainorganizationConstants.restzsjPassword.name());
String zsjloginName = configVo.getParamVal(MainorganizationConstants.zsjloginName.name());
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
String maindeptsurl = mainUrl+"/seeyon/rest/orgDepartment/{deptId}/enabled/false?token="+mainToken;
log.info("设置部门停用接口接口路径"+maindeptsurl);
String ret = "";
// 遍历明细表数据
data:for (int i = 0 ; i < datas.size() ; i ++) {
JSONObject data = datas.getJSONObject(i);
// 获取需要新增的部门名称
long deptId = data.getLongValue("deptId");
V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(deptId);
// 获取新增部门所在单位的控件名称
long orgAccountId = data.getLongValue("orgAccountId");
// 检查当前需要停用部门下是否存在子部门
List<Long> subsetListDptes = orgManager.getChildDepartmentIds(deptId,false);
if(subsetListDptes.size()>0){
// 当前需要停用部门下存在子部门,不允许停用此部门
context.setRequest(request);
context.setResponse(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门");
context.back(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门");
context.setErrMsg(v3xOrgDepartment.getName()+"部门下存在子部门,请先处理子部门");
return context;
}
// 检查当前需要停用部门下是否存在人员
List<V3xOrgMember> orgMembersByDept = orgManager.getMembersByDepartment(deptId,false);
if(orgMembersByDept.size()>0){
// 当前需要停用部门下存在人员,不允许停用此部门
context.setRequest(request);
context.setResponse(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员");
context.back(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员");
context.setErrMsg(v3xOrgDepartment.getName()+"部门下存在未离职人员,请先处理部门成员");
return context;
}
requestJson.add(v3xOrgDepartment.getName()+deptId);
String enabledFalseUrl = maindeptsurl.replace("{deptId}",deptId+"");
// 需要停用部门下不存在任何启动部门和人员执行停用接口
String resstr = ProtUtil.httpPutRaw(enabledFalseUrl,"",new HashMap<>(),null);
JSONObject res = JSONObject.parseObject(resstr);
if(res==null){
ret=ret+v3xOrgDepartment.getName()+"部门停用返回为空;";
context.back(ret);
context.setErrMsg(ret);
context.setRequest(requestJson.toString());
context.setResponse(ret);
return context;
}else{
String success = res.getString("success");
if("false".equals(success)){
JSONArray errorMsgInfos = res.getJSONArray("errorMsgInfos");
JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0);
String msgInfo = errorMsgInfo.getString("msgInfo");
ret=ret+v3xOrgDepartment.getName()+msgInfo+"";
context.back(ret);
context.setErrMsg(ret);
context.setRequest(requestJson.toString());
context.setResponse(ret);
return context;
}else{
ret=ret+v3xOrgDepartment.getName()+"部门停用成功;";
}
}
}
context.success(requestJson.toString());
context.setRequest(requestJson.toString());
context.setResponse(ret);
return context;
}
}

View File

@@ -12,6 +12,7 @@ import com.seeyon.apps.src_mainorganization.dao.ISrcEnumDao;
import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao;
import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.ctp.organization.OrgConstants;
import com.seeyon.ctp.organization.bo.*;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.organization.manager.OrgManagerDirect;
@@ -23,10 +24,7 @@ import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService {
@@ -158,7 +156,7 @@ public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService {
V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal();
v3xOrgPrincipal.setLoginName(memberParam.getString("loginName"));
v3xOrgPrincipal.setMemberId(member.getId());
v3xOrgPrincipal.setPassword("123456");
v3xOrgPrincipal.setPassword("dhx123456");
member.setV3xOrgPrincipal(v3xOrgPrincipal);
}
// 判断组织架构信息是否修改
@@ -202,6 +200,7 @@ public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService {
memberPost.setOrgAccountId(secondPost.getLongValue("orgAccountId"));
memberPost.setDepId(secondPost.getLongValue("deptId"));
memberPost.setMemberId(secondPost.getLongValue("memberId"));
memberPost.setType(OrgConstants.MemberPostType.Second);
memberPosts.add(memberPost);
}
member.setSecond_post(memberPosts);
@@ -214,11 +213,20 @@ public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService {
if(StringUtil.isNotEmpty(sortId)){
member.setSortId(Long.parseLong(sortId));
}
AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(Long.parseLong(memberId));
addressBook = setAddressBooks(addressBook,memberParam);
addressBookCustomerFieldInfoManager.updateAddressBook(addressBook);
Set<String> keys = memberParam.keySet();
boolean hasUserKey = false;
for(String key : keys){
if(key.contains("EXT_ATTR")){
hasUserKey = true;
break;
}
}
if(hasUserKey){
AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(Long.parseLong(memberId));
addressBook = setAddressBooks(addressBook,memberParam);
addressBookCustomerFieldInfoManager.updateAddressBook(addressBook);
}
OrganizationMessage mes = orgManagerDirect.updateMember(member);
JSONObject jsonObject = new JSONObject();
if(mes.isSuccess()) {
List<OrganizationMessage.OrgMessage> successMsgs = mes.getSuccessMsgs();

View File

@@ -0,0 +1,461 @@
package com.seeyon.apps.src_mainorganization.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;
import www.seeyon.com.utils.StringUtil;
import java.io.*;
import java.net.*;
import java.nio.file.Files;
import java.util.Map;
public class ProtUtil {
public static String uploadFile(String targetUrl, String filePath) throws IOException {
String boundary = Long.toHexString(System.currentTimeMillis()); // 随机边界
InputStream is = null;
BufferedReader br = null;
String result = null;
String CRLF = "\r\n"; // 换行符
URL url = new URL(targetUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
try (
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true);
) {
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"title\"").append(CRLF);
writer.append(CRLF).append("测试11").append(CRLF).flush();
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"fileType\"").append(CRLF);
writer.append(CRLF).append("pdf").append(CRLF).flush();
// 发送文件数据
File file = new File(filePath);
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append(CRLF);
writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(file.getName())).append(CRLF);
writer.append(CRLF).flush();
Files.copy(file.toPath(), output);
output.flush(); // 确保文件数据发送完毕
writer.append(CRLF).flush(); // 结束行
writer.append("--" + boundary + "--").append(CRLF);
}
int responseCode = connection.getResponseCode();
// 连接对象获取一个输入流,向远程读取
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
// 对输入流对象进行包装:charset根据工作项目组的要求来设置
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer sbf = new StringBuffer();
String temp = null;
// 循环遍历一行一行读取数据
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
System.out.println(result);
}
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect();
return result;
}
/**
* 调用post接口
*
* @param str 调用接口传递的参数json
* @param urlStr 需要调用的url对应的参数文件中的编码
* @return
*/
public static JSONObject doPost(String str, String urlStr) {
HttpURLConnection connection = null;
InputStream is = null;
OutputStream os = null;
BufferedReader br = null;
String result = null;
try {
URL url = new URL(urlStr);
// 通过远程url连接对象打开连接
connection = (HttpURLConnection) url.openConnection();
// 设置连接请求方式
connection.setRequestMethod("POST");
// 设置连接主机服务器超时时间15000毫秒
connection.setConnectTimeout(15000);
// 设置读取主机服务器返回数据超时时间60000毫秒
connection.setReadTimeout(60000);
// 默认值为false当向远程服务器传送数据/写数据时需要设置为true
connection.setDoOutput(true);
// 默认值为true当前向远程服务读取数据时设置为true该参数可有可无
connection.setDoInput(true);
// 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
connection.setRequestProperty("Content-Type", "application/json");
// 通过连接对象获取一个输出流
os = connection.getOutputStream();
// 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
if (!("".equals(str) || str == null)) {
os.write(str.getBytes("UTF-8"));
}
// 连接对象获取一个输入流,向远程读取
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
// 对输入流对象进行包装:charset根据工作项目组的要求来设置
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer sbf = new StringBuffer();
String temp = null;
// 循环遍历一行一行读取数据
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != os) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 断开与远程地址url的连接
connection.disconnect();
}
JSONObject json = JSONObject.parseObject(result);
return json;
}
public static void downloadFile(String urlStr, String filePath){
String accesstoken = "T3KbU3zlRL";
String appSecret = "owmMX93AfGZQBF2NCuH9a7i9TOeF5x";
HttpURLConnection conn = null;
OutputStream out = null;
try {
StringBuilder urlBuilder = new StringBuilder(urlStr);
URL url = new URL(urlBuilder.toString());
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Host", url.getHost());
conn.setRequestProperty("Accept", "text/plain,application/json");
conn.setRequestProperty("User-Agent", "privateapp-java-api-client");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
int statusCode = conn.getResponseCode();
StringBuilder response = new StringBuilder();
if (statusCode == 200) {
try (InputStream ins = conn.getInputStream()){
try (OutputStream outputStream = new FileOutputStream(filePath)) {
int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = ins.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
//process response data
} catch (Exception e){
// 处理异常情况
}
} else {
// 处理异常情况
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.disconnect();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 执行get请求
*
* @return
* @throws IOException
* @throws FileNotFoundException
*/
public static String doGet(String geturl,JSONObject param) throws FileNotFoundException, IOException, URISyntaxException {
// 创建 HttpClient 实例
CloseableHttpClient httpClient = HttpClients.createDefault();
String responseBody = "";
try {
// 构建包含参数的 URI
URIBuilder uriBuilder = new URIBuilder(geturl);
if(param.size()>0){
uriBuilder.addParameter("params", param.toString());
}
URI uri = uriBuilder.build();
// 创建 HttpGet 对象
HttpGet httpGet = new HttpGet(uri);
// 发送请求并获取响应
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
// 获取响应实体并转换为字符串
responseBody = EntityUtils.toString(response.getEntity());
} finally {
// 关闭响应
response.close();
}
} catch (URISyntaxException e) {
System.err.println("URI 构建错误: " + e.getMessage());
} catch (IOException e) {
System.err.println("请求发送或响应处理错误: " + e.getMessage());
} finally {
try {
// 关闭 HttpClient
httpClient.close();
} catch (IOException e) {
System.err.println("关闭 HttpClient 错误: " + e.getMessage());
}
}
return responseBody;
}
/**
* 获取一个token
*
* @return
* @throws IOException
* @throws FileNotFoundException
*/
public static String getToken(String oatokenurl,String restName,String restPassword,String loginName) throws FileNotFoundException, IOException {
String address = oatokenurl +"/"+ restName + "/" + restPassword;
if(StringUtil.isNotEmpty(loginName)){
address = address +"?loginName="+loginName;
}
DefaultHttpClient client = new DefaultHttpClient();
String result = "";
HttpGet get = new HttpGet(address);
// 添加 Headers 信息
get.addHeader(new BasicHeader("Accept", "application/json"));
try {
HttpResponse res = client.execute(get);
if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
result = EntityUtils.toString(res.getEntity());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
String token = "";
if(result.contains("{")) {
JSONObject jsObj = JSONObject.parseObject(result);
token = jsObj.get("id").toString();
}else {
token = result;
}
return token;
}
/**
* 下载文件到指定目录
* @param dowUrl:http地址
* @param dowPath:指定目录
* */
public static String download(String dowUrl, String dowPath){
try {
// log.info("下载地址是:"+dowUrl+",存储地址是:"+dowPath);
URL url = new URL(dowUrl);
URLConnection urlConnection = url.openConnection();
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// http的连接类
//String contentType = httpURLConnection.getContentType();//请求类型,可用来过滤请求,
httpURLConnection.setConnectTimeout(1000*5);//设置超时
httpURLConnection.setRequestMethod("GET");//设置请求方式默认是GET
httpURLConnection.setRequestProperty("Charset", "UTF-8");// 设置字符编码
httpURLConnection.connect();// 打开连接
BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
String path = dowPath;// 指定存放位置
File filed = new File(path);
String mergePdfPath = dowPath ;
String[] paths = mergePdfPath.split("/");
String mpath = "";
for(int i = 0 ; i <paths.length-1 ; i++){
mpath =mpath+ paths[i]+"/";
}
mpath = mpath.substring(0,mpath.length()-1);
File mergePdfFile = new File(mpath);
if(!mergePdfFile.exists()) {
mergePdfFile.mkdirs();
}
OutputStream out = new FileOutputStream(filed);
int size = 0;
byte[] b = new byte[2048];
//把输入流的文件读取到字节数据b中然后输出到指定目录的文件
while ((size = bin.read(b)) != -1) {
out.write(b, 0, size);
}
// 关闭资源
bin.close();
out.close();
return "200";
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "500";
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "400";
}
}
//调用put接口
public static String callPutApi(String apiUrl, String requestBody) {
StringBuilder response = new StringBuilder();
try {
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
outputStream.writeBytes(requestBody);
outputStream.flush();
}
int responseCode = connection.getResponseCode();
System.out.println("Response Code : " + responseCode);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
while ((line = reader.readLine())!= null) {
response.append(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return response.toString();
}
public static String httpPutRaw(String url, String stringJson, Map<String,Object> headers, String encode){
if(encode == null){
encode = "utf-8";
}
CloseableHttpResponse httpResponse = null;
CloseableHttpClient closeableHttpClient = null;
String content = null;
//since 4.3 不再使用 DefaultHttpClient
try {
//HttpClients.createDefault()等价于 HttpClientBuilder.create().build();
closeableHttpClient = HttpClients.createDefault();
HttpPut httpput = new HttpPut(url);
//设置header
httpput.setHeader("Content-type", "application/json");
if (headers != null && headers.size() > 0) {
for (Map.Entry<String, Object> entry : headers.entrySet()) {
httpput.setHeader(entry.getKey(),entry.getValue().toString());
}
}
//组织请求参数
StringEntity stringEntity = new StringEntity(stringJson, encode);
httpput.setEntity(stringEntity);
//响应信息
httpResponse = closeableHttpClient.execute(httpput);
HttpEntity entity = httpResponse.getEntity();
content = EntityUtils.toString(entity, encode);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
closeableHttpClient.close(); //关闭连接、释放资源
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
}

View File

@@ -174,7 +174,8 @@ public abstract class MemberManageCommonNode extends ACommonSuperNode {
formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确");
}
}
break;}
break;
}
case "addOrUpdate":{
System.out.println("新增和修改");
// 查询当前信息是否已经存在,设置请求参数

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员基础信息修改档案表超级节点
* 账号开启新增档案表超级节点
*/
public class AccountOpeningNode extends MemberManageCommonNode {

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员基础信息修改档案表超级节点
* 账号开启新增组织架构超级节点
*/
public class AccountOpeningOrganizationNode extends MemberOrganizationCommonNode {

View File

@@ -22,7 +22,7 @@ import java.util.List;
import java.util.Map;
/**
* 人员基础信息修改档案表超级节点
* 人员账号批量关闭修改档案表超级节点
*/
public class MemberAccountClosureNode extends ACommonSuperNode {
@@ -67,8 +67,8 @@ public class MemberAccountClosureNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("明细表1");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -21,7 +21,7 @@ import java.util.List;
import java.util.Map;
/**
* 人员基础信息修改档案表超级节点
* 人员账号批量关闭修改组织架构超级节点
*/
public class MemberAccountClosureOrganizationNode extends ACommonSuperNode {
@@ -71,9 +71,9 @@ public class MemberAccountClosureOrganizationNode extends ACommonSuperNode {
JSONArray subTables = req.getJSONArray("subTable");
int isSuccess = 0;
String ret = "";
Map<String, List<FormDataVo>> subFormDataVoMap = formDataVo.getSubFormMap();
// Map<String, List<FormDataVo>> subFormDataVoMap = formDataVo.getSubFormMap();
String subTableName = req.getString("subTableName");
List<FormDataVo> subFormDataVos = subFormDataVoMap.get(subTableName);
List<FormDataVo> subFormDataVos = formDataVo.getSubFormMap().get(subTableName);
for(int i = 0 ; i < subTables.size() ; i++){
JSONObject subTable = subTables.getJSONObject(i);
FormDataVo subFormDataVo = subFormDataVos.get(i);

View File

@@ -22,7 +22,7 @@ import java.util.List;
import java.util.Map;
/**
* 人员基础信息修改档案表超级节点
* 人员账号批量关闭修改人才库超级节点
*/
public class MemberAccountClosureTalentsNode extends ACommonSuperNode {
@@ -67,8 +67,8 @@ public class MemberAccountClosureTalentsNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("明细表1");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员退休返聘修改档案表超级节点
* 人员退休返聘修改组织架构超级节点
*/
public class MemberAnewEngageOrganizationNode extends MemberOrganizationCommonNode {

View File

@@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员基础信息修改档案表超级节点
*/
public class MemberBasicsOrganizationNode extends MemberOrganizationCommonNode {
@Override

View File

@@ -95,8 +95,8 @@ public class MemberContractNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("人员明细");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("人员明细");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员解聘组织架构超级节点
*/
public class MemberDecruitmentOrganizationNode extends MemberOrganizationCommonNode {
@Override

View File

@@ -0,0 +1,176 @@
package com.seeyon.apps.src_membermanage.node;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.common.workflow.node.ACommonSuperNode;
import com.seeyon.apps.ext.workflow.vo.FieldDataVo;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.apps.ext.workflow.vo.SuperNodeContext;
import com.seeyon.apps.src_membermanage.constants.MemberManageConstants;
import com.seeyon.apps.src_membermanage.util.DataProcessingUtil;
import com.seeyon.apps.src_membermanage.util.ProtUtil;
import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import www.seeyon.com.utils.StringUtil;
import java.util.List;
import java.util.Map;
/**
* 人员死亡档案表超级节点
*/
public class MemberDieNode extends ACommonSuperNode {
private static Log log = Log.get(MemberAccountClosureOrganizationNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@Override
public String getNodeId() {
return "MemberDieNode";
}
@Override
public String getNodeName() {
return "人员死亡档案表超级节点";
}
@Override
public String getPluginId() {
return MemberManageConstants.getPluginId();
}
@Override
public String getFormParse() {
return "json";
}
public ConfigVo getMemberMamageConfig() {
return cstConfigApi.getConfig(getPluginId());
}
@Override
public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception {
log.info("进入人事档案表处理流程"+getNodeId());
ConfigVo configVo = getMemberMamageConfig();
SuperNodeContext context = new SuperNodeContext();
context.setNeedSave(true);
JSONObject paramJson = JSONObject.parseObject(request);
String enumFields = paramJson.getString("enumFields");
String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name());
String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name());
String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name());
String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name());
String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name());
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数
JSONObject isExistUpdateParam = new JSONObject();
isExistUpdateParam.put("formCode",paramJson.getString("formCode"));
JSONObject uniqueness = new JSONObject();
JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness");
for (Map.Entry<String, Object> entry:uniquenessjson.entrySet()) {
FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString());
uniqueness.put(entry.getKey(),fieldDataVo.getDbValue());
}
isExistUpdateParam.put("uniqueness",uniqueness);
// 调用接口查询当前数据是否存在
String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken;
String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam);
JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate);
JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data");
String formmainUpdate = formmainIdUpdateData.getString("id");
if(StringUtil.isNotEmpty(formmainUpdate)){
// 当前数据已经存在执行修改逻辑
JSONObject param = new JSONObject();
// 设置基本数据
param.put("doTrigger",paramJson.getBooleanValue("doTrigger"));
param.put("formCode",paramJson.getString("formCode"));
param.put("loginName",paramJson.getString("loginName"));
param.put("rightId",paramJson.getString("rightIdUpdate"));
JSONArray dataList = new JSONArray();
JSONObject data = new JSONObject();
JSONObject paramDataList = paramJson.getJSONObject("dataList");
JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable");
JSONObject masterTable = new JSONObject();
masterTable.put("name",paramMasterTable.getString("name"));
JSONObject record = new JSONObject();
record.put("id",formmainUpdate);
// 根据主表字段信息,设置主表参数
JSONArray fields = new JSONArray();
for (Map.Entry<String, Object> entry : paramMasterTable.getJSONObject("fields").entrySet()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name",entry.getKey());
String value = entry.getValue().toString();
FieldDataVo subFieldDataVo;
try {
subFieldDataVo = subFormDataVo.getFieldData(value);
} catch (NoSuchFieldException e) {
subFieldDataVo = formDataVo.getFieldData(value);
}
if(subFieldDataVo.getDbValue() == null){
jsonObject.put("value","");
}else{
if(enumFields.contains(entry.getKey())){
String subFieldDataDb = subFieldDataVo.getStringValue();
jsonObject.put("showValue",subFieldDataDb);
}else{
String subFieldDataDb = subFieldDataVo.getDbValue().toString();
jsonObject.put("value",subFieldDataDb);
}
}
fields.add(jsonObject);
}
record.put("fields",fields);
masterTable.put("record",record);
data.put("masterTable",masterTable);
dataList.add(data);
param.put("dataList",dataList);
context.setRequest(param.toString());
log.info(param.toString());
// 获取调用接口路径
String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken;
context.setUrl(formmainUpdateUrl);
JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl);
log.info(res.toString());
context.setResponse(res.toString());
MemberManagerResponse mmr = new MemberManagerResponse(res);
if(mmr.isSuccess()){
String resDatastr = mmr.getData();
Map<String,Object> resData = DataProcessingUtil.convertStringToMap(resDatastr);
List<String> successIdList = (List<String>)resData.get("successIdList");
if(successIdList.size()>0){
String fid = successIdList.get(0);
log.info("档案表修改完成,返回结果为"+resDatastr);
context.success("档案表修改完成当前档案表ID为"+fid,false);
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成当前档案表ID为"+fid);
}else{
Map<String, String> failedData = (Map<String, String>)resData.get("failedData");
for (Map.Entry<String, String> entry:failedData.entrySet()) {
context.back("档案表修改失败:创建异常:" + entry.getValue());
context.setErrMsg(mmr.getMsg());
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue());
}
}
}else{
context.back("档案表修改失败:修改异常:" + mmr.getMsg());
context.setErrMsg(mmr.getMsg());
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg());
}
}else{
context.success("没有查询到需要修改的数据,跳过处理");
formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理");
}
}
return context;
}
}

View File

@@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员离职组织架构超级节点
*/
public class MemberDimissionOrganizationNode extends MemberOrganizationCommonNode {
@Override

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员离职档案表超级节点
* 人员离职人才库档案表超级节点
*/
public class MemberDimissionTalentsNode extends MemberManageCommonNode {

View File

@@ -94,8 +94,8 @@ public class MemberEmployNode extends ACommonSuperNode {
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
System.out.println("修改");
// 获取明细表录用明细
Map<String, List<FormDataVo>> subFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subFormDataVoList = subFormMap.get("录用详细");
// Map<String, List<FormDataVo>> subFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subFormDataVoList = formDataVo.getSubFormMap().get("录用详细");
// 遍历所有明细行数据
for (FormDataVo subFormDataVo :subFormDataVoList) {
JSONObject isExistUpdateParam = new JSONObject();

View File

@@ -2,6 +2,10 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员入职组织架构超级节点
*/
public class MemberEntryOrganizationNode extends MemberOrganizationCommonNode {
@Override

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员入职档案表超级节点
* 人员入职人才库档案表超级节点
*/
public class MemberEntryTalentsNode extends MemberManageCommonNode {

View File

@@ -24,7 +24,7 @@ import java.util.List;
import java.util.Map;
/**
* 人员基础信息修改档案表超级节点
* 人员面试结果登记档案表超级节点
*/
public class MemberInterviewResultNode extends ACommonSuperNode {
@@ -78,8 +78,8 @@ public class MemberInterviewResultNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("录用详细");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("录用详细");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -2,6 +2,10 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员调动组织架构超级节点
*/
public class MemberMoveOrganizationNode extends MemberOrganizationCommonNode {
@Override

View File

@@ -88,8 +88,8 @@ public class MemberPerformanceNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("明细表1");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员转正档案表超级节点
* 人员转正延长档案表超级节点
*/
public class MemberRegularizationExtendNode extends MemberManageCommonNode {
@Override

View File

@@ -0,0 +1,180 @@
package com.seeyon.apps.src_membermanage.node;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.common.workflow.node.ACommonSuperNode;
import com.seeyon.apps.ext.workflow.vo.FieldDataVo;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.apps.ext.workflow.vo.SuperNodeContext;
import com.seeyon.apps.src_membermanage.constants.MemberManageConstants;
import com.seeyon.apps.src_membermanage.util.DataProcessingUtil;
import com.seeyon.apps.src_membermanage.util.ProtUtil;
import com.seeyon.apps.src_membermanage.vo.MemberManagerResponse;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import www.seeyon.com.utils.StringUtil;
import java.util.List;
import java.util.Map;
/**
* 人员退休档案表超级节点
*/
public class MemberRetirementNode extends ACommonSuperNode {
private static Log log = Log.get(MemberAccountClosureOrganizationNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@Override
public String getNodeId() {
return "MemberRetirementNode";
}
@Override
public String getNodeName() {
return "人员退休档案表超级节点";
}
@Override
public String getPluginId() {
return MemberManageConstants.getPluginId();
}
@Override
public String getFormParse() {
return "json";
}
public ConfigVo getMemberMamageConfig() {
return cstConfigApi.getConfig(getPluginId());
}
@Override
public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception {
log.info("进入人事档案表处理流程"+getNodeId());
ConfigVo configVo = getMemberMamageConfig();
SuperNodeContext context = new SuperNodeContext();
context.setNeedSave(true);
JSONObject paramJson = JSONObject.parseObject(request);
String enumFields = paramJson.getString("enumFields");
String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name());
String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name());
String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name());
String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name());
String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name());
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数
JSONObject isExistUpdateParam = new JSONObject();
isExistUpdateParam.put("formCode",paramJson.getString("formCode"));
JSONObject uniqueness = new JSONObject();
JSONObject uniquenessjson = paramJson.getJSONObject("uniqueness");
for (Map.Entry<String, Object> entry:uniquenessjson.entrySet()) {
FieldDataVo fieldDataVo = subFormDataVo.getFieldData(entry.getValue().toString());
uniqueness.put(entry.getKey(),fieldDataVo.getDbValue());
}
isExistUpdateParam.put("uniqueness",uniqueness);
// 调用接口查询当前数据是否存在
String isExistUpdateUrl = mainUrl+"/seeyon/rest/formTable/quart?token="+mainToken;
String formmainIdUpdate = ProtUtil.doGet(isExistUpdateUrl,isExistUpdateParam);
JSONObject formmainIdUpdatejson = JSONObject.parseObject(formmainIdUpdate);
JSONObject formmainIdUpdateData = formmainIdUpdatejson.getJSONObject("data");
String formmainUpdate = formmainIdUpdateData.getString("id");
if(StringUtil.isNotEmpty(formmainUpdate)){
// 当前数据已经存在执行修改逻辑
JSONObject param = new JSONObject();
// 设置基本数据
param.put("doTrigger",paramJson.getBooleanValue("doTrigger"));
param.put("formCode",paramJson.getString("formCode"));
param.put("loginName",paramJson.getString("loginName"));
param.put("rightId",paramJson.getString("rightIdUpdate"));
JSONArray dataList = new JSONArray();
JSONObject data = new JSONObject();
JSONObject paramDataList = paramJson.getJSONObject("dataList");
JSONObject paramMasterTable = paramDataList.getJSONObject("masterTable");
JSONObject masterTable = new JSONObject();
masterTable.put("name",paramMasterTable.getString("name"));
JSONObject record = new JSONObject();
record.put("id",formmainUpdate);
// 根据主表字段信息,设置主表参数
JSONArray fields = new JSONArray();
for (Map.Entry<String, Object> entry : paramMasterTable.getJSONObject("fields").entrySet()) {
JSONObject jsonObject = new JSONObject();
if("field0143".equals(entry.getKey())){
jsonObject.put("name","field0080");
jsonObject.put("showValue","退休返聘");
}
jsonObject.put("name",entry.getKey());
String value = entry.getValue().toString();
FieldDataVo subFieldDataVo;
try {
subFieldDataVo = subFormDataVo.getFieldData(value);
} catch (NoSuchFieldException e) {
subFieldDataVo = formDataVo.getFieldData(value);
}
if(subFieldDataVo.getDbValue() == null){
jsonObject.put("value","");
}else{
if(enumFields.contains(entry.getKey())){
String subFieldDataDb = subFieldDataVo.getStringValue();
jsonObject.put("showValue",subFieldDataDb);
}else{
String subFieldDataDb = subFieldDataVo.getDbValue().toString();
jsonObject.put("value",subFieldDataDb);
}
}
fields.add(jsonObject);
}
record.put("fields",fields);
masterTable.put("record",record);
data.put("masterTable",masterTable);
dataList.add(data);
param.put("dataList",dataList);
context.setRequest(param.toString());
log.info(param.toString());
// 获取调用接口路径
String formmainUpdateUrl = mainUrl+"/seeyon/rest/cap4/form/soap/batch-update?token="+mainToken;
context.setUrl(formmainUpdateUrl);
JSONObject res = ProtUtil.doPost(param.toString(),formmainUpdateUrl);
log.info(res.toString());
context.setResponse(res.toString());
MemberManagerResponse mmr = new MemberManagerResponse(res);
if(mmr.isSuccess()){
String resDatastr = mmr.getData();
Map<String,Object> resData = DataProcessingUtil.convertStringToMap(resDatastr);
List<String> successIdList = (List<String>)resData.get("successIdList");
if(successIdList.size()>0){
String fid = successIdList.get(0);
log.info("档案表修改完成,返回结果为"+resDatastr);
context.success("档案表修改完成当前档案表ID为"+fid,false);
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改完成当前档案表ID为"+fid);
}else{
Map<String, String> failedData = (Map<String, String>)resData.get("failedData");
for (Map.Entry<String, String> entry:failedData.entrySet()) {
context.back("档案表修改失败:创建异常:" + entry.getValue());
context.setErrMsg(mmr.getMsg());
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:创建异常:"+entry.getValue());
}
}
}else{
context.back("档案表修改失败:修改异常:" + mmr.getMsg());
context.setErrMsg(mmr.getMsg());
formDataVo.getNewFieldDataMap().put("返回结果", "档案表修改失败:修改异常:"+mmr.getMsg());
}
}else{
context.success("没有查询到需要修改的数据,跳过处理");
formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,跳过处理");
}
}
return context;
}
}

View File

@@ -0,0 +1,166 @@
package com.seeyon.apps.src_membermanage.node;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.common.workflow.node.ACommonSuperNode;
import com.seeyon.apps.ext.workflow.vo.FieldDataVo;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.apps.ext.workflow.vo.SuperNodeContext;
import com.seeyon.apps.src_membermanage.constants.MemberManageConstants;
import com.seeyon.apps.src_membermanage.util.ProtUtil;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.manager.OrgManager;
import javax.inject.Inject;
import java.util.List;
/**
* 人员退休修改组织架构超级节点
* {
* "seeyonFormSon": {
* "明细表1": {
* "id": "const::姓名",
* "is_retirement": "退休或退休返聘",
* "enabled": "const::false",
* "orgAccountId": "const::单位",
* "state": "const::2",
* "loginNamg": "置空员工编号",
* "code": "置空员工编号"
* }
* },
* "subTable": "jsonArr::明细表1",
* "subTableName": "const::明细表1"
* }
*/
public class MemberRetirementOrganizationNode extends ACommonSuperNode {
private static Log log = Log.get(MemberRetirementOrganizationNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@Inject
private OrgManager orgManager;
@Override
public String getNodeId() {
return "MemberRetirementOrganizationNode";
}
@Override
public String getNodeName() {
return "人员退休修改组织架构超级节点";
}
@Override
public String getPluginId() {
return MemberManageConstants.getPluginId();
}
@Override
public String getFormParse() {
return "json";
}
public ConfigVo getMemberMamageConfig() {
return cstConfigApi.getConfig(getPluginId());
}
@Override
public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception {
log.info("进入人事组织架构处理流程"+getNodeId());
ConfigVo configVo = getMemberMamageConfig();
SuperNodeContext context = new SuperNodeContext();
context.setNeedSave(true);
String mainUrl = configVo.getParamVal(MemberManageConstants.mainUrl.name());
String getzsjTokenUrl = configVo.getParamVal(MemberManageConstants.getzsjTokenUrl.name());
String restzsjUserName = configVo.getParamVal(MemberManageConstants.restzsjUserName.name());
String restzsjPassword = configVo.getParamVal(MemberManageConstants.restzsjPassword.name());
String zsjloginName = configVo.getParamVal(MemberManageConstants.zsjloginName.name());
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取超级节点设置参数对象
JSONObject req = JSONObject.parseObject(request);
JSONArray subTables = req.getJSONArray("subTable");
int isSuccess = 0;
String ret = "";
// 获取表单内所有明细表
// Map<String, List<FormDataVo>> subFormDataVoMap = formDataVo.getSubFormMap();
// 根据名称获取表单内明细表
String subTableName = req.getString("subTableName");
List<FormDataVo> subFormDataVos = formDataVo.getSubFormMap().get(subTableName);
for(int i = 0 ; i < subTables.size() ; i++){
// 获取参数中明细表对象
JSONObject subTable = subTables.getJSONObject(i);
// 获取表内明细表对象
FormDataVo subFormDataVo = subFormDataVos.get(i);
// 查询当前人员是否存在
String memberIdName = subTable.getString("id");
// 判断当前人员是否需要修改组织架构
String isRetirement = subTable.getString("is_retirement");
if("退休返聘".equals(isRetirement)){
log.info(""+i+"行人员存在退休返聘,跳过组织架构处理");
ret +=""+i+1+"行人员存在退休返聘,跳过组织架构处理";
isSuccess++;
continue;
}
// 获取人员ID
FieldDataVo memberField = subFormDataVo.getFieldData(memberIdName);
String memberId = memberField.getDbValue().toString();
// 获取单位ID
String accountIdName = subTable.getString("orgAccountId");
FieldDataVo accountField = subFormDataVo.getFieldData(accountIdName);
String accountId = accountField.getDbValue().toString();
subTable.put("orgAccountId",accountId);
V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId));
// 调用接口查询主数据环境人员对象信息
String isExistUpdateUrl = mainUrl+"/seeyon/rest/orgMember/"+memberId+"?token="+mainToken;
String memberstr = ProtUtil.doGet(isExistUpdateUrl, new JSONObject());
if(!"null".equals(memberstr)){
isSuccess++;
// 当前人员已存在
JSONObject memberjson = JSONObject.parseObject(memberstr);
if(memberjson.getBooleanValue("isDeleted")){
// 当前人员已经删除
ret = ret+memberjson.getString("name")+"已经删除,无法修改;";
}else{
// 当前人员存在,执行修改
subTable.put("id",memberId);
String memberOrganizationUpdateUrl = mainUrl+"/seeyon/rest/orgMember/updateMemberMain?token="+mainToken;
JSONObject res = ProtUtil.doPost(subTable.toString(),memberOrganizationUpdateUrl);
log.info(res.toString());
if(res.getInteger("code")==0){
JSONObject data = res.getJSONObject("data");
ret+=data.getString("name")+"修改成功";
log.info("人员组织架构修改完成:人员名称为"+data.getString("name")+",ID为"+data.getString("id"));
}else{
isSuccess--;
String message = res.getString("message");
ret+=memberjson.getString("name")+"修改失败"+message;
log.info("人员组织架构修改失败:人员名称为"+memberjson.getString("name")+",ID为"+memberjson.getString("id")+message);
}
}
}else{
// 人员不存在
ret = ret+v3xOrgMember.getName()+"不存在,无法修改;";
}
context.setRequest(subTables.toString());
context.setResponse(ret);
}
if(isSuccess == subTables.size()){
context.success(ret,false);
formDataVo.getNewFieldDataMap().put("组织返回结果", ret);
}else{
log.info(ret);
context.back(ret);
formDataVo.getNewFieldDataMap().put("组织返回结果", ret);
}
return context;
}
}

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员基础信息修改档案表超级节点
* 人员系统账号批量关闭修改档案表超级节点
*/
public class MemberSystemAccountClosureNode extends MemberManageCommonNode {

View File

@@ -1,10 +1,9 @@
package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode;
/**
* 人员基础信息修改档案表超级节点
* 人员系统账号批量关闭修改组织架构超级节点
*/
public class MemberSystemAccountClosureOrganizationNode extends MemberOrganizationCommonNode {

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员基础信息修改档案表超级节点
* 人员系统账号批量关闭修改人才库超级节点
*/
public class MemberSystemAccountClosureTalentsNode extends MemberManageCommonNode {

View File

@@ -22,7 +22,7 @@ import java.util.List;
import java.util.Map;
/**
* 人员工作经历档案表超级节点
* 营销人员任务完成情况修改档案表超级节点
*/
public class MemberTaskFinishNode extends ACommonSuperNode {
@@ -68,8 +68,8 @@ public class MemberTaskFinishNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("明细表1");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node;
import com.seeyon.apps.src_membermanage.MemberManageCommonNode;
/**
* 人员入职档案表超级节点
* 人员试用期工作总结超级节点
*/
public class MemberTryOutSummarizeNode extends MemberManageCommonNode {

View File

@@ -71,8 +71,8 @@ public class MembersMoveNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("人员明细");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("人员明细");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -18,8 +18,10 @@ import com.seeyon.ctp.organization.manager.OrgManager;
import javax.inject.Inject;
import java.util.List;
import java.util.Map;
/**
* 人员批量调动组织架构超级节点
*/
public class MembersMoveOrganizationNode extends ACommonSuperNode {
private static Log log = Log.get(MembersMoveNode.class);
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
@@ -64,9 +66,8 @@ public class MembersMoveOrganizationNode extends ACommonSuperNode {
JSONArray subTables = req.getJSONArray("subTable");
int isSuccess = 0;
String ret = "";
Map<String, List<FormDataVo>> subFormDataVoMap = formDataVo.getSubFormMap();
String subTableName = req.getString("subTableName");
List<FormDataVo> subFormDataVos = subFormDataVoMap.get(subTableName);
List<FormDataVo> subFormDataVos = formDataVo.getSubFormMap().get(subTableName);
for(int i = 0 ; i < subTables.size() ; i++){
JSONObject subTable = subTables.getJSONObject(i);
FormDataVo subFormDataVo = subFormDataVos.get(i);
@@ -111,31 +112,15 @@ public class MembersMoveOrganizationNode extends ACommonSuperNode {
// String res = ProtUtil.httpPutRaw(memberOrganizationUpdateUrl,subTable.toString(),new HashMap<>(),null);
JSONObject res = ProtUtil.doPost(subTable.toString(),memberOrganizationUpdateUrl);
log.info(res.toString());
// JSONObject resjson = JSONObject.parseObject(res);
// MemberOrganizationResponse mor = new MemberOrganizationResponse(resjson);
// String resDatastr = mor.getData();
// String code = res.getString("code");
// resDatastr = "{'param':'"+resDatastr+"'}";
// JSONObject resDatajson = JSONObject.parseObject(resDatastr);
// JSONArray successMsgs = resDatajson.getJSONArray("param");
// JSONObject successMsg = successMsgs.getJSONObject(0);
if(res.getInteger("code")==0){
// JSONObject ent = successMsg.getJSONObject("ent");
JSONObject resData = res.getJSONObject("data");
ret+=resData.getString("name")+"修改成功";
log.info("人员组织架构修改完成:人员名称为"+resData.getString("name")+",ID为"+resData.getString("id"));
// context.success("人员组织架构修改完成:人员名称为"+ent.getString("name"),false);
// formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改完成:人员名称为"+ent.getString("name"));
}else{
isSuccess--;
JSONObject message = res.getJSONObject("message");
// JSONObject ent = successMsg.getJSONObject("ent");
// String msgInfo = successMsg.getString("msgInfo");
ret+=memberjson.getString("name")+"修改失败"+message;
log.info("人员组织架构修改失败:人员名称为"+memberjson.getString("name")+",ID为"+memberjson.getString("id")+message);
// context.back("人员组织架构修改失败:人员名称为"+ent.getString("name")+","+msgInfo);
// formDataVo.getNewFieldDataMap().put("组织返回结果", "人员组织架构修改失败:人员名称为"+ent.getString("name")+","+msgInfo);
// context.setErrMsg(mor.getMsg());
}
}
}else{

View File

@@ -69,8 +69,8 @@ public class TrainingRecordNode extends ACommonSuperNode {
// 调用接口查询主数据token
String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName);
// 获取当前表单数据
Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = SubFormMap.get("明细表1");
// Map<String, List<FormDataVo>> SubFormMap = formDataVo.getSubFormMap();
List<FormDataVo> subForms = formDataVo.getSubFormMap().get("明细表1");
for (FormDataVo subFormDataVo : subForms) {
// 每一行就是一个变更数据封装封装修改的人员参数执行修改操作
// 创建唯一值查询参数

View File

@@ -42,7 +42,7 @@ public class ParamUtil {
private AttachmentManager attachmentManager;
public void setAttachmentManager(AttachmentManager attachmentManager) {this.attachmentManager = attachmentManager;}
public AttachmentManager getAttachmentManagery() {
public AttachmentManager getAttachmentManager() {
if (this.attachmentManager == null) {this.attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");}return this.attachmentManager;
}
@@ -387,16 +387,16 @@ public class ParamUtil {
// 获取附件控件的数据
if (fieldDataVo.getDbValue() != null) {
String dbValue = fieldDataVo.getDbValue().toString();
List<Long> attachmentIds = getAttachmentManagery().getBySubReference(Long.parseLong(dbValue));
List<Long> attachmentIds = getAttachmentManager().getBySubReference(Long.parseLong(dbValue));
// 获取当前附件控件的所有附件信息
for (int n = 0; n < attachmentIds.size(); n++) {
// 进行附件下载后上传至目标系统中
Attachment attachment = getAttachmentManagery().getAttachmentByFileURL(attachmentIds.get(n));
Attachment attachment = getAttachmentManager().getAttachmentByFileURL(attachmentIds.get(n));
Long fileUrl = attachment.getFileUrl();
String filename = attachment.getFilename();
// String[] fileType = filename.split("\\.");
String fileType = filename.substring(filename.lastIndexOf(".") + 1);
String oaFileName = filename.substring(0, filename.lastIndexOf("."));
// String oaFileName = filename.substring(0, filename.lastIndexOf("."));
// 调用接口下载文件,文件存放在指定的路径下
String dowUrl = configVo.getParamVal(MemberManageConstants.dowUrl.name()) + "/" + fileUrl + "?fileName=" + fileType + "&token=" + getjtToken(configVo);
log.info("下载URL" + dowUrl);

View File

@@ -0,0 +1,9 @@
package com.seeyon.apps.src_qyba.dao;
import java.util.List;
public interface ISrcBeianDao {
public List<Long> getdocResources();
}

View File

@@ -0,0 +1,41 @@
package com.seeyon.apps.src_qyba.dao.impl;
import com.seeyon.apps.src_qyba.dao.ISrcBeianDao;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.ctp.util.JDBCAgent;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class SrcBeianDao implements ISrcBeianDao {
private String getdocResources = "select id from doc_resources where PARENT_FR_ID = '978222128757425825'";
@Override
public List<Long> getdocResources() {
List<Long> ret = new ArrayList<>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder(getdocResources);
List<Object> p = new ArrayList<Object>();
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
for (Map map : list) {
ret.add(Long.parseLong(map.get("id").toString()));
}
} catch (BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (agent != null) {
agent.close();
}
}
return ret;
}
}

View File

@@ -0,0 +1,16 @@
package com.seeyon.apps.src_qyba.manage;
import com.seeyon.ctp.util.annotation.AjaxAccess;
import java.util.List;
import java.util.Map;
public interface MultipleViewsPrintManager {
/**
* 多视图打印
* @return
* @throws Exception
*/
@AjaxAccess
public Map<String, Object> print(Map<String, Object> params, List<Map<String,String>> approvalOpinions,String flowName) throws Exception;
}

View File

@@ -0,0 +1,161 @@
package com.seeyon.apps.src_qyba.manage.impl;
import com.seeyon.apps.collaboration.manager.ColManager;
import com.seeyon.apps.collaboration.po.ColSummary;
import com.seeyon.apps.collaboration.util.ColUtil;
import com.seeyon.apps.src_qyba.manage.MultipleViewsPrintManager;
import com.seeyon.apps.src_qyba.util.ArchiveDocUtils;
import com.seeyon.cap4.form.api.FormApi4Cap4;
import com.seeyon.cap4.form.bean.FormAuthViewBean;
import com.seeyon.cap4.form.bean.FormBean;
import com.seeyon.cap4.form.bean.FormViewBean;
import com.seeyon.cap4.form.util.Enums;
import com.seeyon.ctp.cap.api.manager.CAPFormManager;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.ModuleType;
import com.seeyon.ctp.common.SystemEnvironment;
import com.seeyon.ctp.common.content.mainbody.MainbodyManager;
import com.seeyon.ctp.common.content.mainbody.MainbodyType;
import com.seeyon.ctp.common.log.CtpLogFactory;
import com.seeyon.ctp.common.po.affair.CtpAffair;
import com.seeyon.ctp.common.po.content.CtpContentAll;
import com.seeyon.ctp.util.ParamUtil;
import com.seeyon.ctp.util.Strings;
import com.seeyon.ctp.util.annotation.AjaxAccess;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MultipleViewsPrintManagerImpl implements MultipleViewsPrintManager {
private static Log log = CtpLogFactory.getLog(MultipleViewsPrintManagerImpl.class);
private static FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4");
private ColManager colManager = (ColManager) AppContext.getBean("colManager");
private MainbodyManager ctpMainbodyManager = (MainbodyManager) AppContext.getBean("ctpMainbodyManager");;
private static CAPFormManager capFormManager = (CAPFormManager) AppContext.getBean("capFormManager");
@AjaxAccess
public Map<String, Object> print(Map<String, Object> params,List<Map<String,String>> approvalOpinions,String flowName) throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
result.put("success", true);
Long formId = ParamUtil.getLong(params, "formId", null);
Long affairId = ParamUtil.getLong(params, "affairId", null);
Long summaryId = ParamUtil.getLong(params, "summaryId", null);
String rightId = ParamUtil.getString(params, "rightId");
FormBean formBean = formApi4Cap4.getForm(formId);
if (Strings.isNotBlank(rightId)) {
// 适配这种格式(视图id.权限id_视图id.权限id_视图id.权限id)
List<FormAuthViewBean> formAuthViewBeans = new ArrayList<>();
if (rightId.contains("_") || rightId.contains(".")) {
String[] viewStrs = rightId.split("_");
for (String viewStr : viewStrs) {
String rightIdStr = viewStr.contains(".") ? viewStr.split("\\.")[1].split("[|]")[0]
: viewStr.split("[|]")[0];
FormAuthViewBean formAuthViewBean = formBean.getAuthViewBeanById(Long.parseLong(rightIdStr));
if (formAuthViewBean == null) {
continue;
}
if (formAuthViewBean.getFormViewId() == 0L && viewStr.contains(".")) {
String valueStr = viewStr.split("\\.")[0].split("[|]")[0];
formAuthViewBean.setFormViewId(Long.parseLong(valueStr));
}
formAuthViewBeans.add(formAuthViewBean);
}
}
if (CollectionUtils.isNotEmpty(formAuthViewBeans)) {
List<String> fileUrlList = new ArrayList<String>();
for (FormAuthViewBean formAuthViewBean : formAuthViewBeans) {
String rightIdStr = String.valueOf(formAuthViewBean.getId());
// 此处不需要多语言视图,只需要获取名称
FormViewBean formViewBean = formBean.getFormView(formAuthViewBean.getFormViewId());
if (Enums.ViewType.SeeyonForm == formViewBean.getFormViewTypeEnum()) {
Map<String, Object> param = new HashMap<>();
param.put("rightId", rightIdStr);
param.put("affairId", affairId);
param.put("fileName",flowName);
param.put("formId", formId);
String fileUrl = screenCaptureViewInfo(param,approvalOpinions);
if (StringUtils.isNotEmpty(fileUrl)) {
result.put(formViewBean.getFormViewName(),fileUrl);
}
}
}
}
}
return result;
}
/**
* 获取各个视图截屏数据
*
* @param param
*/
private String screenCaptureViewInfo(Map<String, Object> param,List<Map<String,String>> approvalOpinions) {
try {
String bodyContent = "";
StringBuffer formContent = new StringBuffer(
"<html> <head> <meta charset=\"UTF-8\"> <title>表单</title> </head> <body style=\"text-align:center;\">");
Long affairId = ParamUtil.getLong(param, "affairId");
Long rightId = ParamUtil.getLong(param, "rightId");
Long formId = ParamUtil.getLong(param, "formId");
CtpAffair affair = colManager.getAffairById(affairId);
ColSummary summary = colManager.getColSummaryById(affair.getObjectId());
// 将_rightId加入缓存中
formApi4Cap4.addRightId(formId, rightId);
List<CtpContentAll> contentList = ctpMainbodyManager
.getContentListByModuleIdAndModuleType(ModuleType.collaboration, summary.getId());
CtpContentAll ctpContent = contentList.get(0);
String bodyType = summary.getBodyType();
boolean isFormCap4 = formApi4Cap4.isCap4Form(formId);
if (ColUtil.isForm(bodyType) || isFormCap4) {
bodyContent = capFormManager.getFormDataHtmlForForward(ctpContent.getContentTemplateId(),
ctpContent.getModuleType(), ctpContent.getModuleId(), String.valueOf(rightId));
} else if (String.valueOf(MainbodyType.HTML.getKey()).equals(bodyType)) {
bodyContent = ctpContent.getContent();
}
formContent.append(bodyContent);
// 在此处添加审批意见信息
if(approvalOpinions.size()>0){
formContent.append("</br><table>");
for (Map<String,String> approvalOpinion : approvalOpinions){
formContent.append("<tr>");
formContent.append("<td style=\"width: 15%;font-size:22px;\">").append(approvalOpinion.get("memberName")).append("</td>");
formContent.append("<td style=\"width: 15%;font-size:22px;\">").append(approvalOpinion.get("memberPost")).append("</td>");
formContent.append("<td style=\"width: 25%;font-size:22px;\">").append(approvalOpinion.get("createDate")).append("</td>");
formContent.append("<td style=\"width: 45%;font-size:22px;\">").append(approvalOpinion.get("content")).append("</td>");
formContent.append("</tr>");
}
formContent.append("</table>");
}
formContent.append("</body></html>");
String htmlTempFolder = SystemEnvironment.getSystemTempFolder() + File.separator + affairId + File.separator
+ rightId + ".html";
File formFile = new File(htmlTempFolder);
FileUtils.writeStringToFile(formFile, formContent.toString(), "UTF-8");
String pdfTempFolder = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" + File.separator + param.get("fileName") + ".pdf";
String mergePdfPath = SystemEnvironment.getApplicationFolder()+ File.separator+ "multipleViewsPrint" ;
File mergePdfFile = new File(mergePdfPath);
if(!mergePdfFile.exists()) {
mergePdfFile.mkdirs();
}
if (!ArchiveDocUtils.transHtmlToPdf(htmlTempFolder, pdfTempFolder)) {
throw new Exception("html转PDF失败");
}
return pdfTempFolder;
} catch (Exception e) {
log.error("获取cap4表单页面数据异常:", e);
}
return null;
}
}

View File

@@ -56,6 +56,12 @@ public class FVTongyongService {
sfxwtsmap.put("fieldValue","1");
}
mainlist.add(sfxwtsmap);
// 客户服务平台,意见说明
Map yjsmmap = new HashMap();
yjsmmap.put("fieldName","yjsm");
String yjsm = formDataVo.getFieldData("备注").getStringValue();
yjsmmap.put("fieldValue",yjsm);
mainlist.add(yjsmmap);
//接口主参数
Map m = new LinkedHashMap();

View File

@@ -0,0 +1,76 @@
package com.seeyon.apps.src_qyba.util;
import com.seeyon.ctp.common.SystemEnvironment;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.*;
public class ArchiveDocUtils {
private static final Log LOGGER = LogFactory.getLog(ArchiveDocUtils.class);
public static boolean transHtmlToPdf(String htmlFilePath, String pdfFilePath) {
// String wkhtmltopdfToolPath = AppContext.getSystemProperty("multipleViewsPrint.wkhtmltopdf");
String wkhtmltopdfToolPath = SystemEnvironment.getApplicationFolder()+File.separator + "print" + File.separator + "tools" + File.separator + "windows" + File.separator + "wkhtmltopdf.exe";
LOGGER.info("将html文单转换为PDF文单:" + wkhtmltopdfToolPath);
try {
if (StringUtils.isNotBlank(wkhtmltopdfToolPath)) {
File file = new File(htmlFilePath);
if (!file.exists()) {
LOGGER.info("PDF转换源文件不存在" + htmlFilePath);
return false;
}
// html 转 pdf 工具 不同操作系统运行不同的命令
String command = "";
if (System.getProperty("os.name").startsWith("Windows")) {
// if("2".equals(rotate)){
// command = wkhtmltopdfToolPath + " --enable-local-file-access --page-height 210mm --page-width 297mm " + htmlFilePath + " " + pdfFilePath;
// }else{
command = wkhtmltopdfToolPath + " --enable-local-file-access " + htmlFilePath + " " + pdfFilePath;
// }
} else if (System.getProperty("os.name").startsWith("Linux")) {
command = "wkhtmltopdf " + htmlFilePath + " " + pdfFilePath;
}
LOGGER.info("将html文单转换为PDF文单命令:" + command);
Process process = Runtime.getRuntime().exec(command);
new StreamGobbler(process.getInputStream(), "input").start();
new StreamGobbler(process.getErrorStream(), "error").start();
if (process.waitFor() == 0) {
LOGGER.info("转PDF成功:" + pdfFilePath);
return true;
}
}
} catch (Exception e) {
LOGGER.error("文单转PDF异常:", e);
}
return false;
}
static class StreamGobbler extends Thread {
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(type + ">" + line);
isr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}

View File

@@ -0,0 +1,163 @@
package com.seeyon.ctp.rest.resources;
import cn.hutool.log.Log;
import com.seeyon.apps.collaboration.manager.ColManager;
import com.seeyon.apps.collaboration.po.ColSummary;
import com.seeyon.apps.doc.api.DocApi;
import com.seeyon.apps.doc.bo.DocResourceBO;
import com.seeyon.apps.src_qyba.dao.ISrcBeianDao;
import com.seeyon.apps.src_qyba.manage.impl.MultipleViewsPrintManagerImpl;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.ModuleType;
import com.seeyon.ctp.common.affair.manager.AffairManager;
import com.seeyon.ctp.common.content.ContentUtil;
import com.seeyon.ctp.common.content.comment.Comment;
import com.seeyon.ctp.common.content.comment.CommentManager;
import com.seeyon.ctp.common.po.affair.CtpAffair;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.bo.V3xOrgPost;
import com.seeyon.ctp.organization.manager.OrgManager;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author huangzhengguo:
* @version 创建时间2025年04月16日
* 类说明 根据接收消息新增或者修改组织架构信息
*/
@Path("/beian")
@Produces({"application/json", "application/xml"})
public class TemporaryBeianSynchronizationResource extends BaseResource{
private static final Log log = Log.get(TemporaryBeianSynchronizationResource.class);
private DocApi docApi;
public DocApi getDocApi() {
if (this.docApi == null) {this.docApi = ((DocApi) AppContext.getBean("docApi"));}return docApi;
}
public void setDocApi(DocApi docApi) {
this.docApi = docApi;
}
private ISrcBeianDao srcBeianDao;
public ISrcBeianDao getSrcBeianDao() {
if (this.srcBeianDao == null) {this.srcBeianDao = ((ISrcBeianDao) AppContext.getBean("srcBeianDao"));}return srcBeianDao;
}
public void setSrcBeianDao(ISrcBeianDao srcBeianDao) {
this.srcBeianDao = srcBeianDao;
}
private AffairManager affairManager;
public AffairManager getAffairManager() {
if (this.affairManager == null) {this.affairManager = ((AffairManager) AppContext.getBean("affairManager"));}return affairManager;
}
public void setAffairManager(AffairManager srcBeianDao) {
this.affairManager = affairManager;
}
private ColManager colManager;
public ColManager getColManager() {
if (this.colManager == null) {this.colManager = ((ColManager) AppContext.getBean("colManager"));}return colManager;
}
public void setColManager(ColManager colManager) {
this.colManager = colManager;
}
private MultipleViewsPrintManagerImpl multipleViewsPrintManager;
public MultipleViewsPrintManagerImpl getMultipleViewsPrintManager() {
if (this.multipleViewsPrintManager == null) {this.multipleViewsPrintManager = ((MultipleViewsPrintManagerImpl) AppContext.getBean("multipleViewsPrintManager"));}return multipleViewsPrintManager;
}
public void setMultipleViewsPrintManager(
MultipleViewsPrintManagerImpl multipleViewsPrintManager) {
multipleViewsPrintManager = multipleViewsPrintManager;
}
private CommentManager ctpCommentManager;
public CommentManager getCommentManager() {
if (this.ctpCommentManager == null) {this.ctpCommentManager = ((CommentManager) AppContext.getBean("ctpCommentManager"));}return ctpCommentManager;
}
public void setCommentManager(CommentManager ctpCommentManager) {
this.ctpCommentManager = ctpCommentManager;
}
private OrgManager orgManager;
public OrgManager getOrgManager() {
if (this.orgManager == null) {this.orgManager = ((OrgManager) AppContext.getBean("orgManager"));}return orgManager;
}
public void setOrgManager(OrgManager orgManager) {
this.orgManager = orgManager;
}
@POST
@Path("/synchronizationbeian")
@Produces({"application/json"})
@Consumes({"application/json"})
public Response synchronizationbeian(){
try{
// 查询数据库,查询出来某个文件夹在的所有文档信息,遍历查询到的所有ID调用方法查询出来本地文档中心对象
List<Long> ids = getSrcBeianDao().getdocResources();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<DocResourceBO> docResources = getDocApi().findDocResources(ids);
for (int i = 0 ; i <docResources.size() ; i++ ){
// 查询当前的流程ID。
DocResourceBO docResource = docResources.get(i);
// 根据流程ID查询事项
CtpAffair ctpAffair = getAffairManager().get(docResource.getSourceId());
// 通过截图方法将表单数据生成成为图片
long colSummarId = ctpAffair.getObjectId();
ColSummary summary = getColManager().getSummaryById(colSummarId);
// log.info("formId:"+formId);
log.info("affairId:"+ctpAffair.getId());
log.info("summaryId:"+colSummarId);
log.info("formId:"+summary.getFormid());
String rightId = ContentUtil.findRightIdbyAffairIdOrTemplateId(ctpAffair, summary.getTempleteId());
log.info("rightId:"+rightId);
Map<String, Object> params = new HashMap<String, Object>();
params.put("formId", summary.getFormid());
params.put("affairId", ctpAffair.getId());
params.put("rightId", rightId);
params.put("summaryId", colSummarId);
// 查询当前流程的审批信息将审批信息保存和图片共同保存生成PDF文件
List<Map<String,String>> approvalOpinions = new ArrayList<>();
List<Comment> ctpCommentAlls = getCommentManager().getCommentAllByModuleId(ModuleType.collaboration,colSummarId); ;
for(Comment comment: ctpCommentAlls){
Map<String,String> approvalOpinion = new HashMap<>();
String content = comment.getContent();
approvalOpinion.put("content",content);
Date createDate = comment.getCreateDate();
approvalOpinion.put("createDate",sdf.format(createDate));
// String moduleId = comment.getModuleId().toString();
long createId = comment.getCreateId();
V3xOrgMember member = getOrgManager().getMemberById(createId);
approvalOpinion.put("memberName",member.getName());
V3xOrgPost memberPost = getOrgManager().getPostById(member.getOrgPostId());
approvalOpinion.put("memberPost",memberPost.getName());
approvalOpinions.add(approvalOpinion);
}
Map<String, Object> result = getMultipleViewsPrintManager().print(params,approvalOpinions,ctpAffair.getSubject());
// 上传pdf文件到流程平台。并且调用文档中心文档创建接口。生成文档中心备案数据。
// for (Map.Entry<String, Object> entry : result.entrySet()) {
// String path = entry.getValue().toString();
//
// }
System.out.println(docResource.getId());
}
return success("1");
} catch (Exception e) {
e.printStackTrace();
return fail(e.getMessage());
}
}
}