wangjun 3 долоо хоног өмнө
parent
commit
b697d4cb3c

+ 8 - 0
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/task/SyncSapUtils.java

@@ -135,4 +135,12 @@ public class SyncSapUtils {
         return str.substring(0, firstDotIndex);
     }
 
+    public static String getType(String str) {
+        int firstDotIndex = str.indexOf('-');
+        if (firstDotIndex == -1) {
+            return null; // 没有找到 '.',返回NULL
+        }
+        return str.substring(0, firstDotIndex);
+    }
+
 }

+ 42 - 16
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/task/impl/SynSapServiceImpl.java

@@ -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");
@@ -223,6 +227,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 +236,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 +254,7 @@ public class SynSapServiceImpl implements SynSapService {
                                 (existing, replacement) -> existing // 保留前面的值
                         ));
 
-        ArrayList<DynamicObject> projectList = new ArrayList<>();
+        List<DynamicObject> projectList = new ArrayList<>();
         List<Object[]> useorgList = new ArrayList<>();
         StringBuilder err = new StringBuilder();
 
@@ -253,11 +267,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;
@@ -332,7 +347,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 +356,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 +375,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 +517,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(
@@ -577,7 +602,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");