泛微OA有关开发功能记录

本地开发环境搭建

安装Ecology9.0.exe

正常安装流程,设置参数配置

image-20221018102603210

注意点:指定JDK1.8,JDK路径为已经配置好的JDK路径

eg: E:\environment\jdk

安装 Resin4 服务

image-20221018102717324

双击启动,中途有可能安装.net相关依赖

进入地址:localhost:80配置数据库

image-20221018103105451

修改产品安装验证码

连接数据库地址,初始化数据库

需要修改mysql的ini文件的配置

1
2
3
4
[mysqld]
character-set-server=utf8
group_concat_max_len = 102400
transaction-isolation=READ-COMMITTED

数据表创建完成后,进入登录页面卡死,可以先停止Resin,在重新start,等着比较慢可以按空格,之后进入localhost:80页面直到进入登录界面

创建项目

创建工程

  1. 打开idea,new Project,选择一个Java项目,路径选择安装Ecology9.0.exe的路径

压缩文件

image-20221018112442816

image-20221018112621235

image-20221018112652782

复制到

image-20221018112714404

设置编译后的class文件路径

image-20221018112845645

设置类库

注意这边设置lib类库:对应的路径在Classes可看到

image-20221018112952146

安装Resin服务插件支持

image-20221018113219549

image-20221018113612055

设置源文件夹

一般情况下,部署的产品的ecology文件夹中没有src文件夹,需要手工增加。

在【Project Structure】界面点击【Modules】,点【Sources】选择src目录。如果没有src目录就先在项目中创建。

image-20230323172846621

注意点:

  1. 项目启动Resin时,注意要关闭服务中的Resin服务

  2. 当项目启动报错

image-20221021161337098

要先看下项目路径D:\WEAVER\ecology\classbean是否有对应文件,如果没有,将最开始的classbean.zip在该文件夹下解压

重新初始化数据库该如何操作

清除weaver.properties内容,重启项目,会自动进入重新初始化数据库界面。

定时任务

  1. 进入后端应用中心
  2. 点击集成中心
  3. 点击计划任务设置定时任务(设置类的全限定类名)

定时任务类

  1. 在src目录下创建对应的类去继承BaseCronJob,重写execute方法

数据库操作

事务有关处理(这样可以事务回滚)

1
2
3
4
5
RecordSetTrans rst = new RecordSetTrans();
//关闭自动提交
rst.setAutoCommit(false);
//手动提交,如果没提交的话,数据将不会存入数据库中
rst.commit();

获取数据表主键id

1
2
3
4
5
6
7
8
9
10
 //获取数据表的sql
String queryNextCcbdId = "SELECT auto_increment FROM information_schema.`TABLES` WHERE TABLE_SCHEMA='oa' AND TABLE_NAME='xxx'";

recordSet.executeQuery(queryNextCcbdId);
if (recordSet.next()){
//获取下一个自增id,一定要在插入前
id=recordSet.getInt("auto_increment");
}else{
throw new RuntimeException("获取出差表下一个自增主键id失败");
}

获取数据库多条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//从RequestInfo获取流程主表名  dtTableName为自定义常量。表示对应的明细表(_dt1)
String billTableName = requestInfo.getRequestManager().getBillTableName();
//用于存返回的多条数据
List<Map<String, String>> detTable = new ArrayList<>();
//获取数据库查询对象
RecordSet rs = new RecordSet();
rs.executeQuery("select id,mainid,hjkmdm,je,zy,jdf,yg,bm,gys,yh from "+billTableName+dtTableName+" where mainid='"+mainid+"'");
//判断数据是否存在,如果存在就去取对应的值
while (rs.next()){
Map<String, String> map = new HashMap<>();
String id = rs.getString("id");
map.put("id",id);
String mainid1 = rs.getString("mainid");
map.put("mainid",mainid1);
map.put("hjkmdm",rs.getString("hjkmdm"));
map.put("je",rs.getString("je"));
map.put("zy",rs.getString("zy"));
map.put("jdf",rs.getString("jdf"));
map.put("yg",rs.getString("yg"));
map.put("bm",rs.getString("bm"));
map.put("gys",rs.getString("gys"));
map.put("yh",rs.getString("yh"));
//map.put("hswd",rs.getString("hswd"));
detTable.add(map);
}

OA的GetDataUtil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
package com.util;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.annotation.JsonAppend;
import com.weaver.general.Util;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans;
import weaver.formmode.data.ModeDataIdUpdate;
import weaver.general.TimeUtil;
import weaver.soa.workflow.request.*;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

