From 6ebd067af311b6e5e254dd0c8713083971e21aa2 Mon Sep 17 00:00:00 2001 From: qijirenjian Date: Thu, 16 Jan 2025 18:38:06 +0800 Subject: [PATCH] webservice --- .../secondev-ht-njwebservice.gradle | 19 + .../AutoCreateWorkflowEncService.java | 64 +++ .../AutoCreateWorkflowService.java | 379 +++++++++++++++ .../seconddev/njwebservice/DemoService.java | 143 ++++++ .../njwebservice/entity/DataOptions.java | 44 ++ .../njwebservice/entity/FormDataDuty.java | 59 +++ .../entity/MaterialDetailTablePo.java | 58 +++ .../entity/MaterialMainTablePo.java | 46 ++ .../entity/SubmitWorkflowParam.java | 21 + .../entity/SubmitWorkflowReq.java | 17 + .../entity/SubmitWorkflowRes.java | 19 + .../njwebservice/util/AccessTokenUtil.java | 83 ++++ .../njwebservice/util/CommonUtils.java | 395 +++++++++++++++ .../njwebservice/util/DataSetUtil.java | 144 ++++++ .../njwebservice/util/DatabaseUtils.java | 297 ++++++++++++ .../seconddev/njwebservice/util/DocUtil.java | 449 ++++++++++++++++++ .../njwebservice/util/SecondUtil.java | 256 ++++++++++ .../seconddev/njwebservice/util/WfUtil.java | 158 ++++++ 18 files changed, 2651 insertions(+) create mode 100644 secondev-ht-njwebservice/secondev-ht-njwebservice.gradle create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowEncService.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowService.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/DemoService.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/DataOptions.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/FormDataDuty.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialDetailTablePo.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialMainTablePo.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowParam.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowReq.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowRes.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/AccessTokenUtil.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/CommonUtils.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DataSetUtil.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DatabaseUtils.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DocUtil.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/SecondUtil.java create mode 100644 secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/WfUtil.java diff --git a/secondev-ht-njwebservice/secondev-ht-njwebservice.gradle b/secondev-ht-njwebservice/secondev-ht-njwebservice.gradle new file mode 100644 index 0000000..057b4d5 --- /dev/null +++ b/secondev-ht-njwebservice/secondev-ht-njwebservice.gradle @@ -0,0 +1,19 @@ +plugins { + id 'war' +} + +description = "" + +//version '1.0.0' // 为子项目设置版本号为 1.0.0 + +dependencies { + // 子项目私有依赖添加 +} + +//jar { +// archiveBaseName = 'secondev-ht-njwebserivce' // 替换为子项目的实际名称 +// archiveVersion = version +// archiveClassifier = '' +// archiveExtension = 'jar' +// destinationDirectory = file('build/libs') +//} \ No newline at end of file diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowEncService.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowEncService.java new file mode 100644 index 0000000..d5eaaa5 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowEncService.java @@ -0,0 +1,64 @@ +package com.weaver.seconddev.njwebservice; + +import com.weaver.seconddev.njwebservice.entity.SubmitWorkflowReq; +import com.weaver.seconddev.njwebservice.entity.SubmitWorkflowRes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.regex.Pattern; + + +/** + * 自动创建流程 webService + */ +@Service("autoCreateWorkflowEncService") +public class AutoCreateWorkflowEncService { + + private final static Logger log = LoggerFactory.getLogger(AutoCreateWorkflowEncService.class); + + @Autowired + private AutoCreateWorkflowService autoCreateWorkflowService; + + @Autowired + private SubmitWorkflowRes var12; + public SubmitWorkflowRes createWorkflow(SubmitWorkflowReq var1) { + + String var2 = var1.getDATAS().getLoginname(); + String var3 = var1.getDATAS().getPassword(); + String var4 = var1.getDATAS().getWorkflowId(); + String var5 = var1.getDATAS().getCreator(); + String var6 = var1.getDATAS().getRequestLevel(); + String var7 = var1.getDATAS().getMainTable(); + String var8 = var1.getDATAS().getDetailTables(); + String var9 = var1.getSYSID(); + String var10 = var1.getSENDID(); + String var11 = var1.getITFID(); + + + var12.setITFID(var11); + var12.setSYSID(var9); + var12.setSENDID(var10); + String var14 = autoCreateWorkflowService.createWorkflow(var2, var3, var4, var5, var6, var7, var8); + if (isInteger(var14)) { + var12.setISTAT("S"); + log.error(var5 + "创建流程id为" + var4 + "的流程成功!"); + } else { + var12.setISTAT("F"); + log.error(var5 + "创建流程id为" + var4 + "的流程失败:" + var14); + } + + var12.setMESSAGE(var14); + return var12; + } + + + public static boolean isInteger(String var0) { + Pattern var1 = Pattern.compile("^\\+?[1-9][0-9]*$"); + return var1.matcher(var0).matches(); + } + + + +} \ No newline at end of file diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowService.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowService.java new file mode 100644 index 0000000..f0f9cb8 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/AutoCreateWorkflowService.java @@ -0,0 +1,379 @@ +package com.weaver.seconddev.njwebservice; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.elog.util.DateUtils; +import com.weaver.common.hrm.util.HrmCommonUtil; +import com.weaver.common.hrm.util.StringUtils; +import com.weaver.seconddev.njwebservice.entity.DataOptions; +import com.weaver.seconddev.njwebservice.entity.FormDataDuty; +import com.weaver.seconddev.njwebservice.util.*; +import com.weaver.teams.domain.user.SimpleEmployee; +import com.weaver.verupgrade.hrm.company.DepartmentComInfo; +import com.weaver.verupgrade.workflow.workflow.WorkflowAllComInfo; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +import static com.weaver.seconddev.njwebservice.util.SecondUtil.getFromDataByDataDetails; + + +/** + * 自动创建流程 webService + */ +@Service("autoCreateWorkflowService") +public class AutoCreateWorkflowService { + + private final static Logger log = LoggerFactory.getLogger(AutoCreateWorkflowService.class); + + @Autowired + private HrmCommonUtil hrmCommonUtil; + + @Autowired + private WorkflowAllComInfo workflowAllComInfo; + + @Autowired + private DocUtil docUtil; + + @Autowired + private DatabaseUtils databaseUtils; + + @Autowired + private DepartmentComInfo departmentComInfo; + + private static final String HOST = "http://10.6.23.235:20600/papi/openapi"; + + + public String createWorkflow(String loginName, String password, String workflowId, String creator, String requestLevel, String mainTable , String detailTables){ + log.error("AutoCreateWorkflowService start"); + log.error("loginName:"+loginName+"=> password:"+password+"=> workflowId:"+workflowId+"=> creator:"+creator); + //实现自定义webservice接口逻辑 + String currentDate = DateUtils.getCurrentDate(); + String curDateTime = DateUtils.getCurDateTime(); + String workcode = creator; + //1.入参校验 + String tips = SecondUtil.validationParam(loginName, password, workflowId, creator); + if (!"".equals(tips)) { + return tips; + } + + //2.日志记录省略(todo) + + //E10 workflowId转换(未测试) + WfUtil wfUtil = new WfUtil(); + Map zhWfMap = wfUtil.getZhWfMap("t6kj9c07jr", creator, workflowId); + + workflowId = zhWfMap.get("workflowid"); + log.error("转换后的流程ID:"+workflowId); + if(StringUtils.isEmpty(workflowId)) { + return "E10流程ID转换失败,请假查e10_common.dbo.uf_zhwfid_mt配置信息"; + } + + String createTenantKey = zhWfMap.get("tenantKey"); + if(StringUtils.isEmpty(createTenantKey)) { + return "E10获取流程对应租户失败,请假查e10_common.dbo.uf_zhwfid_mt配置信息"; + } + + //3.根据工号获取创建人id (租户概念后续增加) + String groupId = "weaver-ebuilder-form-service";//不确定 + String sql = "select ID,TENANT_KEY from eteams.employee where status = 'normal' and job_num = '"+creator+"' and tenant_key = '"+createTenantKey+"'"; + Map recordMap = new HashMap<>(); + String sourceType = "LOGIC"; + log.error("createWorkflow sql1 :"+sql); + + Map result = databaseUtils.execute(sourceType, groupId, sql); + List> recordList = databaseUtils.getDataSourceList(result); + + log.error("recordList : "+recordList); + if(CollectionUtils.isNotEmpty(recordList)){ + recordMap = recordList.get(0); + } + creator = String.valueOf(recordMap.get("id")); + String tenantKey = (String)recordMap.get("tenant_key"); + + log.error("创建人ID:" + creator + " 租户key:" + tenantKey); + + //紧急程度默认值 + if ("".equals(requestLevel) || requestLevel == null) { + requestLevel = "0"; + } + + + + List detailFormId = SecondUtil.getDetailFormId(workflowId); + + + JSONObject param = new JSONObject(); + param.put("userid", Long.valueOf(creator)); + param.put("workflowId", Long.valueOf(workflowId)); + param.put("requestLevel", Integer.parseInt(requestLevel)); + + + //4.主表数据 明细表数据 自动生成流程入参构造 + log.error("主表数据:"+mainTable); + //主表数据 json {"sqr":"sqr1","date":"date1","hrm:zrr":"zrr1"} + //字段名前面加 hrm:表示是人力资源字段 + if(mainTable == null || mainTable.equals("")){ + return "主表数据不能为空"; + } + JSONObject jsonObject = JSONObject.parseObject(mainTable); + Map mainMap = jsonObject.toJavaObject(Map.class); + log.error("主表集合:"+mainMap); + List formDataDutyList = new ArrayList(); + // 输出 Map 的内容 + for (Map.Entry entry : mainMap.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + FormDataDuty formDataDuty = FormDataDuty.builder().build(); + + Long optionId = null; + log.error("入参key:"+key+" value:"+value); + String code = ""; + JSONObject doc = new JSONObject(); + if (value instanceof String) { + code = String.valueOf(value); + } else if (value instanceof JSONObject) { + doc = (JSONObject) value; + } + + if (!"".equals(key)) { + if(key.contains("hrm:")){ + //判断人力资源字段工号是否正确 (todo) + optionId = getIdByWorkcode(code); + if(optionId == null) { + return "工号为空或不存在"; + } + key = key.replace("hrm:", ""); + formDataDuty.setDataKey(key); + formDataDuty.setFieldType(2); + DataOptions options = DataOptions.builder().optionId(optionId).build(); + List dataOptions = new ArrayList(); + dataOptions.add(options); + formDataDuty.setDataOptions(dataOptions); + } else if (key.contains("com:") || key.contains("dep:")) { //e10 分部部门同一个字段 + if(key.split(":").length != 3){ + return "主表字段名"+key+"不符合规则..."; + } + + String str2 = key.split(":")[1];//关联人力资源字段 + String str3 = key.split(":")[2];//当前字段 + + if(mainMap.get("hrm:"+str2) != null){ + String hrmResource = (String) mainMap.get("hrm:"+str2); + Long id = getIdByWorkcode(hrmResource); + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(id); + optionId = simpleEmployee.getDepartmentId(); + if (key.contains("com:")) { + optionId = Long.valueOf(departmentComInfo.getSubcompanyid1(String.valueOf(optionId))); + } + key = str3; + formDataDuty.setDataKey(key); + formDataDuty.setFieldType(2); + DataOptions options = DataOptions.builder().optionId(optionId).build(); + List dataOptions = new ArrayList(); + dataOptions.add(options); + formDataDuty.setDataOptions(dataOptions); + }else{ + return "主表字段"+key+"不包含关联字段" ; + } + + }else if(key.contains("doc:")){ + key = key.replace("doc:", ""); + if(key.length()==0){ + return "主表上传附件字段名不符合规则"; + } + if(doc.getString("filename") != null && doc.getString("content") != null) { + String docName = doc.getString("filename"); + String base64 = doc.getString("content"); + formDataDuty.setFieldType(3); + String docId = docUtil.createdocByBase642(docName, base64, "", creator, ""); + log.error("生成的附件id:"+docId); + formDataDuty.setDataKey(key); + DataOptions options = DataOptions.builder().optionId(Long.parseLong(docId)).content(docName).build(); + List dataOptions = new ArrayList(); + dataOptions.add(options); + formDataDuty.setDataOptions(dataOptions); + }else { + return "上传附件内容不符合规则..."; + } + + }else { + log.error("普通字段值:"+value); + formDataDuty.setFieldType(1); + formDataDuty.setDataKey(key); + formDataDuty.setContent(code); + } + } + + + formDataDutyList.add(formDataDuty); + } + + log.error("明细表数据:"+detailTables); + ///明细表数据 + //[[{"wlbh":"1","wlms":"2","pjxhj3y":"3","bylj":"4","kcsl":"5","tksl":"6","jey":"7","cbzx":"8"},{"wlbh":"1","wlms":"2","pjxhj3y":"3","bylj":"4","kcsl":"5","tksl":"6","jey":"7","cbzx":"8"}],[{"aa":"1","bb":"2"}]] + JSONArray outerArray = JSON.parseArray(detailTables); + + // 遍历外部 JSONArray + for (int i = 0; i < outerArray.size(); i++) { + JSONArray innerArray = outerArray.getJSONArray(i); // 获取内部的 JSONArray + //判断明细表id是否存在 + if (detailFormId.size() < i+1) { + log.error("明细表"+(i+1)+"form_id未找到或不存在"); + return "明细表"+(i+1)+"form_id未找到或不存在"; + } + Long subFormId = detailFormId.get(i); + log.error("明细表"+(i+1)+"form_id"+subFormId); + + // 遍历内部 JSONArray + for (int j = 0; j < innerArray.size(); j++) { + JSONObject jsonDetail = innerArray.getJSONObject(j); + Long optionId = null; + + // 遍历 JSONObject 的键值对 + for (String key : jsonDetail.keySet()) { + FormDataDuty formDataDuty = FormDataDuty.builder().build(); + String value = jsonDetail.getString(key); + if (!"".equals(key)) { + if(key.contains("hrm:")){ + //判断人力资源字段工号是否正确 (todo) + optionId = getIdByWorkcode(value); + if(optionId == null) { + return "工号为空或不存在"; + } + key = key.replace("hrm:", ""); + formDataDuty.setDataKey(key); + formDataDuty.setDataIndex((long) (j + 1)); + formDataDuty.setSubFormId(subFormId); + + DataOptions options = DataOptions.builder().optionId(optionId).build(); + List dataOptions = new ArrayList(); + dataOptions.add(options); + formDataDuty.setDataOptions(dataOptions); + } else if (key.contains("com:") || key.contains("dep:")) { //e10 分部部门同一个字段 + if(key.split(":").length != 3){ + return "明细表表字段名"+key+"不符合规则..."; + } + + String str2 = key.split(":")[1];//关联人力资源字段 + String str3 = key.split(":")[2];//当前字段 + + if(mainMap.get("hrm:"+str2) != null){ + String hrmResource = (String) mainMap.get("hrm:"+str2); + Long id = getIdByWorkcode(hrmResource); + SimpleEmployee simpleEmployee = hrmCommonUtil.getSimpleEmployee(id); + optionId = simpleEmployee.getDepartmentId(); + if (key.contains("com:")) { + optionId = Long.valueOf(departmentComInfo.getSubcompanyid1(String.valueOf(optionId))); + } + key = str3; + formDataDuty.setDataKey(key); + formDataDuty.setDataIndex((long) (j + 1)); + formDataDuty.setSubFormId(subFormId); + DataOptions options = DataOptions.builder().optionId(optionId).build(); + List dataOptions = new ArrayList(); + dataOptions.add(options); + formDataDuty.setDataOptions(dataOptions); + }else{ + return "明细字段"+key+"不包含关联字段" ; + } + }else { + log.error("明细表普通字段值:"+value); + formDataDuty.setDataKey(key); + formDataDuty.setDataIndex((long) (j + 1)); + formDataDuty.setContent(value); + //目前写死 后续在找方法 + formDataDuty.setSubFormId(subFormId); + } + formDataDutyList.add(formDataDuty); + } + + } + + } + } + + log.error("formDataDutyList数据:"+formDataDutyList.size()+"-"+formDataDutyList); + + if(CollectionUtils.isNotEmpty(formDataDutyList)) { + JSONObject fromDataByDataDetails = getFromDataByDataDetails(formDataDutyList); + param.put("formData", fromDataByDataDetails); + } + + + //String formId = workflowAllComInfo.getFormId(workflowId); + //log.error("表单id"+formId); + + //4.1 获取access_token ( 增加redis存储token todo) + String token = ""; +// try { +// token = AccessTokenUtil.getToken(); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } + try { + token = AccessTokenUtil.getAccessToken(createTenantKey); + } catch (Exception e) { + throw new RuntimeException(e); + } + log.error("access_token信息:"+token); + + String url = HOST + "/api/workflow/core/paService/v1/doCreateRequest?access_token=" + token; + + JSONObject otherParams =new JSONObject(); + otherParams.put("isnextflow",1); + param.put("otherParams",otherParams); + + log.error("表单json:"+param.toJSONString()); + // 远程调用创建流程。 + String response = HttpUtil.post(url, param.toJSONString()); + log.error("自动创建流程结果:"+response); + JSONObject responseObj = JSONObject.parseObject(response); + Object message = responseObj.get("message"); + JSONObject messageObj = JSONObject.parseObject(message.toString()); + String errcode = messageObj.get("errcode").toString(); + + log.error("errcode:"+errcode); + if(StringUtils.isNotEmpty(errcode)){ + if(messageObj.get("errcode").toString().equals("0")){ + log.error("requestId:"+messageObj.get("requestId").toString()); + return Optional.ofNullable(messageObj.get("requestId")).map(Object::toString).orElse(""); + }else{ + log.error("errmsg:"+messageObj.get("errmsg").toString()); + return messageObj.get("errmsg").toString(); + } + }else{ + return "调用泛微流程创建接口失败"; + } + + } + + + + /** + * 根据工号获取人员id + * @param workcode + * @return + */ + private Long getIdByWorkcode(String workcode) { + log.error("人员工号:"+workcode); + String groupId = "weaver-ebuilder-form-service"; + String sql = "select ID from eteams.employee where status = 'normal' and job_num = '"+workcode+"'"; + Map recordMap = new HashMap<>(); + String sourceType = "LOGIC"; + Map result = databaseUtils.execute(sourceType, groupId, sql); + List> recordList = databaseUtils.getDataSourceList(result); + if(CollectionUtils.isNotEmpty(recordList)){ + recordMap = recordList.get(0); + } + log.error("人员ID:"+recordMap.get("id")); + return recordMap.get("id") == null ? null :(Long) recordMap.get("id"); + } + +} \ No newline at end of file diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/DemoService.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/DemoService.java new file mode 100644 index 0000000..30e07bb --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/DemoService.java @@ -0,0 +1,143 @@ +package com.weaver.seconddev.njwebservice; + +import com.weaver.common.hrm.util.Util; +import com.weaver.common.i18n.tool.util.I18nContextUtil; +import com.weaver.seconddev.njwebservice.util.DocUtil; +import com.weaver.verupgrade.conn.CONN_TYPE; +import com.weaver.verupgrade.conn.RecordSet; +import com.weaver.verupgrade.workflow.workflow.WorkflowAllComInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("demoService") +public class DemoService { + private final static Logger log = LoggerFactory.getLogger(DemoService.class); + + private static final String HOST = "http://10.6.23.235:20600/papi/openapi"; + + @Autowired + private DocUtil docUtil; + +// @Autowired +// private DepartmentComInfo departmentComInfo; + + @Autowired + private WorkflowAllComInfo workflowAllComInfo; + + + + public String demo(String base64){ +// //实现自定义webservice接口逻辑 + + //String tips = SecondUtil.validationParam("OAAdmin", "123456", "100003460000005676", "2022050353"); + + //String formId = workflowAllComInfo.getFormId("100003460000005676"); + + String workcodeId = "100003460000005676"; + + // 获取明细表表名 + List> list = new ArrayList<>(); + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.workflow.getType(); + + String formSql = ""; + + String sql = "SELECT * FROM form_table WHERE \n" + + " form_id IN ( SELECT id FROM sub_form WHERE form_id IN ( SELECT form_id FROM e10_core_business.dbo.form_table WHERE table_name = 'formtable_main_3540'))"; + rs.executeSql(sql,poolname); + while (rs.next()){ + Map map = new HashMap<>(); + map.put("id", Util.getLongValue(rs.getString("id"))); + map.put("table_type", Util.getIntValue(rs.getString("table_type"))); + map.put("form_name", Util.null2String(rs.getString("form_name"))); + list.add(map); + + } + + +// String token = ""; +// try { +// token = AccessTokenUtil.getToken(); +// } catch (Exception e) { +// throw new RuntimeException(e); +// } +// +//// log.error("base64:"+base64); +//// +// int base64Length = base64.length(); +// +// // 计算原始文件大小 +// int originalSize = (base64Length * 3) / 4; +// +// // 如果 Base64 字符串末尾有填充字符 '=',需要减去对应的字节数 +// if (base64.endsWith("==")) { +// originalSize -= 2; // 每两个 '=' 表示填充了 1 个字节 +// } else if (base64.endsWith("=")) { +// originalSize -= 1; // 每 1 个 '=' 表示填充了 1 个字节 +// } +// +//// +// JSONObject params = new JSONObject(); +// params.put("userid", 100001700000063120L); +// params.put("base64", base64); +// params.put("name","测试.png"); +// params.put("size",String.valueOf(originalSize)); +// params.put("lastModified",System.currentTimeMillis()); +//// +//// +//// +// String url = HOST + "/api/file/v2/common/upload/base64?access_token=" + token; +// HttpRequest request = HttpRequest.post(url) +// .header(Header.CONTENT_TYPE, ContentType.MULTIPART.toString()) +// .form("userid", 100001700000063120L) // 添加表单字段 +// .form("base64", base64) +// .form("name", "测试.png") // 添加表单字段 +// .form("size", String.valueOf(originalSize)) +// .form("lastModified", System.currentTimeMillis()); +// +// // 发送请求并获取响应 +// HttpResponse response = request.execute(); +// +// // 获取响应状态码 +// int statusCode = response.getStatus(); +// +// // 获取响应体 +// String body = response.body(); + +// log.error("base64:"+base64); +// String docId = docUtil.createdocByBase642("测试.png", base64, "", "100001700000063120", ""); + + +// RestTemplate restTemplate = new RestTemplate(); + +// try { +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.MULTIPART_FORM_DATA); +// +// // Create the parameters and add the file +// MultiValueMap param = new LinkedMultiValueMap<>(); +// param.add("userid", "811711878160941057"); +// param.add("name", "测试.png"); +// param.add("size", String.valueOf(originalSize)); +// param.add("module", "workflow"); +// //param.add("access_token", token); +// param.add("base64", base64); +// // Create the request entity using the parameters and headers +// HttpEntity> requestEntity = new HttpEntity<>(param, headers); +// // Send the request +// ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); +// return response.toString(); +// }catch (Exception e){ +// e.printStackTrace(); +// } + + return ""; + } +} \ No newline at end of file diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/DataOptions.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/DataOptions.java new file mode 100644 index 0000000..2adbf5e --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/DataOptions.java @@ -0,0 +1,44 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2025/1/6 6:08 PM + * @Description: 浏览按钮 + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DataOptions { + + + private Long optionId; + + private Long dataKey; + + private String content; + + /** + * 选项类型 + */ + private String type; + + private Boolean matchByName; + + + + + + + + + + + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/FormDataDuty.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/FormDataDuty.java new file mode 100644 index 0000000..86d345b --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/FormDataDuty.java @@ -0,0 +1,59 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Author liang.cheng + * @Date 2025/1/6 6:08 PM + * @Description: 表单字段 + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FormDataDuty { + + private Long fieldId; + + private String dataKey; + + /** + * 字段内容(单行文本、多行文本等) + */ + private String content; + + private List dataOptions; + + /** + * 明细表ID,当传递明细数据且字段传递的dataKey则该值必填 + */ + private Long subFormId; + + /** + * 明细行序号(主表字段该值不用传递)。1:就代表是明细行第一行。 + */ + private Long dataIndex; + + /** + * 普通字段类型1 + */ + private int fieldType; + + @Override + public String toString() { + return "FormDataDuty{" + + "fieldId=" + fieldId + + ", dataKey='" + dataKey + '\'' + + ", content='" + content + '\'' + + ", dataOptions=" + dataOptions + + ", subFormId=" + subFormId + + ", dataIndex=" + dataIndex + + '}'; + } +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialDetailTablePo.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialDetailTablePo.java new file mode 100644 index 0000000..63d5b5f --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialDetailTablePo.java @@ -0,0 +1,58 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2025/1/6 6:08 PM + * @Description: 光导物料退库审批流程明细表 + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MaterialDetailTablePo { + + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + private String departmentId; + + /** + * 平均消耗 + */ + private String averageUse; + + /** + * 本月累计 + */ + private String sumMonth; + + /** + * 库存数量 + */ + private String inventoryCount; + + /** + * 退库数量 + */ + private String outCount; + + + private String money; + + /** + * 成本中心 + */ + private String costCenter; + + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialMainTablePo.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialMainTablePo.java new file mode 100644 index 0000000..96963d5 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/MaterialMainTablePo.java @@ -0,0 +1,46 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +/** + * @Author liang.cheng + * @Date 2025/1/6 6:08 PM + * @Description: 光导物料退库审批流程主表 + * @Version 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MaterialMainTablePo { + + private String creator; + + /** + * 申请单位 + */ + private String applicant; + + private String departmentId; + + /** + * 申请日期 + */ + private String applyDate; + + private String sumMoney; + + private String applyNo; + + private String outApplyDate; + + + + + + + + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowParam.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowParam.java new file mode 100644 index 0000000..8b2a3cd --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowParam.java @@ -0,0 +1,21 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubmitWorkflowParam { + String loginname; + String password; + String workflowId; + String creator; + String requestLevel; + String mainTable; + String detailTables; + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowReq.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowReq.java new file mode 100644 index 0000000..952a545 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowReq.java @@ -0,0 +1,17 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubmitWorkflowReq { + String SENDID = ""; + String ITFID = ""; + String SYSID = ""; + SubmitWorkflowParam DATAS; +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowRes.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowRes.java new file mode 100644 index 0000000..4e59b23 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/entity/SubmitWorkflowRes.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.njwebservice.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubmitWorkflowRes { + String SENDID ; + String ITFID; + String SYSID; + String ISTAT; + String MESSAGE; + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/AccessTokenUtil.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/AccessTokenUtil.java new file mode 100644 index 0000000..93a7736 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/AccessTokenUtil.java @@ -0,0 +1,83 @@ +package com.weaver.seconddev.njwebservice.util; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.i18n.tool.util.I18nContextUtil; +import com.weaver.common.i18n.tool.util.Util; +import com.weaver.verupgrade.conn.CONN_TYPE; +import com.weaver.verupgrade.conn.RecordSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + + +/** + * @Author liang.cheng + * @Date 2025/1/7 2:41 PM + * @Description: access_token 获取 + * @Version 1.0 + */ +public class AccessTokenUtil { + + private final static Logger log = LoggerFactory.getLogger(AccessTokenUtil.class); + + private static String CORP_ID = "9d18deb9bbeb98f7a2402808f8bb8ce8"; + + //private static String APP_KEY = "179a9854c471d161db69ec9f16c6e1e"; + private static String APP_KEY = "437dd08a2cd0018bf1242128cab4224c"; + + //private static String APP_SECRET = "9aa17e9391d8fdf4be44f78e2a26be30"; + private static String APP_SECRET = "3e86b82ada2b72fdd3d7929d5623b04f"; + + private static String HOST = "http://10.6.23.235:20600/papi/openapi"; + + /** + * 获取AccessToken + * @return + * @throws Exception + */ + public static String getToken() throws Exception { + + // 获取code + String codeUrl = HOST + "/oauth2/authorize?corpid=" + CORP_ID + "&response_type=code&state=a21"; + String codeResponse = HttpUtil.get(codeUrl); + System.out.println(codeResponse); + + JSONObject jsonObject = JSONObject.parseObject(codeResponse); + Object errcode = jsonObject.get("errcode"); + Object code = jsonObject.get("code"); + log.error("本次获取code值"+code+"==> errcode"+errcode); + + // 根据code 获取token。 + String tokenUrl = HOST + "/oauth2/access_token"; + Map tokanParam = new HashMap<>(4); + tokanParam.put("app_key", APP_KEY); + tokanParam.put("app_secret", APP_SECRET); + tokanParam.put("grant_type", "authorization_code"); + tokanParam.put("code", code); + + String tokenResponse = HttpUtil.post(tokenUrl, tokanParam); + log.error("tokenResponse" + tokenResponse); + + JSONObject tokenResponseObj = JSONObject.parseObject(tokenResponse); + return Optional.ofNullable(tokenResponseObj.get("accessToken")).map(Object::toString).orElse(new String()); + } + + + public static String getAccessToken(String tenantKey) { + + String accesstoken = ""; + String sql = "select accesstoken from e10_common.dbo.uf_tenant_mt where zzkey='"+tenantKey+"' and delete_type ='0'"; + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.ebuilder.getType(); + rs.setTenantKey(tenantKey); + rs.executeSql(sql, poolname); + if (rs.next()) { + accesstoken = Util.null2String(rs.getString("accesstoken")); + } + return accesstoken; + } +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/CommonUtils.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/CommonUtils.java new file mode 100644 index 0000000..3d8d980 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/CommonUtils.java @@ -0,0 +1,395 @@ +package com.weaver.seconddev.njwebservice.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +@Component +public class CommonUtils { + + private final static Logger log = LoggerFactory.getLogger(CommonUtils.class); + + public static JSONObject toJSON(String data){ + if(!StringUtils.isEmpty(data)){ + try { + return JSONObject.parseObject(data); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Long getJSONLong(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getLong(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static Integer getJSONInteger(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getInteger(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return -1; + } + + public static String getJSONString(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return null2String(json.getString(key)); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return ""; + } + + public static JSONObject getJSONObject(JSONObject json,String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONObject(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONArray getJSONArray(JSONObject json, String key){ + if(json != null && json.containsKey(key)){ + try { + return json.getJSONArray(key); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static JSONObject getJSONObject(JSONArray json, int idx){ + if(json != null && json.size() > idx){ + try { + return json.getJSONObject(idx); + }catch (Throwable t){ + log.error(t.getMessage(),t); + } + } + return null; + } + + public static String mapToStrData(Map para){ + if(para != null) { + return JSONObject.toJSON(para).toString(); + } + return ""; + } + + public static void strToLongList(List list,String strs){ + strToLongList(list,strs,true); + } + + public static void strToLongList(List list,String strs,boolean isDist){ + if(list == null){ + return; + } + if(StringUtils.isEmpty(strs)){ + return; + } + + String[] strList = StringUtils.split(strs, ","); + for(String str:strList){ + if(StringUtils.isEmpty(str)){ + continue; + } + + long id = getLongValue(str); + if(id > 0l && (isDist == false || !list.contains(id))){ + list.add(id); + } + } + } + + public static long getLongValue(Object v){ + return getLongValue(null2String(v)); + } + + public static long getLongValue(String v) { + return getLongValue(v, -1); + } + + public static long getLongValue(String v, long def) { + try { + return Long.parseLong(v); + } catch (Exception ex) { + return def; + } + } + + public static int getIntValue(Object o){ + return getIntValue(null2String(o)); + } + + public static int getIntValue(String s){ + return getIntValue(s,-1); + } + + public static int getIntValue(String s, int def){ + try { + return NumberUtils.toInt(s); + } catch (Exception ex) { + return def; + } + + } + + public static String null2String(Object s) { + return s == null ? "" : s.toString(); + } + + public static String null2String(Object s, String def) { + return s == null ? (def == null ? "" : def) : s.toString(); + } + + + public static String stringReplace(String sou, String s1, String s2) { + //int idx = sou.indexOf(s1); + //if (idx < 0) { + // return sou; + //} + //return sou.substring(0, idx) + s2 + StringReplace(sou.substring(idx + s1.length()), s1, s2); + sou = null2String(sou); + s1 = null2String(s1); + s2 = null2String(s2); + try{ + sou = sou.replace(s1, s2); + }catch(Exception e){ + //System.out.println(e);//将未知异常打印出来,便于检查错误。 + } + return sou; + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toScreen(String s) { + char c[] = s.toCharArray(); + char ch; + int i = 0; + StringBuffer buf = new StringBuffer(); + + while (i < c.length) { + ch = c[i++]; + + if (ch == '\r') + buf.append(""); + else if (ch == '\n') + buf.append(""); + else + buf.append(ch); + } + return buf.toString(); + } + + /** + * 替换特殊字符 + * + * @param s 要替换特殊的字符串 + * @return 替换完成的字符串 + */ + public static String toExcel(String s) { + if (s == null) return ""; + //因本方法会将字符串 &符号转换,故先将欧元符号转义符转换为其Unicode码 + s = s.replaceAll("€", "\u20AC"); + String str = toScreen(s); + str = stringReplace(str, "∠", "∠"); + str = stringReplace(str, "φ", "φ"); + str = stringReplace(str, """, "\""); + str = stringReplace(str, " ", "%nbsp"); + //str=Util.StringReplace(str,"'","‘"); + str = stringReplace(str, "<", "<"); + str = stringReplace(str, ">", ">"); + str = stringReplace(str, "&dt;&at;", "
"); + str = stringReplace(str, "&", "&"); + str = stringReplace(str, "
", "&dt;&at;"); + if ("&dt;&at;".equals(str)) { + str = ""; + } + //在方法最后,又将欧元符号置换为转义符 + str = str.replaceAll("\u20AC", "€"); + return str; + } + + public static String delHtml(final String inputString) { + String htmlStr = toExcel(inputString); // 含html标签的字符串 + + String textStr = ""; + java.util.regex.Pattern p_script; + java.util.regex.Matcher m_script; + java.util.regex.Pattern p_html; + java.util.regex.Matcher m_html; + + try { + String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式 + + String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或]*?>[/s/S]*? + + p_script = java.util.regex.Pattern.compile(regEx_script, java.util.regex.Pattern.CASE_INSENSITIVE); + m_script = p_script.matcher(htmlStr); + htmlStr = m_script.replaceAll(""); // 过滤script标签 + + p_html = java.util.regex.Pattern.compile(regEx_html, java.util.regex.Pattern.CASE_INSENSITIVE); + m_html = p_html.matcher(htmlStr); + htmlStr = m_html.replaceAll(""); // 过滤html标签 + + textStr = htmlStr; + + } catch (Exception e) { + System.err.println("Html2Text: " + e.getMessage()); + } + + return htmlToTxt(textStr).trim();// 返回文本字符串 + } + + /** + * 删除字符串中的html格式 + * + * @param input + * @return + */ + public static String htmlToTxt(String input) { + if (input == null || input.trim().equals("")) { + return ""; + } + // 去掉所有html元素, + String str = input.replaceAll("<[a-zA-Z]+[1-9]?[^><]*>", ""); + return str; + } + + + //==new= + + public static int getIntValue(Object s, int def){ + return getIntValue(null2String(s)); + } + + public static List strToLongList(String strs){ + List list = new ArrayList(); + strToLongList(list,strs,true); + return list; + } + + + public static int dateInterval(String fromdate, String todate) { + Calendar fromcalendar = getCalendar(fromdate); + Calendar tocalendar = getCalendar(todate); + + if (fromcalendar == null || tocalendar == null) + return 0; + + return (int) ((tocalendar.getTimeInMillis() - fromcalendar.getTimeInMillis()) / 3600 / 24 / 1000); + } + + /** + * @param datetime - 给定的日期时间,格式为 '2004-05-12 12:00:23' 或者 '2004-05-12' + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime) { + int datetimelength = datetime.length() ; + + switch(datetimelength) { + case 19 : + return getCalendar(datetime , "yyyy'-'MM'-'dd' 'HH:mm:ss") ; + case 10 : + return getCalendar(datetime , "yyyy'-'MM'-'dd") ; + default : + return null ; + } + + } + + + /** + * @param datetime - 给定的日期时间 + * @param formart - 给定的日期时间的格式 + * @return 返回给定日历, 如果格式不正确,返回null + */ + public static Calendar getCalendar(String datetime, String formart) { + SimpleDateFormat SDF = new SimpleDateFormat(formart) ; + + Calendar calendar = Calendar.getInstance() ; + try { + calendar.setTime(SDF.parse(datetime)) ; + } catch (ParseException e) { + return null ; + } + + return calendar ; + } + + /** + * @return 返回当前时间字符,格式为 yyyy'-'MM'-'dd + * + * 返回当前时间字符,默认格式为yyyy'-'MM'-'dd + * + * 如 2004-09-07 + */ + public static String getCurrentDateString() { + String timestrformart = "yyyy'-'MM'-'dd" ; + SimpleDateFormat SDF = new SimpleDateFormat(timestrformart) ; + Calendar calendar = Calendar.getInstance() ; + + return SDF.format(calendar.getTime()) ; + } + + public static String getMessage(String msgMode,String key,String val){ + key = null2String(key).trim(); + val = null2String(val).trim(); + msgMode = null2String(msgMode).trim(); + if(!"".equals(msgMode) && !"".equals(key)) { + msgMode = msgMode.replaceAll(key, val); + } + return msgMode; + } + + public static List tranStrToLongList(Object idListObj){ + List docIds = new ArrayList(); + if(idListObj != null) { + try { + JSONArray idObjs = JSONArray.parseArray(null2String(idListObj)); + for (Object idObj : idObjs) { + long id = getLongValue(idObj); + if (id > 0l) { + docIds.add(id); + } + } + } catch (Exception e) { + log.error("trans error :{}", idListObj); + log.error(e.getMessage(), e); + } + } + return docIds; + } +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DataSetUtil.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DataSetUtil.java new file mode 100644 index 0000000..7861f65 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DataSetUtil.java @@ -0,0 +1,144 @@ +package com.weaver.seconddev.njwebservice.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.json.JSONUtil; +import com.weaver.datasource.utils.rest.CommonRestService; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author liang.cheng + * @Date 2025/1/7 2:02 PM + * @Description: 数据库操作 + * @Version 1.0 + */ +@Slf4j +@Component +public class DataSetUtil { + + @Autowired + private CommonRestService commonRestService; + + public static String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 执行服务内部sql:/sapi/secondev/ds/executeSql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service 可以通过group接口获取 + * sql : select * from ebda_app limit 10 + * @param sourceType LOGIC: 各模块提供业务数据(逻辑表) + * @param groupId + * @param sql + * @return + */ + public Map executeLogicSql(SourceType sourceType, String groupId, String sql) { + //拼接参数 + Map valueMap = new HashMap<>(); + valueMap.put("sourceType", sourceType); + valueMap.put("groupId", groupId); + valueMap.put("sql", base64(sql)); + + try { + return commonRestService.getForObject("/sapi/secondev/ds/executeSql", valueMap, MediaType.APPLICATION_FORM_URLENCODED, Map.class); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw e; + } + } + + /** + * 1201基线后支持的聚合执行接口 + * LOGIC:支持普通sql与预编译sql执行,支持带事务执行 + * EXTERNAL:支持普通sql与预编译sql执行,不支持带事务执行 + * @param sourceType 连接类型 + * @param groupId 连接id + * @param sql sql语句 + * @param sqlParams 预编译sql参数 + * @param transId 事务id + * @param startTrans 是否开启事务 + * @param commit 是否提交事务 + * @param rollback 是否回滚事务 + */ + public Map executeSqlWithTrans(SourceType sourceType, String groupId, String sql, List sqlParams, String transId, Boolean startTrans, Boolean commit, Boolean rollback) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(sourceType); + + //若通过占位符方式查询外部数据库,需增加此参数 + //占位符list 的顺序 要与 sql 的?占位符顺序一致 + if (sqlParams != null && !sqlParams.isEmpty()) { + executeSqlEntity.setParams(sqlParams); + } + //设置事务id + if (transId != null && !transId.isEmpty()) { + executeSqlEntity.setTransactionId(transId); + } + //是否开启事务 + if (startTrans != null && startTrans) { + executeSqlEntity.setStartTransaction(true); + } + //是否提交事务 + if (commit != null && commit) { + executeSqlEntity.setCommitTransaction(true); + } + //是否回滚事务 + if (rollback != null && rollback) { + executeSqlEntity.setRollbackTransaction(true); + } + + //拼接参数 + Map valueMap = new HashMap<>(); + valueMap.put("entity", JSONUtil.toJsonStr(executeSqlEntity)); + + try { + return commonRestService.postForForm("/sapi/secondev/ds/executeSqlAll", Map.class, valueMap); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw e; + } + } + + public List getSqlParams() { + List sqlParams = new ArrayList<>(); + + SqlParamEntity sqlParam1 = new SqlParamEntity(); + sqlParam1.setParamType(SqlParamType.VARCHAR); + sqlParam1.setValue("thsv5s4n2c"); + sqlParams.add(sqlParam1); + + SqlParamEntity sqlParam2 = new SqlParamEntity(); + sqlParam2.setParamType(SqlParamType.INTEGER); + sqlParam2.setValue("0"); + sqlParams.add(sqlParam2); + + List ids = new ArrayList<>(); + ids.add(1054407582048280585L); + ids.add(1054407345976074241L); + ids.add(1054406667262189570L); + for (Long id : ids) { + SqlParamEntity sqlParam3 = new SqlParamEntity(); + sqlParam3.setParamType(SqlParamType.LONG); + sqlParam3.setValue(String.valueOf(id)); + sqlParams.add(sqlParam3); + } + + return sqlParams; + } + + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DatabaseUtils.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DatabaseUtils.java new file mode 100644 index 0000000..c9fde75 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DatabaseUtils.java @@ -0,0 +1,297 @@ +package com.weaver.seconddev.njwebservice.util; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; +import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; +import com.weaver.ebuilder.datasource.api.enums.SourceType; +import com.weaver.ebuilder.datasource.api.enums.SqlParamType; +import com.weaver.ebuilder.datasource.api.query.dto.dw.DynamicParamDto; +import com.weaver.ebuilder.datasource.api.query.dto.dw.FieldQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.GroupQuery; +import com.weaver.ebuilder.datasource.api.query.dto.dw.TableQuery; +import com.weaver.ebuilder.datasource.api.service.DataSetService; +import com.weaver.ebuilder.datasource.api.service.impl.EbFormDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * DatabaseUtil 是一个数据库工具类,提供了一些执行 SQL 查询和操作的方法。 + */ + + +@Component +public class DatabaseUtils { + + private final static Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + + @Autowired + private DataSetService dataSetService; + + @Autowired + private EbFormDataService dataService; + + + /** + * 执行 SQL 并返回结果。 + * + * @param entity 包含执行 SQL 的相关信息的对象 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity) { + Map map = dataSetService.executeSql(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 执行分页 SQL 查询并返回结果。 + * + * @param entity 包含执行 SQL 和分页信息的对象 + * @param pageNo 当前页码 + * @param pageSize 每页的数据条数 + * @return 包含查询结果的 Map 对象 + * @throws RuntimeException 当 SQL 执行失败时抛出异常 + */ + public Map executeSql(ExecuteSqlEntity entity, int pageNo, int pageSize) { + entity.setPageNo(pageNo); + entity.setPageSize(pageSize); + Map map = dataSetService.executeForQuery(entity); + if ("FAIL".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT))) { + log.error("sql执行失败=>{}", JSONObject.toJSONString(map)); + throw new RuntimeException("sql执行异常"); + } else { + return map; + } + } + + /** + * 创建一个包含执行 SQL 的对象。 + * + * @param sql 需要执行的 SQL + * @param groupId 数据源分组的 ID + * @paramDesc 数据源分组的 ID 获取方式 【select APPLICATION_MARK,APPLICATION_name from eteams.ds_mark_service_relation】 + * @return 包含执行 SQL 的对象 + */ + public ExecuteSqlEntity getExecuteSqlEntity(String sql, String groupId) { + log.error("sql=>{}", sql); + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.LOGIC); + executeSqlEntity.setGroupKey("0"); + return executeSqlEntity; + } + + /** + * 对 SQL 进行 Base64 编码。 + * + * @param sql 需要进行编码的 SQL + * @return 编码后的字符串 + */ + public String base64(String sql) { + return Base64.encode(sql); + } + + /** + * 获取数据源列表。 + * + * @param map 包含数据源列表信息的 Map 对象 + * @return 数据源列表的 Map 对象 + */ + public List> getDataSourceList(Map map) { + List> entity = new ArrayList(); + if ("OK".equals(CommonUtils.null2String(map.get("status")).toUpperCase(Locale.ROOT)) && map.get("count") != null && CommonUtils.getIntValue(map.get("count")) > 0) { + entity = (List) map.get("records"); + } + + return keyToLowerCase((List) entity); + } + + public Map getOneDataSource(Map map) { + List> entity = getDataSourceList(map); + return (Map)(CollectionUtil.isNotEmpty(entity) ? (Map)entity.get(0) : new HashMap()); + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMapList 需要转换键的 Map 对象列表 + * @return 转换后的 Map 对象列表 + */ + public List> keyToLowerCase(List> orgMapList) { + List> resultList = new ArrayList(); + Iterator var2 = orgMapList.iterator(); + + while (var2.hasNext()) { + Map stringObjectMap = (Map) var2.next(); + resultList.add(keyToLowerCase(stringObjectMap)); + } + + return resultList; + } + + /** + * 将 Map 对象中的键转换为小写。 + * + * @param orgMap 需要转换键的 Map 对象 + * @return 转换后的 Map 对象 + */ + public Map keyToLowerCase(Map orgMap) { + Map resultMap = new HashMap(); + if (orgMap != null && !orgMap.isEmpty()) { + Set> entrySet = orgMap.entrySet(); + Iterator var3 = entrySet.iterator(); + + while (var3.hasNext()) { + Map.Entry entry = (Map.Entry) var3.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); + resultMap.put(key.toLowerCase(), value); + } + return resultMap; + } else { + return resultMap; + } + } + + + /** + * 根据数据库类型 找到对应数据库 + * + * @param sourceType sourceType 枚举类 + * ETEAMS :数据仓库 + * FORM: ebuilder表单 + * LOGIC: 各模块提供业务数据(逻辑表) + * EXTERNAL: 外部数据源 + * @return + */ + public List> getDataGroups(String sourceType, Boolean flag) { + GroupQuery query = new GroupQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setShowSqlDataset(flag); + + + DynamicParamDto dynamicParamDto = new DynamicParamDto(); + dynamicParamDto.setUserId(10000L); + dynamicParamDto.setTenantKey("tk"); + + query.setDynamicParamDto(dynamicParamDto); + + return dataSetService.getDataGroups(query); + } + + + /** + * 获取数据表 + * + * @param sourceType + * @param groupId + * @param pageNum + * @param pageSize + * @return + */ + public Map getDataSets(String sourceType, String groupId, Integer pageNum, Integer pageSize) { + + TableQuery tableQuery = new TableQuery(); + tableQuery.setSourceType(SourceType.valueOf(sourceType)); + tableQuery.setGroupId(groupId); + //非必传 + //tableQuery.setName(name); + tableQuery.setPageNo(pageNum); + tableQuery.setPageSize(pageSize); + return dataSetService.getDataSetsByPage(tableQuery); + } + + /** + * 获取表字段 + * sourceType :LOGIC + * sourceId : 8494845523559165780 + * groupId : weaver-crm-service + * + * @param + * @return + */ + public List> getFields(String sourceType, String sourceId, String groupId) { + FieldQuery query = new FieldQuery(); + query.setSourceType(SourceType.valueOf(sourceType)); + query.setSourceId(sourceId); + query.setGroupId(groupId); + return dataSetService.getFields(query); + } + + /** + * 执行sql + * sourceType :LOGIC + * groupId : weaver-ebuilder-app-service + * sql : select * from ebda_app limit 10 + * + * @param + * @return + */ + public Map execute(String sourceType, String groupId, String sql) { + //执行sql 参数sourceType groupId sql + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + return dataSetService.executeSql(executeSqlEntity); + } + + + public String getMysqlPagedSql(String sql,int pageNo, int pageSize) { + if(pageNo<=0){ + pageNo = 1; + } + + if(pageSize<=0){ + pageSize = 20; + } + + int start = (pageNo-1)*pageSize; + int end = pageNo*pageSize; + + return new StringBuffer().append(sql).append( + " LIMIT "+start+","+(end-start)).toString(); + } + + + public Map executeForQuery(String sourceType, String groupId, String sql,List sqlparam) { + //执行sql 参数sourceType groupId sql sqlparam + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); + executeSqlEntity.setSql(base64(sql)); + executeSqlEntity.setGroupId(groupId); + executeSqlEntity.setSourceType(SourceType.valueOf(sourceType)); + executeSqlEntity.setParams(sqlparam); + return dataSetService.executeSql(executeSqlEntity); + } + + + + /** + * 获取sql入参 + * @param list + * @return + */ + public List getSqlParamEntity(List list){ + List sqlparam = new ArrayList(); + for (String str : list){ + SqlParamEntity sqlParamEntity = new SqlParamEntity(); + sqlParamEntity.setParamType(SqlParamType.VARCHAR); + sqlParamEntity.setValue(str); + sqlparam.add(sqlParamEntity); + } + return sqlparam; + } + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DocUtil.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DocUtil.java new file mode 100644 index 0000000..2e1e47c --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/DocUtil.java @@ -0,0 +1,449 @@ +package com.weaver.seconddev.njwebservice.util; + +import com.weaver.common.hrm.util.Util; +import com.weaver.common.i18n.tool.util.I18nContextUtil; +import com.weaver.eteams.file.client.file.FileObj; +import com.weaver.eteams.file.client.param.RemoteUploadParam; +import com.weaver.file.ud.api.FileUploadService; +import com.weaver.teams.domain.EntityType; +import com.weaver.verupgrade.conn.CONN_TYPE; +import com.weaver.verupgrade.conn.RecordSet; +import org.apache.axis.encoding.Base64; +import org.apache.commons.lang3.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipInputStream; + +/** + * createby jianyong.tang + * createTime + * version v1 + * desc + */ +@Component +public class DocUtil { + /** + * 16进制字符串获取文档id + * @param filename + * @param data16 + * @param seccategory + * @param createrid + * @return + */ + private final Logger log = LoggerFactory.getLogger(DocUtil.class); + + public static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i + 1), 16)); + } + return data; + } + + public static String hexStringToString(String s) { + if (s == null || s.equals("")) { + return null; + } + s = s.replace(" ", ""); + byte[] baKeyword = new byte[s.length() / 2]; + for (int i = 0; i < baKeyword.length; i++) { + try { + baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); + } catch (Exception e) { + e.printStackTrace(); + } + } + try { + s = new String(baKeyword, StandardCharsets.UTF_8); + // new String(); + } catch (Exception e1) { + e1.printStackTrace(); + } + return s; + } + + + + @Autowired + private FileUploadService fileUploadService; + public String createdocByBase642(String filename,String base64Str,String seccategory,String createrid,String tenantKey){ + String docid = ""; + try { + //DocAccService das = new DocAccService(); + RemoteUploadParam remoteUploadParam = new RemoteUploadParam(filename, "", EntityType.document.name()); + FileObj fileObj = fileUploadService.uploadLocalFileWithBase64(toSemiangle(base64Str.replace(" ","").replace("\r","")), Long.valueOf(createrid), "", remoteUploadParam); + //long imagefileid = das.getFileByBase64(toSemiangle(base64Str), filename); + long imagefileid = ObjectUtils.isEmpty(fileObj) ? -1L : fileObj.getFileid(); + docid=String.valueOf(imagefileid); +// DocSaveService var22 = new DocSaveService(); +// if(imagefileid>0){ +// RecordSet rs = I18nContextUtil.getBean(RecordSet.class); +// String poolname = CONN_TYPE.hrm.getType(); +// rs.setTenantKey(tenantKey); +// String departmentId="-1"; +// String sql="SELECT department FROM eteams.dbo.employee WHERE id = '"+createrid+"' AND delete_type = 0 AND tenant_key = '"+tenantKey+"'"; +// rs.executeSql(sql, poolname); +// User user = new User(); +// if(rs.next()){ +// departmentId = Util.null2String(rs.getString("department")); +// } +// user.setUid(Long.valueOf(createrid)); +// user.setUserDepartment(Long.valueOf(departmentId)); +// user.setLanguage(7); +// user.setLogintype("1"); +// user.setLoginip("127.0.0.1"); +// +// log.error("seccategory:"+seccategory+"ten:"+HrmContextUtil.getCurrentTenantKey()+" imagefileid:"+imagefileid+" user:"+user.getUID()); +// docid=String.valueOf(var22.accForDoc(Long.valueOf(seccategory),imagefileid,user)); +// } + //拿到附件id就可以更新到流程表字段 + + }catch (Exception e){ + log.error("e",e); + } + return docid; + } + + public String toSemiangle(String src) { + char[] c = src.toCharArray(); + for (int index = 0; index < c.length; index++) { + if (c[index] == 12288) {// 全角空格 + c[index] = (char) 32; + } else if (c[index] > 65280 && c[index] < 65375) {// 其他全角字符 + c[index] = (char) (c[index] - 65248); + } + } + return String.valueOf(c); + } + + + + + public Map getDocInfo(String docid,String tenantKey) throws Exception { + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.document.getType(); + rs.setTenantKey(tenantKey); + Map docmap = new HashMap<>(); + String uploadBuffer="";//base64字符串 + String sql = " select c.file_path ,c.file_url ,b.id as imagefileid,b.size ,b.NAME from e10_core_business.dbo.document a,e10_core_business.dbo.fileobj b,e10_core_business.dbo.file_storage_info c where a.id=b.REF_ID and b.URL =c.file_url " + + "and a.ID ="+docid+" " + + "AND a.delete_type = 0 " + + "AND a.tenant_key = '"+tenantKey+"' " + + "AND b.delete_type = 0 " + + "AND b.tenant_key = '"+tenantKey+"' " + + "AND c.delete_type = 0 " + + "AND c.tenant_key = '"+tenantKey+"';"; + rs.executeSql(sql, poolname); + if(rs.next()){ + String imagefileid = Util.null2String(rs.getString("imagefileid")); + String filerealpath = Util.null2String(rs.getString("file_path"))+"/"+Util.null2String(rs.getString("file_url")); + String iszip ="1"; + String filesize = Util.null2String(rs.getString("size")); + String imagefilename = Util.null2String(rs.getString("NAME"));//文件名 + InputStream fi = getFile(filerealpath,iszip); + docmap.put("imagefileid",imagefileid); + docmap.put("filename",imagefilename); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int count = 0; + while((count = fi.read(buffer)) >= 0){ + baos.write(buffer, 0, count); + } + uploadBuffer = Base64.encode(baos.toByteArray()); + docmap.put("base64str",uploadBuffer); + docmap.put("filesize",filesize); + baos.close(); + //这里就可以封装 文件名和文件内容 传给第三方系统 + } + return docmap; + + } + + public Map getDocInfoWf(String fileid,String tenantKey) throws Exception { + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.document.getType(); + rs.setTenantKey(tenantKey); + Map docmap = new HashMap<>(); + String uploadBuffer="";//base64字符串 + String sql = " select c.file_path ,c.file_url ,b.id as imagefileid,b.size ,b.NAME from e10_core_business.dbo.fileobj b,e10_core_business.dbo.file_storage_info c where b.URL =c.file_url " + + "and b.ID ="+fileid+" " + + "AND b.delete_type = 0 " + + "AND b.tenant_key = '"+tenantKey+"' " + + "AND c.delete_type = 0 " + + "AND c.tenant_key = '"+tenantKey+"';"; + rs.executeSql(sql, poolname); + if(rs.next()){ + String imagefileid = Util.null2String(rs.getString("imagefileid")); + String filerealpath = Util.null2String(rs.getString("file_path"))+"/"+Util.null2String(rs.getString("file_url")); + String iszip ="1"; + String filesize = Util.null2String(rs.getString("size")); + String imagefilename = Util.null2String(rs.getString("NAME"));//文件名 + InputStream fi = getFile(filerealpath,iszip); + docmap.put("imagefileid",imagefileid); + docmap.put("filename",imagefilename); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int count = 0; + while((count = fi.read(buffer)) >= 0){ + baos.write(buffer, 0, count); + } + uploadBuffer = Base64.encode(baos.toByteArray()); + docmap.put("base64str",uploadBuffer); + docmap.put("filesize",filesize); + baos.close(); + //这里就可以封装 文件名和文件内容 传给第三方系统 + } + return docmap; + + } + /** + * 根据系统文档存放路径 获取文档流 + * @param filerealpath 文档存放路径 + * @param iszip 是否压缩包 + * @return + * @throws Exception + */ + private InputStream getFile(String filerealpath, String iszip) + throws Exception { + ZipInputStream zin = null; + InputStream imagefile = null; + File thefile = new File(filerealpath); + if (iszip.equals("1")) { + zin = new ZipInputStream(new FileInputStream(thefile)); + if (zin.getNextEntry() != null) + imagefile = new BufferedInputStream(zin); + } else { + imagefile = new BufferedInputStream(new FileInputStream(thefile)); + } + return imagefile; + } + + public String getShareRyids(String wdid,String tenantKey){ + StringBuffer ryids = new StringBuffer(); + if("".equals(wdid)){ + return ""; + } + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.document.getType(); + rs.setTenantKey(tenantKey); + RecordSet rs_dt = I18nContextUtil.getBean(RecordSet.class); + rs_dt.setTenantKey(tenantKey); + String typeids = ""; + String flag = ""; + String sql_dt = ""; + String sql = "select distinct target_type from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"'"; + rs.executeSql(sql, poolname); + while (rs.next()){ + String type = Util.null2String(rs.getString("target_type")); + typeids = typeids + flag +type; + flag = ","; + } + poolname = CONN_TYPE.hrm.getType(); + typeids = ","+typeids+","; + log.error(typeids); + flag = ""; + if(typeids.indexOf(",11,")>=0){//所有人 + String seclevel = ""; + String seclevelmax = ""; + sql = "select target_min_sec_level ,target_max_sec_level from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type=11"; + rs.executeSql(sql, CONN_TYPE.document.getType()); + if(rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + } + sql = "select id from eteams.dbo.employee WHERE PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax +" AND delete_type = 0 AND tenant_key = '"+tenantKey+"'"; + rs.executeSql(sql, poolname); + while (rs.next()){ + ryids.append(flag).append(rs.getString("id")); + flag = ","; + } + + } + if(typeids.indexOf(",5,")>=0 || typeids.indexOf(",501,")>=0){//分部 + String seclevel = ""; + String seclevelmax = ""; + String subcomid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(5,501)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + subcomid = Util.null2String(rs.getString("target_id")); + if("".equals(subcomid)){ + continue; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a,eteams.dbo.department b WHERE a.DEPARTMENT =b.id and b.subcompanyid ='"+subcomid+"' and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax +" AND a.delete_type = 0 AND a.tenant_key = '"+tenantKey+"'"; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + if(typeids.indexOf(",6,")>=0 || typeids.indexOf(",502,")>=0){//分部下级 + String seclevel = ""; + String seclevelmax = ""; + String subcomid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(6,502)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + subcomid = Util.null2String(rs.getString("target_id")); + if("".equals(subcomid)){ + continue; + } + String comids = ""; + String flag1 = ""; + sql_dt = "WITH allsub(id,name,parent) " + + "as ( " + + "SELECT id,name ,parent FROM eteams.dbo.department where id in("+subcomid+") and type = 'subcompany' AND virtualid = 1 and STATUS =1 AND delete_type = 0 AND tenant_key = '"+tenantKey+"' " + + " UNION ALL SELECT a.id,a.name,a.parent FROM eteams.dbo.department a,allsub b where a.parent = b.id and type = 'subcompany' AND virtualid = 1 and STATUS =1 AND delete_type = 0 AND tenant_key = '"+tenantKey+"' " + + ") select id from allsub"; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + comids = comids + flag1 +rs_dt.getString("id"); + flag1 = ","; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a,eteams.dbo.department b WHERE a.DEPARTMENT =b.id and b.subcompanyid in("+comids+") and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax +" AND a.delete_type = 0 AND a.tenant_key = '"+tenantKey+"'"; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + + if(typeids.indexOf(",2,")>=0||typeids.indexOf(",2002,")>=0){//部门 + String seclevel = ""; + String seclevelmax = ""; + String deptid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(2,2002)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + deptid = Util.null2String(rs.getString("target_id")); + if("".equals(deptid)){ + continue; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a WHERE a.DEPARTMENT ='"+deptid+"' and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax +" AND delete_type = 0 AND tenant_key = '"+tenantKey+"'"; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + + if(typeids.indexOf(",3,")>=0 || typeids.indexOf(",3002,")>=0){//部门含下级 + String seclevel = ""; + String seclevelmax = ""; + String deptid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(3,3002)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + deptid = Util.null2String(rs.getString("target_id")); + if("".equals(deptid)){ + continue; + } + String deptids = ""; + String flag1 = ""; + sql_dt = "WITH allsub(id,name,parent) " + + "as ( " + + "SELECT id,name ,parent FROM eteams.dbo.department where id in("+deptid+") and type = 'department' AND virtualid = 1 and STATUS =1 AND delete_type = 0 AND tenant_key = '"+tenantKey+"' " + + " UNION ALL SELECT a.id,a.name,a.parent FROM eteams.dbo.department a,allsub b where a.parent = b.id and type = 'department' AND virtualid = 1 and STATUS =1 AND delete_type = 0 AND tenant_key = '"+tenantKey+"' " + + ") select id from allsub"; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + deptids = deptids + flag1 +rs_dt.getString("id"); + flag1 = ","; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a WHERE a.DEPARTMENT in("+deptids+") and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax +" AND delete_type = 0 AND tenant_key = '"+tenantKey+"'"; + log.error(sql_dt); + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + + if(typeids.indexOf(",1,")>=0){//人员 + String ryid = ""; + sql = "select target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(1)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + ryid = Util.null2String(rs.getString("target_id")); + if("".equals(ryid)){ + continue; + } + ryids.append(flag).append(ryid); + flag = ","; + + } + } + + if(typeids.indexOf(",10,")>=0){//角色 人员 + String seclevel = ""; + String seclevelmax = ""; + String roleid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(10)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + roleid = Util.null2String(rs.getString("target_id")); + if("".equals(roleid)){ + continue; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a where id in(SELECT user_id FROM eteams.dbo.auth_user_role WHERE role_id = "+roleid+" AND resource_type = 'RESOURCE' AND delete_type = 0 AND tenant_key = '"+tenantKey+"' ) and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + + if(typeids.indexOf(",1411,")>=0){//群组 + String seclevel = ""; + String seclevelmax = ""; + String groupid = ""; + sql = "select target_min_sec_level ,target_max_sec_level,target_id from e10_core_business.dbo.document_ph_doc_s01 where source_id="+wdid+" and delete_type=0 and tenant_key ='"+tenantKey+"' and target_type in(1411)"; + rs.executeSql(sql,CONN_TYPE.document.getType()); + while (rs.next()){ + seclevel = Util.null2String(rs.getString("target_min_sec_level")); + seclevelmax = Util.null2String(rs.getString("target_max_sec_level")); + groupid = Util.null2String(rs.getString("target_id")); + if("".equals(groupid)){ + continue; + } + sql_dt = "SELECT a.id FROM eteams.dbo.employee a where id in(SELECT employee FROM eteams.dbo.channel_user_link where channel="+groupid+" and delete_type=0) and PERSONNEL_STATUS <6 and sec_level>="+seclevel+" and sec_level<="+seclevelmax; + rs_dt.executeSql(sql_dt,poolname); + while (rs_dt.next()){ + ryids.append(flag).append(rs_dt.getString("id")); + flag = ","; + } + } + } + + + return ryids.toString(); + + } + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/SecondUtil.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/SecondUtil.java new file mode 100644 index 0000000..95371a2 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/SecondUtil.java @@ -0,0 +1,256 @@ +package com.weaver.seconddev.njwebservice.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.api.NacosFactory; +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.exception.NacosException; +import com.weaver.common.hrm.util.Util; +import com.weaver.common.i18n.tool.util.I18nContextUtil; +import com.weaver.seconddev.njwebservice.entity.DataOptions; +import com.weaver.seconddev.njwebservice.entity.FormDataDuty; +import com.weaver.verupgrade.conn.CONN_TYPE; +import com.weaver.verupgrade.conn.RecordSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + +/** + * @Author liang.cheng + * @Date 2025/1/7 11:20 AM + * @Description: 二开工具类 + * @Version 1.0 + */ +public class SecondUtil { + private final static Logger log = LoggerFactory.getLogger(SecondUtil.class); + + + + + public static String getNacosContent(String dataId,String group,String key) { + String configSingle = ""; + // 定义 Nacos 服务器地址和配置信息 + String serverAddr = "10.6.23.235:20000"; + + // 初始化 Nacos 配置服务 + Properties properties = new Properties(); + properties.put("serverAddr", serverAddr); + + try { + ConfigService configService = NacosFactory.createConfigService(properties); + String content = configService.getConfig(dataId, group, 5000); + log.error("Config content: " + content); + + // 解析 Properties 文件 + Properties prop = new Properties(); + prop.load(new java.io.ByteArrayInputStream(content.getBytes())); + configSingle = prop.getProperty(key); + } catch (NacosException | java.io.IOException e) { + log.error("Failed to get config: " + e.getMessage()); + } + return configSingle; + } + + public static String getWorkflowConfig(String loginName) { + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.ebuilder.getType(); + String pwd = ""; + String sql = "select pro from uf_submitconfig where zdmc = '"+loginName+"'"; + rs.executeSql(sql,poolname); + if (rs.next()){ + pwd = Util.null2String(rs.getString("pro")); + } + return pwd; + } + + public static String validationParam(String loginName,String password,String workflowId,String creator) { + //1.权限判断 (日志返回获取nacos文件权限不足 todo) +// String pwd = getNacosContent("weaver-secondev-wsaccount.properties", "DEFAULT_GROUP", loginName); +// log.error("配置文件获取值:"+pwd); +// if(pwd == null || !pwd.equals(password)){ +// return "权限不足..."; +// } 采用eb表单 + + String pwd = getWorkflowConfig(loginName); + log.info("validationParam pwd = " + pwd); + if("".equals(pwd) || !pwd.equals(password)){ + return "权限不足..."; + } + + //2.todo e10获取ip地址 log4fj记录 + log.error("调用主机ip地址日志记录"); + + //3.流程名 流程ID + if ("".equals(workflowId)) { + return "流程ID不能为空..."; + } + + //4.todo 流程id不存在时默认流程 e10不知道怎么查 + + //5.创建人 + if("".equals(creator)) { + return "创建人不能为空..."; + } + + return ""; + } + + + /** + * 获取明细表Id + * @param workflowId + * @return + */ + public static List getDetailFormId(String workflowId) { + log.error("getDetailFormId start : " + workflowId); + List formIdList = new ArrayList(); + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.workflow.getType(); + String sql = "select form_id from form_table where form_id in (select id from sub_form where form_id in (select relatekey from e10_core_business.dbo.wfp_relateform where workflowid = '"+workflowId+"'))"; + rs.executeSql(sql,poolname); + while (rs.next()){ + formIdList.add(Util.getLongValue(rs.getString("form_id"))); + } + + log.error("formIdList : " + formIdList); + return formIdList; + } + + + /** + * 表单字段构建 + * @return + */ + public static JSONObject getFromDataByDataDetails(List formDataDutyList) { + JSONObject formData = new JSONObject(); + formData.put("module","workflow"); + + JSONArray dataDetails = new JSONArray(); + formData.put("dataDetails", dataDetails); + +// JSONObject inputDataKey = new JSONObject(); +// inputDataKey.put("dataKey", "sqdh"); +// inputDataKey.put("content", "12345"); +// dataDetails.add(inputDataKey); +// +// //申请人 +// JSONObject sqr = new JSONObject(); +// dataDetails.add(sqr); +// JSONArray dataOptions = new JSONArray(); +// sqr.put("dataKey","sqr"); +// sqr.put("dataOptions",dataOptions); +// +// JSONObject option = new JSONObject(); +// option.put("optionId",100001700000063120L); +// dataOptions.add(option); +// +// +// //申请部门 +// +// JSONObject sqbm = new JSONObject(); +// dataDetails.add(sqbm); +// JSONArray dataOptions_sqbm = new JSONArray(); +// sqbm.put("dataKey","sqbm"); +// sqbm.put("dataOptions",dataOptions_sqbm); +// +// JSONObject option_sqbm = new JSONObject(); +// option_sqbm.put("optionId",100001590000004676L); +// dataOptions_sqbm.add(option_sqbm); +// +// JSONObject aa1 = new JSONObject(); +// dataDetails.add(aa1); +// aa1.put("dataKey","wlbh"); +// aa1.put("dataIndex",1L); +// aa1.put("content","1"); +// aa1.put("subFormId","100003690000001814"); +// +// JSONObject cc1 = new JSONObject(); +// dataDetails.add(cc1); +// JSONArray ccOption = new JSONArray(); +// cc1.put("dataKey","cs"); +// cc1.put("dataIndex",1L); +// cc1.put("subFormId","100003690000001814"); +// cc1.put("dataOptions",ccOption); +// JSONObject option_cc = new JSONObject(); +// option_cc.put("optionId",100001700000063120L); +// ccOption.add(option_cc); +// +// JSONObject bb1 = new JSONObject(); +// dataDetails.add(bb1); +// bb1.put("dataKey","jey"); +// bb1.put("dataIndex",1L); +// bb1.put("content","55.42"); +// bb1.put("subFormId","100003690000001814"); + + + + + // + formDataDutyList.forEach(formDataDuty -> { + if (formDataDuty.getSubFormId() != null) { + //明细表 + if (formDataDuty.getDataOptions() == null) { + //普通字段 + JSONObject inputDataKey = new JSONObject(); + inputDataKey.put("dataKey", formDataDuty.getDataKey()); + inputDataKey.put("dataIndex", formDataDuty.getDataIndex()); + inputDataKey.put("content", formDataDuty.getContent()); + inputDataKey.put("subFormId", formDataDuty.getSubFormId()); + dataDetails.add(inputDataKey); + }else { + JSONObject details = new JSONObject(); + dataDetails.add(details); + + JSONArray dataOptions = new JSONArray(); + details.put("dataKey", formDataDuty.getDataKey()); + details.put("dataIndex", formDataDuty.getDataIndex()); + details.put("subFormId", formDataDuty.getSubFormId()); + + details.put("dataOptions", dataOptions); + List dataOptions1 = formDataDuty.getDataOptions(); + dataOptions1.forEach(e -> { + JSONObject option = new JSONObject(); + option.put("optionId", e.getOptionId()); + dataOptions.add(option); + }); + } + + }else { + //主表 + if (formDataDuty.getDataOptions() == null) { + //普通字段 + JSONObject inputDataKey = new JSONObject(); + inputDataKey.put("dataKey", formDataDuty.getDataKey()); + inputDataKey.put("content", formDataDuty.getContent()); + dataDetails.add(inputDataKey); + }else { + //浏览按钮字段 + // 浏览按钮 + JSONObject details = new JSONObject(); + dataDetails.add(details); + + JSONArray dataOptions = new JSONArray(); + details.put("dataKey", formDataDuty.getDataKey()); + details.put("dataOptions", dataOptions); + + List dataOptions1 = formDataDuty.getDataOptions(); + dataOptions1.forEach(e -> { + JSONObject option = new JSONObject(); + option.put("optionId", e.getOptionId()); + //fieldType 3为附件 + if (formDataDuty.getFieldType() == 3) { + option.put("content", e.getContent()); + } + dataOptions.add(option); + }); + + } + } + }); + + return formData; + } + + +} diff --git a/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/WfUtil.java b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/WfUtil.java new file mode 100644 index 0000000..6dd7747 --- /dev/null +++ b/secondev-ht-njwebservice/src/main/java/com/weaver/seconddev/njwebservice/util/WfUtil.java @@ -0,0 +1,158 @@ +package com.weaver.seconddev.njwebservice.util; + +import com.weaver.common.hrm.util.Util; +import com.weaver.common.i18n.tool.util.I18nContextUtil; +import com.weaver.verupgrade.conn.CONN_TYPE; +import com.weaver.verupgrade.conn.RecordSet; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +/** + * ClassName WfUtil + * Author + * Date 2025/1/2 8:56 + * Description WfUtil + * Version 1.0 + */ +public class WfUtil { + private final Logger log = LoggerFactory.getLogger(WfUtil.class); + + /** + * + * @param jtzhTenantKey 集团租户TenantKey + * @param workcode 流程创建人工号 + * @param wfid 流程id + * @return + */ + public Map getZhWfMap(String jtzhTenantKey,String workcode,String wfid){ + log.error("getZhWfMap start : " + wfid ); + String currentWfid = wfid;//触发过来的wfid + String validWfif = "";//有效wfid + if(currentWfid.length()<=8){ + currentWfid = getStrNum(currentWfid,8); + } + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.ebuilder.getType(); + rs.setTenantKey(jtzhTenantKey); + //从集团租户 根据传入的wfid获取有效的wfid + validWfif = getValidWfid(jtzhTenantKey,currentWfid); + log.error("getZhWfMap validWfif : " + validWfif ); + if("".equals(validWfif)){//如果为空就是其他租户的新流程 + validWfif = currentWfid; + } + //根据传入的wfid和获取到的当前有效的wfid 从配置表获取对应租户和对应wfid + String sszh = "";//所属租户 + String jtwfid = "";//集团wfid + String gdwfid = "";//光电wfid + String hhwfid = "";//华海wfid + String workflowid = ""; + String sql = "select sszh,jtwfid,gdwfid,hhwfid from e10_common.dbo.uf_zhwfid_mt where (cfwfid like '%"+currentWfid+"' or cfwfid like '%"+validWfif+"') and delete_type ='0'"; + rs.executeSql(sql,poolname); + if(rs.next()){ + sszh = Util.null2String(rs.getString("sszh")); + jtwfid = Util.null2String(rs.getString("jtwfid")); + gdwfid = Util.null2String(rs.getString("gdwfid")); + hhwfid = Util.null2String(rs.getString("hhwfid")); + } + + log.error("getZhWfMap sszh : " + sszh ); + String tenantKey = ""; + if("3".equals(sszh)){//全租户 判断创建人是哪个租户的 取对应租户的 wfid; + String zhbs = getZhbs(workcode,jtzhTenantKey); + sszh = getZhbsInfo(zhbs,jtzhTenantKey); + } + if("0".equals(sszh)){//集团 + workflowid =jtwfid; + tenantKey = getZhTenantKey(sszh,jtzhTenantKey); + }else if("1".equals(sszh)){//光电 + workflowid =gdwfid; + tenantKey = getZhTenantKey(sszh,jtzhTenantKey); + }else if("2".equals(sszh)){//华海租户 + workflowid = hhwfid; + tenantKey = getZhTenantKey(sszh,jtzhTenantKey); + } + log.error("getZhWfMap workflowid : " + workflowid ); + if("".equals(workflowid)){ + workflowid = validWfif; + tenantKey = jtzhTenantKey; + } + validWfif = getValidWfid(tenantKey,workflowid); + + Map map = new HashMap<>(); + map.put("workflowid",validWfif); + map.put("tenantKey",tenantKey); + log.error("map : " + map ); + return map; + } + + public String getZhbs(String workcode,String jtzhTenantKey){ + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.hrm.getType(); + rs.setTenantKey(jtzhTenantKey); + String field3 = ""; + String sql = "select isnull(field3,'') as field3 from eteams.dbo.employee a,eteams.dbo.hrmemployeedefined b where a.formdata =b.FORM_DATA_ID and a.job_num = '"+workcode+"' AND a.delete_type = 0 AND a.tenant_key = '"+jtzhTenantKey+"' AND b.delete_type = 0 AND b.tenant_key = '"+jtzhTenantKey+"'"; + rs.executeSql(sql,poolname); + if(rs.next()){ + field3 = Util.null2String(rs.getString("field3")); + } + if("".equals(field3)||"mgl".equals(field3)){ + field3="HTJT"; + } + return field3; + } + + public String getZhbsInfo(String zhbs,String jtzhTenantKey){ + String sszh = ""; + Map map = new HashMap<>(); + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.ebuilder.getType(); + rs.setTenantKey(jtzhTenantKey); + String sql = "select zzkey,sszh from e10_common.dbo.uf_tenant_mt where zhbs='"+zhbs+"' and delete_type ='0'"; + rs.executeSql(sql,poolname); + if(rs.next()){ + sszh = Util.null2String(rs.getString("sszh")); + } + return sszh; + } + + public String getZhTenantKey(String sszh,String jtzhTenantKey){ + String zzkey = ""; + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + String poolname = CONN_TYPE.ebuilder.getType(); + rs.setTenantKey(jtzhTenantKey); + String sql = "select zzkey from e10_common.dbo.uf_tenant_mt where sszh='"+sszh+"' and delete_type ='0'"; + rs.executeSql(sql,poolname); + if(rs.next()){ + zzkey = Util.null2String(rs.getString("zzkey")); + } + return zzkey; + } + + + public String getValidWfid(String tenantKey,String wfid){ + String workflowid = ""; + RecordSet rs = I18nContextUtil.getBean(RecordSet.class); + rs.setTenantKey(tenantKey); + String sql = "SELECT CASE WHEN status = 1 THEN id ELSE activewfid END AS workflowid FROM e10_core_business.dbo.wfp_base WHERE id like '%"+wfid+"' AND delete_type = 0 AND tenant_key = '"+tenantKey+"'"; + // log.error("oaflowid:"+sql); + rs.executeSql(sql,CONN_TYPE.workflow.getType()); + if(rs.next()){ + workflowid = Util.null2String(rs.getString("workflowid")); + } + return workflowid; + + } + + + public String getStrNum(String num,int len){ + String buff = num; + int max = len - buff.length(); + for(int index = 0; index < max;index++){ + buff = "0" + buff; + } + return buff; + } +}