当前位置: 首页 > news >正文

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引,在测试环境配置之后、要触发的流程可以手工提交,但是触发一直不成功。简单记录下业务场景和其他处理信息,以供参考。

应用版本

目前使用了泛微 E8 (8.100.0531)的版本。2018年上线的老系统了。

业务场景

目前使用的泛微 OA 启用了“会议”应用。我们需要定时抓取会议状态为“退回”和“取消”的会议、并将每一条记录自动转化为一个流程发送出去。我们选取了会议应用的 Meeting 表(会议管理表详细信息),并选择 “meetingstatus” 字段作为会议状态的来源。通过文档得知:当会议状态为“退回”,字段取值 3 ;当会议状态为“取消”,字段取值 4 。

 设置的自定义表单 / 流程如下图所示, 目前手工提交 / 流转均正常操作:

处理步骤

首先配置了回写部分,但是不成功。根据 2012 - 2016 年的资料,文档是这么记录的。

1:该流程自动触发时,将根据外部主表条件搜索外部主表,有多少条记录即触发多少条流程;
流程主字段的值来源于外部主表,而每条流程的各明细值将分别根据明细表条件搜索明细表
得到的结果进行赋值;主表中必须包含主键(默认为id)
2:条件以“where”开头,如:“where fieldname1=1 and fieldname2='value2'”;
回写设置以“set”开头,如:“set flag=1,isok=true”,FtriggerFlag和requestid字段
自动更新,不能在此设置;
3:流程触发时如果需要回写外部主表,需要设置是否回写、流程ID字段、标志字段、标志字段
需要回写的值(字符型),回写数据时,默认标志字段=1:表示已触发,
流程ID字段=0:表示流程创建人对应的外部字段值为空,
流程ID字段=-1:表示外部字段保存的人员信息在oa中不存在,流程ID
4:外部明细表数据如需与主表数据关联,可将外部明细表条件设置为
“where '明细表.字段'='主表.字段'”。

非常 ... 语焉不详。我怀疑当年这个屌茅甚至喝大了。:)

配置数次无果之后,泛微的工程师提醒我找下日志。根据操作日期,我分别在服务器下载了泛微应用目录下的   ecology/log/integration/integration.log ecology/log/ecologyResin/log/stderr.logResin/log/stdout.log 这几个文件。

打开 integration.log 文件。发现触发的过程报错、 提示 CREATER 在外部表不存在。

2023-08-18 00:00:14,812 INFO  [Thread:AutoWorlflowThread] weaver.general.AutoWorlflowThread.saveTrigLog() - saveTrigLog 记录日志 sql : update outerdatawfdetail set requestid=-1 where mainid=11 and workflowid=466 and outermaintable = 'Meeting' and keyfieldvalue='141'
2023-08-18 00:00:14,827 INFO  [Thread:AutoWorlflowThread] weaver.general.AutoWorlflowThread.doActiveOutDataWF() - 检查是否已触发 : select 1 from outerdatawfdetail where workflowid=466 and mainid=11 and keyfieldvalue='142' and outermaintable = 'Meeting' and requestid>0
2023-08-18 00:00:14,827 INFO  [Thread:AutoWorlflowThread] weaver.general.AutoWorlflowThread.doActiveOutDataWF() - ===================SQL:select * from outerdatawfsetdetail where (wffieldid=-1 or wffieldid=-2) and mainid=11 order by wffieldid
2023-08-18 00:00:14,827 ERROR [Thread:AutoWorlflowThread] weaver.general.AutoWorlflowThread.doActiveOutDataWF() - THE CREATER IN THE OUTER TABLE IS NOT EXIST!

于是找到应用的源代码。