/**
* OA操作数据库工具类
*/
public class GetDataUtil {
//设置日志打印信息,在oa项目中的log/BillTypeLog/GetDataUtil.log日期文件中
public static LogUtil logs = LogUtil.log("GetDataUtil", "BillTypeLog");

/**
* 获取主表数据
*
* @param requestInfo
* @return 返回主表数据
*/
public JSONObject getMainData(RequestInfo requestInfo) {
JSONObject mainJson = new JSONObject();
MainTableInfo mainTableInfo = requestInfo.getMainTableInfo();//获取主表数据
Property[] properties = mainTableInfo.getProperty();
for (int i = 0; i < properties.length; i++) {
String name = properties[i].getName();// 主字段名称
String value = Util.null2String(properties[i].getValue());// 主字段对应的值
mainJson.put(name, value);
}
return mainJson;
}

/**
* 获取明细表数据
*
* @param requestInfo
* @return 返回明细表数据
*/
public Map<Integer, List<Map<String, String>>> getDetDatas(RequestInfo requestInfo) {
Map returnMap = new HashMap<Integer, Map>();
DetailTable[] detailtable = requestInfo.getDetailTableInfo()
.getDetailTable();// 获取所有明细表
if (detailtable.length > 0) {
for (int i = 0; i < detailtable.length; i++) {
List<Map<String, String>> mx = new ArrayList<Map<String, String>>();
DetailTable subTable = requestInfo.getDetailTableInfo().getDetailTable(i);
for (Row row : subTable.getRow()) {
// 每一行
Map<String, String> map = new HashMap<String, String>();
mx.add(map);
String id = row.getId(); //行id
map.put("id", id);
for (Cell cell : row.getCell()) {
String name = cell.getName().toLowerCase();
String value = cell.getValue();
map.put(name, value);
}
}
returnMap.put(i, mx);
}
}
return returnMap;
}

/**
* 读取配置文件
*
* @return
* @throws IOException
*/
public static JSONObject queryIpMsg() throws IOException {
InputStream resourceAsStream = JsonAppend.Prop.class.getClassLoader().getResourceAsStream("com/config/K3Config.properties");
Properties pro = new Properties();
pro.load(resourceAsStream);
JSONObject jsonObject = new JSONObject();
String erpip = pro.getProperty("LOGIN_IP");
String login_address = pro.getProperty("LOGIN_ADDRESS");
String db_id = pro.getProperty("DB_ID");
String username = pro.getProperty("USERNAME");
String appid = pro.getProperty("APPID");
String appser = pro.getProperty("APPSER");
String lc_id = pro.getProperty("LC_ID");
String bill_save = pro.getProperty("BILL_SAVE");
String bill_submit = pro.getProperty("BILL_SUBMIT");
String bill_audit = pro.getProperty("BILL_AUDIT");
String bill_push = pro.getProperty("BILL_PUSH");
String rcbx_kgskmbmdf1 = pro.getProperty("RCBX_KGSKMBMDF1");
String rcbx_kgskmbmjf2 = pro.getProperty("RCBX_KGSKMBMJF2");
String rcbx_kgskmbmdf2 = pro.getProperty("RCBX_KGSKMBMDF2");
String rcbx_fkgskmbmdf = pro.getProperty("RCBX_FKGSKMBMDF");
String clbx_kgskmbmdf = pro.getProperty("CLBX_KGSKMBMDF");
String dwfk_kgskmbmdf1 = pro.getProperty("DWFK_KGSKMBMDF1");
String dwfk_kgskmbmjf2 = pro.getProperty("DWFK_KGSKMBMJF2");
String dwfk_kgskmbmdf2 = pro.getProperty("DWFK_KGSKMBMDF2");
String dwfk_kgskmbmdf3 = pro.getProperty("DWFK_KGSKMBMDF3");
String dwfk_fkgskmbmdf = pro.getProperty("DWFK_FKGSKMBMDF");

jsonObject.put("erpip", erpip);
jsonObject.put("login_address", login_address);
jsonObject.put("db_id", db_id);
jsonObject.put("username", username);
jsonObject.put("appid", appid);
jsonObject.put("appser", appser);
jsonObject.put("lc_id", lc_id);

jsonObject.put("bill_save", bill_save);
jsonObject.put("bill_submit", bill_submit);
jsonObject.put("bill_audit", bill_audit);
jsonObject.put("bill_push", bill_push);

jsonObject.put("rcbx_kgskmbmdf1", rcbx_kgskmbmdf1);
jsonObject.put("rcbx_kgskmbmjf2", rcbx_kgskmbmjf2);
jsonObject.put("rcbx_kgskmbmdf2", rcbx_kgskmbmdf2);
jsonObject.put("rcbx_fkgskmbmdf", rcbx_fkgskmbmdf);
jsonObject.put("clbx_kgskmbmdf", clbx_kgskmbmdf);

jsonObject.put("dwfk_kgskmbmdf1", dwfk_kgskmbmdf1);
jsonObject.put("dwfk_kgskmbmjf2", dwfk_kgskmbmjf2);
jsonObject.put("dwfk_kgskmbmdf2", dwfk_kgskmbmdf2);
jsonObject.put("dwfk_kgskmbmdf3",dwfk_kgskmbmdf3);
jsonObject.put("dwfk_fkgskmbmdf", dwfk_fkgskmbmdf);
return jsonObject;
}

/**
* 字段值查询
*
* @param queryField
* @param conditionField
* @param tableName
* @param conditionVal
* @param rs
* @return
*/
public String queryData(String queryField, String conditionField, String tableName, String conditionVal, RecordSet rs) {
String param = "";
String sql = "select " + queryField + " param from " + tableName + " where " + conditionField + " =?";
rs.executeQuery(sql, conditionVal);
if (rs.next()) {
param = rs.getString("param");
}
return param;
}

/**
* 查询科目编码及名称
*/
public JSONObject querySubjectMsg(RecordSet rs, String kmid, String queryField1, String queryField2, String tableName,String queryField3) {
String subCode = "";
String subName = "";
String hswd = "";
JSONObject jsonObject = new JSONObject();
String sql = "select " + queryField1 + " subCode," + queryField2 + " subName," +
""+queryField3+" hswd " +
"from " + tableName + "" +
" where id = ? ";
logs.info("querySubjectMsg-->sql:" + sql);
rs.executeQuery(sql, kmid);
if (rs.next()) {
subCode = rs.getString("subCode");
subName = rs.getString("subName");
hswd = rs.getString("hswd");
}
jsonObject.put("subCode", subCode);
jsonObject.put("subName", subName);
jsonObject.put("hswd", hswd);
return jsonObject;
}

/**
* 查询科目名称 uf_CWGL_cxlb
*/
public String querySubjectName(RecordSet rs, String conditionField, String subCode, String queryField,String tableName) {
String subName = "";
String sql = "select " + queryField + " subName " +
"from "+tableName+"" +
" where " + conditionField + " = ?";
// " and kmlx = ?";
logs.info("querySubNameSql:" + sql);
rs.executeQuery(sql, subCode);
if (rs.next()) {
subName = rs.getString("subName");

if (StringUtils.isNotBlank(subName)) {
if (subName.contains("_")) {
String[] bxlbs = subName.split("_");
subName = bxlbs[1];
}
}
}
return subName;
}

/**
* 根据mainid字段删除数据
* @param rst
* @param mainid
* @param tableName
* @throws Exception
*/
public void delDetData(RecordSetTrans rst, String mainid, String tableName) throws Exception {
String delDetSql = "delete from " + tableName + " where mainid = '" + mainid + "'";
logs.info("delDetData:"+delDetSql);
rst.executeSql(delDetSql);
}

public JSONObject querySubType(String kmlx) {
JSONObject jsonObject = new JSONObject();
String subCodeField = "";//科目编码字段名
String subNameField = "";//科目名称字段名
String kmlxName = "";//科目类型名称
//部门自定义科目类型下拉框值:0:管理,1:制造,2:销售
//建模会计科目,科目类型下拉框值:0:管理,1:销售,2:制造
if (StringUtils.equals("1", kmlx)) {
kmlx = "2";
subCodeField = "zzfyjdkmbm";
subNameField = "zzfyjdkmmc";
kmlxName = "制造";
} else if (StringUtils.equals("2", kmlx)) {
kmlx = "1";
subCodeField = "xsfyjdkmbm";
subNameField = "xsfyjdkmmc";
kmlxName = "销售";
} else if (StringUtils.equals("0", kmlx)) {
subCodeField = "glfyjdkmbm";
subNameField = "glfyjdkmmc";
kmlxName = "管理";
}
jsonObject.put("subCodeField", subCodeField);
jsonObject.put("subNameField", subNameField);
jsonObject.put("kmlxName", kmlxName);
return jsonObject;
}

/**
* 更新主表信息
* @param rst
* @param billNo
* @param sfcg
* @param msg
* @param requestid
* @param field1
* @param field2
* @param field3
* @param tableName
* @throws Exception
*/
public void updateBillData(RecordSetTrans rst, String billNo, String sfcg, String msg, String requestid, String field1, String field2, String field3, String tableName) throws Exception {
try {
String sql = "update " + tableName + " set " + field1 + "='" + billNo + "'," +
"" + field2 + "='" + sfcg + "'," + field3 + "='" + msg + "' " +
"where requestid = '" + requestid + "'";
logs.info("updateBillData-->sql:" + sql);
boolean result = rst.executeSql(sql);
if (result) {
logs.info("updateBillData-->更新凭证信息成功");
} else {
logs.info("updateBillData-->更新流程凭证信息失败,请检查!");
}
} catch (Exception e) {
e.getStackTrace();
logs.info("updateBillData-->更新流程凭证信息异常,请检查!" + e);
}
}

public void updateVoucherData(RecordSetTrans rst, RecordSet rs, JSONObject msgJson) {
JSONObject jsonObject = new JSONObject();
try {
String requestid = msgJson.getString("requestid");
String lcbh = msgJson.getString("lcbh");
String workflowid = msgJson.getString("workflowid");
String billNo = msgJson.getString("billNo");
String sfcg = msgJson.getString("sfcg");
String fhxx = msgJson.getString("msg");
String workflowType = queryWorkflowType(rs, workflowid);
String currentdate = TimeUtil.getCurrentDateString();
String currenttime = TimeUtil.getOnlyCurrentTimeString();
Integer billid = ModeDataIdUpdate.getInstance().getModeDataNewIdByUUID("uf_PZTZ", 58, 1, 0, currentdate, currenttime);

String sql = "update uf_PZTZ set " +
"lc = '" + requestid + "'," +
"lcdh = '" + lcbh + "'," +
"lclx = '" + workflowType + "'," +
"pzh = '" + billNo + "'," +
"pzzt = '" + sfcg + "'," +
"pzxx = '" + fhxx + "' " +
"where id = '" + billid + "'";
logs.info("updateBillData-->更新凭证台账sql:" + sql);
boolean result = rst.executeSql(sql);
if (result) {
logs.info("updateBillData-->更新凭证台账成功");
} else {
jsonObject.put("statu", "fail");
logs.info("updateBillData-->更新凭证台账失败,请检查!");
}
} catch (Exception e) {
e.getStackTrace();
logs.info("updateBillData-->更新凭证台账异常,请检查!" + e);
}
}

public static void updateJdyVoucherData(RecordSetTrans rst, JSONObject msgJson) {
try {
String currentdate = TimeUtil.getCurrentDateString();
String currenttime = TimeUtil.getOnlyCurrentTimeString();
Integer billid = ModeDataIdUpdate.getInstance().getModeDataNewIdByUUID("uf_JDYPZTZ", 59, 1, 0, currentdate, currenttime);
String sql = "update uf_JDYPZTZ set " +
"pzh = '" + msgJson.getString("billNo") + "'," +
"flxh = '" + msgJson.getString("entityNo") + "'," +
"zy = '" + msgJson.getString("zy") + "'," +
"zt = '" + msgJson.getString("zt") + "'," +
"kmdm = '" + msgJson.getString("hjkmdm") + "'," +
"kmmc = '" + msgJson.getString("hjkmmc") + "'," +
"jfje = '" + msgJson.getString("jfje") + "'," +
"dfje = '" + msgJson.getString("dfje") + "'," +
"kh = '" + msgJson.getString("kh") + "'," +
"gys = '" + msgJson.getString("gys") + "'," +
"zy1 = '" + msgJson.getString("bxr") + "'," +
"xm = '" + msgJson.getString("xm") + "'," +
"bm = '" + msgJson.getString("bm") + "'," +
"chlb = '" + msgJson.getString("chlb") + "'," +
"sl = '" + msgJson.getString("sl") + "'," +
"dj = '" + msgJson.getString("dj") + "'," +
"ybje = '" + msgJson.getString("je") + "'," +
"bb = '" + msgJson.getString("bb") + "'," +
"hl = '" + msgJson.getString("hl") + "' " +
"where id = '" + billid + "'";
logs.info("updateBillData-->更新精斗云凭证sql:" + sql);
boolean result = rst.executeSql(sql);
if (result) {
logs.info("updateBillData-->更新精斗云凭证台账成功");
} else {
logs.info("updateBillData-->更新精斗云凭证台账失败,请检查!");
}
} catch (Exception e) {
e.getStackTrace();
logs.info("updateBillData-->更新精斗云凭证台账异常,请检查!" + e);
}
}

private String queryWorkflowType(RecordSet rs, String workflowid) {
String typename = "";
String sql = "select b.typename typename" +
" from workflow_base a," +
"workflow_type b" +
" where a.workflowtype = b.id" +
" and a.id = ?";
rs.executeQuery(sql, workflowid);
if (rs.next()) {
typename = rs.getString("typename");
}
return typename;
}

public static String querySubName(String subid, String tableName, String queryField) {
String subName = "";
RecordSet rs = new RecordSet();
String sql = "select " + queryField + " subName from " + tableName + " where id = ?";
rs.executeQuery(sql, subid);
if (rs.next()) {
subName = rs.getString("subName");
}
return subName;
}
public JSONObject queryWldw(String hswd, String gyss, String ygs, String bms,String khs) {
String gys = "";
String yg = "";
String bm = "";
String kh = "";
JSONObject msgJson = new JSONObject();
if (org.apache.commons.lang.StringUtils.equals("供应商", hswd)) {
gys = gyss;
} else if (org.apache.commons.lang.StringUtils.equals("员工", hswd)) {
yg = ygs;
} else if (org.apache.commons.lang.StringUtils.equals("部门", hswd)) {
bm = bms;
}else if (org.apache.commons.lang.StringUtils.equals("客户", hswd)) {
kh = khs;
}
msgJson.put("gys", gys);
msgJson.put("yg", yg);
msgJson.put("bm", bm);
msgJson.put("kh", kh);
return msgJson;
}
}

