ensign/src/main/java/com/yem/ia/intebilllogon/Utils/ObjectToJsonUtils.java

388 lines
29 KiB
Java
Raw Normal View History

2024-08-26 09:19:12 +08:00
package com.yem.ia.intebilllogon.Utils;
import akka.actor.Stash;
import com.grapecity.documents.excel.O;
import com.yem.ia.intebilllogon.commom.CommonUtils;
import com.yem.ia.intebilllogon.commom.DyDataUtils;
import com.yem.wm.utils.StringUtils;
import com.yem.wm.utils.YEM;
import com.yem.wm.utils.YunzhijiaUtils;
//import json.JSONArray;
//import json.JSONObject;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.exception.KDBizException;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.io.IOException;
import java.math.BigDecimal;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Map;
/**
* @author zhouc
* @date 2023/8/21 14:45
* @className ObjectToJsonUtils
* @description 单据对象转JSON工具类
*/
public class ObjectToJsonUtils {
/**
* 根据智能审批单据注册依据单据ID单据标识构建Json
*
* @param pkid 获取单据id
* @param map entityName :获取单据标识
* billtype:单据类型编码
* Stashtype: 仓库类型 枚举
* VMI库 V
* 制造中心库 Z
* 正常仓库 C
* yem_salesordertype 合同类型下单审批必传
* 外贸整机合同 yem_es_salesorder_ZJ
* 外贸配件合同 yem_es_salesorder_PJ
* 内贸整机合同 yem_es_salesorder_nmzj
* 内贸配件合同 yem_es_salesorder_nmpj
* @return JSONObject
*/
public static JSONObject ObjectToJson(Object pkid, Map<String, Object> map) {
JSONObject Object = new JSONObject();
String getpostcreator = getpostcreator();
// if (getpostcreator == null || getpostcreator.length() == 0) {
// throw new KDBizException("未获取到云之家对应id请联系云之家管理员处理");
// }
if (map.size() > 0) {
//根据单据标识获取单据注册信息
QFilter qFilter = new QFilter("yem_isdisable", QCP.equals, false);
if (map.containsKey("entityName")) {
qFilter.and(new QFilter("yem_formid.number", QCP.equals, map.get("entityName")));
if (!map.get("entityName").equals("yem_es_contactbook")) {
if (map.containsKey("billtype")) {
Object billtype = map.get("billtype");
if (billtype != null) {
if (map.get("billtype").equals("yem_orderproreqbill_DB")) {
if (!map.containsKey("Stashtype")) {
Object.put("errmessage", "传入的单据类型为【配件调拨计划】,仓库类型必传!!");
return Object;
} else {
qFilter.and(new QFilter("yem_billtype.fbasedataid.number", QCP.in, map.get("billtype")));
}
} else {
qFilter.and(new QFilter("yem_billtype.fbasedataid.number", QCP.in, map.get("billtype")));
}
}
}
}
if (map.containsKey("Stashtype")) {
qFilter.and(new QFilter("yem_isvmi", QCP.equals, map.get("Stashtype")));
}
if (map.containsKey("yem_salesordertype")) {
qFilter.and(new QFilter("yem_salesordertype", QCP.equals, map.get("yem_salesordertype")));
}
if (map.containsKey("yem_procbilltype")) {
qFilter.and(new QFilter("yem_procbilltype", QCP.equals, map.get("yem_procbilltype")));
}
DynamicObject yem_ia_intebilllogon = BusinessDataServiceHelper.loadSingle("yem_ia_intebilllogon", "id", qFilter.toArray());
if (yem_ia_intebilllogon != null) {
long intebilllogonID = yem_ia_intebilllogon.getLong("id");
//查询单据注册数据
DynamicObject dataEntity = BusinessDataServiceHelper.loadSingle(intebilllogonID, "yem_ia_intebilllogon");
if (dataEntity != null && pkid != null && pkid != "") {
Object = ToJson(dataEntity, pkid, map.get("entityName").toString(), getpostcreator);
}
} else {
Object.put("errmessage", "未读取启用的《智能审批单据注册》,请修改后重试!");
}
} else {
Object.put("errmessage", "未读取到单据对象,请修改后重试!");
}
}
return Object;
}
/**
* 根据单据注册对象创建JSon实现方法
*
* @param dataEntity 单据注册对象
* @param pkid 获取单据id
* @param entityName 获取单据标识
* @return JSONObject
*/
public static JSONObject ToJson(DynamicObject dataEntity, Object pkid, String entityName, String creator) {
JSONObject Object = new JSONObject();
Object.put("formCodeId", dataEntity.getString("yem_yzjid"));
if (creator == null || creator.length() == 0) {
Object.put("creator", dataEntity.getString("yem_creator"));
} else {
Object.put("creator", creator);
}
JSONObject widgetValueObject = new JSONObject();//单据头对象
JSONObject json = new JSONObject();//
if (StringUtils.isNotEmpty(pkid.toString())) {
//获取单据数据
DynamicObject Bill = BusinessDataServiceHelper.loadSingle(pkid, entityName);
if (Bill != null) {
DynamicObjectCollection yem_signentryentity = dataEntity.getDynamicObjectCollection("yem_signentryentity");
if (yem_signentryentity.size() > 0) {
for (int i = 0; i < yem_signentryentity.size(); i++) {
DynamicObject signentryentity = yem_signentryentity.get(i);
Boolean yem_subisdelete = signentryentity.getBoolean("yem_subisdelete");//是否删除
String yem_iaentitytype = signentryentity.getString("yem_iaentitytype");//审批实体类型
String yem_iaformid = signentryentity.getString("yem_iaformid");//审批字段标识
String yem_ianame = signentryentity.getString("yem_ianame");//审批字段名称
String yem_iatype = signentryentity.getString("yem_iatype");//审批字段类型
int iaaccuracy = signentryentity.getInt("yem_iaaccuracy");//字段精度
String yem_erpfiledformid = signentryentity.getString("yem_erpfiledformid");//ERP字段标识
String yem_erpfiledtype = signentryentity.getString("yem_erpfiledtype");//ERP字段类型
String yem_identifierbasic = signentryentity.getString("yem_identifierbasic");//ERP基础数据唯一标识
String yem_defaultvalue = signentryentity.getString("yem_defaultvalue");//默认值
String yem_modledefaultvalue = signentryentity.getString("yem_modledefaultvalue");//动态默认
Boolean yem_issubentry = signentryentity.getBoolean("yem_issubentry");//是否子分录
Boolean yem_isattachment = signentryentity.getBoolean("yem_isattachment");//是否附件
String yem_attachmentkey = signentryentity.getString("yem_attachmentkey");//附件标识
if (!yem_subisdelete) {
//单据头H 单据体D
if (yem_iaentitytype.equals("H")) {
if (StringUtils.isNotEmpty(yem_defaultvalue)) {//是否默认不为空
if ("人员选择".equals(yem_iatype)) {
widgetValueObject.put(yem_iaformid, new String[]{yem_defaultvalue});
} else {
widgetValueObject.put(yem_iaformid, yem_defaultvalue);
}
}
if (StringUtils.isNotEmpty(yem_modledefaultvalue)) {//动态默认不为空
widgetValueObject.put(yem_iaformid, DyDataUtils.getDyData(Bill, yem_modledefaultvalue, yem_identifierbasic));
}
if (StringUtils.isNotEmpty(yem_erpfiledformid)) {////ERP字段标识不为空
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype, Bill, yem_erpfiledformid, yem_identifierbasic, iaaccuracy, entityName, yem_iatype);
widgetValueObject.put(yem_iaformid, value);
}
//是否附件
if (yem_isattachment) {
JSONArray jsonArray = CommonUtils.GetAttachment(entityName, pkid, yem_attachmentkey);
if (jsonArray != null && jsonArray.size() > 0) {
widgetValueObject.put(yem_iaformid, jsonArray);
}
}
Object.put("widgetValue", widgetValueObject);
} else {
//单据数据集合
JSONObject widgetValueEntry = new JSONObject();//单据头对象
JSONArray jsonArray = new JSONArray();
DynamicObjectCollection yem_subentryentity = signentryentity.getDynamicObjectCollection("yem_subentryentity");
//子单据体
if (yem_issubentry) {
String yem_parentcontainer = signentryentity.getString("yem_parentcontainer");//父分录标识
if (yem_parentcontainer != null && StringUtils.isNotEmpty(yem_parentcontainer)) {
DynamicObjectCollection entity = Bill.getDynamicObjectCollection(yem_parentcontainer);//父单据体
for (int t = 0; t < entity.size(); t++) {
DynamicObject dynamicObject = entity.get(t);
DynamicObjectCollection subEntry = entity.get(t).getDynamicObjectCollection(yem_erpfiledformid);//子单据体
if (subEntry.size() > 0) {
for (int K = 0; K < subEntry.size(); K++) {
DynamicObject subEntryDynamico = subEntry.get(K);
JSONObject entityObject = new JSONObject();
for (int j = 0; j < yem_subentryentity.size(); j++) {
DynamicObject subentryentity = yem_subentryentity.get(j);
String yem_iaformid1 = subentryentity.getString("yem_iaformid1");//审批字段标识
int iaaccuracy1 = subentryentity.getInt("yem_iaaccuracy1");//字段精度
String yem_iatype1 = subentryentity.getString("yem_iatype1");//审批字段类型
String yem_erpfiledformid1 = subentryentity.getString("yem_erpfiledformid1");//ERP字段标识
String yem_erpfiledformname1 = subentryentity.getString("yem_erpfiledformname1");//ERP字段名称
String yem_erpfiledtype1 = subentryentity.getString("yem_erpfiledtype1");//ERP字段类型
String yem_filedtypename1 = subentryentity.getString("yem_filedtypename1");//ERP基础资料标识
String yem_identifierbasic1 = subentryentity.getString("yem_identifierbasic1");//ERP基础数据唯一标识
String yem_defaultvalue1 = subentryentity.getString("yem_defaultvalue1");//默认值
String yem_modledefaultvalue1 = subentryentity.getString("yem_modledefaultvalue1");//动态默认
String yem_erpentitytype1 = subentryentity.getString("yem_erpentitytype1");//实体类型
if (StringUtils.isNotEmpty(yem_defaultvalue1)) {//是否默认不为空
if ("人员选择".equals(yem_iatype1)) {
entityObject.put(yem_iaformid1, new String[]{yem_defaultvalue1});
} else {
entityObject.put(yem_iaformid1, yem_defaultvalue1);
}
}
if (StringUtils.isNotEmpty(yem_modledefaultvalue1)) {//动态默认不为空
entityObject.put(yem_iaformid1, DyDataUtils.getDyDataEntry(Bill, subEntryDynamico, yem_modledefaultvalue1, yem_identifierbasic1));
}
if (StringUtils.isNotEmpty(yem_erpfiledformid1)) {
if (yem_erpentitytype1.equals("H")) {//单据头
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, Bill, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (yem_erpentitytype1.equals("D")) {
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, entity.get(t), yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (yem_erpentitytype1.equals("S")) {
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, subEntryDynamico, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (StringUtils.isEmpty(yem_erpentitytype1) && StringUtils.isNotEmpty(yem_erpfiledformid1) && StringUtils.isNotNull(yem_erpfiledformid1)) {
yem_erpfiledformid1 = yem_erpfiledformid1;
String[] sourceItems = yem_erpfiledformid1.split("\\.");
if (sourceItems[0].equals(yem_erpfiledformid)) {//子分录
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, subEntryDynamico, sourceItems[1], yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (sourceItems[0].equals(yem_parentcontainer)) {//父分录
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, entity.get(t), sourceItems[1], yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
}
}
}
jsonArray.add(entityObject);
}
}else{
JSONObject entityObject = new JSONObject();
for (int j = 0; j < yem_subentryentity.size(); j++) {
DynamicObject subentryentity = yem_subentryentity.get(j);
String yem_iaformid1 = subentryentity.getString("yem_iaformid1");//审批字段标识
int iaaccuracy1 = subentryentity.getInt("yem_iaaccuracy1");//字段精度
String yem_iatype1 = subentryentity.getString("yem_iatype1");//审批字段类型
String yem_erpfiledformid1 = subentryentity.getString("yem_erpfiledformid1");//ERP字段标识
String yem_erpfiledformname1 = subentryentity.getString("yem_erpfiledformname1");//ERP字段名称
String yem_erpfiledtype1 = subentryentity.getString("yem_erpfiledtype1");//ERP字段类型
String yem_filedtypename1 = subentryentity.getString("yem_filedtypename1");//ERP基础资料标识
String yem_identifierbasic1 = subentryentity.getString("yem_identifierbasic1");//ERP基础数据唯一标识
String yem_defaultvalue1 = subentryentity.getString("yem_defaultvalue1");//默认值
String yem_modledefaultvalue1 = subentryentity.getString("yem_modledefaultvalue1");//动态默认
String yem_erpentitytype1 = subentryentity.getString("yem_erpentitytype1");//实体类型
if (StringUtils.isNotEmpty(yem_defaultvalue1)) {//是否默认不为空
if ("人员选择".equals(yem_iatype1)) {
entityObject.put(yem_iaformid1, new String[]{yem_defaultvalue1});
} else {
entityObject.put(yem_iaformid1, yem_defaultvalue1);
}
}
if (StringUtils.isNotEmpty(yem_modledefaultvalue1)) {//动态默认不为空
entityObject.put(yem_iaformid1, DyDataUtils.getDyDataEntry(Bill, dynamicObject, yem_modledefaultvalue1, yem_identifierbasic1));
}
if (StringUtils.isNotEmpty(yem_erpfiledformid1)) {
if (yem_erpentitytype1.equals("H")) {//单据头
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, Bill, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (yem_erpentitytype1.equals("D")) {
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, entity.get(t), yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (yem_erpentitytype1.equals("S")) {
// Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, subEntryDynamico, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
// entityObject.put(yem_iaformid1, value);
continue;
}
if (StringUtils.isEmpty(yem_erpentitytype1) && StringUtils.isNotEmpty(yem_erpfiledformid1) && StringUtils.isNotNull(yem_erpfiledformid1)) {
yem_erpfiledformid1 = yem_erpfiledformid1;
String[] sourceItems = yem_erpfiledformid1.split("\\.");
if (sourceItems[0].equals(yem_erpfiledformid)) {//子分录
// Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, dynamicObject, sourceItems[1], yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
// entityObject.put(yem_iaformid1, value);
continue;
}
if (sourceItems[0].equals(yem_parentcontainer)) {//父分录
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, entity.get(t), sourceItems[1], yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
}
}
}
jsonArray.add(entityObject);
}
}
}
} else { //单据提拼接
if (StringUtils.isEmpty(yem_erpfiledformid)) {
continue;
}
DynamicObjectCollection entity = Bill.getDynamicObjectCollection(yem_erpfiledformid);
for (int K = 0; K < entity.size(); K++) {
DynamicObject entityDynamico = entity.get(K);
JSONObject entityObject = new JSONObject();
for (int j = 0; j < yem_subentryentity.size(); j++) {
DynamicObject subentryentity = yem_subentryentity.get(j);
String yem_iaformid1 = subentryentity.getString("yem_iaformid1");//审批字段标识
int iaaccuracy1 = subentryentity.getInt("yem_iaaccuracy1");//字段精度
String yem_iatype1 = subentryentity.getString("yem_iatype1");//审批字段类型
String yem_erpfiledformid1 = subentryentity.getString("yem_erpfiledformid1");//ERP字段标识
String yem_erpfiledtype1 = subentryentity.getString("yem_erpfiledtype1");//ERP字段类型
String yem_identifierbasic1 = subentryentity.getString("yem_identifierbasic1");//ERP基础数据唯一标识
String yem_defaultvalue1 = subentryentity.getString("yem_defaultvalue1");//默认值
String yem_modledefaultvalue1 = subentryentity.getString("yem_modledefaultvalue1");//动态默认
String yem_erpentitytype1 = subentryentity.getString("yem_erpentitytype1");//实体类型
// entityObject.put("cosmicfentryid", entityDynamico.getLong("id"));
if (StringUtils.isNotEmpty(yem_defaultvalue1)) {//是否默认不为空
if ("人员选择".equals(yem_iatype1)) {
entityObject.put(yem_iaformid1, new String[]{yem_defaultvalue1});
} else {
entityObject.put(yem_iaformid1, yem_defaultvalue1);
}
}
if (StringUtils.isNotEmpty(yem_modledefaultvalue1)) {//动态默认不为空
entityObject.put(yem_iaformid1, DyDataUtils.getDyDataEntry(Bill, entityDynamico, yem_modledefaultvalue1, yem_identifierbasic1));
}
if (StringUtils.isNotEmpty(yem_erpfiledformid1)) {////ERP字段标识不为空
if (yem_erpentitytype1.equals("H")) {//单据头
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, Bill, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (yem_erpentitytype1.equals("D")) {
Object value = CommonUtils.GetDynamicobjectValue(yem_erpfiledtype1, entityDynamico, yem_erpfiledformid1, yem_identifierbasic1, iaaccuracy1, entityName, yem_iatype1);
entityObject.put(yem_iaformid1, value);
}
if (StringUtils.isEmpty(yem_erpentitytype1)) {
entityObject.put(yem_iaformid1, entityDynamico.getString("id"));
}
}
}
jsonArray.add(entityObject);
}
}
widgetValueEntry.put("widgetValue", jsonArray);
json.put(yem_iaformid, widgetValueEntry);
Object.put("details", json);//分录数据
}
}
}
}
}
}
return Object;
}
/**
* 获取云之家用户id
*
* @return 返回云之家用户id
*/
public static String getpostcreator() {
String openId = null;
//当前登录用户
long currentUserId = YEM.getCurrentUserId();
if (currentUserId > 0) {
DynamicObject dataEntity = BusinessDataServiceHelper.loadSingle(currentUserId, "bos_user");
if (dataEntity != null) {
String phone = dataEntity.getString("phone");
try {
openId = YunzhijiaUtils.getOpenId(phone);
} catch (IOException ex) {
throw new KDBizException(ex.getMessage());
} catch (NoSuchAlgorithmException ex) {
throw new KDBizException(ex.getMessage());
} catch (KeyManagementException ex) {
throw new KDBizException(ex.getMessage());
}
}
}
return openId;
}
}