|
@@ -11,6 +11,7 @@ import kd.bos.logging.LogFactory;
|
|
|
import kd.bos.orm.query.QCP;
|
|
|
import kd.bos.orm.query.QFilter;
|
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
import kd.bos.util.StringUtils;
|
|
|
import nckd.jimin.jyyy.bd.common.oauth.FanWeiUtils;
|
|
@@ -80,8 +81,10 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
DynamicObject parent = BusinessDataServiceHelper.loadSingle("bos_costcenter", new QFilter[]{new QFilter("number", QCP.equals, companyCode)});
|
|
|
|
|
|
QFilter qFilter = new QFilter("number", QCP.in, costNumList);
|
|
|
- // QFilter qFilter1 = new QFilter("accountorg.number", QCP.equals, companyCode);
|
|
|
- DynamicObject[] costDyns = BusinessDataServiceHelper.load("bos_costcenter", "id,masterid,parent,number,name,accountorg,orgduty,status,enable", new QFilter[]{qFilter});
|
|
|
+ List<Object> listIDs = QueryServiceHelper.queryPrimaryKeys("bos_costcenter",new QFilter[]{qFilter}, null, Integer.MAX_VALUE);
|
|
|
+ DynamicObject costDyn = BusinessDataServiceHelper.newDynamicObject("bos_costcenter");
|
|
|
+ DynamicObject[] costDyns = BusinessDataServiceHelper.load(listIDs.toArray(),costDyn.getDynamicObjectType());
|
|
|
+ //DynamicObject[] costDyns = BusinessDataServiceHelper.load("bos_costcenter", "id,masterid,parent,number,name,accountorg,orgduty,status,enable", new QFilter[]{qFilter});
|
|
|
Map<String, DynamicObject> costMap =
|
|
|
Arrays.stream(costDyns)
|
|
|
.collect(Collectors.toMap(
|
|
@@ -151,7 +154,8 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
}
|
|
|
|
|
|
if (costList.size() > 0) {
|
|
|
- Object[] save = SaveServiceHelper.save(costList.toArray(new DynamicObject[0]));
|
|
|
+ DynamicObject[] saveDynamicObject = costList.toArray(new DynamicObject[costList.size()]);
|
|
|
+ Object[] save = SaveServiceHelper.save(saveDynamicObject);
|
|
|
int length = save.length;
|
|
|
logger.info("同步[成本]完成,本次新增数量:{}," + err, length);
|
|
|
result.put("code", "200");
|
|
@@ -200,7 +204,8 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
|
|
|
if (!"S".equals(etype)) {
|
|
|
result.put("code", "301");
|
|
|
- result.put("msg", "同步SAP主数据_项目,E_TYPE:" + etype + ",错误信息:" + rData.getString("E_MESSGE"));
|
|
|
+ result.put("msg", "同步SAP主数据_项目,错误信息:" + rData.getString("E_MESSGE"));
|
|
|
+ logger.info("同步SAP主数据_项目,参数:E_TYPE:" + etype + ",错误信息:" + rData.getString("E_MESSGE"));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -223,6 +228,8 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
JSONObject item = rItemArray.getJSONObject(i);
|
|
|
String number = item.getString("POSID");
|
|
|
projectNumList.add(number);
|
|
|
+ //String parent = SyncSapUtils.getProjectNumberForParent(number);
|
|
|
+ //projectNumList.add(parent);
|
|
|
}
|
|
|
//取组织对象
|
|
|
QFilter qf = new QFilter("number", QCP.equals, companyCode);
|
|
@@ -230,7 +237,15 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
|
|
|
QFilter qFilter = new QFilter("number", QCP.in, projectNumList);
|
|
|
QFilter qFilter1 = new QFilter("org.number", QCP.equals, companyCode);
|
|
|
- DynamicObject[] dyns = BusinessDataServiceHelper.load("bd_project", "id,number,name,fullname,parent,masterid,proleader,org,useorg,createorg,group,status,ctrlstrategy,level,isleaf,department,prostatus,enable", new QFilter[]{qFilter, qFilter1});
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当存在对象与新增对象同时Save时,会报错,通过以下方式解决
|
|
|
+ * 先用QueryServiceHelper查询出id,再用BusinessDataServiceHelper。这样就与新增的数据包保持一致了
|
|
|
+ */
|
|
|
+ List<Object> listIDs = QueryServiceHelper.queryPrimaryKeys("bd_project",new QFilter[]{qFilter, qFilter1}, null, Integer.MAX_VALUE);
|
|
|
+ DynamicObject projectDyn = BusinessDataServiceHelper.newDynamicObject("bd_project");
|
|
|
+ DynamicObject[] dyns = BusinessDataServiceHelper.load(listIDs.toArray(),projectDyn.getDynamicObjectType());
|
|
|
+ //DynamicObject[] dyns = BusinessDataServiceHelper.load("bd_project", "id,number,name,fullname,parent,masterid,proleader,org,useorg,createorg,group,status,ctrlstrategy,level,isleaf,department,prostatus,enable", new QFilter[]{qFilter, qFilter1});
|
|
|
|
|
|
Map<String, DynamicObject> projectMap =
|
|
|
Arrays.stream(dyns)
|
|
@@ -240,7 +255,8 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
(existing, replacement) -> existing // 保留前面的值
|
|
|
));
|
|
|
|
|
|
- ArrayList<DynamicObject> projectList = new ArrayList<>();
|
|
|
+ List<DynamicObject> projectList = new ArrayList<>();
|
|
|
+ Map<String, DynamicObject> parentMap = new HashMap<>();
|
|
|
List<Object[]> useorgList = new ArrayList<>();
|
|
|
StringBuilder err = new StringBuilder();
|
|
|
|
|
@@ -253,11 +269,12 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- //if(!"CD20210404.2010.22".equals(number)) continue;
|
|
|
+ //if(!"AT20180602.2010.10".equals(number)) continue; ////用于测试
|
|
|
|
|
|
String proleader = item.getString("USR03");
|
|
|
String department = item.getString("DEPARTMENT");
|
|
|
- String type = item.getString("ZBY2");
|
|
|
+ String typeStr = item.getString("ZBY2");
|
|
|
+ String type = SyncSapUtils.getType(typeStr);
|
|
|
String billstatus = item.getString("STATUS");
|
|
|
DynamicObject proleaderDyn = null;
|
|
|
DynamicObject departmentDyn = null;
|
|
@@ -289,40 +306,43 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
* */
|
|
|
DynamicObject parentDyn = null;
|
|
|
String parent = SyncSapUtils.getProjectNumberForParent(number);
|
|
|
- if (StringUtils.isNotEmpty(parent)) {
|
|
|
-
|
|
|
- parentDyn = BusinessDataServiceHelper.newDynamicObject("bd_project");
|
|
|
- long Id = DB.genLongId("t_bd_project");
|
|
|
- parentDyn.set("id", Id);
|
|
|
- parentDyn.set("masterid", Id);
|
|
|
- parentDyn.set("number", parent); // 编号
|
|
|
- parentDyn.set("org", DEFAULT_ORG_ID); //一级项目放在顶层组织下
|
|
|
- parentDyn.set("createorg", DEFAULT_ORG_ID); //一级项目放在顶层组织下
|
|
|
- if (EmptyUtils.isNotEmpty(typeDyn)) {
|
|
|
- parentDyn.set("group", typeDyn); ///项目分类
|
|
|
- }
|
|
|
- parentDyn.set("level", 1);
|
|
|
- parentDyn.set("isleaf", 0);
|
|
|
- parentDyn.set("status", "C"); ///单据状态
|
|
|
- parentDyn.set("ctrlstrategy", "5"); //控制策略 自由分配 2 全局共享 5 私有 7
|
|
|
- parentDyn.set("enable", "1"); //使用状态
|
|
|
- // parentDyn.set("prostatus", "PASS_S"); //项目状态 PASS通过
|
|
|
- parentDyn.set("name", parent);
|
|
|
- parentDyn.set("fullname", parent);
|
|
|
- if (EmptyUtils.isNotEmpty(proleaderDyn)) {
|
|
|
- parentDyn.set("proleader", proleaderDyn);
|
|
|
- }
|
|
|
- if (EmptyUtils.isNotEmpty(departmentDyn)) {
|
|
|
- parentDyn.set("department", departmentDyn);
|
|
|
- }
|
|
|
- if (EmptyUtils.isNotEmpty(projectStatusDyn)) {
|
|
|
- parentDyn.set("prostatus", projectStatusDyn);
|
|
|
- }
|
|
|
- if (EmptyUtils.isNotEmpty(srcSysDyn)) {
|
|
|
- parentDyn.set("systemtypebase", srcSysDyn);
|
|
|
- }
|
|
|
- projectList.add(parentDyn);
|
|
|
|
|
|
+ if (StringUtils.isNotEmpty(parent) ) {
|
|
|
+ parentDyn = parentMap.get(parent); //会有多个相同的父项目,需要去重
|
|
|
+ if (parentDyn == null) {
|
|
|
+ parentDyn = BusinessDataServiceHelper.newDynamicObject("bd_project");
|
|
|
+ long Id = DB.genLongId("t_bd_project");
|
|
|
+ parentDyn.set("id", Id);
|
|
|
+ parentDyn.set("masterid", Id);
|
|
|
+ parentDyn.set("number", parent); // 编号
|
|
|
+ parentDyn.set("org", DEFAULT_ORG_ID); //一级项目放在顶层组织下
|
|
|
+ parentDyn.set("createorg", DEFAULT_ORG_ID); //一级项目放在顶层组织下
|
|
|
+ if (EmptyUtils.isNotEmpty(typeDyn)) {
|
|
|
+ parentDyn.set("group", typeDyn); ///项目分类
|
|
|
+ }
|
|
|
+ parentDyn.set("level", 1);
|
|
|
+ parentDyn.set("isleaf", 0);
|
|
|
+ parentDyn.set("status", "C"); ///单据状态
|
|
|
+ parentDyn.set("ctrlstrategy", "5"); //控制策略 自由分配 2 全局共享 5 私有 7
|
|
|
+ parentDyn.set("enable", "1"); //使用状态
|
|
|
+ // parentDyn.set("prostatus", "PASS_S"); //项目状态 PASS通过
|
|
|
+ parentDyn.set("name", parent);
|
|
|
+ parentDyn.set("fullname", parent);
|
|
|
+ if (EmptyUtils.isNotEmpty(proleaderDyn)) {
|
|
|
+ parentDyn.set("proleader", proleaderDyn);
|
|
|
+ }
|
|
|
+ if (EmptyUtils.isNotEmpty(departmentDyn)) {
|
|
|
+ parentDyn.set("department", departmentDyn);
|
|
|
+ }
|
|
|
+ if (EmptyUtils.isNotEmpty(projectStatusDyn)) {
|
|
|
+ parentDyn.set("prostatus", projectStatusDyn);
|
|
|
+ }
|
|
|
+ if (EmptyUtils.isNotEmpty(srcSysDyn)) {
|
|
|
+ parentDyn.set("systemtypebase", srcSysDyn);
|
|
|
+ }
|
|
|
+ parentMap.put(parent, parentDyn);
|
|
|
+ projectList.add(parentDyn);
|
|
|
+ }
|
|
|
}
|
|
|
/***
|
|
|
* 处理二级项目,如果项目编码中包含点,则需要处理上级项目
|
|
@@ -332,7 +352,7 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
dyn.set("id", Id);
|
|
|
dyn.set("masterid", Id);
|
|
|
if (EmptyUtils.isNotEmpty(parentDyn)) {
|
|
|
- dyn.set("parent", parentDyn);
|
|
|
+ dyn.set("parent", parentDyn.getPkValue());
|
|
|
}
|
|
|
dyn.set("number", number); // 编号
|
|
|
dyn.set("org", companyDyn.getPkValue());
|
|
@@ -341,7 +361,7 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
dyn.set("createorg", companyDyn.getPkValue());
|
|
|
dyn.set("useorg", companyDyn.getPkValue());
|
|
|
if (EmptyUtils.isNotEmpty(typeDyn)) {
|
|
|
- dyn.set("group", typeDyn); ///项目分类
|
|
|
+ dyn.set("group", typeDyn.getPkValue()); ///项目分类
|
|
|
}
|
|
|
dyn.set("status", "C"); ///单据状态
|
|
|
dyn.set("ctrlstrategy", "7"); //控制策略 自由分配 2 全局共享 5 私有 7
|
|
@@ -360,22 +380,27 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
dyn.set("name", item.getString("POST1"));
|
|
|
dyn.set("fullname", item.getString("POST1"));
|
|
|
if (EmptyUtils.isNotEmpty(proleaderDyn)) {
|
|
|
- dyn.set("proleader", proleaderDyn);
|
|
|
+ dyn.set("proleader", proleaderDyn.getPkValue());
|
|
|
}
|
|
|
if (EmptyUtils.isNotEmpty(departmentDyn)) {
|
|
|
- dyn.set("department", departmentDyn);
|
|
|
+ dyn.set("department", departmentDyn.getPkValue());
|
|
|
}
|
|
|
if (EmptyUtils.isNotEmpty(projectStatusDyn)) {
|
|
|
- dyn.set("prostatus", projectStatusDyn);
|
|
|
+ dyn.set("prostatus", projectStatusDyn.getPkValue());
|
|
|
}
|
|
|
if (EmptyUtils.isNotEmpty(srcSysDyn)) {
|
|
|
- dyn.set("systemtypebase", srcSysDyn);
|
|
|
+ dyn.set("systemtypebase", srcSysDyn.getPkValue());
|
|
|
}
|
|
|
projectList.add(dyn);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 保存项目
|
|
|
+ */
|
|
|
if (projectList.size() > 0) {
|
|
|
- Object[] save = SaveServiceHelper.save(projectList.toArray(new DynamicObject[0]));
|
|
|
+ // 将saveList转为数组
|
|
|
+ DynamicObject[] saveDynamicObject = projectList.toArray(new DynamicObject[projectList.size()]);
|
|
|
+ Object[] save = SaveServiceHelper.save(saveDynamicObject);
|
|
|
int length = save.length;
|
|
|
logger.info("同步[项目]完成,本次新增数量:{}," + err, length);
|
|
|
result.put("code", "200");
|
|
@@ -497,7 +522,12 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
speakerIdList.add(sfzh);
|
|
|
}
|
|
|
QFilter qFilter = new QFilter("number", QCP.in, speakerIdList);
|
|
|
- DynamicObject[] speakerDyns = BusinessDataServiceHelper.load("nckd_speaker", "id,number,name,status,creator,enable,nckd_pdjb,nckd_zlly,nckd_shdw,nckd_rzyy", new QFilter[]{qFilter});
|
|
|
+ List<Object> listIDs = QueryServiceHelper.queryPrimaryKeys("nckd_speaker",new QFilter[]{qFilter}, null, Integer.MAX_VALUE);
|
|
|
+ DynamicObject speakerDyn = BusinessDataServiceHelper.newDynamicObject("nckd_speaker");
|
|
|
+ DynamicObject[] speakerDyns = BusinessDataServiceHelper.load(listIDs.toArray(),speakerDyn.getDynamicObjectType());
|
|
|
+
|
|
|
+ //QFilter qFilter = new QFilter("number", QCP.in, speakerIdList);
|
|
|
+ //DynamicObject[] speakerDyns = BusinessDataServiceHelper.load("nckd_speaker", "id,number,name,status,creator,enable,nckd_pdjb,nckd_zlly,nckd_shdw,nckd_rzyy", new QFilter[]{qFilter});
|
|
|
Map<String, DynamicObject> speakerMap =
|
|
|
Arrays.stream(speakerDyns)
|
|
|
.collect(Collectors.toMap(
|
|
@@ -564,7 +594,9 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
case "4":
|
|
|
dyn.set("nckd_pdjb","普通级");
|
|
|
break;
|
|
|
- default:break;
|
|
|
+ default:
|
|
|
+ dyn.set("nckd_pdjb",zjpdjb);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
//数据状态
|
|
@@ -577,7 +609,8 @@ public class SynSapServiceImpl implements SynSapService {
|
|
|
}
|
|
|
}
|
|
|
if(speakerDynList.size()>0) {
|
|
|
- Object[] save = SaveServiceHelper.save(speakerDynList.toArray(new DynamicObject[0]));
|
|
|
+ DynamicObject[] saveDynamicObject = speakerDynList.toArray(new DynamicObject[speakerDynList.size()]);
|
|
|
+ Object[] save = SaveServiceHelper.save(saveDynamicObject);
|
|
|
int length = save.length;
|
|
|
logger.info("同步[讲者]完成,本次新增数量:{},"+err, length);
|
|
|
result.put("code", "200");
|