You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tjBANK/com/customization/cmd/MsgPush_GetMsgBeansCmdProxy...

324 lines
14 KiB
Java

package com.customization.cmd;
import com.alibaba.fastjson.JSON;
import com.cloudstore.dev.api.bean.MessageBean;
import com.engine.core.cfg.annotation.CommandDynamicProxy;
import com.engine.core.interceptor.AbstractCommandProxy;
import com.engine.core.interceptor.Command;
import com.engine.workflow.cmd.requestForm.MsgPush_GetMsgBeansCmd;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.StringUtil;
import weaver.general.Util;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@CommandDynamicProxy(target = MsgPush_GetMsgBeansCmd.class, desc = "流程数据推送消息cmd")
public class MsgPush_GetMsgBeansCmdProxyTitle extends AbstractCommandProxy<List<MessageBean>> {
//匹配${text}的占位符
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("\\$\\{([^}]+)\\}");
private static final String getTitleAndFormsql = "select id,WFFORMNAME,TITLE from uf_gwtsth where WFID in( select id from workflow_base where activeversionid =( select activeversionid from workflow_base where id = ?))";
private static final String getdtFieldtype = "select FIELDNAME,TYPE from uf_gwtsth_dt1 where MAINID = ?";
BaseBean bean = new BaseBean();
@Override
public List<MessageBean> execute(Command<List<MessageBean>> command) {
BaseBean bb = new BaseBean();
MsgPush_GetMsgBeansCmd cmd = (MsgPush_GetMsgBeansCmd) command;
//获取MessageBeans
List<MessageBean> list = cmd.getMessageBeans();
if (!isOpen()) {
return list;
}
//业务对象 流程id
String targetId = "";
RecordSet rs = new RecordSet();
List<MessageBean> messageBeans = new ArrayList<>();
try {
for (int i = 0; i < list.size(); i++) {
String requestname = "";
String requestlevel = "";
Integer wfid = 0;
MessageBean messageBean = list.get(i);
targetId = messageBean.getTargetId();
if (targetId.indexOf("|") > 0) {
continue;
}
if (targetId.indexOf("_") > 0) {
// targetId = targetId.split("_")[0];
continue;
}
rs.execute("select requestlevel , workflowid ,requestname from workflow_requestbase where requestid = " + targetId);
if (rs.next()) {
requestname = rs.getString("requestname");
wfid = Util.getIntValue(rs.getString("workflowid"));
requestlevel = rs.getString("requestlevel");
}
bean.writeLog("流程wfid==="+wfid);
if (!isUpdateTitle(wfid)) {
//流程类型 3 是特急 2 是重要
if("3".equals(requestlevel)||"2".equals(requestlevel)){
messageBeans.add(messageBean);
}
continue;
}
rs.executeQuery(getTitleAndFormsql, wfid);
String formTable = "";
String title = "";
String mainid = "";
if (rs.next()) {
formTable = Util.null2String(rs.getString("WFFORMNAME"));
title = Util.null2String(rs.getString("TITLE"));
mainid = Util.null2String(rs.getString("id"));
}
Map<String, String> updateField = getUpdateField(mainid);
String newTitle = "";
if (updateField.size() > 0) {
Map<String, String> fieldValue = getFieldValue(formTable, targetId, updateField);
newTitle = replacePlaceholders(title, fieldValue);
} else {
newTitle = title;
}
messageBean.setTitle(newTitle);
messageBean.setBizTitle(null);
messageBean.setBizType(null);
//流程类型 3 是特急 2 是重要
if("3".equals(requestlevel)||"2".equals(requestlevel)){
messageBeans.add(messageBean);
}
}
} catch (Exception e) {
bb.writeLog("异常信息" + e.getMessage());
e.printStackTrace();
return list;
}
bb.writeLog("新组建的messageBeans" + list);
return list;
}
// 获取字段类型
private Map<String, String> getUpdateField(String id) {
HashMap<String, String> idTypeMap = new HashMap<>();
RecordSet recordSet = new RecordSet();
recordSet.executeQuery(getdtFieldtype, id);
while (recordSet.next()) {
String field = Util.null2String(recordSet.getString("FIELDNAME"));
String type = Util.null2String(recordSet.getString("TYPE"));
idTypeMap.put(field, type);
}
return idTypeMap;
}
//根据建模表查询是否需要更新标题
private boolean isUpdateTitle(int wfid) {
String sql = "select count(1) cnt from uf_gwtsth where wfid in( select id from workflow_base where activeversionid =( select activeversionid from workflow_base where id = ?))";
RecordSet rs = new RecordSet();
rs.executeQuery(sql, wfid);
int cnt = 0;
if (rs.next()) {
cnt = Util.getIntValue(rs.getString("cnt"), 0);
}
bean.writeLog("是否推送==="+cnt);
return cnt > 0;
}
//配置文件是否开启
private boolean isOpen() {
String isopen = new BaseBean().getPropValue("updateMsgTitle", "isopen");
return "1".equals(isopen);
// return true;
}
//替换占位符
public static String replacePlaceholders(String inputText, Map<String, String> placeholderValues) {
Matcher matcher = PLACEHOLDER_PATTERN.matcher(inputText);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
String placeholder = matcher.group(1);
String replacement = placeholderValues.get(placeholder);
if (replacement != null) {
matcher.appendReplacement(result, replacement);
}
}
matcher.appendTail(result);
return result.toString();
}
// 获取字段对应的值
private Map<String, String> getFieldValue(String formName, String requestid, Map<String, String> fieldTypeMap) {
HashMap<String, String> FieldValue = new HashMap<>();
if (fieldTypeMap.size() == 0) {
return FieldValue;
}
String sql = "select " + String.join(", ", fieldTypeMap.keySet()) + " from " + formName + " where REQUESTID = ?";
RecordSet recordSet = new RecordSet();
RecordSet rs = new RecordSet();
recordSet.executeQuery(sql, requestid);
recordSet.next();
fieldTypeMap.forEach((key, value) -> {
//库里存的值
String fieldValue = Util.null2String(recordSet.getString(key));
//数据值 (防止在循环里创建recordSet对象,使用同一个recordSet对象)
String FieldrealValue = getFieldRealValue(fieldValue, value, rs, formName, key);
FieldValue.put(key, FieldrealValue);
});
return FieldValue;
}
private String getFieldRealValue(String fieldValue, String type, RecordSet rs, String formName, String fieldname) {
//为空或者类型等于0(文本)直接返回字段值
if (StringUtil.isEmpty(fieldValue) || StringUtil.isEmpty(type) || "0".equals(type)) {
return fieldValue;
}
String sql = "";
Boolean isMultiple = fieldValue.contains(",");
if ("1".equals(type)) { //人力资源
sql = "select lastName from HRMRESOURCE where id ";
if (!isMultiple) {
sql = sql + "= ?";
rs.executeQuery(sql, fieldValue);
if (rs.next()) {
return Util.null2String(rs.getString("lastName"));
}
} else {
sql = sql + "in ( " + fieldValue + " )";
ArrayList<String> fieldValues = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
fieldValues.add(Util.null2String(rs.getString("lastName")));
}
return String.join(",", fieldValues);
}
} else if ("2".equals(type)) { //部门
sql = "select DEPARTMENTNAME from HRMDEPARTMENT where id";
if (!isMultiple) {
sql = sql + "= ?";
rs.executeQuery(sql, fieldValue);
if (rs.next()) {
return Util.null2String(rs.getString("DEPARTMENTNAME"));
}
} else {
sql = sql + "in ( " + fieldValue + " )";
ArrayList<String> fieldValues = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
fieldValues.add(Util.null2String(rs.getString("DEPARTMENTNAME")));
}
return String.join(",", fieldValues);
}
} else if ("3".equals(type)) { //分部
sql = "select SUBCOMPANYNAME from HRMSUBCOMPANY where id";
if (!isMultiple) {
sql = sql + "= ?";
rs.executeQuery(sql, fieldValue);
if (rs.next()) {
return Util.null2String(rs.getString("SUBCOMPANYNAME"));
}
} else {
sql = sql + "in ( " + fieldValue + " )";
ArrayList<String> fieldValues = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
fieldValues.add(Util.null2String(rs.getString("SUBCOMPANYNAME")));
}
return String.join(",", fieldValues);
}
} else if ("4".equals(type)) { //选择框
String fid = "";
sql = "select field.id fid from workflow_bill bill " +
"left join workflow_billfield field on bill.ID = field.BILLID " +
"where TABLENAME = ? and FIELDNAME = ? ";
rs.executeQuery(sql, formName, fieldname);
bean.writeLog("选择框sql" + sql + formName + fieldname);
if (rs.next()) {
fid = Util.null2String(rs.getString("fid"));
}
bean.writeLog("fid===" + fid);
sql = " select * from workflow_SelectItem where FIELDID = ? and SELECTVALUE ";
if (!isMultiple) {
sql = sql + "= ?";
rs.executeQuery(sql, fid, fieldValue);
bean.writeLog("选项sql===" + sql + fid + fieldValue);
if (rs.next()) {
return Util.null2String(rs.getString("SELECTNAME"));
}
} else {
sql = sql + "in ( " + fieldValue + " )";
ArrayList<String> fieldValues = new ArrayList<>();
rs.executeQuery(sql, fid);
while (rs.next()) {
fieldValues.add(Util.null2String(rs.getString("SELECTNAME")));
}
return String.join(",", fieldValues);
}
} else if ("5".equals(type)) { //自定义
String fid = "";
String ftype = "";
sql = "select field.id fid , FIELDDBTYPE ftype from workflow_bill bill " +
"left join workflow_billfield field on bill.ID = field.BILLID " +
"where TABLENAME = ? and FIELDNAME = ? ";
rs.executeQuery(sql, formName, fieldname);
bean.writeLog("选择框sql" + sql + formName + fieldname);
if (rs.next()) {
fid = Util.null2String(rs.getString("fid"));
ftype = Util.null2String(rs.getString("ftype"));
}
String[] browArr = ftype.split("\\.");
if (browArr.length != 2){
return "";
}
String brower = browArr[1];
sql = "select a.SHOWNAME ,a.SQLTEXT ,c.FIELDNAME from mode_browser a " +
" left join mode_custombrowserdspfield b on a.CUSTOMID = b.CUSTOMID " +
" left join workflow_billfield c on b.FIELDID = c.ID " +
" where b.ISTITLE > 0 and SHOWNAME = ? ";
rs.executeQuery(sql, brower);
bean.writeLog("选择框sql" + sql + "======"+brower);
String showName = "";
String sqltext = "";
String linkName = "";
if (rs.next()) {
showName = Util.null2String(rs.getString("SHOWNAME"));
sqltext = Util.null2String(rs.getString("SQLTEXT"));
linkName = Util.null2String(rs.getString("FIELDNAME"));
}
if (!isMultiple) {
sqltext = sqltext + " where id = ?";
rs.executeQuery(sqltext, fieldValue);
bean.writeLog("选项sql===" + sqltext + fid + fieldValue);
if (rs.next()) {
return Util.null2String(rs.getString(linkName));
}
} else {
sqltext = sqltext + " where id in ( " + fieldValue + " )";
ArrayList<String> fieldValues = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
fieldValues.add(Util.null2String(rs.getString(linkName)));
}
return String.join(",", fieldValues);
}
}
return null;
}
}