OA的LogUtil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
package com.util;
import weaver.general.GCONST;
import weaver.general.TimeUtil;

import java.io.*;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


/**
* 日志处理类
* @author wwq
* @version 1.0
*/
public class LogUtil {
/** 日志管理器缓存对象 **/
private static Map<String, LogUtil> logManager = new HashMap<String, LogUtil>();
/** 日志模式 run:运行模式 debug:调试模式 **/
private String mode = "run";
/** 日志文件名 **/
private String logFileName;
/** 日志所在目录名 **/
private String logDirName;
/** 调用类类型 **/
private Type t;
/** 日志缓存串 **/
private StringBuffer logCacheString = new StringBuffer();
/** 日志缓存大小(单位:字符长度) **/
private int cacheLen = 1;
/** 日志当前行号 **/
private int rowCount = 0;

/**
* 构造函数
* @param t 输出类名
* @param logFileName 日志文件名
* @param logDirName 日志目录名
*/
private LogUtil(Type t, String logFileName, String logDirName){
this.t = t;
this.logFileName = logFileName;
this.logDirName = logDirName;
}

/**
* 获取默认日志对象
* @return
*/
public static LogUtil log(){
return log(null, "dev", "dev");
}

/**
* 获取默认日志对象
* @return
*/
public static LogUtil log(Type t){
return log(t, "dev", "dev");
}

/**
* 获取日志对象
* @param logFileName 日志文件名
* @param logDirName 日志目录名
* @return
*/
public static LogUtil log(String logFileName, String logDirName){
return log(null, logFileName, logDirName);
}

/**
* 获取日志对象
* @param t 输出类名
* @param logFileName 日志文件名
* @param logDirName 日志目录名
* @return
*/
public static LogUtil log(Type t, String logFileName, String logDirName){
if("".equals(logFileName) || logFileName == null){
logFileName = "dev";
}
if("".equals(logDirName) || logDirName == null){
logDirName = "dev";
}
String key = logFileName + "_" + logDirName;
if(logManager.containsKey(key)){
return logManager.get(key);
} else {
LogUtil lu = new LogUtil(t, logFileName, logDirName);
logManager.put(key, lu);
return lu;
}
}

/**
* 开始批量输出日志
* @param cacheLen 日志输出缓存长度,字节
*/
public void beginBatch(int cacheLen){
this.cacheLen = cacheLen;
}

/**
* 开始批量输出日志
*/
public void beginBatch(){
this.cacheLen = 1024 * 1024;
}

/**
* 结束批量输出日志
*/
public void endBatch(){
this.cacheLen = 1;
this.writeToFile();
}

/**
* 输出日志
* @param msg 日志信息
* @param t 异常对象
*/
public void info(String msg, Throwable t){
info(msg, t, true);
}

/**
* 输出日志
* @param msg 日志信息
* @param t 异常对象
* @param isShow 是否显示日志
*/
public void info(String msg, Throwable t, boolean isShow){
if(!isShow){
return;
}
this.logCacheString.append(getTitle()).append(msg).append("\r\n");
if(t != null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try{
t.printStackTrace(new PrintStream(baos));
this.logCacheString.append(baos.toString());
}finally{
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

//写入文件
if(this.logCacheString.length() >= this.cacheLen){
writeToFile();
}
}

/**
* 输出日志
* @param msg 日志信息
* @param isShow 是否显示日志
*/
public void info(String msg, boolean isShow){
info(msg, null, isShow);
}

/**
* 输出日志
* @param msg 日志信息
*/
public void info(String msg){
info(msg, null);
}

/**
* 输出日志
*/
public void info(){
info("", null);
}

/**
* 输出日志
* @param msg 日志信息
* @param t 异常对象
*/
public void debug(String msg, Throwable t){
if("debug".equals(this.mode)){
info(msg, t);
}
}

/**
* 输出日志
* @param msg 日志信息
*/
public void debug(String msg){
debug(msg, null);
}

/**
* 输出日志
*/
public void debug(){
debug("", null);
}

/**
* 获取日志头
* @return
*/
public String getTitle(){
rowCount++;
String curDate = TimeUtil.getFormartString(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
String className = "";
if(t != null){

className = ((Class<?>)t).getName() + " ";
}
return "[" + rowCount + " " + curDate + " " + className + "] - ";
}

/**
* 写入文件
*/
public void writeToFile(){
String rootPath = GCONST.getRootPath()==null? getRootPath():GCONST.getRootPath();
System.out.println("rootPath="+rootPath);
String logPath = rootPath + "log" + File.separator + logDirName + File.separator;
String fileName = logFileName + TimeUtil.getFormartString(new Date(), "_yyyyMMdd") + ".log";
File dir = new File(logPath);
try{
System.out.println("logPath="+logPath);
if(!dir.exists()){
dir.mkdirs();
}
//写文件
FileWriter writer = null;
try {
writer = new FileWriter(logPath + fileName, true);
writer.write(this.logCacheString.toString());
this.logCacheString = new StringBuffer();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch(Exception e){
e.printStackTrace();
}
}


/**
* 输出所有缓存
*/
public static void flush(){
for(String key : logManager.keySet()){
logManager.get(key).writeToFile();
}
}

/**
* 获取项目绝对路径
* @return
*/
public static String getRootPath(){
//return System.getProperty("user.dir");
String rootPath = LogUtil.class.getResource("").toString();
try {//中文路径处理
rootPath = java.net.URLDecoder.decode(rootPath, "utf-8");
}catch (Exception e){}
if(rootPath.length() > 0){
rootPath = rootPath.replace("file:/", "");
int index = rootPath.indexOf("WEB-INF/classes/");
if(index >= 0){
rootPath = rootPath.substring(0, index);
}
index = rootPath.indexOf("classbean/");
if(index >= 0){
rootPath = rootPath.substring(0, index);
}
rootPath = rootPath.replace("/", File.separator);
if(rootPath.indexOf(":") < 0 && !rootPath.startsWith("/")){
rootPath = "/" + rootPath;
}
}
return rootPath;
}

public static void main(String[] args) {
// System.out.println(LogUtil.class.getName());
LogUtil.log(LogUtil.class).info("测试1");
LogUtil.log().info("测试2");
LogUtil.log().info("测试3");
LogUtil.flush();
}
}

流程错误在流程页面显示报错信息

主要在catch中设置如下代码

1
2
3
4
5
6
7
8
9
10
//用于输出前端错误信息
RequestManager requestManager = requestInfo.getRequestManager();
try{
//执行业务逻辑
}catch(Exception e){
//返回错误信息到流程页面
requestManager.setMessageid(WorkflowRequestMessage.WF_REQUEST_ERROR_CODE_07);
requestManager.setMessagecontent("凭证处理异常:" + e);
return FAILURE_AND_CONTINUE;
}

流程处理

参考地址

  1. ecology系统配置
    • 配置接口白名单
    • 发放/生成许可证(appid)
  2. 外部系统编码实现认证(RSA加密)
  3. 向oa系统发送许可证信息进行认证(这个接口参数loginid和pwd就是oa系统的登录名和密码)
  4. 获取token(注册认证返回的spk作为密钥,加密返回的secret生成新的secret作为参数)
  5. 开始调用对应的系统业务接口(比如流程等,这里用到的userid是hrmresource表的id通过认证返回的spk密钥加密)

步骤

  1. 创建类继承BaseAction,重写execute方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    package com.action;


    import cn.hutool.http.HttpException;
    import cn.hutool.http.HttpUtil;
    import cn.hutool.json.JSONObject;
    import com.alibaba.fastjson.JSON;
    import com.constant.WorkFlowConstant;
    import com.entity.dto.CrmApiConstant;
    import com.entity.vo.CrmCustomerBackLog;
    import com.util.*;
    import lombok.extern.slf4j.Slf4j;
    import weaver.conn.RecordSet;
    import weaver.hrm.User;
    import weaver.interfaces.workflow.action.BaseAction;
    import weaver.soa.workflow.request.MainTableInfo;
    import weaver.soa.workflow.request.Property;
    import weaver.soa.workflow.request.RequestInfo;

    import java.time.LocalDateTime;
    import java.util.HashMap;
    import java.util.Map;

    /**
    * @description: CRM客分部信息流程返回
    */
    @Slf4j
    public class CrmKfbBackAction extends BaseAction {

    @Override
    public String execute(RequestInfo requestInfo) {

    if(requestInfo == null || requestInfo.getMainTableInfo() == null || requestInfo.getMainTableInfo().getPropertyCount() == 0 ){
    //assert 封装的方法 判断对象是否为空
    assert requestInfo != null;
    requestInfo.getRequestManager().setMessageid("leaveAction");
    requestInfo.getRequestManager().setMessagecontent("未获取到表单信息!");
    return "0";
    }
    String nextNodeType = requestInfo.getRequestManager().getNextNodetype();
    //当前操作类型 submit:提交/reject:退回 审批节点或审批类型
    String src = requestInfo.getRequestManager().getSrc();
    boolean b = src.equals(WorkFlowConstant.WORK_FLOW_SUBMIT_TYPE) || src.equals(WorkFlowConstant.WORK_FLOW_INTERVENOR_TYPE);
    //判断是提交或者归档没有下一个节点人,则直接返回
    if(b && StringUtils.isEmpty(nextNodeType)){
    return "1";
    }
    //记录日志
    CrmCustomerBackLog crmCustomerBackLog = new CrmCustomerBackLog();
    JSONObject json = new JSONObject();
    //请求类型 客分部
    crmCustomerBackLog.setRequestType("2");
    //备注 审批意见
    String remark = requestInfo.getRequestManager().getRemark();
    //传递参数
    String param=null;
    try{
    crmCustomerBackLog.setRequestId(requestInfo.getRequestid());
    crmCustomerBackLog.setWorkFlowId(requestInfo.getWorkflowid());
    //获取当前操作用户对象
    User user = requestInfo.getRequestManager().getUser();
    //请求标题
    String requestname = requestInfo.getRequestManager().getRequestname();
    //获取当前用户提交时的签字意见
    String status2 = requestInfo.getRequestManager().getStatus();
    String lastOperator = requestInfo.getLastoperator();

    log.info("remark="+remark);
    if (StringUtils.isEmpty(remark)){
    remark="";
    }
    log.info("usr=" + JSON.toJSONString(user));
    log.info("requestname=" + requestname);
    log.info("status=" + status2);
    log.info("lastOperator=" + lastOperator);
    log.info("CrmKfbBackAction-src=" + src);

    //获取主表信息
    MainTableInfo main = requestInfo.getMainTableInfo();
    //主表字段
    Property[] property = main.getProperty();
    //获取对应的字段去返回
    //客分部编号
    String kfbbh = RequestInfoUtils.getPropertyByName(property , "kfbbh");
    //客分部id
    String divisionId = RequestInfoUtils.getPropertyByName(property , "kfbid");
    //审批人
    String approvalUserName = user.getLastname();

    byte status;
    if (b){
    //正常提交
    status=8;
    }else{
    status=2;
    if (StringUtils.isEmpty(remark)){
    remark = "审批不通过,请联系审核员确认";
    }
    }
    //获取当前操作者的id
    String approverID = user.getLoginid();


    //先去登录
    JSONObject loginJson = new JSONObject();
    loginJson.set("userName",CrmApiConstant.USERNAME);
    loginJson.set("userPassword",CrmApiConstant.PASSWORD);
    String loginResult="";
    try {
    loginResult = HttpUtil.createPost(CrmApiConstant.LOGIN_URL).addHeaders(null).body(String.valueOf(loginJson)).execute().body();
    } catch (HttpException e) {
    log.info("登录失败,异常信息:"+e.getMessage());
    e.printStackTrace();
    }
    log.info("登录回调返回信息:"+loginResult);
    Map<String, String> headerMap = new HashMap<>();
    com.alibaba.fastjson.JSONObject loginJsonObject = com.alibaba.fastjson.JSONObject.parseObject(loginResult);
    if (!loginJsonObject.get("success").toString().equals("true")){
    //代表登录失败
    crmCustomerBackLog.setResult("请求异常,CRM登录返回调用异常" + loginResult);
    }else{
    //登录成功 获取token
    com.alibaba.fastjson.JSONObject data = com.alibaba.fastjson.JSONObject.parseObject(loginJsonObject.get("data").toString());
    String accessToken = data.get("access_token").toString();
    headerMap.put("Authorization",accessToken);
    }


    json.set("divisionCode",kfbbh);
    json.set("divisionId",divisionId);
    json.set("approvalUserName", approvalUserName);
    json.set("remark", remark);
    json.set("approvalType", src);

    log.info("封装的JSON数据:"+json);
    param = String.valueOf(json);
    crmCustomerBackLog.setCreateBy(approverID);
    String result;

    try {
    //执行请求到客分部
    crmCustomerBackLog.setRequestUrl(CrmApiConstant.KFB_URL);
    result = HttpUtil.createPost(CrmApiConstant.KFB_URL).addHeaders(headerMap).body(String.valueOf(json)).execute().body();
    }catch (Exception e){
    result = "请求CRM客分部异常,异常信息:" + e.getMessage();
    crmCustomerBackLog.setStatus("2");
    }
    log.info("CRM客分部回调result = " + result);
    if(StringUtils.isEmpty(result)){
    crmCustomerBackLog.setResult("请求异常,CRM客户分部接口返回为空");
    crmCustomerBackLog.setStatus("2");
    }
    com.alibaba.fastjson.JSONObject resultJson = com.alibaba.fastjson.JSONObject.parseObject(result);
    log.info("转换为json后resultJson = " + JSON.toJSONString(resultJson));
    if (!resultJson.get("success").toString().equals("true")){
    //失败
    crmCustomerBackLog.setResult("请求异常,CRM客分部返回调用异常" + resultJson);
    crmCustomerBackLog.setStatus("2");
    }else{
    //成功
    crmCustomerBackLog.setResult(result);
    crmCustomerBackLog.setStatus("1");
    }
    }catch (Exception e){
    crmCustomerBackLog.setResult(e.getMessage());
    crmCustomerBackLog.setStatus("2");
    log.error("流程触发发生异常="+e);
    }finally {
    crmCustomerBackLog.setRemark(src + remark);
    crmCustomerBackLog.setParam(param);
    log.info("流程触发进入新增");
    log.info("crmCustomerBackLog="+JSON.toJSONString(crmCustomerBackLog));
    String insertSql = "INSERT INTO crm_customer_back_log (request_id , work_flow_id , request_url , remark , param , result , status ,request_type, create_by , create_time) VALUES(? , ? , ? , ? , ? , ? , ?,? , ? , ?)";
    RecordSet recordSet = new RecordSet();
    recordSet.executeUpdate(insertSql , crmCustomerBackLog.getRequestId() , crmCustomerBackLog.getWorkFlowId() , crmCustomerBackLog.getRequestUrl() , crmCustomerBackLog.getRemark() , crmCustomerBackLog.getParam() ,crmCustomerBackLog.getResult() , crmCustomerBackLog.getStatus() ,crmCustomerBackLog.getRequestType(), crmCustomerBackLog.getCreateBy() , LocalDateTime.now());
    }
    return "1";
    }
    }

  2. 进入系统->后端应用中心->集成中心->流程流转集成->注册自定义接口

    image-20230323181439207

  3. 设置流程的节点前后附加操作

    image-20230323181621094

image-20230323181637044

金蝶连接生成凭证

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ERPIP
LOGIN_IP=http://39.108.63.31:23655/K3Cloud
#ERP授权校验地址
LOGIN_ADDRESS=/Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc
#ERP账套id
DB_ID=6464f2f53df478
#ERP用户名
USERNAME=demo
#ERP登录授权的应用ID
APPID=248908_X23N19COQNGY6ayFw6Qq6w1E2JX94BNH
#ERP登录授权的应用密钥
APPSER=3ec37380d7814d30befc4e7c8765959a
#ERP语言
LC_ID=2052
#单据保存
BILL_SAVE=/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc
#单据提交
BILL_SUBMIT=/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc
#单据审核
BILL_AUDIT=/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc
#单据下推
BILL_PUSH=/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Push.common.kdsvc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 金蝶接口连接
*/
public class JDSendService {
// private final static String ip = "http://erp.insta360.com:6767";
private static Map<String, String> urlMap = new HashMap<String, String>();

static {
try {
JSONObject jsonObject = GetDataUtil.queryIpMsg();
String erpip = jsonObject.getString("erpip");
String login_address = jsonObject.getString("login_address");
String db_id = jsonObject.getString("db_id");
String username = jsonObject.getString("username");
String appid = jsonObject.getString("appid");
String appser = jsonObject.getString("appser");
String lc_id = jsonObject.getString("lc_id");
String bill_save = jsonObject.getString("bill_save");
String bill_submit = jsonObject.getString("bill_submit");
String bill_audit = jsonObject.getString("bill_audit");
String bill_push = jsonObject.getString("bill_push");
urlMap.put("erpip", erpip);//登录地址
urlMap.put("login_address", login_address);//登录地址
urlMap.put("db_id", db_id);//账套
urlMap.put("username", username);//用户名
urlMap.put("appid", appid);//appid
urlMap.put("appser", appser);//appser
urlMap.put("lc_id", lc_id);//语言
urlMap.put("save", erpip + bill_save);//单据保存
urlMap.put("submit", erpip + bill_submit);//单据提交
urlMap.put("audit", erpip + bill_audit);//单据审核
urlMap.put("push", erpip + bill_push);//单据下推
} catch (IOException e) {
e.printStackTrace();
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->加载配置文件异常:" + e);
}
}

public JSONObject SendJd(String flag, String data) throws Exception {
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->start");
Map<String, String> headers = new HashMap<String, String>();
String url = urlMap.get(flag);
JSONObject msgJson = new JSONObject();
JSONObject result = new JSONObject();
try {
String cookie = getCookie();
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->cookie:" + cookie);
JSONObject jsonObject = JSON.parseObject(cookie);
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->jsonObject:" + jsonObject);
String aspCookie = jsonObject.getString("ASP.NET_SessionId");
String serviceCookie = jsonObject.getString("kdservice-sessionid");
// headers.put("cookie", cookie);
headers.put("ASP.NET_SessionId", aspCookie);
headers.put("kdservice-sessionid", serviceCookie);
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->url:" + url);
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->data:" + data);
result = HttpClient.httpPostRaw(url, data, headers, "UTF-8");
} catch (Exception e) {
LogUtil.log("JDSendService", "BillTypeLog").info("SendJd-->异常:" + e.getMessage());
msgJson.put("statu", "fail");
msgJson.put("msg", e.getMessage());
return msgJson;
}
msgJson.put("statu", "success");
msgJson.put("data", result);
return msgJson;
}

//获取金蝶 cookie
public static String getCookie() throws Exception {
LogUtil.log("JDSendService", "BillTypeLog").info("getCookie-->start");
String erpip = urlMap.get("erpip");
String login_address = urlMap.get("login_address");
String db_id = urlMap.get("db_id");
String username = urlMap.get("username");
String appid = urlMap.get("appid");
String appser = urlMap.get("appser");
String lc_id = urlMap.get("lc_id");
JSONObject jsonObject = new JSONObject();
ArrayList arrayList = new ArrayList();
arrayList.add(db_id);
arrayList.add(username);
arrayList.add(appid);
arrayList.add(appser);
arrayList.add(lc_id);
jsonObject.put("parameters", arrayList);
LogUtil.log("JDSendService", "BillTypeLog").info("getCookie-->jsonObject:"+jsonObject);
HttpClientUtil h = new HttpClientUtil.Builder(erpip + login_address, jsonObject.toString()).setFlag(14).setContentType("application/json;charset=utf-8").setAcceptType("application/json").build();
LogUtil.log("JDSendService", "BillTypeLog").info("getCookie-->h.body:"+h.body);
return h.body;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
package com.util;

import com.alibaba.fastjson.JSONObject;
import com.constant.KingDeeConstant;
import com.entity.vo.kingDee.*;
import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.soa.workflow.request.RequestInfo;


import java.text.SimpleDateFormat;
import java.util.*;

/**
* @Title: KindeeUtil
* @Author huan
* @Package com.util
* @Date 2023/6/15 10:33
* @description: 金蝶有关工具类
*/
@Slf4j
public class KingdeeUtil {
public static JSONObject voucherGeneration(RequestInfo requestInfo, RecordSet rs, String type,String dtTableName) throws Exception {
log.info("金蝶凭证生成-->开始");
String pzz = "PRE001";//凭证字
String bb = "PRE001";//币别
String hllx = "HLTX01_SYS";//汇率类型
JSONObject returnJson = new JSONObject();
GetDataUtil getDataUtil = new GetDataUtil();
JSONObject mainData = getDataUtil.getMainData(requestInfo);
String billTableName = requestInfo.getRequestManager().getBillTableName();
String requestid = requestInfo.getRequestid();
String mainid = getDataUtil.queryData("id", "requestid", billTableName, requestid, rs);//主表id
log.info("金蝶凭证生成-->主表信息:" + mainData);
String dh = mainData.getString("dh");//单号
String sqrq = mainData.getString("sqrq");//申请日期
String fkgs = mainData.getString("fkgs");//付款公司
String bxr = mainData.getString("bxr");//报销人
String bxrCode = getDataUtil.queryData("workcode", "id", "hrmresource", bxr, rs);//报销人编码
String cbzxbmbm = mainData.getString("cbzxbmbm");//成本中心部门编码
String fkgsCode = getDataUtil.queryData("gsbm", "id", "uf_CWGL_fkgs", fkgs, rs);//付款公司编码(账簿)
log.info("金蝶凭证生成-->付款公司编码:" + fkgsCode);
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(date);
//Date parse = sdf.parse(sqrq);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
List<Map<String, String>> detTable = new ArrayList<>();
Model model = new Model();
JSONObject modelJson = new JSONObject();
FAccountBookID fAccountBookID = new FAccountBookID();
FVOUCHERGROUPID fvouchergroupid = new FVOUCHERGROUPID();

fAccountBookID.setFNumber(fkgsCode);
fvouchergroupid.setFNumber(pzz);


if (StringUtils.equals(type,"3")){
log.info("开始进入推送凭证3到金蝶");
rs.executeQuery("select id,mainid,hjkmdm,je,zy,jdf,yg,bm,gys,yh from "+billTableName+dtTableName+" where mainid='"+mainid+"'");
while (rs.next()){
Map<String, String> map = new HashMap<>();
String id = rs.getString("id");
map.put("id",id);
String mainid1 = rs.getString("mainid");
map.put("mainid",mainid1);
map.put("hjkmdm",rs.getString("hjkmdm"));
map.put("je",rs.getString("je"));
map.put("zy",rs.getString("zy"));
map.put("jdf",rs.getString("jdf"));
map.put("yg",rs.getString("yg"));
map.put("bm",rs.getString("bm"));
map.put("gys",rs.getString("gys"));
map.put("yh",rs.getString("yh"));
//map.put("hswd",rs.getString("hswd"));
detTable.add(map);
}
log.info("明细表"+dtTableName+"数据:"+detTable);
}
model.setFBillNo(dh+ KingDeeConstant.ORDER_HZ);
model.setFAccountBookID(fAccountBookID);
model.setFVOUCHERGROUPID(fvouchergroupid);
model.setFDate(format);
model.setFYEAR(year);
model.setFPERIOD(month);
model.setFSid(dh+KingDeeConstant.ORDER_HZ);
log.info("金蝶凭证生成-->明细表数据:" + detTable);
ArrayList arrayList = new ArrayList();
for (int i = 0; i < detTable.size(); i++) {
String kmbm = detTable.get(i).get("hjkmdm");
//String hjkmmc = detTable.get(i).get("hjkmmc");
String je = detTable.get(i).get("je");
String zy = detTable.get(i).get("zy");
String jdf = detTable.get(i).get("jdf");

String yg = detTable.get(i).get("yg");
String bm = detTable.get(i).get("bm");
String gys = detTable.get(i).get("gys");
String yh = detTable.get(i).get("yh");
String hswd = detTable.get(i).get("hswd");
String jfje = "";
String dfje = "";
FEntity fEntity = new FEntity();
FDetailID fDetailID = new FDetailID();

//0:借方,1:贷方
if (StringUtils.equals(jdf, "0")) {
//借方传除对外传员工
if(StringUtils.isNotBlank(yg)){
String ygCode = getDataUtil.queryData("workcode", "id", "hrmresource", yg, rs);//员工编码
FDETAILID__FFLEX7 fdetailid__fflex7 = new FDETAILID__FFLEX7();
fdetailid__fflex7.setFNumber(ygCode);
fDetailID.setFDETAILID__FFLEX7(fdetailid__fflex7);
}
if(StringUtils.isNotBlank(gys)){
String supCode = getDataUtil.queryData("jdgyskhbm", "id", "uf_CWGL_fkyh", gys, rs);//供应商
FDETAILID__FFLEX4 fFlex4 = new FDETAILID__FFLEX4();
fFlex4.setFNumber(supCode);
fDetailID.setFDETAILID__FFLEX4(fFlex4);
}
jfje = je;
} else if (StringUtils.equals(jdf, "1")) {
//贷方传银行
String supCode = getDataUtil.queryData("yhzh", "id", "uf_yhzh", yh, rs);//银行账号
FDETAILID__FFLEX15 fFlex15 = new FDETAILID__FFLEX15();
fFlex15.setFNumber(supCode);
fDetailID.setFDETAILID__FFLEX15(fFlex15);
dfje = je;
}
FACCOUNTID faccountid = new FACCOUNTID();
FCURRENCYID fcurrencyid = new FCURRENCYID();
FEXCHANGERATETYPE fexchangeratetype = new FEXCHANGERATETYPE();
faccountid.setFNumber(kmbm);
fcurrencyid.setFNumber(bb);
fexchangeratetype.setFNumber(hllx);
fEntity.setFACCOUNTID(faccountid);
fEntity.setFCURRENCYID(fcurrencyid);
fEntity.setFEXCHANGERATETYPE(fexchangeratetype);
fEntity.setFAMOUNTFOR(je);
fEntity.setFDEBIT(jfje);
fEntity.setFCREDIT(dfje);
fEntity.setFEXPLANATION(zy);
fEntity.setFDetailID(fDetailID);
arrayList.add(fEntity);
}
model.setFEntity(arrayList);
modelJson.put("Model", model);
JSONObject jsonObject = new JSONObject();
jsonObject.put("formid", "GL_VOUCHER");
jsonObject.put("data", modelJson);
log.info("金蝶凭证生成-->传输给金蝶jsonObject:" + jsonObject);
JSONObject result = new JDSendService().SendJd("save", jsonObject.toString());//调用保存接口
log.info("金蝶凭证生成-->金蝶返回result:" + result);
String statu = result.getString("statu");
if (StringUtils.equals("success", statu)) {
String code = result.getJSONObject("data").getString("code");
JSONObject jsonResult = result.getJSONObject("data").getJSONObject("content").getJSONObject("Result");
if (StringUtils.equals("200", code)) {
String isSuccess = jsonResult.getJSONObject("ResponseStatus").getString("IsSuccess");
if ("true".equals(isSuccess)) {
String billNo = jsonResult.getString("Number");
SubmitAndAuditUtil submitAndAuditUtil = new SubmitAndAuditUtil();
String submitResult = submitAndAuditUtil.submitAndAudit(billNo, "GL_VOUCHER", "submit");
if (StringUtils.equals("success", submitResult)) {
String auditResult = submitAndAuditUtil.submitAndAudit(billNo, "GL_VOUCHER", "audit");
if (StringUtils.equals("success", auditResult)) {
returnJson.put("statu", "success");
returnJson.put("billNo", billNo);
} else {
returnJson.put("statu", "fail");
returnJson.put("msg", "审核凭证失败,请检查!Message:" + auditResult);
return returnJson;
}
} else {
returnJson.put("statu", "fail");
returnJson.put("msg", "提交凭证失败,请检查!Message:" + submitResult);
return returnJson;
}
} else {
String errors = jsonResult.getJSONObject("ResponseStatus").getString("Errors");
returnJson.put("statu", "fail");
returnJson.put("msg", "创建凭证失败,请检查!Message:" + errors);
return returnJson;
}
} else {
String msg = result.getString("content");
returnJson.put("statu", "fail");
returnJson.put("msg", "创建凭证失败,请检查!Message:" + msg);
return returnJson;
}
} else {
String msg = result.getString("msg");
returnJson.put("statu", "fail");
returnJson.put("msg", "创建凭证失败,请检查!Message:" + msg);
return returnJson;
}
return returnJson;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.util;


import com.alibaba.fastjson.JSONObject;
import com.engine.integration.util.StringUtils;

import java.util.ArrayList;

/**
* 金蝶提交和审计工具类
*/
public class SubmitAndAuditUtil {
public String submitAndAudit(String number, String formid, String type) {
try {
ArrayList arrayList = new ArrayList();
arrayList.add(number);
JSONObject msgJson = new JSONObject();
JSONObject dataJson = new JSONObject();
dataJson.put("CreateOrgId", "0");
if (StringUtils.equals("BOS_ASSISTANTDATA_DETAIL", formid)) {
dataJson.put("Numbers", "");
dataJson.put("Ids", number);
} else {
dataJson.put("Numbers", arrayList);
dataJson.put("Ids", "");
}
dataJson.put("InterationFlags", "");
dataJson.put("NetworkCtrl", "");
msgJson.put("formid", formid);
msgJson.put("data", dataJson);
LogUtil.log("SubmitAndAuditUtil", "BillTypeLog").info("submitAndAudit-->msgJson" + msgJson);
JSONObject result = new JDSendService().SendJd(type, msgJson.toString());
LogUtil.log("SubmitAndAuditUtil", "BillTypeLog").info("submitAndAudit-->result" + result);
if ("success".equals(result.getString("statu"))) {
String code = result.getJSONObject("data").getString("code");
if ("200".equals(code)) {
String isSuccess = result.getJSONObject("data").getJSONObject("content").getJSONObject("Result").getJSONObject("ResponseStatus").getString("IsSuccess");
if ("true".equals(isSuccess)) {
LogUtil.log("SubmitAndAuditUtil", "BillTypeLog").info("submitAndAudit-->" + type + "成功单号:" + number);
return "success";
} else {
String errors = result.getJSONObject("data").getJSONObject("content").getJSONObject("Result").getJSONObject("ResponseStatus").getString("Errors");
return errors;
}
} else {
return result.getString("content");
}
} else {
return result.getString("msg");
}
} catch (Exception e) {
e.getStackTrace();
return e.getMessage();
}
}
}


泛微OA有关开发功能记录
http://example.com/2023/09/21/OA随笔/泛微OA有关开发功能记录/
作者
zhuixun
发布于
2023年9月21日
许可协议