package weaver.general;import java.io.Writer;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import oracle.sql.CLOB;
import weaver.conn.ConnStatement;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetDataSource;
import weaver.hrm.resource.ResourceComInfo;
import weaver.integration.logging.Logger;
import weaver.integration.logging.LoggerFactory;
import weaver.system.SysCreateWF;
import weaver.system.SysUpdateWF;
import weaver.system.ThreadWork;
import weaver.workflow.automatic.automaticconnect;
import weaver.workflow.dmlaction.DBTypeUtil;
import weaver.workflow.request.RequestManager;
import weaver.workflow.workflow.WorkflowComInfo;
import weaver.workflow.workflow.WorkflowVersion;public class AutoWorlflowThread extends BaseBean implements ThreadWork {private Logger newlog = LoggerFactory.getLogger(AutoWorlflowThread.class);public void doThreadWork() {Thread.currentThread().setUncaughtExceptionHandler(new AutoWorkFlowThreadExceptionHandler());doActiveOutDataWF();}public void doActiveOutDataWF() {automaticconnect automaticconnect = new automaticconnect();Connection connection = null;String str = "";try {WorkflowComInfo workflowComInfo = new WorkflowComInfo();ResourceComInfo resourceComInfo = new ResourceComInfo();SysCreateWF sysCreateWF = new SysCreateWF();RecordSet recordSet1 = new RecordSet();RecordSet recordSet2 = new RecordSet();ArrayList<String> arrayList1 = new ArrayList();ArrayList<String> arrayList2 = new ArrayList();ArrayList<String> arrayList3 = new ArrayList();ArrayList<String> arrayList4 = new ArrayList();ArrayList<String> arrayList5 = new ArrayList();ArrayList<String> arrayList6 = new ArrayList();ArrayList<String> arrayList7 = new ArrayList();ArrayList<String> arrayList8 = new ArrayList();ArrayList<String> arrayList9 = new ArrayList();ArrayList<String> arrayList10 = new ArrayList();ArrayList<String> arrayList11 = new ArrayList();ArrayList<String> arrayList12 = new ArrayList();ArrayList<String> arrayList13 = new ArrayList();ArrayList<String> arrayList14 = new ArrayList();ArrayList<String> arrayList15 = new ArrayList();ArrayList<String> arrayList16 = new ArrayList();ArrayList<String> arrayList17 = new ArrayList();WorkflowVersion workflowVersion = new WorkflowVersion();recordSet1.executeSql("select * from outerdatawfset");while (recordSet1.next()) {String str1 = Util.null2String(recordSet1.getString("id"));String str2 = Util.null2String(recordSet1.getString("workflowid"));String str3 = Util.null2String(recordSet1.getString("datasourceid"));String str4 = Util.null2String(recordSet1.getString("outermaintable"));String str5 = Util.null2String(recordSet1.getString("keyfield"));String str6 = Util.null2String(recordSet1.getString("datarecordtype"));String str7 = Util.null2String(recordSet1.getString("requestid"));String str8 = Util.null2String(recordSet1.getString("FTriggerFlag"));String str9 = Util.null2String(recordSet1.getString("FTriggerFlagValue"));String str10 = Util.null2String(recordSet1.getString("outermainwhere"));String str11 = Util.null2String(recordSet1.getString("successback"));String str12 = Util.null2String(recordSet1.getString("failback"));String str13 = Util.null2String(recordSet1.getString("outerdetailtables"));String str14 = Util.null2String(recordSet1.getString("outerdetailwheres"));String str15 = Util.null2String(recordSet1.getString("isnextnode"));String str16 = Util.null2String(recordSet1.getString("isupdatewfdata"));String str17 = Util.null2String(recordSet1.getString("isupdatewfdataField"));arrayList1.add(str1);arrayList2.add(str2);arrayList3.add(str3);arrayList4.add(str4);arrayList15.add(str15);arrayList16.add(str16);arrayList17.add(str17);arrayList5.add(str5);arrayList6.add(str6);arrayList7.add(str7);arrayList8.add(str8);arrayList9.add(str9);arrayList10.add(str10);arrayList11.add(str11);arrayList12.add(str12);arrayList13.add(str13);arrayList14.add(str14);} RecordSet recordSet3 = new RecordSet();for (byte b = 0; b < arrayList1.size(); b++) {try {String str1 = arrayList1.get(b);recordSet3.executeSql("select mainid from outerdatawfsetdetail where mainid=" + str1);if (!recordSet3.next()) {this.newlog.error("+ str1 + ");} else {String str2 = arrayList2.get(b);String str3 = WorkflowVersion.getActiveVersionWFID(str2);String str4 = arrayList3.get(b);if (!str4.equals("")) {connection = automaticconnect.getConnection("datasource." + str4);if (connection != null && !connection.isClosed()) {str = automaticconnect.getDBType();Statement statement1 = connection.createStatement();Statement statement2 = connection.createStatement();ResultSet resultSet = null;String str5 = arrayList4.get(b);String str6 = arrayList5.get(b);String str7 = arrayList6.get(b);String str8 = arrayList7.get(b);String str9 = arrayList8.get(b);String str10 = arrayList9.get(b);String str11 = arrayList15.get(b);String str12 = arrayList16.get(b);String str13 = arrayList17.get(b);if ("".equals(str10))str10 = "1"; String str14 = arrayList10.get(b);String str15 = arrayList11.get(b);String str16 = arrayList12.get(b);String str17 = arrayList13.get(b);String str18 = arrayList14.get(b);RecordSetDataSource recordSetDataSource = new RecordSetDataSource();Map map = new HashMap<Object, Object>();if (!str4.equals(""))map = recordSetDataSource.getAllColumnWithTypes(str4, str5); String str19 = "";if (str.toLowerCase().indexOf("oracle") > -1) {str19 = "select 1 from user_tables a where a.TABLE_NAME = upper('" + str5 + "') union ALL select 1 from user_views b where  b.VIEW_NAME = upper('" + str5 + "')";} else if (str.toLowerCase().indexOf("sqlserver") > -1 || str.toLowerCase().indexOf("sybase") > -1) {str19 = "select 1 from sysobjects where name = '" + str5 + "' ";} else if (str.toLowerCase().indexOf("informix") > -1) {str19 = "select 1 from systables where lower(tabname) = lower('" + str5 + "') ";} else if (str.toLowerCase().indexOf("mysql") > -1) {str19 = "select 1 from information_schema.Tables where LOWER(Table_Name)=LOWER('" + str5 + "') ";} else if (str.toLowerCase().indexOf("db2") > -1) {str19 = "select 1 from SYSIBM.SYSTABLES where lower(name)= lower('" + str5 + "') ";} else {str19 = "select 1 from " + str5;} resultSet = statement1.executeQuery(str19);if (!resultSet.next()) {this.newlog.error("TABLE " + str5 + " IS NOT EXIST!");} else {ArrayList<String> arrayList = new ArrayList();Hashtable<Object, Object> hashtable1 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable2 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable3 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable4 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable5 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable6 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable7 = new Hashtable<Object, Object>();String str20 = "";int i = Util.getIntValue(Util.null2String(workflowComInfo.getIsBill(str2)), -1);String str21 = Util.null2String(workflowComInfo.getFormId(str2));if (i == 0) {str20 = "select workflow_formfield.fieldid as id,fieldname as name,workflow_fieldlable.fieldlable as label,workflow_formdict.fieldhtmltype as htmltype,workflow_formdict.type as type,workflow_formdict.fielddbtype from workflow_formfield,workflow_formdict,workflow_fieldlable where workflow_fieldlable.formid = workflow_formfield.formid and workflow_fieldlable.isdefault = 1 and workflow_fieldlable.fieldid =workflow_formfield.fieldid and workflow_formdict.id = workflow_formfield.fieldid and workflow_formfield.formid=" + str21;} else if (i == 1) {str20 = "select id as id,fieldname as name,fieldlabel as label,fieldhtmltype as htmltype,type as type,fielddbtype from workflow_billfield where viewtype=0 and billid = " + str21 + " order by dsporder ";} recordSet1.executeSql(str20);while (recordSet1.next()) {String str23 = recordSet1.getString("id");String str24 = recordSet1.getString("name");String str25 = recordSet1.getString("htmltype");String str26 = recordSet1.getString("type");String str27 = recordSet1.getString("fielddbtype");String str28 = "";String str29 = "";String str30 = "";recordSet2.executeSql("select outerfieldname,changetype,customsql from outerdatawfsetdetail where wffieldid=" + str23 + " and mainid=" + str1);if (recordSet2.next()) {str28 = recordSet2.getString("outerfieldname");str29 = recordSet2.getString("changetype");str30 = recordSet2.getString("customsql");} arrayList.add(str23);hashtable1.put(str23, str24);hashtable2.put(str23, str25);hashtable3.put(str23, str26);hashtable4.put(str23, str27);hashtable5.put(str23, str28);hashtable6.put(str23, str29);hashtable7.put(str23, str30);} if (str14.equals(""))str14 = " where 1=1  "; if ("2".equals(str7) || "".equals(str7)) {str14 = str14 + " and ((1=1 ";if (str.toLowerCase().indexOf("oracle") > -1) {if (!"".equals(str8))str14 = str14 + " and nvl(" + str8 + ",'0')='0' "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and nvl(" + str9 + ",'0')!='" + str10 + "' "; } else if (str.toLowerCase().indexOf("sqlserver") > -1 || str.toLowerCase().indexOf("sybase") > -1) {if (!"".equals(str8))str14 = str14 + " and isnull(" + str8 + ",'0')='0' "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and isnull(" + str9 + ",'0')!='" + str10 + "' "; } else if (str.toLowerCase().indexOf("informix") > -1) {if (!"".equals(str8))str14 = str14 + " and " + str8 + " is null "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and " + str9 + "!='" + str10 + "' "; } else if (str.toLowerCase().indexOf("mysql") > -1) {if (!"".equals(str8))str14 = str14 + " and IFNULL(" + str8 + ",'0')='0' "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and IFNULL(" + str9 + ",'0')!='" + str10 + "' "; } else if (str.toLowerCase().indexOf("db2") > -1) {if (!"".equals(str8))str14 = str14 + " and coalesce(" + str8 + ",'0')='0' "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and coalesce(" + str9 + ",'0')!='" + str10 + "' "; } else {if (!"".equals(str8))str14 = str14 + " and " + str8 + " is null "; if (!"".equals(str9) && !"".equals(str10))str14 = str14 + " and " + str9 + "!='" + str10 + "' "; } str14 = str14 + " ) ";if (str12.equals("2") && !str13.equals(""))str14 = str14 + " or " + str13 + "='1' "; str14 = str14 + " ) ";} this.newlog.info("select * from " + str5 + " " + str14);ResultSet resultSet1 = statement1.executeQuery("select * from " + str5 + " " + str14);String str22 = "";while (resultSet1.next()) {try {if ("2".equals(str7) || "".equals(str7)) {if (str6.equals(""))str6 = "id"; if (str9.equals(""))str9 = "FTriggerFlag"; if (str8.equals(""))str8 = "requestid"; } String str23 = resultSet1.getString(str6).replace("'", "''");boolean bool1 = false;if (str12.equals("2") && !str13.equals("")) {String str27 = Util.null2String(resultSet1.getString(str13));if (str27.equals("1"))bool1 = true; } if (bool1)this.newlog.info("." + str13 + "=" + Util.null2String(resultSet1.getString(str13))); boolean bool2 = false;str22 = "select 1 from outerdatawfdetail where workflowid=" + str2 + " and mainid=" + str1 + " and keyfieldvalue='" + str23 + "' and outermaintable = '" + str5 + "' and requestid>0";this.newlog.info(": " + str22);recordSet1.executeSql(str22);if (recordSet1.next()) {this.newlog.info("keyid : " + str23 + " );bool2 = true;} if (!bool1 && bool2)continue; String str24 = "";String str25 = "";ArrayList<Integer> arrayList18 = new ArrayList();boolean bool3 = false;recordSet1.executeSql("select * from outerdatawfsetdetail where (wffieldid=-1 or wffieldid=-2) and mainid=" + str1 + " order by wffieldid");this.newlog.info("===================SQL:select * from outerdatawfsetdetail where (wffieldid=-1 or wffieldid=-2) and mainid=" + str1 + " order by wffieldid");while (recordSet1.next()) {String str27 = Util.null2String(recordSet1.getString("wffieldid"));if (str27.equals("-2")) {String str28 = Util.null2String(recordSet1.getString("outerfieldname"));String str29 = Util.null2String(recordSet1.getString("changetype"));String str30 = Util.null2String(recordSet1.getString("customsql"));if (str29.equals("5")) {str25 = Util.null2String(getCreater(str28, "5"));if (str25.equals("")) {this.newlog.error("THE CREATER IN THE OUTER TABLE IS NOT EXIST!");if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "-1"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "-1", str1, str23, str5);bool3 = true;break;} continue;} if (str29.equals("6")) {if (str28.indexOf(".") > -1)str28 = str28.substring(str28.indexOf(".") + 1); String str32 = Util.null2String(resultSet1.getString(str28));if (!"".equals(str30)) {str30 = str30 + " and status<4  and (loginid !='' Or  loginid is not  null) ";str25 = getTranSqlValue(str30, str32);} else {str25 = str32;} if (str25.equals("")) {this.newlog.error("THE CREATER IN THE OUTER TABLE IS NOT EXIST!");if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "-1"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "-1", str1, str23, str5);bool3 = true;break;} continue;} if (str28.equals("")) {this.newlog.error(");str25 = "1";continue;} str28 = str28.substring(str28.indexOf(".") + 1);String str31 = Util.null2String(resultSet1.getString(str28));if (str31.equals("")) {this.newlog.error("VALUE OF THE FIELD IN THE OUTER TABLE IS NULL!");if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "0"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "0", str1, str23, str5);bool3 = true;break;} str25 = Util.null2String(getCreater(str31, str29));if (str25.equals("")) {this.newlog.error("THE CREATER IN THE OUTER TABLE IS NOT EXIST!");if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "-1"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "-1", str1, str23, str5);bool3 = true;break;} continue;} if (str27.equals("-1")) {String str28 = Util.null2String(recordSet1.getString("outerfieldname"));String str29 = Util.null2String(workflowComInfo.getWorkflowname(str3));String str30 = Util.toScreen(resourceComInfo.getResourcename(str25), 7);String str31 = "";Calendar calendar = Calendar.getInstance();str31 = Util.add0(calendar.get(1), 4) + "-" + Util.add0(calendar.get(2) + 1, 2) + "-" + Util.add0(calendar.get(5), 2);DateUtil dateUtil = new DateUtil();if (str28.equals("")) {str24 = Util.null2String(dateUtil.getWFTitleNew("" + str3, "" + str25, "" + str30, "1"));if (str24.equals(""))str24 = str29 + "-" + str30 + "-" + str31; continue;} str28 = str28.substring(str28.indexOf(".") + 1);String str32 = Util.null2String(resultSet1.getString(str28));if (!str32.equals("")) {str24 = str32;continue;} str24 = Util.null2String(dateUtil.getWFTitleNew("" + str3, "" + str25, "" + str30, "1"));if (str24.equals(""))str24 = str29 + "-" + str30 + "-" + str31; } } if (bool3)continue; for (byte b1 = 0; b1 < arrayList.size(); b1++) {String str27 = Util.null2String(arrayList.get(b1));String str28 = Util.null2String((String)hashtable1.get(str27));if (!str28.equals("")) {String str29 = Util.null2String((String)hashtable2.get(str27));String str30 = Util.null2String((String)hashtable3.get(str27));String str31 = Util.null2String((String)hashtable4.get(str27));String str32 = Util.null2String((String)hashtable5.get(str27));String str33 = Util.null2String((String)hashtable6.get(str27));String str34 = Util.null2String((String)hashtable7.get(str27));String str35 = "";if (!str32.equals("")) {str32 = str32.substring(str32.indexOf(".") + 1);String str36 = (String)map.get(str32.toLowerCase());if (str36.contains("("))str36 = str36.substring(0, str36.indexOf("(")); if (str36.equals("number") || str36.equals("NUMBER") || str36.equals("float") || str36.equals("Real") || str36.equals("real")) {str35 = Util.null2String(resultSet1.getString(str32));if (str35.startsWith("."))str35 = "0" + str35; if (str35.startsWith("-."))str35 = str35.replaceFirst("-.", "-0."); } else {str35 = Util.null2String(resultSet1.getString(str32));} if (!"6".equals(str33)) {if (str29.equals("3"))if (str30.equals("1")) {str35 = getCreater(str35, str33);} else if (str30.equals("4")) {str35 = getDept(str35, str33);} else if (str30.equals("164")) {str35 = getSubCom(str35, str33);}  } else if (!"".equals(str34)) {str35 = getTranSqlValue(str34, str35);} } if (str35.equals("")) {if (str29.equals("4")) {arrayList18.add(Integer.valueOf(0));} else if (!str29.equals("6") && !str29.equals("2") && (!str29.equals("1") || (!str30.equals("1") && !str30.equals("5"))) && (!str29.equals("3") || (!str30.equals("2") && !str30.equals("19") && !str30.equals("161") && !str30.equals("162")))) {arrayList18.add(null);} else {arrayList18.add("");} } else {if (str31.startsWith("text") || str31.startsWith("char") || str31.startsWith("varchar") || str31.indexOf(".") > -1 || str31.startsWith("clob")) {if (str31.startsWith("char") || str31.startsWith("varchar")) {int k = Util.getIntValue(str31.substring(str31.indexOf("(") + 1, str31.indexOf(")")), 0);if (Util.length2(str35) > k)do {str35 = str35.substring(0, str35.length() - 1);} while (Util.length2(str35) > k); } str35 = str35.replace("'", "''");} else if (str31.equals("int") || str31.equals("integer")) {str35 = Util.getIntValue(str35, 0) + "";} else if (str31.indexOf("decimal") == 0 || str31.indexOf("number") == 0) {str35 = str35.replace(",", "");str35 = Util.getDoubleValue(str35, 0.0D) + "";} else if (str31.indexOf("text") == 0) {str35 = str35.replaceAll("'", "''");} arrayList18.add(str35);} } } if (bool1 && bool2) {String str27 = "";str22 = "select requestid from outerdatawfdetail where workflowid=" + str2 + " and mainid=" + str1 + " and keyfieldvalue='" + str23 + "' and outermaintable = '" + str5 + "' and requestid>0";this.newlog.info(": " + str22);RecordSet recordSet = new RecordSet();recordSet.executeSql(str22);if (recordSet.next())str27 = Util.null2String(recordSet.getString("requestid")); if (str27.equals("")) {this.newlog.info(");continue;} SysUpdateWF sysUpdateWF = new SysUpdateWF();if (sysUpdateWF.updateWorkflowInfo(Util.getIntValue(str3, 0), str24, Util.getIntValue(str25, 1), arrayList18, Util.getIntValue(str27, 0))) {String str28 = str15;if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str28, str6, str9, str8, str23, str10, "" + str27); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "" + str27, str1, str23, str5);saveRequestLog(str1, str23, str3, Util.getIntValue(str27, 0));UpdateIntoDetailTable(statement2, str5, str, str1, str2, Util.getIntValue(str27, 0), str6, str23, str17, str18, str8, str7);continue;} if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "0"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveRequestLog(str1, str23, str3, Util.getIntValue(str27, 0));continue;} this.newlog.info("=======+ str24);sysCreateWF = new SysCreateWF();RequestManager requestManager = sysCreateWF.setWorkflowInfo(Util.getIntValue(str3, 0), str24, 0, Util.getIntValue(str25, 1), arrayList18, false, str11);int j = requestManager.getRequestid();String str26 = str15;if (j > 0) {if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str26, str6, str9, str8, str23, str10, "" + j); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "" + j, str1, str23, str5);saveRequestLog(str1, str23, str3, j);this.newlog.info("****insertIntoDetailTable = " + str + "^^^^^^^^^^^^^:requestid = " + j);insertIntoDetailTable(str4, statement2, str5, str, str1, str2, j, str6, str23, str17, str18, str8, str7);this.newlog.info("+ str11 + ",workflowid=" + str2);if (str11.equals("1"))requestManager.flowNextNode(); continue;} if ("2".equals(str7) || "".equals(str7))saveOutTrigLog(statement2, str5, str16, str6, str9, str8, str23, str10, "0"); if (str12.equals("2") && !str13.equals(""))saveUpdateWfFlag(statement2, str5, str6, str23, str12, str13); saveTrigLog(str3, "-2", str1, str23, str5);saveRequestLog(str1, str23, str3, j);} catch (Exception exception) {this.newlog.error(", exception);} } resultSet1.close();resultSet.close();statement1.close();statement2.close();automaticconnect.closeConnection(connection);} } } } } catch (Exception exception) {this.newlog.error(", exception);} } } catch (Exception exception) {this.newlog.error(", exception);} }public String getTranSqlValue(String paramString1, String paramString2) {paramString2 = paramString2.replace("'", "''");paramString1 = DBTypeUtil.replaceString(paramString1, "{?currentvalue}", paramString2);RecordSet recordSet = new RecordSet();recordSet.executeSql(paramString1);if (recordSet.next())return recordSet.getString(1); return "";}public void insertIntoDetailTable(String paramString1, Statement paramStatement, String paramString2, String paramString3, String paramString4, String paramString5, int paramInt, String paramString6, String paramString7, String paramString8, String paramString9, String paramString10, String paramString11) throws Exception {ResultSet resultSet = null;HashMap<Object, Object> hashMap = new HashMap<Object, Object>();WorkflowComInfo workflowComInfo = new WorkflowComInfo();String str1 = Util.null2String(workflowComInfo.getIsBill(paramString5));String str2 = Util.null2String(workflowComInfo.getFormId(paramString5));ArrayList<String> arrayList1 = new ArrayList();ArrayList<String> arrayList2 = new ArrayList();String str3 = "mainid";String str4 = "";ArrayList<String> arrayList3 = Util.TokenizerString(paramString8, ",");String[] arrayOfString = paramString9.split("\\$@\\|@\\$");ArrayList<String> arrayList4 = new ArrayList();for (byte b1 = 0; b1 < arrayOfString.length; b1++)arrayList4.add(arrayOfString[b1]); RecordSet recordSet = new RecordSet();boolean bool = recordSet.getDBType().equals("oracle");RecordSetDataSource recordSetDataSource = new RecordSetDataSource();boolean bool1 = false;if (!str2.equals(""))if (str1.equals("0")) {recordSet.executeSql("select distinct groupId from Workflow_formfield where formid=" + str2 + " and isdetail='1' order by groupid");while (recordSet.next()) {arrayList1.add("workflow_formdetail");arrayList2.add(recordSet.getString(1));} } else if (str1.equals("1")) {recordSet.executeSql("select tablename from Workflow_billdetailtable where billid=" + str2 + " order by orderid");while (recordSet.next()) {String str = Util.null2String(recordSet.getString(1));if (!str.equals(""))arrayList1.add(recordSet.getString(1)); } recordSet.executeSql("select tablename,detailtablename,detailkeyfield from workflow_bill where id=" + str2);if (recordSet.next()) {str3 = Util.null2String(recordSet.getString("detailkeyfield"));if (arrayList1.size() == 0) {String str5 = Util.null2String(recordSet.getString("detailtablename"));if (!str5.equals(""))arrayList1.add(str5); } String str = recordSet.getString("tablename");recordSet.executeSql("select id from " + str + " where requestid=" + paramInt);if (recordSet.next())str4 = recordSet.getString("id"); } }  if (arrayList1.size() != arrayList3.size()) {writeLog(");return;} for (byte b2 = 0; b2 < arrayList1.size(); b2++) {String str5 = arrayList1.get(b2);String str6 = arrayList3.get(b2);String str7 = "";if (paramString3.toLowerCase().indexOf("oracle") > -1) {str7 = "select 1 from user_tables a where a.TABLE_NAME = upper('" + str6 + "') union ALL select 1 from user_views b where  b.VIEW_NAME = upper('" + str6 + "')";} else if (paramString3.toLowerCase().indexOf("sqlserver") > -1 || paramString3.toLowerCase().indexOf("sybase") > -1) {str7 = "select 1 from sysobjects where name = '" + str6 + "' ";} else if (paramString3.toLowerCase().indexOf("informix") > -1) {str7 = "select 1 from systables where lower(tabname) = lower('" + str6 + "') ";} else if (paramString3.toLowerCase().indexOf("mysql") > -1) {str7 = "select 1 from information_schema.Tables where LOWER(Table_Name)=LOWER('" + str6 + "') ";} else if (paramString3.toLowerCase().indexOf("db2") > -1) {str7 = "select 1 from SYSIBM.SYSTABLES where lower(name)= lower('" + str6 + "') ";} else {str7 = "select 1 from " + str6;} resultSet = paramStatement.executeQuery(str7);if (!resultSet.next()) {this.newlog.error("TABLE " + str6 + " IS NOT EXIST!");} else {Map map = new HashMap<Object, Object>();if (!paramString1.equals(""))map = recordSetDataSource.getAllColumnWithTypes(paramString1, str6); ArrayList<String> arrayList = new ArrayList();Hashtable<Object, Object> hashtable1 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable2 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable3 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable4 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable5 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable6 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable7 = new Hashtable<Object, Object>();String str = Util.null2String(arrayList4.get(b2));if (str.equals("-"))str = ""; recordSet.executeSql("select * from outerdatawfsetdetail where outerfieldname like '" + str6 + ".%' and mainid=" + paramString4);while (recordSet.next()) {String str8 = recordSet.getString("wffieldid");String str9 = recordSet.getString("wffieldname");String str10 = recordSet.getString("wffieldhtmltype");String str11 = recordSet.getString("wffieldtype");String str12 = recordSet.getString("wffielddbtype");String str13 = recordSet.getString("outerfieldname");String str14 = recordSet.getString("changetype");String str15 = recordSet.getString("customsql");arrayList.add(str8);hashtable1.put(str8, str9);hashtable2.put(str8, str10);hashtable3.put(str8, str11);hashtable4.put(str8, str12);hashtable5.put(str8, str13);hashtable6.put(str8, str14);hashtable7.put(str8, str15);} Pattern pattern = Pattern.compile("where");Matcher matcher = pattern.matcher(str);str = matcher.replaceFirst(" and ");if (!paramString11.equals("1") && !paramString10.equals("")) {str7 = "select * from " + str6 + " ," + paramString2 + " " + " where 1=1" + " and " + paramString2 + "." + paramString10 + " = " + paramInt + str;} else {str7 = "select * from " + str6 + " ," + paramString2 + " " + " where 1=1" + " and " + paramString2 + "." + paramString6 + " = '" + paramString7 + "'" + str;} this.newlog.info("querysql:" + str7);resultSet = paramStatement.executeQuery(str7);while (resultSet.next()) {String str8 = "";String str9 = "";if (str1.equals("0")) {str8 = "insert into " + str5 + "(requestid,groupId";str9 = " values(" + paramInt + "," + (String)arrayList2.get(b2);} else if (str1.equals("1")) {str8 = "insert into " + str5 + "(" + str3;str9 = " values(" + str4;} for (byte b = 0; b < arrayList.size(); b++) {String str10 = Util.null2String(arrayList.get(b));String str11 = Util.null2String((String)hashtable1.get(str10));if (!str11.equals("")) {String str12 = Util.null2String((String)hashtable2.get(str10));String str13 = Util.null2String((String)hashtable3.get(str10));String str14 = Util.null2String((String)hashtable4.get(str10));String str15 = Util.null2String((String)hashtable5.get(str10));String str16 = Util.null2String((String)hashtable6.get(str10));String str17 = Util.null2String((String)hashtable7.get(str10));String str18 = "";if (!str15.equals("")) {str15 = str15.substring(str15.indexOf(".") + 1);String str19 = (String)map.get(str15.toLowerCase());if (str19.contains("("))str19 = str19.substring(0, str19.indexOf("(")); if (str19.equals("number") || str19.equals("NUMBER") || str19.equals("float") || str19.equals("real") || str19.equals("Real")) {str18 = Util.null2String(resultSet.getString(str15));if (str18.startsWith("."))str18 = "0" + str18; if (str18.startsWith("-."))str18 = str18.replaceFirst("-.", "-0."); } else {str18 = Util.null2String(resultSet.getString(str15));} if (!"6".equals(str16)) {if (str12.equals("3"))if (str13.equals("1")) {str18 = getCreater(str18, str16);} else if (str13.equals("4")) {str18 = getDept(str18, str16);} else if (str13.equals("164")) {str18 = getSubCom(str18, str16);}  } else if (!"".equals(str17)) {str18 = getTranSqlValue(str17, str18);} else {str18 = str18;} } if (str18.equals("")) {if (!str12.equals("2") && (!str12.equals("1") || (!str13.equals("1") && !str13.equals("5"))) && (!str12.equals("3") || (!str13.equals("2") && !str13.equals("19") && !str13.equals("161") && !str13.equals("162"))))str18 = "NULL"; if (str12.equals("5")) {str18 = "-1";} else if (str12.equals("4")) {str18 = "0";} } else if (str14.indexOf("varchar") == 0 || str14.indexOf("char") == 0) {int i = Util.getIntValue(str14.substring(str14.indexOf("(") + 1, str14.indexOf(")")), 0);if (Util.length2(str18) > i)do {str18 = str18.substring(0, str18.length() - 1);} while (Util.length2(str18) > i); str18 = str18.replace("'", "''");} else if (str14.equals("int") || str14.equals("integer")) {str18 = Util.getIntValue(str18, -1) + "";} else if (str14.indexOf("decimal") == 0 || str14.indexOf("number") == 0) {str18 = str18.replace(",", "");str18 = Util.getDoubleValue(str18, -1.0D) + "";} else if (str12.equals("3") && str13.equals("17") && bool) {hashMap.put(str11, str18);str18 = " empty_clob() ";} str8 = str8 + "," + str11;if (str14.startsWith("text") || str14.startsWith("char") || str14.startsWith("varchar") || str14.indexOf(".") > -1) {str9 = str9 + ",'" + str18 + "'";} else if (str12.equals("3") && (str13.equals("256") || str13.equals("257"))) {str9 = str9 + ",'" + str18 + "'";} else if (str14.startsWith("clob")) {str9 = str9 + "," + str18;} else {str9 = str9 + "," + str18;} } } str8 = str8 + ") ";str9 = str9 + ") ";this.newlog.info("detail sql:" + str8 + str9);recordSet.executeSql(str8 + str9);if (bool)try {String str10 = "";if (str1.equals("0")) {str10 = "select max(id) dtid from " + str5 + " where requestid =" + paramInt + " and groupId = " + (String)arrayList2.get(b2);} else if (str1.equals("1")) {str10 = "select max(id) dtid from " + str5 + " where " + str3 + " =" + str4;} recordSet.executeSql(str10);if (recordSet.next()) {String str11 = Util.null2String(recordSet.getString("dtid"));if (!"".equals(str11)) {String str12 = "";str12 = " select ";byte b3 = 0;String str13 = " ";Iterator<Map.Entry> iterator = hashMap.entrySet().iterator();while (iterator.hasNext()) {b3++;Map.Entry entry = iterator.next();String str14 = entry.getKey().toString();String str15 = "";if (entry.getValue() != null)if (String.valueOf(entry.getValue()).equals(" ")) {str15 = "";} else {str15 = String.valueOf(entry.getValue());}  if (b3 > 1) {str12 = str12 + str13 + " , " + str14;continue;} str12 = str12 + str13 + " " + str14;} str12 = str12 + " from " + str5;if (str1.equals("0")) {str12 = str12 + " where requestid = " + paramInt + " and groupId = " + (String)arrayList2.get(b2) + " and id = " + str11 + " for update";} else if (str1.equals("1")) {str12 = str12 + " where " + str3 + " = " + str4 + "and id = " + str11 + " for update";} if (b3 > 0) {ConnStatement connStatement = null;try {connStatement = new ConnStatement();connStatement.setStatementSql(str12, false);connStatement.executeQuery();if (connStatement.next()) {iterator = hashMap.entrySet().iterator();b3 = 0;while (iterator.hasNext()) {b3++;Map.Entry entry = iterator.next();String str14 = entry.getKey().toString();String str15 = "";if (entry.getValue() != null)if (String.valueOf(entry.getValue()).equals(" ")) {str15 = "";} else {str15 = String.valueOf(entry.getValue());}  CLOB cLOB = connStatement.getClob(b3);char[] arrayOfChar = str15.toCharArray();Writer writer = cLOB.getCharacterOutputStream();writer.write(arrayOfChar);writer.flush();writer.close();} } } catch (Exception exception) {this.newlog.error(", exception);} finally {if (connStatement != null)connStatement.close(); } } } } hashMap.clear();} catch (Exception exception) {this.newlog.error(", exception);}  } } } }public void UpdateIntoDetailTable(Statement paramStatement, String paramString1, String paramString2, String paramString3, String paramString4, int paramInt, String paramString5, String paramString6, String paramString7, String paramString8, String paramString9, String paramString10) throws Exception {ResultSet resultSet = null;HashMap<Object, Object> hashMap = new HashMap<Object, Object>();WorkflowComInfo workflowComInfo = new WorkflowComInfo();String str1 = Util.null2String(workflowComInfo.getIsBill(paramString4));String str2 = Util.null2String(workflowComInfo.getFormId(paramString4));ArrayList<String> arrayList1 = new ArrayList();ArrayList<String> arrayList2 = new ArrayList();String str3 = "mainid";String str4 = "";ArrayList<String> arrayList3 = Util.TokenizerString(paramString7, ",");String[] arrayOfString = paramString8.split("\\$@\\|@\\$");ArrayList<String> arrayList4 = new ArrayList();for (byte b1 = 0; b1 < arrayOfString.length; b1++)arrayList4.add(arrayOfString[b1]); RecordSet recordSet = new RecordSet();boolean bool = recordSet.getDBType().equals("oracle");boolean bool1 = false;if (!str2.equals(""))if (str1.equals("0")) {recordSet.executeSql("select distinct groupId from Workflow_formfield where formid=" + str2 + " and isdetail='1' order by groupid");while (recordSet.next()) {arrayList1.add("workflow_formdetail");arrayList2.add(recordSet.getString(1));} } else if (str1.equals("1")) {recordSet.executeSql("select tablename from Workflow_billdetailtable where billid=" + str2 + " order by orderid");while (recordSet.next()) {String str = Util.null2String(recordSet.getString(1));if (!str.equals(""))arrayList1.add(recordSet.getString(1)); } recordSet.executeSql("select tablename,detailtablename,detailkeyfield from workflow_bill where id=" + str2);if (recordSet.next()) {str3 = Util.null2String(recordSet.getString("detailkeyfield"));if (arrayList1.size() == 0) {String str5 = Util.null2String(recordSet.getString("detailtablename"));if (!str5.equals(""))arrayList1.add(str5); } String str = recordSet.getString("tablename");recordSet.executeSql("select id from " + str + " where requestid=" + paramInt);if (recordSet.next())str4 = recordSet.getString("id"); } }  if (arrayList1.size() != arrayList3.size()) {writeLog(");return;} for (byte b2 = 0; b2 < arrayList1.size(); b2++) {String str5 = arrayList1.get(b2);String str6 = arrayList3.get(b2);String str7 = "";if (paramString2.toLowerCase().indexOf("oracle") > -1) {str7 = "select 1 from user_tables a where a.TABLE_NAME = upper('" + str6 + "') union ALL select 1 from user_views b where  b.VIEW_NAME = upper('" + str6 + "')";} else if (paramString2.toLowerCase().indexOf("sqlserver") > -1 || paramString2.toLowerCase().indexOf("sybase") > -1) {str7 = "select 1 from sysobjects where name = '" + str6 + "' ";} else if (paramString2.toLowerCase().indexOf("informix") > -1) {str7 = "select 1 from systables where lower(tabname) = lower('" + str6 + "') ";} else if (paramString2.toLowerCase().indexOf("mysql") > -1) {str7 = "select 1 from information_schema.Tables where LOWER(Table_Name)=LOWER('" + str6 + "') ";} else if (paramString2.toLowerCase().indexOf("db2") > -1) {str7 = "select 1 from SYSIBM.SYSTABLES where lower(name)= lower('" + str6 + "') ";} else {str7 = "select 1 from " + str6;} resultSet = paramStatement.executeQuery(str7);if (!resultSet.next()) {this.newlog.error("TABLE " + str6 + " IS NOT EXIST!");} else {String str8 = "";RecordSet recordSet1 = new RecordSet();if (str1.equals("0")) {str8 = "delete " + str5 + " where requestid='" + paramInt + "' and groupId='" + (String)arrayList2.get(b2) + "' ";} else if (str1.equals("1")) {str8 = "delete " + str5 + " where " + str3 + "='" + str4 + "'  ";} recordSet1.executeSql(str8);ArrayList<String> arrayList = new ArrayList();Hashtable<Object, Object> hashtable1 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable2 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable3 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable4 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable5 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable6 = new Hashtable<Object, Object>();Hashtable<Object, Object> hashtable7 = new Hashtable<Object, Object>();String str9 = Util.null2String(arrayList4.get(b2));if (str9.equals("-"))str9 = ""; recordSet.executeSql("select * from outerdatawfsetdetail where outerfieldname like '" + str6 + ".%' and mainid=" + paramString3);while (recordSet.next()) {String str10 = recordSet.getString("wffieldid");String str11 = recordSet.getString("wffieldname");String str12 = recordSet.getString("wffieldhtmltype");String str13 = recordSet.getString("wffieldtype");String str14 = recordSet.getString("wffielddbtype");String str15 = recordSet.getString("outerfieldname");String str16 = recordSet.getString("changetype");String str17 = recordSet.getString("customsql");arrayList.add(str10);hashtable1.put(str10, str11);hashtable2.put(str10, str12);hashtable3.put(str10, str13);hashtable4.put(str10, str14);hashtable5.put(str10, str15);hashtable6.put(str10, str16);hashtable7.put(str10, str17);} Pattern pattern = Pattern.compile("where");Matcher matcher = pattern.matcher(str9);str9 = matcher.replaceFirst(" and ");if (!paramString10.equals("1") && !paramString9.equals("")) {str7 = "select * from " + str6 + " ," + paramString1 + " " + " where 1=1" + " and " + paramString1 + "." + paramString9 + " = " + paramInt + str9;} else {str7 = "select * from " + str6 + " ," + paramString1 + " " + " where 1=1" + " and " + paramString1 + "." + paramString5 + " = '" + paramString6 + "'" + str9;} this.newlog.info("querysql:" + str7);resultSet = paramStatement.executeQuery(str7);while (resultSet.next()) {String str10 = "";String str11 = "";if (str1.equals("0")) {str10 = "insert into " + str5 + "(requestid,groupId";str11 = " values(" + paramInt + "," + (String)arrayList2.get(b2);} else if (str1.equals("1")) {str10 = "insert into " + str5 + "(" + str3;str11 = " values(" + str4;} for (byte b = 0; b < arrayList.size(); b++) {String str12 = Util.null2String(arrayList.get(b));String str13 = Util.null2String((String)hashtable1.get(str12));if (!str13.equals("")) {String str14 = Util.null2String((String)hashtable2.get(str12));String str15 = Util.null2String((String)hashtable3.get(str12));String str16 = Util.null2String((String)hashtable4.get(str12));String str17 = Util.null2String((String)hashtable5.get(str12));String str18 = Util.null2String((String)hashtable6.get(str12));String str19 = Util.null2String((String)hashtable7.get(str12));String str20 = "";if (!str17.equals("")) {str17 = str17.substring(str17.indexOf(".") + 1);str20 = Util.null2String(resultSet.getString(str17));if (!"6".equals(str18)) {if (str14.equals("3"))if (str15.equals("1")) {str20 = getCreater(str20, str18);} else if (str15.equals("4")) {str20 = getDept(str20, str18);} else if (str15.equals("164")) {str20 = getSubCom(str20, str18);}  } else if (!"".equals(str19)) {str20 = getTranSqlValue(str19, str20);} else {str20 = str20;} } if (str20.equals("")) {if (!str14.equals("2") && (!str14.equals("1") || (!str15.equals("1") && !str15.equals("5"))) && (!str14.equals("3") || (!str15.equals("2") && !str15.equals("19") && !str15.equals("161") && !str15.equals("162"))))str20 = "NULL"; if (str14.equals("5")) {str20 = "-1";} else if (str14.equals("4")) {str20 = "0";} } else if (str16.indexOf("varchar") == 0 || str16.indexOf("char") == 0) {int i = Util.getIntValue(str16.substring(str16.indexOf("(") + 1, str16.indexOf(")")), 0);if (Util.length2(str20) > i)do {str20 = str20.substring(0, str20.length() - 1);} while (Util.length2(str20) > i); str20 = str20.replace("'", "''");} else if (str16.equals("int") || str16.equals("integer")) {str20 = Util.getIntValue(str20, -1) + "";} else if (str16.indexOf("decimal") == 0 || str16.indexOf("number") == 0) {str20 = str20.replace(",", "");str20 = Util.getDoubleValue(str20, -1.0D) + "";} else if (str14.equals("3") && str15.equals("17") && bool) {hashMap.put(str13, str20);str20 = " empty_clob() ";} str10 = str10 + "," + str13;if (str16.startsWith("text") || str16.startsWith("char") || str16.startsWith("varchar") || str16.indexOf(".") > -1 || str16.startsWith("clob")) {str11 = str11 + ",'" + str20 + "'";} else if (str14.equals("3") && (str15.equals("256") || str15.equals("257"))) {str11 = str11 + ",'" + str20 + "'";} else {str11 = str11 + "," + str20;} } } str10 = str10 + ") ";str11 = str11 + ") ";this.newlog.info("detail sql:" + str10 + str11);recordSet.executeSql(str10 + str11);if (bool)try {String str = "";if (str1.equals("0")) {str = "select max(id) dtid from " + str5 + " where requestid =" + paramInt + " and groupId = " + (String)arrayList2.get(b2);} else if (str1.equals("1")) {str = "select max(id) dtid from " + str5 + " where " + str3 + " =" + str4;} recordSet.executeSql(str);if (recordSet.next()) {String str12 = Util.null2String(recordSet.getString("dtid"));if (!"".equals(str12)) {String str13 = "";str13 = " select ";byte b3 = 0;String str14 = " ";Iterator<Map.Entry> iterator = hashMap.entrySet().iterator();while (iterator.hasNext()) {b3++;Map.Entry entry = iterator.next();String str15 = entry.getKey().toString();String str16 = "";if (entry.getValue() != null)if (String.valueOf(entry.getValue()).equals(" ")) {str16 = "";} else {str16 = String.valueOf(entry.getValue());}  if (b3 > 1) {str13 = str13 + str14 + " , " + str15;continue;} str13 = str13 + str14 + " " + str15;} str13 = str13 + " from " + str5;if (str1.equals("0")) {str13 = str13 + " where requestid = " + paramInt + " and groupId = " + (String)arrayList2.get(b2) + " and id = " + str12 + " for update";} else if (str1.equals("1")) {str13 = str13 + " where " + str3 + " = " + str4 + "and id = " + str12 + " for update";} if (b3 > 0) {ConnStatement connStatement = null;try {connStatement = new ConnStatement();connStatement.setStatementSql(str13, false);connStatement.executeQuery();if (connStatement.next()) {iterator = hashMap.entrySet().iterator();b3 = 0;while (iterator.hasNext()) {b3++;Map.Entry entry = iterator.next();String str15 = entry.getKey().toString();String str16 = "";if (entry.getValue() != null)if (String.valueOf(entry.getValue()).equals(" ")) {str16 = "";} else {str16 = String.valueOf(entry.getValue());}  CLOB cLOB = connStatement.getClob(b3);char[] arrayOfChar = str16.toCharArray();Writer writer = cLOB.getCharacterOutputStream();writer.write(arrayOfChar);writer.flush();writer.close();} } } catch (Exception exception) {this.newlog.error(", exception);} finally {if (connStatement != null)connStatement.close(); } } } } hashMap.clear();} catch (Exception exception) {this.newlog.error(", exception);}  } } } }public String getCreater(String paramString1, String paramString2) {paramString1 = paramString1.replace("'", "''");RecordSet recordSet = new RecordSet();String str = "";if (paramString2.equals("0")) {recordSet.executeSql("select id from HrmResource where id='" + paramString1 + "' and status<4  and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("1")) {recordSet.executeSql("select id from HrmResource where workcode='" + paramString1 + "' and  status<4 and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("2")) {recordSet.executeSql("select id from HrmResource where loginid='" + paramString1 + "' and  status<4 and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("3")) {recordSet.executeSql("select id from HrmResource where mobile='" + paramString1 + "' and  status<4  and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("4")) {recordSet.executeSql("select id from HrmResource where email='" + paramString1 + "' and  status<4  and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("5")) {recordSet.executeSql("select id from HrmResource where id='" + paramString1 + "' and  status<4  and (loginid !='' Or  loginid is not  null) ");if (recordSet.next())str = recordSet.getString("id"); } return str;}public String getDept(String paramString1, String paramString2) {paramString1 = paramString1.replace("'", "''");RecordSet recordSet = new RecordSet();String str = "";if (paramString2.equals("0")) {recordSet.executeSql("select id from HrmDepartment where id='" + paramString1 + "'");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("1")) {recordSet.executeSql("select id from HrmDepartment where departmentcode='" + paramString1 + "'");if (recordSet.next())str = recordSet.getString("id"); } return str;}public String getSubCom(String paramString1, String paramString2) {paramString1 = paramString1.replace("'", "''");RecordSet recordSet = new RecordSet();String str = "";if (paramString2.equals("0")) {recordSet.executeSql("select id from HrmSubCompany where id='" + paramString1 + "'");if (recordSet.next())str = recordSet.getString("id"); } else if (paramString2.equals("1")) {recordSet.executeSql("select id from HrmSubCompany where subcompanycode='" + paramString1 + "'");if (recordSet.next())str = recordSet.getString("id"); } return str;}private boolean saveOutTrigLog(Statement paramStatement, String paramString1, String paramString2, String paramString3, String paramString4, String paramString5, String paramString6, String paramString7, String paramString8) {try {String str = "";if (!"".equals(paramString4))str = str + paramString4 + "='" + paramString7 + "'"; if (!"".equals(paramString4))str = str + ("".equals(str) ? (paramString5 + "='" + paramString8 + "'") : ("," + paramString5 + "='" + paramString8 + "'")); if (!"".equals(paramString2)) {paramString2 = paramString2.trim();if (paramString2.indexOf("set") == 0)paramString2 = paramString2.substring(4); str = str + ("".equals(str) ? paramString2 : ("," + paramString2));} if (!"".equals(str)) {String str1 = "update " + paramString1 + " set " + str + " where " + paramString3 + "='" + paramString6 + "'";this.newlog.info("saveOutTrigLog sql : " + str1);paramStatement.executeUpdate(str1);} } catch (Exception exception) {this.newlog.error(", exception);return false;} return true;}private boolean saveUpdateWfFlag(Statement paramStatement, String paramString1, String paramString2, String paramString3, String paramString4, String paramString5) {try {String str1 = "";String str2 = "";if (paramString4.equals("2") && !"".equals(paramString5))str2 = str2 + ("".equals(str2) ? (paramString5 + "='0'") : ("," + paramString5 + "='0'")); if (!"".equals(str1)) {str1 = str1.trim();if (str1.indexOf("set") == 0)str1 = str1.substring(4); str2 = str2 + ("".equals(str2) ? str1 : ("," + str1));} if (!"".equals(str2)) {String str = "update " + paramString1 + " set " + str2 + " where " + paramString2 + "='" + paramString3 + "'";paramStatement.executeUpdate(str);this.newlog.info("saveUpdateWfFlag sql : " + str);} } catch (Exception exception) {this.newlog.error(", exception);return false;} return true;}private boolean saveTrigLog(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5) {try {boolean bool = false;RecordSet recordSet = new RecordSet();String str = "select requestid from outerdatawfdetail where keyfieldvalue='" + paramString4 + "' and outermaintable = '" + paramString5 + "' and workflowid=" + paramString1 + " and mainid=" + paramString3;recordSet.executeSql(str);if (recordSet.next())bool = true; if (bool) {str = "update outerdatawfdetail set requestid=" + paramString2 + " where mainid=" + paramString3 + " and workflowid=" + paramString1 + " and outermaintable = '" + paramString5 + "' and keyfieldvalue='" + paramString4 + "'";} else {str = "insert into outerdatawfdetail(mainid,workflowid,requestid,keyfieldvalue,outermaintable) values(" + paramString3 + "," + paramString1 + "," + paramString2 + ",'" + paramString4 + "','" + paramString5 + "')";} this.newlog.info("saveTrigLog sql : " + str);recordSet.executeSql(str);} catch (Exception exception) {this.newlog.error(", exception);return false;} return true;}private void saveRequestLog(String paramString1, String paramString2, String paramString3, int paramInt) {SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("HH:mm:ss");Date date = new Date();String str1 = simpleDateFormat1.format(date);String str2 = simpleDateFormat2.format(date);String str3 = "";if (paramInt > -1) {str3 = "1";} else {str3 = "0";} RecordSet recordSet = new RecordSet();String str4 = "insert into outerdatawflog(Outerdatawfid,Outkey,Workflowid,RequestId,Triggerflag,CreateDate,CreateTime) values('" + paramString1 + "','" + paramString2 + "','" + paramString3 + "','" + paramInt + "','" + str3 + "','" + str1 + "','" + str2 + "')";recordSet.executeSql(str4);this.newlog.info("saveRequestLog sql : " + str4);}
}

很长一段,核心检查逻辑在 public void doActiveOutDataWF() 这里。

泛微E8自定义触发检查参数
参数名含义用途
id
外部表的主键项,可以是任何名字
workflowid
需要被触发创建的流程id
datasourceid
数据源id、即使是泛微自己的表作为外部表、也需要创建数据源
outermaintable
外部表(主表)的名字
keyfield
datarecordtype
requestid
外部表触发成功后、回写产生的流程请求id的列的名字
FTriggerFlag
默认不可更名:触发成功的回写列,不能在其他条件中进行数据修改。
FTriggerFlagValue
outermainwhere
外部表的数据筛选条件,必须以 where 开头。
successback
failback
outerdetailtables
外部表的明细表(可选)
outerdetailwheres
外部表的明细表筛选条件、用作判断和主表关联(可选)
isnextnode
isupdatewfdata
isupdatewfdataField

目前看来、在最简单的配置方法下:CREATER 和流程标题是必须提供外部表字段的。其他等泛微工程师进行解答。

 

总结

未完待续。。

相关文章:

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引&#xff0c;在测试环境配置之后、要触发的流程可以手工提交&#xff0c;但是触发一直不成功。简单记录下业务场景和其他处理信息&#xff0c;以供参考。 应用版本 目前使用了泛微 E8 &#xff0…...

Springboot整合Mybatis调用Oracle存储过程

1、配置说明 Oracel11g+springboot2.7.14+mybatis3.5.13 目标:springboot整合mybatis访问oracle中的存储过程,存储过程返回游标信息。 mybatis调用oracle中的存储过程方式 2、工程结构 3、具体实现 3.1、在Oracle中创建测试数据库表 具体数据可自行添加 create table s…...

【java安全】Log4j反序列化漏洞

文章目录 【java安全】Log4j反序列化漏洞关于Apache Log4j漏洞成因CVE-2017-5645漏洞版本复现环境漏洞复现漏洞分析 CVE-2019-17571漏洞版本漏洞复现漏洞分析 参考 【java安全】Log4j反序列化漏洞 关于Apache Log4j Log4j是Apache的开源项目&#xff0c;可以实现对System.out…...

[mars3d 打包]vue3+vite,打包后mars3d找不到

前提 &#xff1a; vue3vite开发框架&#xff1b;使用 官网 方式3获取sdk,引入mars3d; 问题&#xff1a;开发时一切正常&#xff0c;打包之后&#xff0c;页面白屏&#xff0c;没有渲染&#xff1b; 相关的mars3d的相关方法会报错&#xff1b;但是mars3d的打印日志是有的&…...

STM32——SPI外设总线

SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担 可配置8位/16位数据帧、高位先行/低位先行 时钟频率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256) 支持多主机模型、主或从操作 可…...

BOXTRADE-天启量化分析平台 主要功能介绍

BOXTRADE-天启量化分析平台 主要功能介绍 potato 数学 web 缘起 月晕而风&#xff0c;础润而雨 BOXTRADE-天启量化 欢迎来到天启量化&#xff01;这是一个专注于量化分析的网站。我们致力于为用户提供市场行情技术指标和量化策略分析方面的优质内容和资源。 我们的使命是 做…...

kaggle注册不显示验证码

edge浏览器 1.点击浏览器右上角三个点 2.点击扩展 3.点击管理扩展 4.点击获取Microsoft Edge扩展&#xff0c;在左上角输入Head Editor 5.输入https://www.azurezeng.com/static/HE-GoogleRedirect.json 6.下载后&#xff0c;点保存 成功&#xff01;...

python爬虫7:实战1

python爬虫7&#xff1a;实战1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…...

uniApp引入vant2

uniApp引入vant2 1、cnpm 下载&#xff1a;cnpm i vantlatest-v2 -S2、main.js文件引入 import Vant from ./node_modules/vant/lib/vant;Vue.use(Vant);3.app.vue中引入vant 样式文件 import /node_modules/vant/lib/index.css;...

如何大幅提高遥感影像分辨率(Python+MATLAB)

前言: 算法:NSCT算法(非下采样变换) 数据:Landsat8 OLI 遥感图像数据 编程平台:MATLAB+Python 论文参考:毛克.一种快速的全色和多光谱图像融合算法[J].测绘科学,2016,41(01):151-153+98.DOI:10.16251/j.cnki.1009-2307.2016.01.028. 左图:未进行融合的多光谱真彩色合…...

nginx php-fpm安装配置

nginx php-fpm安装配置 nginx本身不能处理PHP&#xff0c;它只是个web服务器&#xff0c;当接收到请求后&#xff0c;如果是php请求&#xff0c;则发给php解释器处理&#xff0c;并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理&#xff0c;fascgi管理进程选…...

通过ip获取地理位置信息

GeoLite2-City.mmdb 文件是 MaxMind 公司提供的一个免费的 IP 地址与城市地理位置映射数据库文件。它包含了 IP 地址范围与对应的城市、地区、国家、经纬度等地理位置信息的映射。这种数据库文件可以用于识别访问您的应用程序或网站的用户的地理位置&#xff0c;从而实现针对不…...

数据库索引优化策略与性能提升实践

文章目录 什么是数据库索引&#xff1f;为什么需要数据库索引优化&#xff1f;数据库索引优化策略实践案例&#xff1a;索引优化带来的性能提升索引优化规则1. 前导模糊查询不适用索引2. 使用IN优于UNION和OR3. 负向条件查询不适用索引4. 联合索引最左前缀原则5. 范围条件查询右…...

【ARM 嵌入式 编译系列 11.1 -- GCC __attribute__((aligned(x)))详细介绍】

文章目录 __attribute__((aligned(x)))详细介绍其它对齐方式上篇文章:ARM 嵌入式 编译系列 11 – GCC attribute((packed))详细介绍 attribute((aligned(x)))详细介绍 __attribute__((aligned(x))) 是 GCC 编译器的一个特性,它可以用于变量或类型,用来指定它们在内存中的…...

【计算机视觉|生成对抗】逐步增长的生成对抗网络(GAN)以提升质量、稳定性和变化

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Progressive Growing of GANs for Improved Quality, Stability, and Variation 链接&#xff1a;[1710.10196] Progressive Growing of GANs for Improved Quality, Stability, and Vari…...

C++11并发与多线程笔记(8) condition_variable、wait、notify_one、notify_all

C11并发与多线程笔记&#xff08;8&#xff09; condition_variable、wait、notify_one、notify_all 1、条件变量condition_variable、wait、notify_one、notify_all1.1 std::condition_variable1.2 wait()1.3 notify_one()1.4 notify_all() 2、深入思考 1、条件变量condition_…...

C语言——通讯录详解(动态版)

通讯录详解 前言&#xff1a;一、定义一个通讯录二、初始化三、增加联系人3.1 给通讯录扩容3.2增加联系人 四、释放内存五、完整代码 前言&#xff1a; 我们已经学过了通讯录的静态版&#xff0c;但是它的缺点很明显&#xff0c;通讯录满了就添加不了联系人了啦。我再让通讯录升…...

【云原生】kubernetes应用程序包管理工具Helm

Helm 什么是 Helm 安装 Helm 重要概念 使用 Helm 1 简介 官网地址: Helm Helm是一个Kubernetes应用程序包管理工具&#xff0c;它允许你轻松管理和部署Kubernetes应用程序。Helm通过使用称为Charts的预定义模板来简化Kubernetes应用程序的部署和管理。Chart包含了一组Ku…...

蓝牙资讯|苹果Apple Watch可手势操控Mac和Apple TV等设备

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项技术专利&#xff0c;概述了未来的 Apple Watch 手表&#xff0c;使用手势等操控 Mac 和 Apple TV 等设备。 该专利描述未来 Apple Watch 可以交互实现编辑图像、绘图、处理文…...

认识excel篇2之如何快速输入数据

一、快速输入数据&#xff08;快捷键功能的使用&#xff09; 1、鼠标左键填充&#xff1a;复制填充、等差序列填充&#xff08;行、列是一样的&#xff09; 步骤&#xff1a;选中单元格&#xff0c;鼠标放置到单元格右下角待鼠标箭头变成实心十字架&#xff0c;左键向下拖拽&…...

将eNSP Pro部署在华为云是什么体验

eNSP Pro简介 eNSP Pro 是华为公司数据通信产品线新推出的数通设备模拟器&#xff0c;主要应用在数据通信技能培训&#xff0c;为使用者提供华为数据通信产品设备命令行学习环境。 具备的能力 多产品模拟能力&#xff1a;支持数据通信产品线NE路由器、CE交换机、S交换机、AR…...

Intelij IDEA 配置Tomcat解决Application Server不显示的问题

今天搭建war工程时部署项目发现&#xff0c;IDEA的控制台没有Application Servers&#xff0c;在网上查了一下&#xff0c;总结几个比较好的解决方法&#xff0c;为了方便自己和其他人以后碰到相同的问题&#xff0c;不再浪费时间再次寻找解决办法。 Intelij IDEA 配置Tomcat时…...

php+echarts实现数据可视化实例

效果&#xff1a; 代码&#xff1a; php <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv&quo…...

Kotlin~Bridge桥接模式

概念 抽象和现实之间搭建桥梁&#xff0c;分离实现和抽象。 抽象&#xff08;What&#xff09;实现&#xff08;How&#xff09;用户可见系统正常工作的底层代码产品付款方式定义数据类型的类。处理数据存储和检索的类 角色介绍 Abstraction&#xff1a;抽象 定义抽象接口&…...

【ES6】箭头函数和普通函数的区别

它们之间的区别&#xff1a; &#xff08;1&#xff09;箭头函数没有自己的this。 &#xff08;2&#xff09;不可以当作构造函数&#xff0c;不可以对箭头函数使用new命令&#xff0c;否则抛出错误。 &#xff08;3&#xff09;不可以使用arguments对象&#xff0c;该对象在函…...

【网络基础实战之路】VLAN技术在两个网段中的实际应用详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…...

密码学学习笔记(十九):密码学关键术语的解释1

数据加密标准(DES) 数据加密标准是使用最广泛的加密体制&#xff0c;它于1977年被美国国家标准和技术研究所(NIST)采纳为联邦信息处理标准FIPS PUB 46。 DES3DESAES明文分组长度&#xff08;位&#xff09;6464128密文分组长度&#xff08;位&#xff09;6464128密钥长度&…...

angular中如何定义一个全局组件?

需求&#xff0c;我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航&#xff0c;在不同的页面引入时传入一个路由数组即可。 第一步&#xff1a;我们新建这个组件&#xff1a; ng g c navBreadcrumb ng g m navBreadcrumb----------nav-breadcrumb.module-------…...

HTTP与HTTPS的区别

面试常见问题&#xff0c;HTTPS优化总结易记版&#xff1a; 1、HSTS重定向技术&#xff1a;将http自动转换为https&#xff0c;减少301重定向 2、TLS握手优化&#xff1a;在TLS握手完成前客户端就提前向服务器发送数据 3、会话标识符&#xff1a;服务器记录下与某客户端的会…...

JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践 | 京东云技术团队

前言 自 2014 年发布以来&#xff0c; JDK 8 一直都是相当热门的 JDK 版本。其原因就是对底层数据结构、JVM 性能以及开发体验做了重大升级&#xff0c;得到了开发人员的认可。但距离 JDK 8 发布已经过去了 9 年&#xff0c;那么这 9 年的时间&#xff0c;JDK 做了哪些升级&am…...

英伟达结构化剪枝工具Nvidia Apex Automatic Sparsity [ASP](1)——使用方法

英伟达结构化剪枝工具Nvidia Apex Automatic Sparsity [ASP]&#xff08;1&#xff09;——使用方法 Apex是Nvdia维护的pytorch工具库&#xff0c;包括混合精度训练和分布式训练&#xff0c;Apex的目的是为了让用户能够更早的使用上这些“新鲜出炉”的训练工具。ASP&#xff0…...

接口测试,负载测试,并发测试,压力测试区别

接口测试 1.定义&#xff1a;接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 2.目的&#xf…...

WebRTC +Signal + ICE

在 WebRTC 中&#xff0c;ICE&#xff08;Interactive Connectivity Establishment&#xff09;服务是用于解决网络地址转换&#xff08;NAT&#xff09;和防火墙障碍的关键组件。以下是一些常见的开源 ICE 服务框架&#xff0c;可以用于搭建 ICE 服务器来支持 WebRTC 连接&…...

循环内的try-catch 跟循环外的try-catch有什么不一样

起因&#xff1a;一位面试管突然问了这么一道基础的面试题&#xff0c;反而秀了面试者一脸&#xff0c;经常用的却被问到时不知道怎么回答&#xff0c;所以我们平时在写代码的时候&#xff0c;要多注意细节跟原理。也许你不服&#xff1a;不就是先这样&#xff0c;再那样&#…...

C语言实现Java三大特性

// 前言 面向对象的java语言有着多种设计模式与特性。比如封装、继承、多态等等。 在这篇文章中&#xff0c;我会使用java的代码思路&#xff0c;实现C语言版的JAVA三大特性。 并从写代码的角度&#xff0c;从0开始构建。 定义结构体&#xff08;对象&#xff09; 设计了一…...

GBU812-ASEMI新能源专用整流桥GBU812

编辑&#xff1a;ll GBU812-ASEMI新能源专用整流桥GBU812 型号&#xff1a;GBU812 品牌&#xff1a;ASEMI 封装&#xff1a;GBU-4 恢复时间&#xff1a;&#xff1e;50ns 正向电流&#xff1a;80A 反向耐压&#xff1a;1200V 芯片个数&#xff1a;4 引脚数量&#xff…...

数据结构,线性表与线性结构关系,顺序表与顺序结构关系,线性表与顺序表关系

学习数据结构会出现很多的概念如顺序结构&#xff0c;非线性结构&#xff0c;顺序表&#xff0c;顺序结构&#xff0c;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;堆等。今天来小讲以下其中的线性表与线性结构&#xff0c;顺序表与顺序结构的关系。 在数…...

Bigemap Pro国产基础软件介绍——一款多源数据处理软件

一、软件简介 Bigemap Pro是由成都比格图数据处理有限公司(下称”BIGEMAP”)开发和发行的国产大数据处理基础软件。Bigemap Pro是在BIGEMAP GIS Office基础上&#xff0c;经过十年的用户积累与反馈和技术更新迭代出的新一代基础软件产品。Bigemap Pro国产基础软件集成了数据采…...

算法练习Day49|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

LeetCode: 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 1.思路 暴力解法、贪心也算比较符合思维&#xff0c;动规不容易想到&#xff0c;且状态处理不易处理 股票每天的状态为持有或不持有&#xff1a;声明dp数组&#xff1a…...

【Android Framework (十二) 】- 智能硬件设备开发

文章目录 前言智能硬件的定义与应用智能硬件产品开发流程智能硬件开发所涉及的技术体系概述关于主板选型主板CPU芯片的选择关于串口通信 总结 前言 针对我过往工作经历&#xff0c;曾在一家智能科技任职Android开发工程师&#xff0c;简单介绍下关于任职期间接触和开发过的一些…...

若依框架给字典字段新增color值,并且实现下拉列表选项进行颜色设置

首先获取所要新增的字典&#xff0c;并且根据字典的value值选取对应的颜色参数 this.getDicts("risk_level").then(response > {const color {mild:#F1F4BD,moderate:#EEC920,severe:#FF6C0D,very_severe:#FF0000,no_harm:green};const res response.data.map(…...

JDK 8 升级 JDK 17 全流程教学指南

JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃仔细阅读报错&#xff0c;精确到每个单词每一行&#xff0c;不是自己项目的代码也要点进去看看源码到底是为啥报错明确你项目引入的包&#x…...

Docker 网络之 ipvlan 和 macvlan

Docker ipvlan 和 macvlan 引言 本文讲解了Docker 网络模式中的 ipvlan 和 macvlan 的区别,目前自己在生产环境中使用的 ipvlan 模式非常问题.也解决了实际业务问题. IPvlan L2 mode example ipvlan 无需网卡混杂模式 , 运行如下命令后可以生成一个 vlan 子接口 , 会和主网卡…...

【Rust】Rust学习 第十三章Rust 中的函数式语言功能:迭代器与闭包

Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是 函数式编程&#xff08;functional programming&#xff09;。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 更具体的&#xff0c;我们将要涉及&#…...

【Linux操作系统】详解Linux系统编程中的管道进程通信

在Linux系统编程中&#xff0c;管道是一种常用的进程间通信方式。它可以实现父子进程之间或者兄弟进程之间的数据传输。本文将介绍如何使用管道在Linux系统中进行进程通信&#xff0c;并给出相应的代码示例。 文章目录 1. 管道的概念2. 管道的创建和使用2.1 原型2.2 示例 3. 父…...

【Redis从头学-4】Redis中的String数据类型实战应用场景之验证码、浏览量、点赞量、Json格式存储

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Re…...

linux 统计命令

统计命令 使用wc来进行统计 # wc [选项] 文件名wc -l a 2 awc -w a 8 a---------------l 统计行数-w 统计单词数-m 统计字符数-c 统计字节数 https://zhhll.icu/2021/linux/基础/统计命令/ 本文由 mdnice 多平台发布...

docker部署springboot应用

一、下载安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 启动&#xff1a;systemctl start docker 二、配置国内镜像源 &#xff08;1&#xff09;在/etc/docker目录中添加daemon.json文件&#xff0c;内容如下&#xff1a; { …...

YOLO v5、v7、v8 模型优化

YOLO v5、v7、v8 模型优化 魔改YOLOyaml 文件解读模型选择在线做数据标注 YOLO算法改进YOLOv5yolo.pyyolov5.yaml更换骨干网络之 SwinTransformer更换骨干网络之 EfficientNet优化上采样方式&#xff1a;轻量化算子CARAFE 替换 传统&#xff08;最近邻 / 双线性 / 双立方 / 三线…...

回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本…...