修改人:邹江涛

修改内容:API映射公共单据,增加字段映射
修改时间:2024/11/22
This commit is contained in:
zoujiangtao 2024-11-22 16:32:04 +08:00
parent 4a17bb9ff7
commit 595626abfb
2 changed files with 171 additions and 37 deletions

View File

@ -180,7 +180,7 @@ public class ApiService {
floors.get(tier - 1).add(dynamicObject); floors.get(tier - 1).add(dynamicObject);
} }
JSONObject resultJson = new JSONObject(); JSONObject resultJson = new JSONObject();
processFloor(resultJson, "data", floors.get(0), floors); processFloor(resultJson, "data", floors.get(0), floors, dynamic);
logger.info("调用接口系统:{}\n调用接口单据{}\n调用JSON{}", systemName, dynamic, resultJson); logger.info("调用接口系统:{}\n调用接口单据{}\n调用JSON{}", systemName, dynamic, resultJson);
return resultJson; return resultJson;
} }
@ -224,8 +224,8 @@ public class ApiService {
public static String buildPath(List<String> path, String key, String level) { public static String buildPath(List<String> path, String key, String level) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("层级 ").append(level).append(": "); sb.append("层级 ").append(level).append(": ");
for (int i = 0; i < path.size(); i++) { for (String s : path) {
sb.append(path.get(i)).append("."); sb.append(s).append(".");
} }
sb.append(key); sb.append(key);
return sb.toString(); return sb.toString();
@ -239,14 +239,14 @@ public class ApiService {
* @param currentFloor * @param currentFloor
* @param floors * @param floors
*/ */
public static void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> floors) { public static void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> floors, DynamicObject dynamic) {
if (currentFloor.isEmpty()) { if (currentFloor.isEmpty()) {
return; return;
} }
if (currentFloor.size() == 1 && "object".equals(currentFloor.get(0).getString("shkd_tartype"))) { if (currentFloor.size() == 1 && "object".equals(currentFloor.get(0).getString("shkd_tartype"))) {
parentJson.put(parentKey, new JSONObject()); parentJson.put(parentKey, new JSONObject());
processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors); processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors, dynamic);
return; return;
} }
@ -256,7 +256,31 @@ public class ApiService {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
for (DynamicObject dynamicObject : currentFloor) { for (DynamicObject dynamicObject : currentFloor) {
String key = dynamicObject.getString("shkd_tarfield"); String key = dynamicObject.getString("shkd_tarfield");
Object value = dynamicObject.get("shkd_defaultdata"); Object shkd_soufield = dynamicObject.get("shkd_soufield");
Object value = null;
if (shkd_soufield != null) {
String[] parts = shkd_soufield.toString().split("\\.");
if (parts.length == 1) {
value = dynamic.get(parts[0]);
} else if (parts.length == 2) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).get(parts[1]);
} else {
value = dynamic.getDynamicObject(parts[0]).get(parts[1]);
}
} else if (parts.length == 3) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]);
} else {
value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]);
}
}
} else {
value = dynamicObject.get("shkd_defaultdata");
}
String tartype = dynamicObject.getString("shkd_tartype"); String tartype = dynamicObject.getString("shkd_tartype");
if ("string".equals(tartype) || "date".equals(tartype)) { if ("string".equals(tartype) || "date".equals(tartype)) {
@ -265,13 +289,13 @@ public class ApiService {
json.put(key, Integer.parseInt(value.toString())); json.put(key, Integer.parseInt(value.toString()));
} else if ("object".equals(tartype)) { } else if ("object".equals(tartype)) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
json.put(key, childJson); json.put(key, childJson);
} else if ("arrayList".equals(tartype)) { } else if ("arrayList".equals(tartype)) {
JSONArray childJsonArray = new JSONArray(); JSONArray childJsonArray = new JSONArray();
for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) { for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors); processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors, dynamic);
childJsonArray.add(childJson); childJsonArray.add(childJson);
} }
json.put(key, childJsonArray); json.put(key, childJsonArray);
@ -282,7 +306,30 @@ public class ApiService {
} else { } else {
for (DynamicObject dynamicObject : currentFloor) { for (DynamicObject dynamicObject : currentFloor) {
String key = dynamicObject.getString("shkd_tarfield"); String key = dynamicObject.getString("shkd_tarfield");
Object value = dynamicObject.get("shkd_defaultdata"); Object shkd_soufield = dynamicObject.get("shkd_soufield");
Object value = null;
if (shkd_soufield != null) {
String[] parts = shkd_soufield.toString().split("\\.");
if (parts.length == 1) {
value = dynamic.get(parts[0]);
} else if (parts.length == 2) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).get(parts[1]);
} else {
value = dynamic.getDynamicObject(parts[0]).get(parts[1]);
}
} else if (parts.length == 3) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]);
} else {
value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]);
}
}
} else {
value = dynamicObject.get("shkd_defaultdata");
}
String tartype = dynamicObject.getString("shkd_tartype"); String tartype = dynamicObject.getString("shkd_tartype");
if ("string".equals(tartype) || "date".equals(tartype)) { if ("string".equals(tartype) || "date".equals(tartype)) {
@ -291,12 +338,12 @@ public class ApiService {
parentJson.put(key, Integer.parseInt(value.toString())); parentJson.put(key, Integer.parseInt(value.toString()));
} else if ("object".equals(tartype)) { } else if ("object".equals(tartype)) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
parentJson.put(key, childJson); parentJson.put(key, childJson);
} else if ("arrayList".equals(tartype)) { } else if ("arrayList".equals(tartype)) {
JSONArray childJsonArray = new JSONArray(); JSONArray childJsonArray = new JSONArray();
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
childJsonArray.add(childJson); childJsonArray.add(childJson);
parentJson.put(key, childJsonArray); parentJson.put(key, childJsonArray);
} }
@ -322,4 +369,6 @@ public class ApiService {
} }
return children; return children;
} }
} }

