diff --git a/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml new file mode 100644 index 0000000..1cb2962 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_mainorganization/spring/spring-node.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml index 76bc3f7..56978ab 100644 --- a/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml +++ b/seeyon/WEB-INF/cfgHome/src_membermanage/spring/spring-node.xml @@ -40,5 +40,8 @@ + + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml new file mode 100644 index 0000000..419b045 --- /dev/null +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-dao.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java index f2f67b3..720f7a1 100644 --- a/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/node/NewTongYongNode.java @@ -56,7 +56,6 @@ public class NewTongYongNode extends ACommonSuperNode { } else { context.back(map.get("msg").toString()); } - return context; } diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java index c5e7c17..4089403 100644 --- a/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/util/FanWeiNewUtil.java @@ -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 diff --git a/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java b/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java new file mode 100644 index 0000000..16f8dba --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/MainorganizationPluginApi.java @@ -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; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java b/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java new file mode 100644 index 0000000..c9c1e93 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/constants/MainorganizationConstants.java @@ -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; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java b/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java new file mode 100644 index 0000000..bd0fd14 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/DepartmentAddNode.java @@ -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 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; + } + + +} diff --git a/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java b/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java new file mode 100644 index 0000000..1ea3f12 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/node/DepartmentCloseNode.java @@ -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 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 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; + } + +} diff --git a/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java b/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java index 41639df..a662c80 100644 --- a/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java +++ b/src/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java @@ -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 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 successMsgs = mes.getSuccessMsgs(); diff --git a/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java b/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java new file mode 100644 index 0000000..1815ca9 --- /dev/null +++ b/src/com/seeyon/apps/src_mainorganization/util/ProtUtil.java @@ -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 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 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; + } + + + + + +} diff --git a/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java b/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java index 13e9e06..bd44d44 100644 --- a/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java +++ b/src/com/seeyon/apps/src_membermanage/MemberManageCommonNode.java @@ -174,7 +174,8 @@ public abstract class MemberManageCommonNode extends ACommonSuperNode { formDataVo.getNewFieldDataMap().put("返回结果", "没有查询到需要修改的数据,请检查唯一值是否正确"); } } - break;} + break; + } case "addOrUpdate":{ System.out.println("新增和修改"); // 查询当前信息是否已经存在,设置请求参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java index b3e05e2..d6cf7cd 100644 --- a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员基础信息修改档案表超级节点 + * 账号开启新增档案表超级节点 */ public class AccountOpeningNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java index e8fc737..6b4b87c 100644 --- a/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/AccountOpeningOrganizationNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; /** - * 人员基础信息修改档案表超级节点 + * 账号开启新增组织架构超级节点 */ public class AccountOpeningOrganizationNode extends MemberOrganizationCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java index 0b36bda..2cedf85 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("明细表1"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java index 43db083..8e9cac3 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureOrganizationNode.java @@ -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> subFormDataVoMap = formDataVo.getSubFormMap(); +// Map> subFormDataVoMap = formDataVo.getSubFormMap(); String subTableName = req.getString("subTableName"); - List subFormDataVos = subFormDataVoMap.get(subTableName); + List subFormDataVos = formDataVo.getSubFormMap().get(subTableName); for(int i = 0 ; i < subTables.size() ; i++){ JSONObject subTable = subTables.getJSONObject(i); FormDataVo subFormDataVo = subFormDataVos.get(i); diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java index 1c03a82..ee45a6e 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAccountClosureTalentsNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("明细表1"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java index e8bc1bd..193ae1e 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberAnewEngageOrganizationNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; /** - * 人员退休返聘修改档案表超级节点 + * 人员退休返聘修改组织架构超级节点 */ public class MemberAnewEngageOrganizationNode extends MemberOrganizationCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java index 3089adc..2c6de03 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberBasicsOrganizationNode.java @@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; +/** + * 人员基础信息修改档案表超级节点 + */ public class MemberBasicsOrganizationNode extends MemberOrganizationCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java index 2768428..8057f73 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberContractNode.java @@ -95,8 +95,8 @@ public class MemberContractNode extends ACommonSuperNode { // 调用接口查询主数据token String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); // 获取当前表单数据 - Map> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("人员明细"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("人员明细"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java index dfa481c..d2b362f 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDecruitmentOrganizationNode.java @@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; +/** + * 人员解聘组织架构超级节点 + */ public class MemberDecruitmentOrganizationNode extends MemberOrganizationCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java new file mode 100644 index 0000000..0256392 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDieNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); + List 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 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 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 resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)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 failedData = (Map)resData.get("failedData"); + for (Map.Entry 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; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java index e938ede..629aed5 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionOrganizationNode.java @@ -2,6 +2,9 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; +/** + * 人员离职组织架构超级节点 + */ public class MemberDimissionOrganizationNode extends MemberOrganizationCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java index ca9e0b9..abfeb38 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberDimissionTalentsNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员离职档案表超级节点 + * 人员离职人才库档案表超级节点 */ public class MemberDimissionTalentsNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java index c68466e..b0ce06b 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEmployNode.java @@ -94,8 +94,8 @@ public class MemberEmployNode extends ACommonSuperNode { String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); System.out.println("修改"); // 获取明细表录用明细 - Map> subFormMap = formDataVo.getSubFormMap(); - List subFormDataVoList = subFormMap.get("录用详细"); +// Map> subFormMap = formDataVo.getSubFormMap(); + List subFormDataVoList = formDataVo.getSubFormMap().get("录用详细"); // 遍历所有明细行数据 for (FormDataVo subFormDataVo :subFormDataVoList) { JSONObject isExistUpdateParam = new JSONObject(); diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java index bddb3cb..e1ba8f1 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEntryOrganizationNode.java @@ -2,6 +2,10 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员入职组织架构超级节点 + */ public class MemberEntryOrganizationNode extends MemberOrganizationCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java index b65c965..20c39a3 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberEntryTalentsNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员入职档案表超级节点 + * 人员入职人才库档案表超级节点 */ public class MemberEntryTalentsNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java index 798268f..fb849f7 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberInterviewResultNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("录用详细"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("录用详细"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java index 90f4f91..fc94e81 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberMoveOrganizationNode.java @@ -2,6 +2,10 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberOrganizationCommonNode; + +/** + * 人员调动组织架构超级节点 + */ public class MemberMoveOrganizationNode extends MemberOrganizationCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java index 46eb468..43d96cd 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberPerformanceNode.java @@ -88,8 +88,8 @@ public class MemberPerformanceNode extends ACommonSuperNode { // 调用接口查询主数据token String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); // 获取当前表单数据 - Map> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("明细表1"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java index eedf3fa..6108dce 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRegularizationExtendNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员转正档案表超级节点 + * 人员转正延长档案表超级节点 */ public class MemberRegularizationExtendNode extends MemberManageCommonNode { @Override diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java new file mode 100644 index 0000000..1b5ae59 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); + List 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 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 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 resData = DataProcessingUtil.convertStringToMap(resDatastr); + List successIdList = (List)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 failedData = (Map)resData.get("failedData"); + for (Map.Entry 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; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java new file mode 100644 index 0000000..aee8871 --- /dev/null +++ b/src/com/seeyon/apps/src_membermanage/node/MemberRetirementOrganizationNode.java @@ -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> subFormDataVoMap = formDataVo.getSubFormMap(); +// 根据名称获取表单内明细表 + String subTableName = req.getString("subTableName"); + List 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; + } +} diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java index bb09ef7..90515a0 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员基础信息修改档案表超级节点 + * 人员系统账号批量关闭修改档案表超级节点 */ public class MemberSystemAccountClosureNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java index 649d8b9..942b6be 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureOrganizationNode.java @@ -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 { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java index c4b10f5..0792d31 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberSystemAccountClosureTalentsNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员基础信息修改档案表超级节点 + * 人员系统账号批量关闭修改人才库超级节点 */ public class MemberSystemAccountClosureTalentsNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java index 8ae55ee..f3f66bc 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberTaskFinishNode.java @@ -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> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("明细表1"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java b/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java index d4b0a08..85672d5 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MemberTryOutSummarizeNode.java @@ -3,7 +3,7 @@ package com.seeyon.apps.src_membermanage.node; import com.seeyon.apps.src_membermanage.MemberManageCommonNode; /** - * 人员入职档案表超级节点 + * 人员试用期工作总结超级节点 */ public class MemberTryOutSummarizeNode extends MemberManageCommonNode { diff --git a/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java b/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java index 3be66a9..83bc472 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MembersMoveNode.java @@ -71,8 +71,8 @@ public class MembersMoveNode extends ACommonSuperNode { // 调用接口查询主数据token String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); // 获取当前表单数据 - Map> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("人员明细"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("人员明细"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java b/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java index d7fa28c..cb30885 100644 --- a/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/MembersMoveOrganizationNode.java @@ -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> subFormDataVoMap = formDataVo.getSubFormMap(); String subTableName = req.getString("subTableName"); - List subFormDataVos = subFormDataVoMap.get(subTableName); + List 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{ diff --git a/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java b/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java index ab3e638..192b143 100644 --- a/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java +++ b/src/com/seeyon/apps/src_membermanage/node/TrainingRecordNode.java @@ -69,8 +69,8 @@ public class TrainingRecordNode extends ACommonSuperNode { // 调用接口查询主数据token String mainToken = ProtUtil.getToken(getzsjTokenUrl,restzsjUserName,restzsjPassword,zsjloginName); // 获取当前表单数据 - Map> SubFormMap = formDataVo.getSubFormMap(); - List subForms = SubFormMap.get("明细表1"); +// Map> SubFormMap = formDataVo.getSubFormMap(); + List subForms = formDataVo.getSubFormMap().get("明细表1"); for (FormDataVo subFormDataVo : subForms) { // 每一行就是一个变更数据封装封装修改的人员参数执行修改操作 // 创建唯一值查询参数 diff --git a/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java b/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java index e15254a..fbca640 100644 --- a/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java +++ b/src/com/seeyon/apps/src_membermanage/util/ParamUtil.java @@ -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 attachmentIds = getAttachmentManagery().getBySubReference(Long.parseLong(dbValue)); + List 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); diff --git a/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java b/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java new file mode 100644 index 0000000..e7a7281 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/dao/ISrcBeianDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_qyba.dao; + +import java.util.List; + +public interface ISrcBeianDao { + + public List getdocResources(); + +} diff --git a/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java b/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java new file mode 100644 index 0000000..2a8a71e --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/dao/impl/SrcBeianDao.java @@ -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 getdocResources() { + List ret = new ArrayList<>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getdocResources); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List 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; + } +} diff --git a/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java b/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java new file mode 100644 index 0000000..2981da2 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/manage/MultipleViewsPrintManager.java @@ -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 print(Map params, List> approvalOpinions,String flowName) throws Exception; +} diff --git a/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java b/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java new file mode 100644 index 0000000..344ec19 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/manage/impl/MultipleViewsPrintManagerImpl.java @@ -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 print(Map params,List> approvalOpinions,String flowName) throws Exception { + Map result = new HashMap(); + 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 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 fileUrlList = new ArrayList(); + for (FormAuthViewBean formAuthViewBean : formAuthViewBeans) { + String rightIdStr = String.valueOf(formAuthViewBean.getId()); + // 此处不需要多语言视图,只需要获取名称 + FormViewBean formViewBean = formBean.getFormView(formAuthViewBean.getFormViewId()); + if (Enums.ViewType.SeeyonForm == formViewBean.getFormViewTypeEnum()) { + Map 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 param,List> approvalOpinions) { + try { + String bodyContent = ""; + StringBuffer formContent = new StringBuffer( + " 表单 "); + 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 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("
"); + for (Map approvalOpinion : approvalOpinions){ + formContent.append(""); + formContent.append(""); + formContent.append(""); + formContent.append(""); + formContent.append(""); + formContent.append(""); + } + formContent.append("
").append(approvalOpinion.get("memberName")).append("").append(approvalOpinion.get("memberPost")).append("").append(approvalOpinion.get("createDate")).append("").append(approvalOpinion.get("content")).append("
"); + } + formContent.append(""); + + 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; + } +} diff --git a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java index d403814..4223414 100644 --- a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java +++ b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java @@ -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(); diff --git a/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java b/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java new file mode 100644 index 0000000..1144cc2 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/util/ArchiveDocUtils.java @@ -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(); + } + } + } +} diff --git a/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java b/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java new file mode 100644 index 0000000..2dc363b --- /dev/null +++ b/src/com/seeyon/ctp/rest/resources/TemporaryBeianSynchronizationResource.java @@ -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 ids = getSrcBeianDao().getdocResources(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List docResources = getDocApi().findDocResources(ids); + for (int i = 0 ; i params = new HashMap(); + params.put("formId", summary.getFormid()); + params.put("affairId", ctpAffair.getId()); + params.put("rightId", rightId); + params.put("summaryId", colSummarId); +// 查询当前流程的审批信息,将审批信息保存和图片共同保存生成PDF文件 + List> approvalOpinions = new ArrayList<>(); + List ctpCommentAlls = getCommentManager().getCommentAllByModuleId(ModuleType.collaboration,colSummarId); ; + for(Comment comment: ctpCommentAlls){ + Map 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 result = getMultipleViewsPrintManager().print(params,approvalOpinions,ctpAffair.getSubject()); +// 上传pdf文件到流程平台。并且调用文档中心文档创建接口。生成文档中心备案数据。 +// for (Map.Entry 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()); + } + } + + +}