From 2e8baebbb1346e22b0009cfc251c3d547c67048b Mon Sep 17 00:00:00 2001
From: yuqh <123456>
Date: Mon, 24 Jun 2024 15:52:45 +0800
Subject: [PATCH] =?UTF-8?q?MDM=E5=85=AC=E7=94=A8=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../service/IMasterDataService.java           |  19 ++
 .../service/impl/MasterDataServiceImpl.java   | 194 ++++++++++++++++++
 2 files changed, 213 insertions(+)
 create mode 100644 service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/IMasterDataService.java
 create mode 100644 service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/impl/MasterDataServiceImpl.java

diff --git a/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/IMasterDataService.java b/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/IMasterDataService.java
new file mode 100644
index 00000000..b9f44b08
--- /dev/null
+++ b/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/IMasterDataService.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.sysnew.comparison.masterData.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.sysnew.comparison.entity.ComparisonEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+public interface IMasterDataService extends IBaseService<ComparisonEntity, String> {
+
+/**
+*
+* @content 查询经过配置的主数据信息进行同步主数据档案接口
+* @author laborer
+* @date 2024/6/24 0024 9:34
+*
+*/
+
+        JsonResultEntity queryArchives(JSONObject jsonObject);
+}
diff --git a/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/impl/MasterDataServiceImpl.java b/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/impl/MasterDataServiceImpl.java
new file mode 100644
index 00000000..05927f1b
--- /dev/null
+++ b/service/src/main/java/com/hzya/frame/sysnew/comparison/masterData/service/impl/MasterDataServiceImpl.java
@@ -0,0 +1,194 @@
+package com.hzya.frame.sysnew.comparison.masterData.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.dateutil.DateUtil;
+import com.hzya.frame.mdm.mdmModuleSource.dao.impl.MdmModuleSourceDaoImpl;
+import com.hzya.frame.mdm.mdmModuleSource.entity.MdmModuleSourceEntity;
+import com.hzya.frame.sysnew.comparison.entity.ComparisonEntity;
+import com.hzya.frame.sysnew.comparison.masterData.dao.impl.MasterDataDaoImpl;
+import com.hzya.frame.sysnew.comparison.masterData.service.IMasterDataProjectService;
+import com.hzya.frame.sysnew.comparison.masterData.service.IMasterDataService;
+import com.hzya.frame.sysnew.comparison.service.impl.ComparisonServiceImpl;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@Service("MasterDataServiceImpl")
+public class MasterDataServiceImpl extends BaseService<ComparisonEntity, String>  implements IMasterDataService {
+
+   @Autowired
+    private MasterDataDaoImpl masterDataDaoImpl;
+   @Autowired
+   private ComparisonServiceImpl comparisonServiceimpl;
+   @Autowired
+   private MdmModuleSourceDaoImpl mdmModuleSourceDaoImpl;
+
+    private String ts = "";
+
+    /**
+     *
+     * @content 查询经过配置的主数据信息进行同步主数据档案接口
+     * @author laborer
+     * @date 2024/6/24 0024 9:56
+     *
+     */
+
+    @Override
+    public JsonResultEntity queryArchives(JSONObject json){
+        JSONObject jsonObject = json.getJSONObject("jsonStr");
+        //查询主数据来源表,根据来源类型为插件得进行分类,获取来源名称和编码
+        List<MdmModuleSourceEntity> list = mdmModuleSourceDaoImpl.MdmModuleSourceentityGroupByType();
+        if (CollectionUtils.isEmpty(list)) {
+            logger.info("数据来源表中没有类型为插件得数据,无法获取来源名称和来源编码");
+            return BaseResult.getFailureMessageEntity("数据来源表无插件类型");
+        }
+        for (MdmModuleSourceEntity mdmModuleSourceEntity : list) {
+            try {
+                //通过不同的应用类型用于拼接sql
+                String appTyp = mdmModuleSourceEntity.getAppType();
+                String dbCode = mdmModuleSourceEntity.getDbCode();
+                String mdmCode = mdmModuleSourceEntity.getMdmCode();
+                List<HashMap<String, Object>>hashMaps =  new ArrayList<>();
+                List<HashMap<String, Object>> hashMapsDetails = new ArrayList<>();
+                switch (appTyp) {//1、致远OA 2、用友U8C 3、用友BIP
+                    case "1":
+                        //通过主数据编码判断,不同的接口走不通的查询逻辑
+                        switch (mdmCode){
+                            case "10003"://致远用户信息
+                                 bindingUser(jsonObject, mdmModuleSourceEntity, dbCode);
+                                break;
+                            case "10004"://致远客商信息
+                                hashMaps = binDingCust(jsonObject, mdmModuleSourceEntity, dbCode);
+                                //查询明细数据
+                                for (HashMap<String, Object> hashMap : hashMaps) {
+                                    //查询明细信息
+                                    Long formmainId = (Long) hashMap.get("id");
+                                    StringBuffer stringBufferDetails = new StringBuffer();
+                                    stringBufferDetails.append("SELECT field0023 AS pk_bankdoc,field0024 AS accnum,field0025 AS combinenum FROM formson_0229 WHERE formmain_id = '"+formmainId+"' " );
+                                    hashMapsDetails = masterDataDaoImpl.queryArchivesByDataSource(stringBufferDetails.toString(),mdmModuleSourceEntity);
+                                }
+                                break;
+                            default:
+                                logger.info("未匹配到主数据的编码,请检查");
+                                break;
+                        }
+                }
+                //调用主数据接口进行数据推送或更新
+                if (null != hashMaps && hashMaps.size() > 0) {
+                    ParametricAssembly(mdmModuleSourceEntity,hashMaps,mdmCode,hashMapsDetails);
+                } else {
+                    logger.info("U8C主数据档案没有需要同步中台的数据");
+                }
+            } catch (Exception e) {
+                logger.info("主数据同步错误:{}",e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        return BaseResult.getSuccessMessageEntity("项目档案同步成功");
+    }
+    //绑定客户档案
+    private List<HashMap<String, Object>> binDingCust(JSONObject jsonObject, MdmModuleSourceEntity mdmModuleSourceEntity, String dbCode) {
+        List<HashMap<String, Object>> hashMap;
+        StringBuffer sbCust = new StringBuffer();
+        if(null != jsonObject && StrUtil.isNotEmpty(jsonObject.getString("code"))){
+            String code = jsonObject.getString("code");
+            sbCust.append(" and a.code = '"+code+"'");
+        }else{
+            ts = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
+            sbCust.append(" and a.update_time >= '"+ts+"'");
+        }
+        StringBuffer stringBufferCust = new StringBuffer();
+        stringBufferCust.append("SELECT id as id,field0013 AS code,field0014 AS name,field0016 AS pk_custclass,field0015 AS shortname,field0012 AS pk_org FROM formmain_0226 WHERE 1=1 "+ sbCust.toString());
+        mdmModuleSourceEntity.setDataSourceCode(dbCode);
+        return masterDataDaoImpl.queryArchivesByDataSource(stringBufferCust.toString(),mdmModuleSourceEntity);
+    }
+
+    //绑定OA用户参数
+    private JSONArray bindingUser(JSONObject jsonObject, MdmModuleSourceEntity mdmModuleSourceEntity, String dbCode) {
+        StringBuffer sbUser = new StringBuffer();
+        if(null != jsonObject && StrUtil.isNotEmpty(jsonObject.getString("code"))){
+            String code = jsonObject.getString("code");
+            sbUser.append(" and a.code = '"+code+"'");
+        }else{
+            ts = DateUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
+            sbUser.append(" and a.update_time >= '"+ts+"'");
+        }
+        StringBuffer stringBufferUser = new StringBuffer();
+        stringBufferUser.append("SELECT id as id,field0013 AS code,field0014 AS name,field0016 AS pk_custclass,field0015 AS shortname,field0012 AS pk_org FROM formmain_0226 WHERE 1=1  "+ sbUser.toString());
+        mdmModuleSourceEntity.setDataSourceCode(dbCode);
+        List<HashMap<String, Object>> hashMaps = masterDataDaoImpl.queryArchivesByDataSource(stringBufferUser.toString(),mdmModuleSourceEntity);
+        for (HashMap<String, Object> hashMap : hashMaps) {
+
+        }
+        return null;
+    }
+
+
+    //查询档案参数组装
+    public JsonResultEntity ParametricAssembly(MdmModuleSourceEntity mdmModuleSourceEntity,List<HashMap<String, Object>>  hashMaps,String mdmCode,List<HashMap<String, Object>> hashMapsDetails){
+            for (HashMap<String, Object> hashMap : hashMaps) {
+                JSONObject jsonObjectUser = new JSONObject();
+                JSONObject jsonStr = new JSONObject();
+                jsonObjectUser.put("id", hashMap.get("id"));
+                jsonObjectUser.put("mdmCode", mdmCode);
+                jsonStr.put("jsonStr", jsonObjectUser);
+                //先查询编码和名称查询是否存在
+                JsonResultEntity jsonResultEntity = comparisonServiceimpl.queryEntityPage(jsonStr);
+                Object attribute = jsonResultEntity.getAttribute();
+                logger.info("得到的attribute值为:{}", attribute);
+                JSONObject jsonObjectAttribute = (JSONObject) JSON.toJSON(attribute);
+                JSONArray jsonArrayList = jsonObjectAttribute.getJSONArray("list");
+                //如果jsonArrayList为null,说明没有值,在表中不存在
+                if (jsonArrayList == null || jsonArrayList.size() == 0) {
+                    //将查询出来得数据调用通用接口新增,保存到表中
+                    JSONObject main = new JSONObject();
+                    for(String key:hashMap.keySet()) {
+                        main.put(key, hashMap.get(key));
+                    }
+                    jsonObjectUser.put("main", main);
+                    jsonObjectUser.put("appName","数智中台");
+                    jsonObjectUser.put("appCode","800004");
+                    jsonObjectUser.put("optionName", "数智中台");
+                    jsonStr.put("jsonStr", jsonObjectUser);
+                    try {
+                         comparisonServiceimpl.saveEntity(jsonStr);
+                    } catch (Exception e) {
+                        logger.info("U8C主数据档案新增用户档案失败,失败原因:{}",e.getMessage());
+                    }
+                } else {
+                    for (Object o : jsonArrayList) {
+                        JSONObject jsonObjectUpdate = JSON.parseObject(String.valueOf(o));
+                        String id = jsonObjectUpdate.getString("id");
+                        JSONObject main = new JSONObject();
+                        for(String key:hashMap.keySet()) {
+                            main.put(key, hashMap.get(key));
+                            main.put("id",id);
+                        }
+                        jsonObjectUser.put("main", main);
+                        jsonObjectUser.put("appName","数智中台");
+                        jsonObjectUser.put("appCode","800004");
+                        jsonObjectUser.put("optionName", "数智中台");
+                        jsonStr.put("jsonStr", jsonObjectUser);
+                        try {
+                             comparisonServiceimpl.updateEntity(jsonStr);
+                        } catch (Exception e) {
+                            logger.info("U8C主数据档案更新用户档案失败,失败原因:{}", e.getMessage());
+                        }
+                    }
+                }
+            }
+            return null;
+    }
+
+}