View File

@ -1,5 +1,7 @@
package shkd.sys.sys.plugin.form; package shkd.sys.sys.plugin.form;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -10,6 +12,9 @@ import kd.bos.form.control.CodeEdit;
import kd.bos.form.control.Toolbar; import kd.bos.form.control.Toolbar;
import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import shkd.sys.sys.common.ApiEntity; import shkd.sys.sys.common.ApiEntity;
import shkd.sys.sys.mservice.ApiService; import shkd.sys.sys.mservice.ApiService;
@ -21,6 +26,8 @@ import java.util.*;
* 动态表单插件 * 动态表单插件
*/ */
public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
private static final Log logger = LogFactory.getLog(ApiMappingBillPlugin.class);
@Override @Override
public void registerListener(EventObject e) { public void registerListener(EventObject e) {
Toolbar tbmain = this.getView().getControl("tbmain"); Toolbar tbmain = this.getView().getControl("tbmain");
@ -41,6 +48,14 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
// 获取代码编辑器控件 // 获取代码编辑器控件
CodeEdit codeEdit = this.getView().getControl("shkd_codeeditap"); CodeEdit codeEdit = this.getView().getControl("shkd_codeeditap");
if ("shkd_generatejson".equals(itemKey)) { if ("shkd_generatejson".equals(itemKey)) {
// 获取想要推送单据编码
String billNumber = dataEntity.getString("shkd_sourcenumber");
// 获取想要推送单据类型
String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getDataEntityType().getName();
// 获取推送单据对象
DynamicObject billObject = BusinessDataServiceHelper.loadSingle(billMark, new QFilter("billno", QCP.equals, billNumber).toArray());
logger.info("获取推送对象 → billObject{}", billObject);
// 生成JSON // 生成JSON
DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("entryentity"); DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("entryentity");
@ -71,7 +86,34 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
for (DynamicObject dynamicObject : dynamicObjectCollection) { for (DynamicObject dynamicObject : dynamicObjectCollection) {
String key = dynamicObject.getString("shkd_tarfield"); String key = dynamicObject.getString("shkd_tarfield");
Object value = dynamicObject.get("shkd_defaultdata");
// 将映射字段塞入对应JSON中
Object shkd_soufield = dynamicObject.get("shkd_soufield");
Object value = null;
if (shkd_soufield != null) {
String[] parts = shkd_soufield.toString().split("\\.");
if (parts.length == 1) {
value = billObject.get(parts[0]);
} else if (parts.length == 2) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection1.get(0).get(parts[1]);
} else {
value = billObject.getDynamicObject(parts[0]).get(parts[1]);
}
} else if (parts.length == 3) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection1.get(0).getDynamicObject(parts[1]).get(parts[2]);
} else {
value = billObject.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]);
}
}
} else {
value = dynamicObject.get("shkd_defaultdata");
}
String tartype = dynamicObject.getString("shkd_tartype"); String tartype = dynamicObject.getString("shkd_tartype");
if ("String".equals(tartype) || "Date".equals(tartype)) { if ("String".equals(tartype) || "Date".equals(tartype)) {
@ -82,13 +124,13 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
json.put(key, new BigDecimal(value.toString())); json.put(key, new BigDecimal(value.toString()));
} else if ("对象".equals(tartype)) { } else if ("对象".equals(tartype)) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject);
json.put(key, childJson); json.put(key, childJson);
} else if ("数组".equals(tartype)) { } else if ("数组".equals(tartype)) {
JSONArray childJsonArray = new JSONArray(); JSONArray childJsonArray = new JSONArray();
for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) { for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors); processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors, billObject);
childJsonArray.add(childJson); childJsonArray.add(childJson);
} }
json.put(key, childJsonArray); json.put(key, childJsonArray);
@ -98,7 +140,7 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
codeEdit.setText(jsonArray.toJSONString()); codeEdit.setText(jsonArray.toJSONString());
} else { } else {
JSONObject resultJson = new JSONObject(); JSONObject resultJson = new JSONObject();
processFloor(resultJson, "data", floors.get(0), floors); processFloor(resultJson, "data", floors.get(0), floors, billObject);
codeEdit.setText(resultJson.toJSONString()); codeEdit.setText(resultJson.toJSONString());
} }
} }
@ -132,41 +174,63 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
} }
} }
private void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> floors) { private void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> floors, DynamicObject dynamic) {
if (currentFloor.isEmpty()) { if (currentFloor.isEmpty()) {
return; return;
} }
if (currentFloor.size() == 1 && "对象".equals(currentFloor.get(0).getString("shkd_tartype"))) { if (currentFloor.size() == 1 && "object".equals(currentFloor.get(0).getString("shkd_tartype"))) {
parentJson.put(parentKey, new JSONObject()); parentJson.put(parentKey, new JSONObject());
processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors); processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors, dynamic);
return; return;
} }
if ("数组".equals(currentFloor.get(0).getString("shkd_tartype"))) { if ("arrayList".equals(currentFloor.get(0).getString("shkd_tartype"))) {
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
//目前JSONArray都是一层 //目前JSONArray都是一层
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
for (DynamicObject dynamicObject : currentFloor) { for (DynamicObject dynamicObject : currentFloor) {
String key = dynamicObject.getString("shkd_tarfield"); String key = dynamicObject.getString("shkd_tarfield");
Object value = dynamicObject.get("shkd_defaultdata"); Object shkd_soufield = dynamicObject.get("shkd_soufield");
Object value = null;
if (shkd_soufield != null) {
String[] parts = shkd_soufield.toString().split("\\.");
if (parts.length == 1) {
value = dynamic.get(parts[0]);
} else if (parts.length == 2) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).get(parts[1]);
} else {
value = dynamic.getDynamicObject(parts[0]).get(parts[1]);
}
} else if (parts.length == 3) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]);
} else {
value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]);
}
}
} else {
value = dynamicObject.get("shkd_defaultdata");
}
String tartype = dynamicObject.getString("shkd_tartype"); String tartype = dynamicObject.getString("shkd_tartype");
if ("String".equals(tartype) || "Date".equals(tartype)) { if ("string".equals(tartype) || "date".equals(tartype)) {
json.put(key, value); json.put(key, value);
} else if ("Integer".equals(tartype)) { } else if ("int".equals(tartype)) {
json.put(key, Integer.parseInt(value.toString())); json.put(key, Integer.parseInt(value.toString()));
} else if ("BigDecimal".equals(tartype)) { } else if ("object".equals(tartype)) {
json.put(key, new BigDecimal(value.toString()));
} else if ("对象".equals(tartype)) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
json.put(key, childJson); json.put(key, childJson);
} else if ("数组".equals(tartype)) { } else if ("arrayList".equals(tartype)) {
JSONArray childJsonArray = new JSONArray(); JSONArray childJsonArray = new JSONArray();
for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) { for (DynamicObject childDynamicObject : getChildren(floors, dynamicObject.getString("shkd_tarfield"))) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors); processFloor(childJson, key, Collections.singletonList(childDynamicObject), floors, dynamic);
childJsonArray.add(childJson); childJsonArray.add(childJson);
} }
json.put(key, childJsonArray); json.put(key, childJsonArray);
@ -177,23 +241,44 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin {
} else { } else {
for (DynamicObject dynamicObject : currentFloor) { for (DynamicObject dynamicObject : currentFloor) {
String key = dynamicObject.getString("shkd_tarfield"); String key = dynamicObject.getString("shkd_tarfield");
Object value = dynamicObject.get("shkd_defaultdata"); Object shkd_soufield = dynamicObject.get("shkd_soufield");
Object value = null;
if (shkd_soufield != null) {
String[] parts = shkd_soufield.toString().split("\\.");
if (parts.length == 1) {
value = dynamic.get(parts[0]);
} else if (parts.length == 2) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).get(parts[1]);
} else {
value = dynamic.getDynamicObject(parts[0]).get(parts[1]);
}
} else if (parts.length == 3) {
if ("entry".equals(parts[0])) {
DynamicObjectCollection dynamicObjectCollection = dynamic.getDynamicObjectCollection(parts[0]);
value = dynamicObjectCollection.get(0).getDynamicObject(parts[1]).get(parts[2]);
} else {
value = dynamic.getDynamicObject(parts[0]).getDynamicObject(parts[1]).get(parts[2]);
}
}
} else {
value = dynamicObject.get("shkd_defaultdata");
}
String tartype = dynamicObject.getString("shkd_tartype"); String tartype = dynamicObject.getString("shkd_tartype");
if ("String".equals(tartype) || "Date".equals(tartype)) { if ("string".equals(tartype) || "date".equals(tartype)) {
parentJson.put(key, value); parentJson.put(key, value);
} else if ("Integer".equals(tartype)) { } else if ("int".equals(tartype)) {
parentJson.put(key, Integer.parseInt(value.toString())); parentJson.put(key, Integer.parseInt(value.toString()));
} else if ("BigDecimal".equals(tartype)) { } else if ("object".equals(tartype)) {
parentJson.put(key, new BigDecimal(value.toString()));
} else if ("对象".equals(tartype)) {
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
parentJson.put(key, childJson); parentJson.put(key, childJson);
} else if ("数组".equals(tartype)) { } else if ("arrayList".equals(tartype)) {
JSONArray childJsonArray = new JSONArray(); JSONArray childJsonArray = new JSONArray();
JSONObject childJson = new JSONObject(); JSONObject childJson = new JSONObject();
processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors); processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, dynamic);
childJsonArray.add(childJson); childJsonArray.add(childJson);
parentJson.put(key, childJsonArray); parentJson.put(key, childJsonArray);
} }