From 988222e45022219624f3271bac70359f50a1573b Mon Sep 17 00:00:00 2001 From: rengp Date: Thu, 12 Oct 2023 14:02:29 +0800 Subject: [PATCH] no message --- com/api/tjbk/TJBKMeetWeb.java | 12 + com/engine/custom/corn/WeekReportCorn.java | 44 ++ com/engine/custom/yunxuetang/Test.java | 263 ++++++++ .../yunxuetang/bean/DeptRequestBody.java | 101 +++ .../yunxuetang/bean/JobRequestBody.java | 123 ++++ .../yunxuetang/bean/JobTypeRequestBody.java | 40 ++ .../custom/yunxuetang/bean/ResponseData.java | 63 ++ .../yunxuetang/util/HttpClientUtil.java | 100 +++ .../custom/yunxuetang/util/SyncUtil.java | 81 +++ .../tjbankSocket/impl/CWGLSocketExecute.java | 3 - com/engine/web/meeting/NewMeet.java | 48 ++ com/engine/web/tjbk/TjbkServerSocket.java | 4 +- com/engine/web/tjbk/Tjbk_SL_ServerSocket.java | 166 +++++ com/engine/web/zhsl/Tjbk_SL_ServerSocket.java | 167 +++++ .../service/impl/RequestFormServiceImpl.java | 600 ++++++++++++++++++ .../ecology/interface/transfer/sendMsg.jsp | 32 + .../action/javacode/Action20230911062023.java | 77 ++- .../action/javacode/Action20230914101926.java | 6 +- .../action/javacode/Action20231008023243.java | 140 ++++ .../action/javacode/Action20231008042513.java | 140 ++++ 20 files changed, 2173 insertions(+), 37 deletions(-) create mode 100644 com/api/tjbk/TJBKMeetWeb.java create mode 100644 com/engine/custom/yunxuetang/Test.java create mode 100644 com/engine/custom/yunxuetang/bean/DeptRequestBody.java create mode 100644 com/engine/custom/yunxuetang/bean/JobRequestBody.java create mode 100644 com/engine/custom/yunxuetang/bean/JobTypeRequestBody.java create mode 100644 com/engine/custom/yunxuetang/bean/ResponseData.java create mode 100644 com/engine/custom/yunxuetang/util/HttpClientUtil.java create mode 100644 com/engine/custom/yunxuetang/util/SyncUtil.java create mode 100644 com/engine/web/meeting/NewMeet.java create mode 100644 com/engine/web/tjbk/Tjbk_SL_ServerSocket.java create mode 100644 com/engine/web/zhsl/Tjbk_SL_ServerSocket.java create mode 100644 com/engine/workflow/service/impl/RequestFormServiceImpl.java create mode 100644 opt/weaver/ecology/interface/transfer/sendMsg.jsp create mode 100644 weaver/interfaces/workflow/action/javacode/Action20231008023243.java create mode 100644 weaver/interfaces/workflow/action/javacode/Action20231008042513.java diff --git a/com/api/tjbk/TJBKMeetWeb.java b/com/api/tjbk/TJBKMeetWeb.java new file mode 100644 index 0000000..2b1f647 --- /dev/null +++ b/com/api/tjbk/TJBKMeetWeb.java @@ -0,0 +1,12 @@ +package com.api.tjbk; + + + +import com.engine.web.meeting.NewMeet; + +import javax.ws.rs.Path; + +@Path("/oameeting") +public class TJBKMeetWeb extends NewMeet +{ +} diff --git a/com/engine/custom/corn/WeekReportCorn.java b/com/engine/custom/corn/WeekReportCorn.java index f695d52..8f3b8cd 100644 --- a/com/engine/custom/corn/WeekReportCorn.java +++ b/com/engine/custom/corn/WeekReportCorn.java @@ -1,20 +1,64 @@ package com.engine.custom.corn; +import com.cloudstore.dev.api.bean.MessageBean; +import com.cloudstore.dev.api.bean.MessageType; +import com.cloudstore.dev.api.util.Util_Message; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.interfaces.schedule.BaseCronJob; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + public class WeekReportCorn extends BaseCronJob { + private String userid = ""; BaseBean baseBean = new BaseBean(); @Override public void execute() { RecordSet recordSet = new RecordSet(); + int startNum = 0; + int endNum = 0; + recordSet.executeQuery("select count(1) cnt from xlbb_grzbzz_xda"); + recordSet.next(); + startNum = recordSet.getInt("cnt"); recordSet.executeUpdate("insert into xlbb_grzbzz_xda(userid,depid,lczs,ybsl, pjhs, zdhs, zxhs, dbcount, dbzchs , pm,insertdate)select userid,depid,lczs,ybsl,round(pjhs,4) as pjhs,zdhs,zxhs,dbcount,dbzchs ,pm ,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as insertdate from xlbb_grzbzz_xda_view"); writeLog("执行sql=====>insert into xlbb_grzbzz_xda(userid,depid,lczs,ybsl, pjhs, zdhs, zxhs, dbcount, dbzchs , pm,insertdate)select userid,depid,lczs,ybsl,round(pjhs,4) as pjhs,zdhs,zxhs,dbcount,dbzchs ,pm ,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as insertdate from xlbb_grzbzz_xda_view"); + recordSet.executeQuery("select count(1) cnt from xlbb_grzbzz_xda"); + recordSet.next(); + endNum = recordSet.getInt("cnt"); + writeLog("执行sql数量=====>"+recordSet.getCounts()); + sendMsg(startNum,endNum); } private void writeLog(String log){ baseBean.writeLog(log); } + + private void sendMsg(int startNum ,int endNum){ + MessageType messageType = MessageType.newInstance(1157); // 消息来源(见文档第四点补充 必填) + Set userIdList = new HashSet<>(); // 接收人id 必填 + String[] useridArr = userid.split(","); + for (String s : useridArr) { + userIdList.add(s); + } + String title = "个人周报更新提醒"; // 标题 + String context = "本次周报新增"+(endNum-startNum)+";" + + "更新前总数"+startNum+";" + + "更新后总数"+endNum+";"; // 内容 + String linkUrl = ""; // PC端链接 + String linkMobileUrl = ""; // 移动端链接 + try { + MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); + messageBean.setCreater(1);// 创建人id + //message.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 + //messageBean.setTargetId("121|22"); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 + Util_Message.store(messageBean); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } diff --git a/com/engine/custom/yunxuetang/Test.java b/com/engine/custom/yunxuetang/Test.java new file mode 100644 index 0000000..1eb367b --- /dev/null +++ b/com/engine/custom/yunxuetang/Test.java @@ -0,0 +1,263 @@ +package com.engine.custom.yunxuetang; + +import com.alibaba.fastjson.JSONObject; + +import com.engine.custom.yunxuetang.bean.DeptRequestBody; +import com.engine.custom.yunxuetang.bean.JobRequestBody; +import com.engine.custom.yunxuetang.bean.JobTypeRequestBody; +import com.engine.custom.yunxuetang.bean.ResponseData; +import com.engine.custom.yunxuetang.util.HttpClientUtil; +import com.engine.custom.yunxuetang.util.SyncUtil; +import com.weaver.general.Util; +import okhttp3.*; +import weaver.conn.BatchRecordSet; +import weaver.conn.RecordSet; +import weaver.general.GCONST; +import weaver.general.StringUtil; +import weaver.hrm.job.JobActivitiesComInfo; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Test { + //查询未封存的分部 数量不大暂不分页 + public static final String querySubsql = "select ID,SUBCOMPANYNAME,SHOWORDER,SUBCOMPANYCODE from hrmsubcompany where CANCELED is null or CANCELED != 1"; + //更新分部云学堂id + public static final String updateSubyxtid = "update hrmsubcompanydefined set yxtid = ? where subcomid = ?"; + //查询部门等级sql + public static final String queryDeptLevelsql = "select TLEVEL level from HRMDEPARTMENT group by TLEVEL"; + //根据层级获取对应层级的总数 + public static final String queryDeptLevelCountsql = "select count(*) cnt from HRMDEPARTMENT where TLEVEL = ?"; + //查询某级部门 + public static final String queryDeptsql = "select dept.* from (" + + " select id , DEPARTMENTNAME ,DEPARTMENTCODE ,SUBCOMPANYID1 , SUPDEPID,SHOWORDER, " + + " ROW_NUMBER() OVER (ORDER BY SHOWORDER) AS rn from HRMDEPARTMENT where TLEVEL = ? " + + " ) dept WHERE dept.rn BETWEEN ? AND ? "; + //查询删除的部门 + public static final String queryDelDeptsql = "select id from HRMDEPARTMENT where CANCELED = 1 order by TLEVEL desc"; + // public static final String queryDelDeptsql = "select id from HRMDEPARTMENT order by TLEVEL desc"; + //查询删除的分部 + public static final String queryDelSubsql = "select id from HRMSUBCOMPANY where CANCELED = 1 order by TLEVEL desc"; + // public static final String queryDelSubsql = "select id from HRMSUBCOMPANY order by TLEVEL desc"; + //查询岗位分类 + public static final String queryJobTypesql = "select * from hrmjobactivities"; + //查询岗位 + public static final String queryJobsql = "select * from hrmjobtitles"; + public static final char Separator = Util.getSeparator(); + + public static void main(String[] args) { + String rootPath = "D:\\WEAVER2\\ecology\\"; + GCONST.setRootPath(rootPath); + GCONST.setServerName("ecology"); + // Test test = new Test(); + //同步部门成功,开始调用删除部门接口同步封存部门 + // test.syncDeptList(); + //先删除部门再删除分部 + // test.deldept(); + //同步岗位类型 防止有同名岗位 + // test.syncJobTypeList(); + //同步岗位 + // test.syncJobList(); + JobActivitiesComInfo jobActivitiesComInfo = new JobActivitiesComInfo(); + jobActivitiesComInfo.getJobActivitiesname(); + // boolean next = jobActivitiesComInfo.next(); + } + + + + + private void syncDeptList() { + //同步分部作为一级部门 + //获取分部beanList + SyncUtil syncUtil = new SyncUtil(); + RecordSet recordSet = new RecordSet(); + BatchRecordSet batchRecordSet = new BatchRecordSet(); + List subcompanyList = getSubcompanyList(recordSet); + List updatesubcompanyList = new ArrayList<>(); + //推送数据云学堂 + for (DeptRequestBody deptRequestBody : subcompanyList) { + ResponseData responseData = syncUtil.syncDept(deptRequestBody); + System.out.println("responseData"+responseData); + String yxtid = responseData.getData().getString("id"); + updatesubcompanyList.add(yxtid+Separator+deptRequestBody.getThirdId()); + System.out.println("sql==="+yxtid+Separator+deptRequestBody.getThirdId()); + } + batchRecordSet.executeSqlBatchNew(updateSubyxtid,updatesubcompanyList); + //同步部门(从一级开始同步,查询一共几级部门,按顺序推送) + ArrayList levelList = new ArrayList<>(); + recordSet.executeQuery(queryDeptLevelsql); + while (recordSet.next()){ + int level = Util.getIntValue(recordSet.getString("level"),2); + levelList.add(level); + } + Collections.sort(levelList); + //去重,一般不会有这个问题 + List listWithoutDuplicates = new ArrayList<>(new LinkedHashSet<>(levelList)); + //禁止在循环中创建recordSet对象,防止连接溢出 + for (int i = 0; i < listWithoutDuplicates.size(); i++) { + int total = getTotalRecords(recordSet, listWithoutDuplicates.get(i)); + int pageSize = 200; + int totalPages = (int) Math.ceil((double) total / pageSize); + if (i == 0) { + //level为2的作为2级部门,上级部门字段为分部 + for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) { + List pageData = getDeptList(listWithoutDuplicates.get(i),recordSet,pageIndex, pageSize); + for (DeptRequestBody deptRequestBody : pageData) { + ResponseData responseData = syncUtil.syncDept(deptRequestBody); + System.out.println("deptRequestBody===>"+deptRequestBody); + System.out.println("responseData===>"+responseData); + responseData.getData().getString("id"); + + } + } + + } else { + //level大于2的上级部门为oa原上级部门 + for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) { + List pageData = getDeptList(listWithoutDuplicates.get(i),recordSet,pageIndex, pageSize); + for (DeptRequestBody deptRequestBody : pageData) { + ResponseData responseData = syncUtil.syncDept(deptRequestBody); + System.out.println("deptRequestBody===>"+deptRequestBody); + System.out.println("responseData===>"+responseData); + responseData.getData().getString("id"); + + } + } + } + } + } + + private List getSubcompanyList(RecordSet recordSet){ + recordSet.executeQuery(querySubsql); + ArrayList subcompanyList = new ArrayList<>(); + while (recordSet.next()){ + DeptRequestBody deptRequestBody = new DeptRequestBody(); + //三方id + deptRequestBody.setThirdId(Util.null2String("sub_"+recordSet.getString("ID"))); + //分部名称 + deptRequestBody.setName(Util.null2String(recordSet.getString("SUBCOMPANYNAME"))); + //排序 + deptRequestBody.setOrderIndex(Util.getIntValue(recordSet.getString("SHOWORDER"))); + //编码 + deptRequestBody.setCode(Util.null2String(recordSet.getString("SUBCOMPANYCODE"))); + subcompanyList.add(deptRequestBody); + } + return subcompanyList; + }; + + private List getDeptList(Integer level, RecordSet recordSet ,int pageIndex, int pageSize) { + ArrayList deptRequestBodyList = new ArrayList<>(); + int start = pageIndex * pageSize + 1; + int end = start + pageSize - 1; + recordSet.executeQuery(queryDeptsql,level,start,end); + while (recordSet.next()){ + DeptRequestBody deptRequestBody = new DeptRequestBody(); + //三方id + deptRequestBody.setThirdId("dept_"+Util.null2String(recordSet.getString("ID"))); + //分部名称 + deptRequestBody.setName(Util.null2String(recordSet.getString("DEPARTMENTNAME"))); + //排序 + deptRequestBody.setOrderIndex(Util.getIntValue(recordSet.getString("SHOWORDER"))); + //编码 + deptRequestBody.setCode(Util.null2String(recordSet.getString("DEPARTMENTCODE"))); + String supdepid = Util.null2String(recordSet.getString("SUPDEPID")); + if ("0".equals(supdepid)|| StringUtil.isEmpty(supdepid)){ + deptRequestBody.setParentThirdId("sub_"+Util.null2String(recordSet.getString("SUBCOMPANYID1"))); + }else { + deptRequestBody.setParentThirdId("dept_"+supdepid); + } + deptRequestBodyList.add(deptRequestBody); + } + return deptRequestBodyList; + } + + + + //获取对应层级总数 + public static int getTotalRecords(RecordSet recordSet , int level) { + recordSet.executeQuery(queryDeptLevelCountsql,level); + recordSet.next(); + return recordSet.getInt("cnt"); + } + //删除部门 + public void deldept() { + SyncUtil syncUtil = new SyncUtil(); + RecordSet recordSet = new RecordSet(); + recordSet.executeQuery(queryDelDeptsql); + while (recordSet.next()){ + syncUtil.syncDelDept("dept_"+recordSet.getString("id")); + } + recordSet.executeQuery(queryDelSubsql); + while (recordSet.next()){ + syncUtil.syncDelDept("sub_"+recordSet.getString("id")); + } + } + + private void syncJobList() { + SyncUtil syncUtil = new SyncUtil(); + ArrayList jobRequestBodyList = getJobRequestBodyList(); + for (JobRequestBody jobRequestBody : jobRequestBodyList) { + syncUtil.syncJobs(jobRequestBody); + } + + } + + + private void syncJobTypeList() { + SyncUtil syncUtil = new SyncUtil(); + ArrayList jobTypeRequestBodyList = getJobTypeRequestBodyList(); + for (JobTypeRequestBody jobTypeRequestBody : jobTypeRequestBodyList) { + syncUtil.syncJobType(jobTypeRequestBody); + } + } + +// 获取岗位 + private ArrayList getJobRequestBodyList() { + RecordSet recordSet = new RecordSet(); + ArrayList jobList = new ArrayList<>(); + recordSet.executeQuery(queryJobsql); + + while (recordSet.next()){ + String id = recordSet.getString("id"); + String jobtitlename = recordSet.getString("JOBTITLENAME"); + JobRequestBody jobRequestBody = new JobRequestBody(); + jobRequestBody.setThirdId(id); + jobRequestBody.setName(jobtitlename); + jobList.add(jobRequestBody); + } + return jobList; + } + // 获取岗位分类 + private ArrayList getJobTypeRequestBodyList() { + RecordSet recordSet = new RecordSet(); + ArrayList jobTypeList = new ArrayList<>(); + recordSet.executeQuery(queryJobTypesql); + while (recordSet.next()){ + String id = recordSet.getString("id"); + String jobtitlename = recordSet.getString("JOBACTIVITYNAME"); + JobTypeRequestBody jobTypeRequestBody = new JobTypeRequestBody(); + jobTypeRequestBody.setThirdId(id); + jobTypeRequestBody.setName(jobtitlename); + jobTypeList.add(jobTypeRequestBody); + } + return jobTypeList; + } + + + + public static String extractChinesePart(String input) { + // 正则表达式匹配 ~`~`数字 中文内容`~`数字 的模式 + Pattern pattern = Pattern.compile("~`~`\\d+ ([\u4e00-\u9fa5]+)`~`"); + Matcher matcher = pattern.matcher(input); + + if (matcher.find()) { + return matcher.group(1); // 返回匹配的第一个分组,即中文内容 + } + return input; + } +} diff --git a/com/engine/custom/yunxuetang/bean/DeptRequestBody.java b/com/engine/custom/yunxuetang/bean/DeptRequestBody.java new file mode 100644 index 0000000..d3c6416 --- /dev/null +++ b/com/engine/custom/yunxuetang/bean/DeptRequestBody.java @@ -0,0 +1,101 @@ +package com.engine.custom.yunxuetang.bean; + +public class DeptRequestBody { + + private String code; + private String deptManagerThirdId; + private String description; + private int maxUserCount; + private String name; + private int orderIndex; + private String parentThirdId; + private boolean recoveryDeleted; + private String thirdId; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDeptManagerThirdId() { + return deptManagerThirdId; + } + + public void setDeptManagerThirdId(String deptManagerThirdId) { + this.deptManagerThirdId = deptManagerThirdId; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getMaxUserCount() { + return maxUserCount; + } + + public void setMaxUserCount(int maxUserCount) { + this.maxUserCount = maxUserCount; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + + public String getParentThirdId() { + return parentThirdId; + } + + public void setParentThirdId(String parentThirdId) { + this.parentThirdId = parentThirdId; + } + + public boolean isRecoveryDeleted() { + return recoveryDeleted; + } + + public void setRecoveryDeleted(boolean recoveryDeleted) { + this.recoveryDeleted = recoveryDeleted; + } + + public String getThirdId() { + return thirdId; + } + + public void setThirdId(String thirdId) { + this.thirdId = thirdId; + } + + @Override + public String toString() { + return "DeptRequestBody{" + + "code='" + code + '\'' + + ", deptManagerThirdId='" + deptManagerThirdId + '\'' + + ", description='" + description + '\'' + + ", maxUserCount=" + maxUserCount + + ", name='" + name + '\'' + + ", orderIndex=" + orderIndex + + ", parentThirdId='" + parentThirdId + '\'' + + ", recoveryDeleted=" + recoveryDeleted + + ", thirdId='" + thirdId + '\'' + + '}'; + } +} diff --git a/com/engine/custom/yunxuetang/bean/JobRequestBody.java b/com/engine/custom/yunxuetang/bean/JobRequestBody.java new file mode 100644 index 0000000..b7b7760 --- /dev/null +++ b/com/engine/custom/yunxuetang/bean/JobRequestBody.java @@ -0,0 +1,123 @@ +package com.engine.custom.yunxuetang.bean; + +import java.util.List; + +public class JobRequestBody { + + private String catalogThirdId; + private String code; + private String description; + private String gradeThirdId; + private List gradeThirdIds; + private int keyPosition; + private String name; + private int orderIndex; + private String requirement; + private String responsibility; + private String thirdId; + + public String getCatalogThirdId() { + return catalogThirdId; + } + + public void setCatalogThirdId(String catalogThirdId) { + this.catalogThirdId = catalogThirdId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getGradeThirdId() { + return gradeThirdId; + } + + public void setGradeThirdId(String gradeThirdId) { + this.gradeThirdId = gradeThirdId; + } + + public List getGradeThirdIds() { + return gradeThirdIds; + } + + public void setGradeThirdIds(List gradeThirdIds) { + this.gradeThirdIds = gradeThirdIds; + } + + public int getKeyPosition() { + return keyPosition; + } + + public void setKeyPosition(int keyPosition) { + this.keyPosition = keyPosition; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + + public String getRequirement() { + return requirement; + } + + public void setRequirement(String requirement) { + this.requirement = requirement; + } + + public String getResponsibility() { + return responsibility; + } + + public void setResponsibility(String responsibility) { + this.responsibility = responsibility; + } + + public String getThirdId() { + return thirdId; + } + + public void setThirdId(String thirdId) { + this.thirdId = thirdId; + } + + @Override + public String toString() { + return "JobRequestBody{" + + "catalogThirdId='" + catalogThirdId + '\'' + + ", code='" + code + '\'' + + ", description='" + description + '\'' + + ", gradeThirdId='" + gradeThirdId + '\'' + + ", gradeThirdIds=" + gradeThirdIds + + ", keyPosition=" + keyPosition + + ", name='" + name + '\'' + + ", orderIndex=" + orderIndex + + ", requirement='" + requirement + '\'' + + ", responsibility='" + responsibility + '\'' + + ", thirdId='" + thirdId + '\'' + + '}'; + } +} diff --git a/com/engine/custom/yunxuetang/bean/JobTypeRequestBody.java b/com/engine/custom/yunxuetang/bean/JobTypeRequestBody.java new file mode 100644 index 0000000..9dbdfff --- /dev/null +++ b/com/engine/custom/yunxuetang/bean/JobTypeRequestBody.java @@ -0,0 +1,40 @@ +package com.engine.custom.yunxuetang.bean; + +public class JobTypeRequestBody { + private String name; + private int orderIndex; + private String parentThirdId; + private String thirdId; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getOrderIndex() { + return orderIndex; + } + + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } + + public String getParentThirdId() { + return parentThirdId; + } + + public void setParentThirdId(String parentThirdId) { + this.parentThirdId = parentThirdId; + } + + public String getThirdId() { + return thirdId; + } + + public void setThirdId(String thirdId) { + this.thirdId = thirdId; + } +} diff --git a/com/engine/custom/yunxuetang/bean/ResponseData.java b/com/engine/custom/yunxuetang/bean/ResponseData.java new file mode 100644 index 0000000..c8e5616 --- /dev/null +++ b/com/engine/custom/yunxuetang/bean/ResponseData.java @@ -0,0 +1,63 @@ +package com.engine.custom.yunxuetang.bean; + +import com.alibaba.fastjson.JSONObject; + +public class ResponseData { + + private String code; + private String msg; + private String subCode; + private String subMsg; + private JSONObject data; + + @Override + public String toString() { + return "ErrorResponse{" + + "code='" + code + '\'' + + ", msg='" + msg + '\'' + + ", subCode='" + subCode + '\'' + + ", subMsg='" + subMsg + '\'' + + ", data=" + data + + '}'; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getSubCode() { + return subCode; + } + + public void setSubCode(String subCode) { + this.subCode = subCode; + } + + public String getSubMsg() { + return subMsg; + } + + public void setSubMsg(String subMsg) { + this.subMsg = subMsg; + } + + public JSONObject getData() { + return data; + } + + public void setData(JSONObject data) { + this.data = data; + } +} \ No newline at end of file diff --git a/com/engine/custom/yunxuetang/util/HttpClientUtil.java b/com/engine/custom/yunxuetang/util/HttpClientUtil.java new file mode 100644 index 0000000..6d53be4 --- /dev/null +++ b/com/engine/custom/yunxuetang/util/HttpClientUtil.java @@ -0,0 +1,100 @@ +package com.engine.custom.yunxuetang.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import okhttp3.Headers; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public class HttpClientUtil { + + /** + * 以post方式调用第三方接口方法. + * + * @param pathUrl 请求接口地址. + * @param dataStr 请求参数. + * @param accessToken accessToken. + * @return str. + */ + public static String doPost(String pathUrl, String dataStr, String accessToken) { + + // 请求参数转换为json字符串 + // String dataStr = JSON.toJSONString(dataMap); + String result = null; + try { + // 组装请求头信息 + Map header = new HashMap<>(2); + header.put("Content-Type", "application/json;charset=utf-8"); + if (accessToken != null && accessToken.length() > 0) { + header.put("Authorization", accessToken); + } + OkHttpClient client = new OkHttpClient().newBuilder().build(); + MediaType mediaType = MediaType.parse("application/json;charset=utf-8"); + RequestBody body = RequestBody.create(mediaType, dataStr); + Request request = new Request.Builder() + .url(pathUrl) // 请求接口地址 + .method("POST", body) // 设定请求的方法为"POST" + .headers(Headers.of(header)) // 请求头信息 + .build(); + Response response = client.newBuilder().readTimeout(300000L, TimeUnit.MILLISECONDS).build().newCall(request).execute(); + result = response.body().string(); + } catch (Exception e) { + System.out.println("执行包含头部的post请求,url:" + pathUrl + ",请求数据:" + dataStr + ",执行错误信息:" + e); + } + return result; + } + + /** + * 以get方式调用第三方接口方法. + * + * @param pathUrl 请求接口地址. + * @param accessToken accessToken. + * @return str. + */ + public static String doGet(String pathUrl, String accessToken) { + + String result = null; + try { + // 组装请求头信息 + Map header = new HashMap<>(2); + header.put("Content-Type", "application/json;charset=utf-8"); + if (accessToken != null && accessToken.length() > 0) { + header.put("Authorization", accessToken); + } + OkHttpClient client = new OkHttpClient().newBuilder().build(); + // http创建的request对象默认是get请求 + Request request = new Request.Builder() + .url(pathUrl) // 请求接口地址 + .headers(Headers.of(header)) // 请求头信息 + .build(); + Response response = client.newBuilder().readTimeout(300000L, TimeUnit.MILLISECONDS).build().newCall(request).execute(); + result = response.body().string(); + } catch (Exception e) { + System.out.println("执行包含头部的get请求,url:" + pathUrl + ",执行错误信息:" + e); + } + return result; + } + + + // 获取accessToken + public static String getAccessToken(String url,String appId,String appSecret) { + Map body = new HashMap<>(); + String dataStr = JSON.toJSONString(body); + // url拼接所需参数 + String pathUrl = url + "?" + "appId=" + appId + "&appSecret=" + appSecret; + // 以post方式调用第三方接口,获取响应结果 + String result = HttpClientUtil.doPost(pathUrl, dataStr, null); + + // 返回accessToken + JSONObject jsonObject = JSON.parseObject(result, JSONObject.class); + return jsonObject.getString("accessToken"); + } + +} diff --git a/com/engine/custom/yunxuetang/util/SyncUtil.java b/com/engine/custom/yunxuetang/util/SyncUtil.java new file mode 100644 index 0000000..d7903db --- /dev/null +++ b/com/engine/custom/yunxuetang/util/SyncUtil.java @@ -0,0 +1,81 @@ +package com.engine.custom.yunxuetang.util; + +import com.alibaba.fastjson.JSONObject; +import com.engine.custom.yunxuetang.bean.DeptRequestBody; +import com.engine.custom.yunxuetang.bean.JobRequestBody; +import com.engine.custom.yunxuetang.bean.JobTypeRequestBody; +import com.engine.custom.yunxuetang.bean.ResponseData; +import okhttp3.OkHttpClient; + +public class SyncUtil { + private static OkHttpClient client =new OkHttpClient(); + public static final String tokenUrl = "https://openapi-adel.yunxuetang.cn/token"; + public static final String appId = "9eqdtfi6t2f"; + public static final String appSecret = "OWZhZWM0MGVjZWFj"; + public static final String syncDeptsUrl = "https://openapi-adel.yunxuetang.cn/v1/udp/public/depts/sync"; + public static final String syncDelDeptsUrl = "https://openapi-adel.yunxuetang.cn/v1/udp/public/depts/${thirdId}/del"; + public static final String syncJobUrl = "https://openapi-adel.yunxuetang.cn/v1/udp/public/positions/sync"; + public static final String syncJobTypeUrl = "https://openapi-adel.yunxuetang.cn/v1/udp/public/positioncatalogs/sync"; + private String cachedToken; + private long tokenExpiryTime; + + public ResponseData syncDept(DeptRequestBody deptRequestBody) { + // String accessToken = HttpClientUtil.getAccessToken(tokenUrl, appId, appSecret); + // System.out.println(accessToken); + //同步部门 + // DeptRequestBody deptRequestBody = new DeptRequestBody(); + // deptRequestBody.setName("研发一部子部门1"); + // deptRequestBody.setThirdId("2"); + // deptRequestBody.setCode(""); + // deptRequestBody.setParentThirdId("1"); + String bodyStr = JSONObject.toJSONString(deptRequestBody); + fetchToken(); + String responseData = HttpClientUtil.doPost(syncDeptsUrl, bodyStr, cachedToken); + ResponseData jsonObject = JSONObject.parseObject(responseData,ResponseData.class); + System.out.println(jsonObject); + return jsonObject; + + } + + public ResponseData syncDelDept( String id) { + fetchToken(); + String responseData = HttpClientUtil.doPost(syncDelDeptsUrl.replace("${thirdId}",id), "", cachedToken); + ResponseData jsonObject = JSONObject.parseObject(responseData,ResponseData.class); + System.out.println(jsonObject); + return jsonObject; + } + + + + + public void fetchToken() { + // 如果缓存中的令牌为空或即将过期,重新获取 + if (cachedToken == null || System.currentTimeMillis() > tokenExpiryTime - (5 * 60 * 1000)) { + cachedToken = HttpClientUtil.getAccessToken(tokenUrl, appId, appSecret); + // 设置令牌的过期时间,这里是30分钟后 + tokenExpiryTime = System.currentTimeMillis() + (30 * 60 * 1000); + } + } + + public ResponseData syncJobType(JobTypeRequestBody job) { + fetchToken(); + String bodyStr = JSONObject.toJSONString(job); + fetchToken(); + System.out.println(bodyStr); + String responseData = HttpClientUtil.doPost(syncJobTypeUrl, bodyStr, cachedToken); + ResponseData jsonObject = JSONObject.parseObject(responseData,ResponseData.class); + System.out.println(jsonObject); + return jsonObject; + } + + public ResponseData syncJobs(JobRequestBody job) { + fetchToken(); + String bodyStr = JSONObject.toJSONString(job); + fetchToken(); + System.out.println(bodyStr); + String responseData = HttpClientUtil.doPost(syncJobUrl, bodyStr, cachedToken); + ResponseData jsonObject = JSONObject.parseObject(responseData,ResponseData.class); + System.out.println(jsonObject); + return jsonObject; + } +} diff --git a/com/engine/tjbankSocket/impl/CWGLSocketExecute.java b/com/engine/tjbankSocket/impl/CWGLSocketExecute.java index ea90c10..6b128ac 100644 --- a/com/engine/tjbankSocket/impl/CWGLSocketExecute.java +++ b/com/engine/tjbankSocket/impl/CWGLSocketExecute.java @@ -112,11 +112,8 @@ public class CWGLSocketExecute extends BaseBean implements SocketExecute { } public static void main(String[] args) { - String rootPath = "D:\\WEAVER2\\ecology\\"; GCONST.setRootPath(rootPath); GCONST.setServerName("ecology"); - } - } diff --git a/com/engine/web/meeting/NewMeet.java b/com/engine/web/meeting/NewMeet.java new file mode 100644 index 0000000..62f4aa0 --- /dev/null +++ b/com/engine/web/meeting/NewMeet.java @@ -0,0 +1,48 @@ +package com.engine.web.meeting; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import weaver.general.BaseBean; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; +import java.util.Map; + + +public class NewMeet { + @Path("/newMeet") + @POST + public String newMeet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + // try { + Map map = ParamUtil.request2Map(request); + new BaseBean().writeLog("oameeting/newMeet--->" + map); + new BaseBean().writeLog("oameeting/newMeet--->" + JSONObject.toJSONString(map)); + +// String dataTable = (String) map.get("dataTable"); +// RecordSet recordSet = new RecordSet(); +// recordSet.executeQuery("select * from uf_View_resume_perm where sfqy = 0"); +// StringBuilder s = new StringBuilder(); +// while (recordSet.next()){ +// String xld = Utils.null2String(recordSet.getString("xld")); +// s.append(xld).append(","); +// } +// HashMap result = new HashMap<>(); +// if (s.length()>0){ +// result.put("data",s.toString().substring(0, s.length()-1)); +// }else { +// result.put("data",""); +// } +// result.put("code","200"); +// return JSONObject.toJSONString(result); +// }catch (Exception e){ + // e.printStackTrace(); + // HashMap result = new HashMap<>(); + // result.put("data",e.getMessage()); + // result.put("code","500"); + return JSONObject.toJSONString(null); + + } + +} \ No newline at end of file diff --git a/com/engine/web/tjbk/TjbkServerSocket.java b/com/engine/web/tjbk/TjbkServerSocket.java index 68a2095..e6935fc 100644 --- a/com/engine/web/tjbk/TjbkServerSocket.java +++ b/com/engine/web/tjbk/TjbkServerSocket.java @@ -18,7 +18,7 @@ import java.nio.charset.StandardCharsets; import java.util.Map; public class TjbkServerSocket implements ServletContextListener { - private SocketThread socketThread; + private SocketThread_sl socketThread; @Override public void contextDestroyed(ServletContextEvent arg0) { @@ -35,7 +35,7 @@ public class TjbkServerSocket implements ServletContextListener { new BaseBean().writeLog("contextInitialized启动"); ServletContext servletContext = arg0.getServletContext(); if (socketThread == null) { - socketThread = new SocketThread(null, servletContext); + socketThread = new SocketThread_sl(null, servletContext); socketThread.start(); // servlet上下文初始化时启动socket服务端线程 } } diff --git a/com/engine/web/tjbk/Tjbk_SL_ServerSocket.java b/com/engine/web/tjbk/Tjbk_SL_ServerSocket.java new file mode 100644 index 0000000..3d52dd5 --- /dev/null +++ b/com/engine/web/tjbk/Tjbk_SL_ServerSocket.java @@ -0,0 +1,166 @@ +package com.engine.web.tjbk; + +import com.engine.tjbankSocket.SocketExecute; +import com.engine.tjbankSocket.impl.CWGLSocketExecute; +import com.engine.tjbankSocket.impl.GetToCountSocketExecute; +import com.engine.util.XMLUtils; +import org.apache.commons.lang.StringEscapeUtils; +import weaver.general.BaseBean; +import weaver.general.StringUtil; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +public class Tjbk_SL_ServerSocket implements ServletContextListener { + private SocketThread_sl socketThread; + + @Override + public void contextDestroyed(ServletContextEvent arg0) { + // TODO Auto-generated method stub + if (socketThread != null && socketThread.isInterrupted()) { + socketThread.closeServerSocket(); + socketThread.interrupt(); + } + } + + @Override + public void contextInitialized(ServletContextEvent arg0) { + // TODO Auto-generated method stub + new BaseBean().writeLog("contextInitialized启动"); + ServletContext servletContext = arg0.getServletContext(); + if (socketThread == null) { + socketThread = new SocketThread_sl(null, servletContext); + socketThread.start(); // servlet上下文初始化时启动socket服务端线程 + } + } + +} + + +class SocketThread_sl extends Thread { + + private ServletContext servletContext; + private ServerSocket serverSocket; + + public SocketThread_sl(ServerSocket serverSocket, ServletContext servletContext) { + this.servletContext = servletContext; + // 从web.xml中context-param节点获取socket端口 + String port = this.servletContext.getInitParameter("socketPortSL"); + if (serverSocket == null) { + try { + this.serverSocket = new ServerSocket(Integer.parseInt(port)); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public void run() { + + while (!this.isInterrupted()) { // 线程未中断执行循环 + try { + new BaseBean().writeLog("SocketThread线程启动"); + Socket socket = serverSocket.accept(); + if (socket != null) { + new ProcessSocketData_sl(socket, this.servletContext).start(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public void closeServerSocket() { + try { + if (serverSocket != null && !serverSocket.isClosed()) { + serverSocket.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} + +class ProcessSocketData_sl extends Thread { + + private Socket socket; + private ServletContext servletContext; + + public ProcessSocketData_sl() { + super(); + } + + public ProcessSocketData_sl(Socket socket, ServletContext servletContext) { + this.socket = socket; + this.servletContext = servletContext; + } + + @Override + public void run() { + try { +// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); + new BaseBean().writeLog("ServerSocket线程启动"); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8); + + PrintWriter pw = new PrintWriter(outputStreamWriter); + InputStream inputStream = socket.getInputStream(); + BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + char[] datalen=new char[8];//报文前八位为报文体总长度 + + in.read(datalen,0,8); + String lendata=new String (datalen); + int length=Integer.parseInt(lendata); + new BaseBean().writeLog("报文长度"+length); + // byte[] data=new byte[length]; + char[] data=new char[length]; + int datalength = in.read(data,0,length); + String requestData = new String(data); + new BaseBean().writeLog("requestData",requestData); + String s = ""; + if (!StringUtil.isEmpty(requestData.toString())) { + new BaseBean().writeLog("requestData",requestData); + s = execute(requestData.toString()); + } + // 执行自定义的请求解析方法,生成响应response + pw.println(s); + pw.flush(); // 刷新缓冲区 + pw.close(); + socket.close(); +// System.out.println(sb); + } catch (IOException e) { + e.printStackTrace(); + System.out.println(e); + } + } + private String execute(String XMLparam){ + new BaseBean().writeLog(this.getClass().getName()+":XMLparam=="+XMLparam); + + Map paramMap = XMLUtils.parseXMLToMap(XMLparam); + new BaseBean().writeLog(this.getClass().getName()+":paramMap=="+paramMap); + StringEscapeUtils.unescapeXml(XMLparam); + //目标系统代码 + String system_id = paramMap.get("system_id"); + // 请求方系统代码 + String requester_id = paramMap.get("requester_id"); + // 请求方机构代号 + String branch_id = paramMap.get("branch_id"); + new BaseBean().writeLog(this.getClass().getName()+":requester_id=="+requester_id); + SocketExecute socketExecute = null; + if ("0157".equals(requester_id)){ + socketExecute = new GetToCountSocketExecute(); + new BaseBean().writeLog(this.getClass().getName()+":GetToCountSocketExecute"); + }else if("0170".equals(requester_id)){ + socketExecute = new CWGLSocketExecute(); + new BaseBean().writeLog(this.getClass().getName()+":CWGLSocketExecute"); + } + String execute = socketExecute.execute(XMLparam); + return execute; + } +} diff --git a/com/engine/web/zhsl/Tjbk_SL_ServerSocket.java b/com/engine/web/zhsl/Tjbk_SL_ServerSocket.java new file mode 100644 index 0000000..b51c968 --- /dev/null +++ b/com/engine/web/zhsl/Tjbk_SL_ServerSocket.java @@ -0,0 +1,167 @@ +package com.engine.web.zhsl; + +import com.engine.tjbankSocket.SocketExecute; +import com.engine.tjbankSocket.impl.CWGLSocketExecute; +import com.engine.tjbankSocket.impl.GetToCountSocketExecute; +import com.engine.util.XMLUtils; +import org.apache.commons.lang.StringEscapeUtils; +import weaver.general.BaseBean; +import weaver.general.StringUtil; + +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +public class Tjbk_SL_ServerSocket implements ServletContextListener { + private SocketThread_sl socketThread; + + @Override + public void contextDestroyed(ServletContextEvent arg0) { + // TODO Auto-generated method stub + if (socketThread != null && socketThread.isInterrupted()) { + socketThread.closeServerSocket(); + socketThread.interrupt(); + } + } + + @Override + public void contextInitialized(ServletContextEvent arg0) { + // TODO Auto-generated method stub + new BaseBean().writeLog("Tjbk_SL_ServerSocket——contextInitialized启动"); + ServletContext servletContext = arg0.getServletContext(); + if (socketThread == null) { + socketThread = new SocketThread_sl(null, servletContext); + socketThread.start(); // servlet上下文初始化时启动socket服务端线程 + } + } + +} + + +class SocketThread_sl extends Thread { + + private ServletContext servletContext; + private ServerSocket serverSocket; + + public SocketThread_sl(ServerSocket serverSocket, ServletContext servletContext) { + this.servletContext = servletContext; + // 从web.xml中context-param节点获取socket端口 + String port = this.servletContext.getInitParameter("socketPortSL"); + new BaseBean().writeLog("socketPortSL端口"+port); + if (serverSocket == null) { + try { + this.serverSocket = new ServerSocket(Integer.parseInt(port)); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Override + public void run() { + + while (!this.isInterrupted()) { // 线程未中断执行循环 + try { + new BaseBean().writeLog("SocketThread线程启动"); + Socket socket = serverSocket.accept(); + if (socket != null) { + new ProcessSocketData_sl(socket, this.servletContext).start(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public void closeServerSocket() { + try { + if (serverSocket != null && !serverSocket.isClosed()) { + serverSocket.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} + +class ProcessSocketData_sl extends Thread { + + private Socket socket; + private ServletContext servletContext; + + public ProcessSocketData_sl() { + super(); + } + + public ProcessSocketData_sl(Socket socket, ServletContext servletContext) { + this.socket = socket; + this.servletContext = servletContext; + } + + @Override + public void run() { + try { +// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); + new BaseBean().writeLog("ServerSocket线程启动"); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8); + + PrintWriter pw = new PrintWriter(outputStreamWriter); + InputStream inputStream = socket.getInputStream(); + BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + char[] datalen=new char[8];//报文前八位为报文体总长度 + + in.read(datalen,0,8); + String lendata=new String (datalen); + int length=Integer.parseInt(lendata); + new BaseBean().writeLog("报文长度"+length); + // byte[] data=new byte[length]; + char[] data=new char[length]; + int datalength = in.read(data,0,length); + String requestData = new String(data); + new BaseBean().writeLog("requestData",requestData); + String s = ""; + if (!StringUtil.isEmpty(requestData.toString())) { + new BaseBean().writeLog("requestData",requestData); + s = execute(requestData.toString()); + } + // 执行自定义的请求解析方法,生成响应response + pw.println(s); + pw.flush(); // 刷新缓冲区 + pw.close(); + socket.close(); +// System.out.println(sb); + } catch (IOException e) { + e.printStackTrace(); + System.out.println(e); + } + } + private String execute(String XMLparam){ + new BaseBean().writeLog(this.getClass().getName()+":XMLparam=="+XMLparam); + + Map paramMap = XMLUtils.parseXMLToMap(XMLparam); + new BaseBean().writeLog(this.getClass().getName()+":paramMap=="+paramMap); + StringEscapeUtils.unescapeXml(XMLparam); + //目标系统代码 + String system_id = paramMap.get("system_id"); + // 请求方系统代码 + String requester_id = paramMap.get("requester_id"); + // 请求方机构代号 + String branch_id = paramMap.get("branch_id"); + new BaseBean().writeLog(this.getClass().getName()+":requester_id=="+requester_id); + SocketExecute socketExecute = null; + if ("0157".equals(requester_id)){ + socketExecute = new GetToCountSocketExecute(); + new BaseBean().writeLog(this.getClass().getName()+":GetToCountSocketExecute"); + }else if("0170".equals(requester_id)){ + socketExecute = new CWGLSocketExecute(); + new BaseBean().writeLog(this.getClass().getName()+":CWGLSocketExecute"); + } + String execute = socketExecute.execute(XMLparam); + return execute; + } +} diff --git a/com/engine/workflow/service/impl/RequestFormServiceImpl.java b/com/engine/workflow/service/impl/RequestFormServiceImpl.java new file mode 100644 index 0000000..ddc4cd9 --- /dev/null +++ b/com/engine/workflow/service/impl/RequestFormServiceImpl.java @@ -0,0 +1,600 @@ +package com.engine.workflow.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.api.workflow.service.ScriptManagerService; +import com.cloudstore.dev.api.util.Util_TableMap; +import com.engine.common.biz.EncryptConfigBiz; +import com.engine.common.util.ParamUtil; +import com.engine.core.impl.Service; +import com.engine.msgcenter.util.ValveConfigManager; +import com.engine.encrypt.biz.WfEncryptBiz; +import com.engine.workflow.biz.excelDesign.DoSaveFreeExcelDesignBiz; +import com.engine.workflow.biz.excelDesign.ExcelSecurityBiz; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.biz.requestForm.LayoutInfoBiz; +import com.engine.workflow.cmd.requestForm.RequestDelVerifyCmd; +import com.engine.workflow.biz.requestForm.RequestFormBiz; +import com.engine.workflow.cmd.requestForm.*; +import com.engine.workflow.cmd.requestForm.freeNodeCustomForm.GetFreeNodeBrowserItemCmd; +import com.engine.workflow.cmd.requestForm.freeNodeCustomForm.SaveFreeNodeFormConfigCmd; +import com.engine.workflow.cmd.requestForm.remind.GetRemindDataCmd; +import com.engine.workflow.cmd.workflowSetting.GetDetailExpSetCmd; +import com.engine.workflow.cmd.workflowSetting.SaveDetailExpSetCmd; +import com.engine.workflow.cmd.workflowTemplate.GetThMouldListCmd; +import com.engine.workflow.cmd.workflowTemplate.GetThPreviewUrlCmd; +import com.engine.workflow.entity.requestForm.AutoApproveEntity; +import com.engine.workflow.entity.requestForm.TableInfo; +import com.engine.workflow.service.RequestFormService; +import weaver.conn.RecordSet; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.workflow.request.RequestManager; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by jhy on 2018/2/23. + */ +public class RequestFormServiceImpl extends Service implements RequestFormService { + + //流程测试选择人员后判断用户是否有创建权限 + public Map judgeCreateRight(HttpServletRequest request){ + return commandExecutor.execute(new LoadParamCmd(request, user)); + } + + //加载表单基础信息,权限参数及表单信息 + public String loadForm(HttpServletRequest request) { + Map apidatas = new HashMap(); + long start = System.currentTimeMillis(); + int userid = user.getUID(); + String requestid = Util.null2String(request.getParameter("requestid")); + try { + //点击列表预加载,当表单请求到时直接返回 + boolean ispreload = Util.getIntValue(request.getParameter("ispreload")) == 1; + boolean isEm = Util.null2String(request.getHeader("user-agent")).indexOf("E-Mobile") > -1; + String preloadkey = isEm ? "" : Util.null2String(request.getParameter("preloadkey")); + //获取预加载的内容的token + String preloadValKey = preloadkey; + if (!"".equals(preloadkey)) { + preloadkey = userid + "_" + preloadkey; + preloadValKey = preloadkey + "_val"; + if (ispreload) { + Util_TableMap.setVal(preloadkey, "loading"); + } else { + //----------------------------------------------------------------------------- + // 如果有预加载活动。 + // 注:预加载的内容只能使用一次,当前线程获取预加载的内容后,其他线程需要按照正常逻辑加载。 + //----------------------------------------------------------------------------- + if (Util_TableMap.containsKey(preloadkey)) { + //清除预加载标志 + Util_TableMap.clearVal(preloadkey); + int i = 0; + //预加载的内容,如果还没有加载好, 线程等待5s,5s后还未加载完成, 则按照正常逻辑加载。 + String cacheVal = null; + while (i < 100) { + cacheVal = Util_TableMap.getVal(preloadValKey); + if (cacheVal != null) { + Util_TableMap.clearVal(preloadValKey); + return cacheVal; + } + i++; + Thread.sleep(50); + } + } + } + } + //第一步:权限加载判断、获取基础信息参数 + Map competenceInfo = commandExecutor.execute(new LoadParamCmd(request, user)); + apidatas.putAll(competenceInfo); + Map params = (Map) competenceInfo.get("params"); + boolean iscreate = "1".equals(params.get("iscreate")); + if(!iscreate){ + int creater = Util.getIntValue(Util.null2String(params.get("creater"))); + int currentnodetype = Util.getIntValue(Util.null2String(params.get("currentnodetype"))); + if(creater == user.getUID() && currentnodetype == 0 && this.isOnlyCreate(requestid)){ + //创建人-创建节点不校验 + }else{ + //校验节点打开表单是否需要二次身份认证 + boolean needSecondAuth = new WfEncryptBiz().judgeNeedSecondAuth(params); + boolean hasVerifyAuth = "1".equals(request.getParameter("hasVerifyAuth")); + if(needSecondAuth && !hasVerifyAuth){ + apidatas.put("needSecondAuth", true); + return JSON.toJSONString(apidatas); + } + boolean verifySecondAuthToken = false; + try{ + //可能会异常,影响表单加载,做容错处理 + verifySecondAuthToken = new EncryptConfigBiz().checkSecondAuthToken("WORKFLOW", "NODE", params, request); + } catch(Exception e) { + e.printStackTrace(); + } + if(!verifySecondAuthToken){ + apidatas.put("verifySecondAuthToken", false); + return JSON.toJSONString(apidatas); + } + } + } + + String retstr = ""; + if (!(Boolean) params.get("verifyRight") && userid != 1) { //无权限直接返回 + retstr = JSON.toJSONString(apidatas); + } else { + int ismode = Util.getIntValue(Util.null2String(params.get("ismode")), 0); + int layoutversion = Util.getIntValue(Util.null2String(params.get("layoutversion")), 0); + //生成普通模式模板布局信息 + Map commonLayout = new HashMap(); + if (ismode == 0) { + commonLayout = commandExecutor.execute(new GenerateCommonLayoutCmd(params, user)); + } + + Map requestMap = ParamUtil.request2Map(request); + //第二步:加载表单信息,包括字段信息、明细信息等 + Map forminfo = commandExecutor.execute(new FormInfoCmd(requestMap, user, params, commonLayout)); + apidatas.putAll(forminfo); + + //第三步:加载联动配置信息 + apidatas.put("linkageCfg", commandExecutor.execute(new LinkageCfgCmd(params, user))); + apidatas.put("propFileCfg", this.getFormPropFileCfg()); + + //第四步:加载主表数据 + Map maindata = commandExecutor.execute(new FormDataCmd(requestMap, user, params, (Map)forminfo.get("tableInfo"))); + apidatas.put("maindata", maindata.get("datas")); + + //第五步:模板布局datajson单独以字符串方式拼串,优化性能 + String apidatastr = JSON.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + if (ismode == 0 || (ismode == 2 && layoutversion == 2)) { + String layoutStr = ""; + if (ismode == 0) { //普通模式 + layoutStr = Util.null2String(commonLayout.get("layoutStr")); + } else if (ismode == 2) { //html模式 + int layoutid = Util.getIntValue(Util.null2String(params.get("modeid")), 0); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid")), 0); + int workflowid = Util.getIntValue(Util.null2String(params.get("workflowid")), 0); + String configid = Util.null2String(params.get("layoutconfigid")); + boolean isnewFreelayout = DoSaveFreeExcelDesignBiz.isNewFreeLayout(configid); + boolean isSimpleFreeFlow = FreeNodeBiz.judgeNodeSimpleFreeFlow(workflowid, nodeid); + if (isnewFreelayout) { + DoSaveFreeExcelDesignBiz doSaveFreeExcelDesignBiz = new DoSaveFreeExcelDesignBiz(user); + if(isSimpleFreeFlow){ + nodeid = FreeNodeBiz.getExtendNodeId(nodeid); + layoutStr = doSaveFreeExcelDesignBiz.getLayoutStr(layoutid, nodeid); + }else { + layoutStr = doSaveFreeExcelDesignBiz.getLayoutStr(layoutid, nodeid); + } + + } else { + layoutStr = new LayoutInfoBiz().getLayoutStr(layoutid); + } + } + apidatastr = apidatastr.substring(0, apidatastr.lastIndexOf("}")); + retstr = apidatastr + ",\"datajson\":" + layoutStr + "}"; + } else { + retstr = apidatastr; + } + } + //预加载结果放入容器 + if (ispreload && !"".equals(preloadkey)) { + Util_TableMap.setVal(preloadValKey, retstr); + } + return retstr; + } catch (Exception e) { + new weaver.general.BaseBean().writeLog("requestid" + requestid + "---errorMsg----" + e.toString()); + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSON.toJSONString(apidatas); + } + + //加载预览模板所需信息 + public String loadPreView(Map params) { + int nodeid = Util.getIntValue(params.get("nodeid")+""); + Map apidatas = new HashMap<>(); + //第一步:模拟拼接生成commonParam参数 + Map reqParams = new HashMap<>(); + reqParams.put("isPreView", 1); + Map commonParam = new HashMap<>(); + commonParam.put("workflowid", Util.getIntValue(params.get("wfid")+"")); + commonParam.put("nodeid", nodeid); + commonParam.put("formid", Util.getIntValue(params.get("formid")+"")); + commonParam.put("isbill", Util.getIntValue(params.get("isbill")+"")); + commonParam.put("ismode", 2); + commonParam.put("modeid", Util.getIntValue(params.get("layoutid")+"")); + commonParam.put("layoutversion", 2); + commonParam.put("layouttype", Util.getIntValue(params.get("layouttype")+"")); + commonParam.put("margin", RequestFormBiz.generateLayoutMargin(nodeid)); + Map layoutInfo = new HashMap<>(); + String layoutStr = Util.null2String(params.get("datajson")); + layoutInfo.put("layoutStr", layoutStr); + //取代码块中的样式部分 + String scripts = Util.null2String(params.get("scripts")); + String initscripts = Util.null2String(params.get("initscripts")); + ExcelSecurityBiz excelSecurityBiz = new ExcelSecurityBiz(); + Map splitResult = new ScriptManagerService().splitScript(excelSecurityBiz.decode(scripts)); + String styleStr = Util.null2String(splitResult.get("stylestr")); + if(!"".equals(initscripts)){ + initscripts = excelSecurityBiz.decode(initscripts); + String contextPath = Util.null2String(GCONST.getContextPath()); + if(!"".equals(contextPath)) //系统样式追加全路径 + initscripts = initscripts.replaceAll("(? forminfo = commandExecutor.execute(new FormInfoCmd(reqParams, user, commonParam, layoutInfo)); + apidatas.putAll(forminfo); + //第三步:加载联动配置信息 + apidatas.put("linkageCfg", commandExecutor.execute(new LinkageCfgCmd(params, user))); + apidatas.put("propFileCfg", this.getFormPropFileCfg()); + //返回string格式 + String apidatastr = JSON.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + String result = apidatastr.substring(0, apidatastr.lastIndexOf("}")) + ",\"datajson\":" + layoutStr + "}"; + return result; + } + + //获取相关配置文件配置项 + private Map getFormPropFileCfg() { + RecordSet rs = new RecordSet(); + Map props = new HashMap(); + rs.executeQuery("select name,value from workflow_config where type='form'"); + while(rs.next()){ + props.put(rs.getString("name"), rs.getString("value")); + } + String prohibitDownload = ValveConfigManager.getTypeValve("prohibitDownload", "prohibitDownloadSwatch", "0"); + props.put("prohibitDownload", prohibitDownload); + return props; + } + + private boolean isOnlyCreate(String requestid){ + RecordSet rs = new RecordSet(); + rs.executeQuery("select count(*) as count from workflow_currentoperator where requestid=?", requestid); + return rs.next() && Util.getIntValue(rs.getString("count")) <= 1; + } + + public Map loadDetailData(Map params) { + return commandExecutor.execute(new FormDataCmd(params, user)); + } + + public Map saveDetailPaging(Map params) { + return commandExecutor.execute(new SaveDetailPagingCmd(params, user)); + } + + public Map copyCustomPageFile(String custompage) { + return commandExecutor.execute(new CopyCustomPageCmd(custompage)); + } + + public Map updateReqInfo(HttpServletRequest request) { + return commandExecutor.execute(new UpdateReqInfoCmd(request, user)); + } + + public Map getLinkageResult(HttpServletRequest request, String type) { + if ("dataInput".equals(type)) + return commandExecutor.execute(new LinkageDataInputCmd(request, user)); + else if ("fieldSql".equals(type)) + return commandExecutor.execute(new LinkageFieldSqlCmd(request, user)); + else if ("dateTime".equals(type)) + return commandExecutor.execute(new LinkageDateTimeCmd(request, user)); + else + return null; + } + + @Override + public Map getRightMenu(HttpServletRequest request,Map params) { + return commandExecutor.execute(new GetRightMenuCmd(request,params, user)); + } + + public Map getStatusData(Map params) { + return commandExecutor.execute(new StatusDataCmd(params, user)); + } + + public Map getStatusCount(Map params) { + return commandExecutor.execute(new StatusCountCmd(params, user)); + } + + public Map getResourcesKey(Map params) { + return commandExecutor.execute(new ResourcesKeyCmd(params, user)); + } + + public Map getModifyLog(HttpServletRequest request) { + return commandExecutor.execute(new ModifyLogCmd(request, user)); + } + + @Override + public Map requestBatchSubmit(HttpServletRequest request) { + return commandExecutor.execute(new BatchSubmitCmd(request, user)); + } + + public Map judgeRejectWay(HttpServletRequest request) { + return commandExecutor.execute(new JudgeRejectWayCmd(request, user)); + } + + public Map getRejectOption(Map params) { + return commandExecutor.execute(new GetRejectOptionCmd(params, user)); + } + + public Map requestSubmit(HttpServletRequest request) { + return commandExecutor.execute(new RequestSubmitCmd(request, user)); + } + + public Map forwardSubmit(HttpServletRequest request) { + return commandExecutor.execute(new ForwardSubmitCmd(request, user)); + } + + public Map requestWithdraw(HttpServletRequest request) { + return commandExecutor.execute(new RequestWithdrawCmd(request, user)); + } + + public Map remarkSubmit(HttpServletRequest request) { + return commandExecutor.execute(new RemarkSubmitCmd(request, user)); + } + + public Map functionManage(HttpServletRequest request, HttpServletResponse response) { + return commandExecutor.execute(new FunctionManageCmd(request, response, user)); + } + + public Map triggerSubWf(HttpServletRequest request) { + return commandExecutor.execute(new TriggerSubWfCmd(request, user)); + } + + public Map uploadFile(HttpServletRequest request, HttpServletResponse response) { + return commandExecutor.execute(new FileUploadCmd(request, response, user)); + } + + public Map getFileFieldObj(Map params) { + return commandExecutor.execute(new FileFieldObjCmd(params)); + + } + + @Override + public Map createWfCode(Map params) { + return commandExecutor.execute(new CreateWfCodeCmd(params, user)); + } + + @Override + public Map getWfCodeFieldValue(Map params) { + return commandExecutor.execute(new GetWfCodeFieldValueCmd(params, user)); + } + + @Override + public Map requestImport(Map params) { + return commandExecutor.execute(new RequestImportCmd(params, user)); + } + + @Override + public Map requestDetailImport(HttpServletRequest request) { + return commandExecutor.execute(new RequestDetailImportCmd(request, user)); + } + + @Override + public Map chooseExceptionOperator(Map params) { + return commandExecutor.execute(new ChooseExceptionOperatorCmd(params, user)); + } + + @Override + public Map overTimeSetting(HttpServletRequest request) { + return commandExecutor.execute(new OverTimeSettingCmd(request, user)); + } + + @Override + public Map getPrintLogBase(Map params){ + return commandExecutor.execute(new GetPrintLogBaseCmd(params,user)); + } + + @Override + public Map getPrintLogData(Map params){ + return commandExecutor.execute(new GetPrintLogDataCmd(params,user)); + } + + @Override + public Map freeFlowRead(Map params){ + return commandExecutor.execute(new FreeFlowReadCmd(params,user)); + } + + @Override + public Map freeFlowSave(Map params){ + return commandExecutor.execute(new FreeFlowSaveCmd(params,user)); + } + + @Override + public Map editLockOper(Map params){ + return commandExecutor.execute(new EditLockOperCmd(params,user)); + } + + @Override + public Map loadPrintTemplates(Map params){ + return commandExecutor.execute(new LoadPrintTemplatesCmd(params,user)); + } + + @Override + public Map doEvalExpression(Map params){ + return commandExecutor.execute(new DoEvalExpressionCmd(params,user)); + } + + @Override + public Map generatePrintLog(HttpServletRequest request){ + return commandExecutor.execute(new GeneratePrintLogCmd(request,user)); + } + + @Override + public Map getForwardDatas(Map params){ + return commandExecutor.execute(new GetForwardDatasCmd(params,user)); + } + + @Override + public Map doBack(Map params){ + return commandExecutor.execute(new DoForwardBackCmd(params,user)); + } + + @Override + public Map getFormTab(Map params){ + return commandExecutor.execute(new GetFormTabCmd(params,user)); + } + + /** + * 获取指定下一节点流转的condition + * + * @param params + * @return + */ + @Override + public Map getSelectNextFlowCondition(Map params) { + return commandExecutor.execute(new GetSelectNextFlowConditionCmd(params,user)); + } + + /** + * 获取指定下一节点流转的节点信息 + * + * @param params + * @return + */ + @Override + public Map getSelectNextFlowNodes(Map params) { + return commandExecutor.execute(new GetSelectFlowNodesCmd(params,user)); + } + + @Override + public Map getRemindData(Map params){ + return commandExecutor.execute(new GetRemindDataCmd(user,params)); + } + + @Override + public Map judgeRequestIsValid(Map params){ + return commandExecutor.execute(new JudgeRequestIsValidCmd(params, user)); + } + + @Override + public Map takeBack(Map params){ + return commandExecutor.execute(new DoTakeBackCmd(params, user)); + } + + @Override + public Map getCustomOperation(Map params) { + return commandExecutor.execute(new GetCustomOperationCmd(params, user)); + } + + @Override + public Map runCustomOperationAction(Map params) { + return commandExecutor.execute(new GetCustomOperationActionCmd(params, user)); + } + + @Override + public Map JudgeAutoApprove(AutoApproveEntity autoApproveEntity) { + return commandExecutor.execute(new JudgeAutoApproveCmd(autoApproveEntity,user)); + } + + @Override + public Map delApproveLog(AutoApproveEntity autoApproveEntity) { + return commandExecutor.execute(new DelApproveLogCmd(autoApproveEntity,user)); + } + + @Override + public Map verifyRequestForView(Map params) { + return commandExecutor.execute(new VerifyRequestForViewCmd(params,user)); + } + + /** + * 结束意见征询 + * + * @param params + * @return + */ + @Override + public Map doTakEnd(HttpServletRequest request, Map params) { + return commandExecutor.execute(new DoTakEndCmd(params,user)); + } + + @Override + public Map importFieldLinkageCfg(Map params) { + return commandExecutor.execute(new RequestDetailImportFieldLinkageCmd(params,user)); + } + + @Override + public Map exportFieldSet(Map params) { + return commandExecutor.execute(new RequestDetailExportFieldTypeCmd(params,user)); + } + + /** + * 合规校验 + * + * @param params + * @return + */ + @Override + public Map conformCheck(Map params) { + return commandExecutor.execute(new ConformCheckCmd(params,user)); + } + + @Override + public Map getDetailByRequestId(Map params) { + return commandExecutor.execute(new GetSubReuqestDetailCmd(params,user)); + } + + @Override + public Map getFreeNodeBrowserItem(Map params) { + return commandExecutor.execute(new GetFreeNodeBrowserItemCmd(params,user)); + } + + @Override + public Map saveFreeNodeFormConfig(Map params) { + return commandExecutor.execute(new SaveFreeNodeFormConfigCmd(params,user)); + } + + @Override + public Map getNextNodeContent(Map params) { + return commandExecutor.execute(new GetNextNodeContentCmd(params,user)); + } + + + @Override + public Map delRequestVerify(Map params) { + return commandExecutor.execute(new RequestDelVerifyCmd(params,user)); + } + + @Override + public Map importFormulaCfg(Map params) { + return commandExecutor.execute(new RequestDetailImportFormulaCmd(params,user)); + } + + /** + * 获取明细表数据keyid + * + * @param params + * @return + */ + @Override + public Map getDetailDataKeyId(Map params) { + return commandExecutor.execute(new GetDetailKeyIdCmd(params,user)); + } + + @Override + public Map judgeWorkflowPenetrate(AutoApproveEntity autoApproveEntity, RequestManager requestManager) { + return commandExecutor.execute(new JudgeWorkflowPenetrateCmd(autoApproveEntity,user, requestManager)); + } + + @Override + public Map getThPreviewUrl(Map params) { + return commandExecutor.execute(new GetThPreviewUrlCmd(params,user)); + } + + @Override + public Map getThMouldList(Map params) { + return commandExecutor.execute(new GetThMouldListCmd(params,user)); + } + + @Override + public Map getDetailExpSet(Map params) { + return commandExecutor.execute(new GetDetailExpSetCmd(params,user)); + } + + @Override + public Map saveDetailExpSet(Map params) { + return commandExecutor.execute(new SaveDetailExpSetCmd(params,user)); + } + + +} diff --git a/opt/weaver/ecology/interface/transfer/sendMsg.jsp b/opt/weaver/ecology/interface/transfer/sendMsg.jsp new file mode 100644 index 0000000..c9bbe0e --- /dev/null +++ b/opt/weaver/ecology/interface/transfer/sendMsg.jsp @@ -0,0 +1,32 @@ + +<%@ page import="java.util.*" %> +<%@ page import="com.cloudstore.dev.api.bean.MessageType" %> +<%@ page import="com.cloudstore.dev.api.bean.MessageBean" %> +<%@ page import="com.cloudstore.dev.api.util.Util_Message" %> +<%@ page import="java.io.IOException" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + + +<% + MessageType messageType = MessageType.newInstance(1154); // 消息来源(见文档第四点补充 必填) + Set userIdList = new HashSet<>(); // 接收人id 必填 + userIdList.add("640"); + String title = "标题1154"; // 标题 + String context = "内容1154"; // 内容 + String linkUrl = "/123"; // PC端链接 + String linkMobileUrl = "/123"; // 移动端链接 + try { + MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); + messageBean.setCreater(1);// 创建人id + //message.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 + //messageBean.setTargetId("121|22"); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 + Util_Message.store(messageBean); + out.print(1122); + } catch (IOException e) { + out.print(e.getMessage()); + e.printStackTrace(); + } +%> +<%! + +%> \ No newline at end of file diff --git a/weaver/interfaces/workflow/action/javacode/Action20230911062023.java b/weaver/interfaces/workflow/action/javacode/Action20230911062023.java index 9fc5c68..266a80f 100644 --- a/weaver/interfaces/workflow/action/javacode/Action20230911062023.java +++ b/weaver/interfaces/workflow/action/javacode/Action20230911062023.java @@ -5,6 +5,7 @@ import com.engine.custom.hg.util.HgUtils; import com.engine.custom.sl.entity.*; // import com.engine.util.SocketClientUtil; import com.engine.util.SocketClientUtil; +import com.engine.util.XMLUtils; import com.icbc.api.internal.apache.http.impl.cookie.S; import com.weaver.general.Util; import org.jsoup.Jsoup; @@ -47,9 +48,9 @@ public class Action20230911062023 extends BaseBean implements Action { try { fileToEsb(toEsbBean,requestId); } catch (Exception e) { - request.getRequestManager().setMessageid("10001"); - request.getRequestManager().setMessagecontent(e.getMessage()); - return Action.FAILURE_AND_CONTINUE; + request.getRequestManager().setMessageid("10001"); + request.getRequestManager().setMessagecontent(e.getMessage()); + return Action.FAILURE_AND_CONTINUE; } setFormDt1(mainId,tablename,rs,toEsbBean); writeLog("toEsbBean2====>"+toEsbBean); @@ -58,26 +59,36 @@ public class Action20230911062023 extends BaseBean implements Action { String Service_Body = ""+ toEsbBean.toXMLString()+"" ; writeLog("toEsbBean4====>"+Service_Body); try{ - EsbRequestHeader esbRequestHeader = new EsbRequestHeader(Util.getIntValue(mainId)); - writeLog("esbRequestHeader====>"+esbRequestHeader); - String Service_Header = TravelToEsbBean.convertObjectToXml(esbRequestHeader,"Service_Header"); - writeLog("esbRequestHeaderXML====>"+Service_Header); - String serviceXML = ""; - serviceXML = serviceXML + Service_Header + Service_Body; - serviceXML = serviceXML + ""; - writeLog("esbRequestHeaderXML====>"+serviceXML); - int byteArray = serviceXML.getBytes("UTF-8").length; - - // Calculate the length of the byte array - // int bytelength = byteArray.length; - String length = String.format("%08d", byteArray); - writeLog("XMLlength"+ length); - serviceXML = length + serviceXML; - writeLog("serviceXML==="+ serviceXML); - // serviceXML = new String(serviceXML.getBytes(StandardCharsets.UTF_8)); - writeLog("UTF_8_serviceXML==="+ serviceXML); - SocketClientUtil scketClient = new SocketClientUtil("14.1.78.191",10149); - String send = scketClient.send(serviceXML); + EsbRequestHeader esbRequestHeader = new EsbRequestHeader(Util.getIntValue(mainId)); + writeLog("esbRequestHeader====>"+esbRequestHeader); + String Service_Header = TravelToEsbBean.convertObjectToXml(esbRequestHeader,"Service_Header"); + writeLog("esbRequestHeaderXML====>"+Service_Header); + String serviceXML = ""; + serviceXML = serviceXML + Service_Header + Service_Body; + serviceXML = serviceXML + ""; + writeLog("esbRequestHeaderXML====>"+serviceXML); + int byteArray = serviceXML.getBytes("UTF-8").length; + + // Calculate the length of the byte array + // int bytelength = byteArray.length; + String length = String.format("%08d", byteArray); + writeLog("XMLlength"+ length); + serviceXML = length + serviceXML; + writeLog("serviceXML==="+ serviceXML); + // serviceXML = new String(serviceXML.getBytes(StandardCharsets.UTF_8)); + writeLog("UTF_8_serviceXML==="+ serviceXML); + SocketClientUtil scketClient = new SocketClientUtil("14.1.78.197",10149); + String send = scketClient.send(serviceXML); + String substring = send.substring(0, 8); + String substring1 = send.substring(8); + Map map = XMLUtils.parseXMLToMap(substring1); + String retCd = map.get("retCd"); + String retCdDsc = map.get("retCdDsc"); + if ("9999".equals(retCd)){ + request.getRequestManager().setMessageid("9999"); + request.getRequestManager().setMessagecontent(retCdDsc); + return Action.FAILURE_AND_CONTINUE; + } }catch (Exception e){ e.printStackTrace(); writeLog("构建XML异常"+e.getMessage()); @@ -127,7 +138,7 @@ public class Action20230911062023 extends BaseBean implements Action { //推送ESB服务器 String ftpPath = ""; try { - ftpPath = HgUtils.putFile(tempFilePath, requestId + File.separator + imageFileName); + ftpPath = HgUtils.putFile(tempFilePath, requestId + File.separator + imageFileName); } catch (FtpException e) { e.printStackTrace(); writeLog( "传输ESBftp异常"+e.getMessage()); @@ -246,7 +257,7 @@ public class Action20230911062023 extends BaseBean implements Action { toEsbBean.setJrnyInfoArray(jrnyInfoArray); } -//获取支出类型 + //获取支出类型 private String getpartyBuildCostCode(int index){ if(index == 0){ return "FEE_BUILD"; @@ -290,10 +301,13 @@ public class Action20230911062023 extends BaseBean implements Action { public static String formatDate(String input) { // String input = "2023-09-20 19:29"; try { - // 使用SimpleDateFormat解析输入字符串 SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - Date date = datetimeFormat.parse(input); + // 使用SimpleDateFormat解析输入字符串 + if (!input.contains(" ")){ + datetimeFormat = new SimpleDateFormat("yyyy-MM-dd"); + } + Date date = datetimeFormat.parse(input); // 使用另一个SimpleDateFormat对象格式化Date为所需的输出格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String output = dateFormat.format(date); @@ -309,9 +323,12 @@ public class Action20230911062023 extends BaseBean implements Action { public static void main(String[] args) { - String htmlContent = "" ; - String plainText = Jsoup.parse(htmlContent).text(); - System.out.println(plainText); // 输出: Hello, world! + String htmlContent = "2023-10-05 07:00" ; + + System.out.println(htmlContent.contains(" ")); + if (htmlContent.indexOf(" ") == -1){ + + } } diff --git a/weaver/interfaces/workflow/action/javacode/Action20230914101926.java b/weaver/interfaces/workflow/action/javacode/Action20230914101926.java index e86f762..59a51e4 100644 --- a/weaver/interfaces/workflow/action/javacode/Action20230914101926.java +++ b/weaver/interfaces/workflow/action/javacode/Action20230914101926.java @@ -8,7 +8,7 @@ import weaver.soa.workflow.request.RequestInfo; public class Action20230914101926 extends BaseBean implements Action { - public static final String sql = "update workflow_requestlog set remark= ? where requestid = ? and logid = ? "; + public static final String sql = "update workflow_requestlog set remark= ? ,OPERATEDATE = ? ,OPERATETIME = ? where requestid = ? and logid = ? "; @Override public String execute(RequestInfo request) { @@ -29,6 +29,8 @@ public class Action20230914101926 extends BaseBean implements Action { String logid = rs.getString("logid"); String requestid = rs.getString("request"); String remarkNew = rs.getString("remarkNew"); + String newdate = rs.getString("newdate"); + String newtime = rs.getString("newtime"); try { writeLog("修改日志sql"+sql); writeLog(logid ); @@ -37,7 +39,7 @@ public class Action20230914101926 extends BaseBean implements Action { writeLog(requestid== null); writeLog(remarkNew); writeLog(remarkNew== null); - rs.executeUpdate(sql,remarkNew,requestid,logid); + rs.executeUpdate(sql,remarkNew,newdate,newtime,requestid,logid); writeLog("getCounts"+rs.getCounts()); } catch (Exception e) { writeLog("修改异常"+e.getMessage()); diff --git a/weaver/interfaces/workflow/action/javacode/Action20231008023243.java b/weaver/interfaces/workflow/action/javacode/Action20231008023243.java new file mode 100644 index 0000000..ea9475a --- /dev/null +++ b/weaver/interfaces/workflow/action/javacode/Action20231008023243.java @@ -0,0 +1,140 @@ +package weaver.interfaces.workflow.action.javacode; + +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.workflow.action.Action; +import weaver.general.BaseBean; +import weaver.soa.workflow.request.RequestInfo; + +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Online custom action interface + * 分行发文推送合规系统(测试环境) + */ +public class Action20231008023243 extends BaseBean implements Action{ + /** + * After selecting aciton after the process path node, this method will be executed after the node is submitted. + */ + @Override + public String execute(RequestInfo request) { + + try { + String insertsql = "INSERT INTO uf_tohgLog(REQUEST, CONTENT, ZT, ML, DDSJ, TSSJ, FJML, ZWID, FJID) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )"; + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + //公文标题 + String requestname = request.getRequestManager().getRequestname(); + String requestId = request.getRequestid(); + // 4:获取表单名称 + String tablename = request.getRequestManager().getBillTableName(); + + // 5:查找表单内容 + RecordSet rs = new RecordSet(); + rs.execute("select * from " + tablename + " where requestid = " + requestId); + rs.next(); + //是否推送合规 0 - 否 1 - 是 + int isTohg = Util.getIntValue(rs.getString("tohg"), 1); + if (isTohg == 0){ + return Action.SUCCESS; + } + //id:表单主键 + String mainid = rs.getString("id"); + + //公文编号 + String fwwh = rs.getString("bh"); + //发文部门名称 + String ngbm = rs.getString("ngbm"); + //成文时间 + String cwrq = rs.getString("cwrq"); + String ngr = rs.getString("ngr"); + // String zw = rs.getString("zw"); //word格式 + //生成的pdf + String zw = rs.getString("dwd"); + String fj = rs.getString("fj"); + User user = new User(Integer.parseInt(ngr)); + //拼接数据 + String subcompanyid = departmentComInfo.getSubcompanyid1(ngbm); + String departmentNames = departmentComInfo.getAllParentDepartmentBlankNames(ngbm, subcompanyid, "-"); + departmentNames = "天津银行股份有限公司-"+departmentNames; + String context = ""; + String flag = "|"; + context = requestname + flag + fwwh + flag +departmentNames + flag + cwrq +flag+ user.getLoginid()+flag+user.getLastname()+flag; + //获取文件命 + Map fjName = getIdIMIDName(fj); + Map zwName = getIdIMIDName(zw); + String fjStr = ""; + String zwStr = ""; + //附件 + ArrayList fileNameList = new ArrayList<>(); + Set> entries = fjName.entrySet(); + for (Map.Entry entry : entries) { + String filename = entry.getValue(); + if (fileNameList.contains(filename)){ + String tepName= filename.contains(".")? filename.substring(0, filename.indexOf(".")) : ""; + if(tepName!=null&&!"".equals(tepName)){ + String extNameTemp = filename.contains(".")? filename.substring(filename.lastIndexOf(".") + 1) : ""; + filename = tepName + "_"+entry.getKey()+"."+extNameTemp; + + } + }else { + fileNameList.add(filename); + } + fjStr = fjStr + "&&"+ filename; + } + if (fjStr.startsWith("&&")){ + fjStr = fjStr.substring(2); + } + fileNameList.clear(); + //正文 + Set> zwEntries = zwName.entrySet(); + for (Map.Entry entry : zwEntries) { + String filename = entry.getValue(); + if (fileNameList.contains(filename)){ + String tepName= filename.contains(".")? filename.substring(0, filename.indexOf(".")) : ""; + if(tepName!=null&&!"".equals(tepName)){ + String extNameTemp = filename.contains(".")? filename.substring(filename.lastIndexOf(".") + 1) : ""; + filename = tepName + "_"+entry.getKey()+"."+extNameTemp; + } + }else { + fileNameList.add(filename); + } + zwStr = zwStr + "&&" + filename; + } + if (zwStr.startsWith("&&")){ + zwStr = zwStr.substring(2); + } + context = context+zwStr+flag+fjStr+flag+requestId+flag; + Date date = new Date(); + String time = new SimpleDateFormat("yyyy-MM-dd hh:mm").format(date); + rs.executeUpdate(insertsql,requestId,context,0,null,time,null,null,zw,fj); + } catch (Exception e) { + writeLog(e.getMessage()+ "||||||异常流程id==="+request.getRequestid()); + e.printStackTrace(); + //不管是否推送成功,都返回成功,不影响流程流转 + return Action.SUCCESS; + } + // boolean error = false; + // if (error) { + // request.getRequestManager().setMessageid("90001"); + // request.getRequestManager().setMessagecontent("System Abnormal Termination Process Submission!"); + // } + return Action.SUCCESS; + } + + public static Map getIdIMIDName(String ids ){ + Map idimageIDMap = new HashMap<>(); + String sql = "select docid,df.imagefilename filename from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID in ("+ids+")"; + RecordSet recordSet = new RecordSet(); + recordSet.execute(sql); + while (recordSet.next()){ + String docid = Util.null2String(recordSet.getString("docid")); + String filename = Util.null2String(recordSet.getString("filename")); + idimageIDMap.put(docid,filename); + } + return idimageIDMap; + }; + +} \ No newline at end of file diff --git a/weaver/interfaces/workflow/action/javacode/Action20231008042513.java b/weaver/interfaces/workflow/action/javacode/Action20231008042513.java new file mode 100644 index 0000000..c4ec317 --- /dev/null +++ b/weaver/interfaces/workflow/action/javacode/Action20231008042513.java @@ -0,0 +1,140 @@ +package weaver.interfaces.workflow.action.javacode; + +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.workflow.action.Action; +import weaver.general.BaseBean; +import weaver.soa.workflow.request.RequestInfo; + +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Online custom action interface + * 分行发文推送合规系统(生产环境) + */ +public class Action20231008042513 extends BaseBean implements Action{ + /** + * After selecting aciton after the process path node, this method will be executed after the node is submitted. + */ + @Override + public String execute(RequestInfo request) { + + try { + String insertsql = "INSERT INTO uf_tohgLog(REQUEST, CONTENT, ZT, ML, DDSJ, TSSJ, FJML, ZWID, FJID) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? )"; + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + //公文标题 + String requestname = request.getRequestManager().getRequestname(); + String requestId = request.getRequestid(); + // 4:获取表单名称 + String tablename = request.getRequestManager().getBillTableName(); + + // 5:查找表单内容 + RecordSet rs = new RecordSet(); + rs.execute("select * from " + tablename + " where requestid = " + requestId); + rs.next(); + //是否推送合规 0 - 否 1 - 是 + int isTohg = Util.getIntValue(rs.getString("tohg"), 1); + if (isTohg == 0){ + return Action.SUCCESS; + } + //id:表单主键 + String mainid = rs.getString("id"); + + //公文编号 + String fwwh = rs.getString("bh"); + //发文部门名称 + String ngbm = rs.getString("ngbm"); + //成文时间 + String cwrq = rs.getString("cwrq"); + String ngr = rs.getString("ngr"); + // String zw = rs.getString("zw"); //word格式 + //生成的pdf + String zw = rs.getString("dwd"); + String fj = rs.getString("fj"); + User user = new User(Integer.parseInt(ngr)); + //拼接数据 + String subcompanyid = departmentComInfo.getSubcompanyid1(ngbm); + String departmentNames = departmentComInfo.getAllParentDepartmentBlankNames(ngbm, subcompanyid, "-"); + departmentNames = "天津银行股份有限公司-"+departmentNames; + String context = ""; + String flag = "|"; + context = requestname + flag + fwwh + flag +departmentNames + flag + cwrq +flag+ user.getLoginid()+flag+user.getLastname()+flag; + //获取文件命 + Map fjName = getIdIMIDName(fj); + Map zwName = getIdIMIDName(zw); + String fjStr = ""; + String zwStr = ""; + //附件 + ArrayList fileNameList = new ArrayList<>(); + Set> entries = fjName.entrySet(); + for (Map.Entry entry : entries) { + String filename = entry.getValue(); + if (fileNameList.contains(filename)){ + String tepName= filename.contains(".")? filename.substring(0, filename.indexOf(".")) : ""; + if(tepName!=null&&!"".equals(tepName)){ + String extNameTemp = filename.contains(".")? filename.substring(filename.lastIndexOf(".") + 1) : ""; + filename = tepName + "_"+entry.getKey()+"."+extNameTemp; + + } + }else { + fileNameList.add(filename); + } + fjStr = fjStr + "&&"+ filename; + } + if (fjStr.startsWith("&&")){ + fjStr = fjStr.substring(2); + } + fileNameList.clear(); + //正文 + Set> zwEntries = zwName.entrySet(); + for (Map.Entry entry : zwEntries) { + String filename = entry.getValue(); + if (fileNameList.contains(filename)){ + String tepName= filename.contains(".")? filename.substring(0, filename.indexOf(".")) : ""; + if(tepName!=null&&!"".equals(tepName)){ + String extNameTemp = filename.contains(".")? filename.substring(filename.lastIndexOf(".") + 1) : ""; + filename = tepName + "_"+entry.getKey()+"."+extNameTemp; + } + }else { + fileNameList.add(filename); + } + zwStr = zwStr + "&&" + filename; + } + if (zwStr.startsWith("&&")){ + zwStr = zwStr.substring(2); + } + context = context+zwStr+flag+fjStr+flag+requestId+flag; + Date date = new Date(); + String time = new SimpleDateFormat("yyyy-MM-dd hh:mm").format(date); + rs.executeUpdate(insertsql,requestId,context,0,null,time,null,null,zw,fj); + } catch (Exception e) { + writeLog(e.getMessage()+ "||||||异常流程id==="+request.getRequestid()); + e.printStackTrace(); + //不管是否推送成功,都返回成功,不影响流程流转 + return Action.SUCCESS; + } + // boolean error = false; + // if (error) { + // request.getRequestManager().setMessageid("90001"); + // request.getRequestManager().setMessagecontent("System Abnormal Termination Process Submission!"); + // } + return Action.SUCCESS; + } + + public static Map getIdIMIDName(String ids ){ + Map idimageIDMap = new HashMap<>(); + String sql = "select docid,df.imagefilename filename from docimagefile df left join imagefile imf on df.imagefileid = imf.imagefileid where DOCID in ("+ids+")"; + RecordSet recordSet = new RecordSet(); + recordSet.execute(sql); + while (recordSet.next()){ + String docid = Util.null2String(recordSet.getString("docid")); + String filename = Util.null2String(recordSet.getString("filename")); + idimageIDMap.put(docid,filename); + } + return idimageIDMap; + }; + +} \ No newline at end of file