From fd9dfb426ab43954b746a79b3880c85e0fee92a7 Mon Sep 17 00:00:00 2001
From: yuqh <123456>
Date: Thu, 17 Apr 2025 08:41:52 +0800
Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=AE=A2=E6=88=B7=E6=A1=A3?=
 =?UTF-8?q?=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../wsdata/plugin/WsDataInitializer.java      |  85 ++++
 .../cfgHome/plugin/wsdata/pluginCfg.xml       |   6 +
 .../spring/spring-buildpackage-plugin.xml     |   5 +
 .../seeyon/customer/dao/ICustomerDao.java     |  24 +
 .../customer/dao/impl/CustomerDaoImpl.java    |  43 ++
 .../customer/entity/CustomerEntity.java       |  27 ++
 .../seeyon/customer/entity/CustomerEntity.xml |  24 +
 .../customer/service/ICustomerService.java    |  30 ++
 .../customer/service/impl/CustomerImpl.java   | 441 ++++++++++++++++++
 .../com/hzya/frame/seeyon/util/OACrmUtil.java | 109 +++++
 10 files changed, 794 insertions(+)
 create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/wsdata/plugin/WsDataInitializer.java
 create mode 100644 base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/pluginCfg.xml
 create mode 100644 base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/spring/spring-buildpackage-plugin.xml
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/ICustomerDao.java
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/impl/CustomerDaoImpl.java
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.java
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.xml
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/ICustomerService.java
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/impl/CustomerImpl.java
 create mode 100644 fw-oa/src/main/java/com/hzya/frame/seeyon/util/OACrmUtil.java

diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/wsdata/plugin/WsDataInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/wsdata/plugin/WsDataInitializer.java
new file mode 100644
index 00000000..1f1137c7
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/wsdata/plugin/WsDataInitializer.java
@@ -0,0 +1,85 @@
+package com.hzya.frame.plugin.wsdata.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.seeyon.customer.service.ICustomerService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+import com.jcraft.jsch.Channel;
+import com.jcraft.jsch.ChannelSftp;
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.Session;
+import com.jcraft.jsch.SftpATTRS;
+import com.jcraft.jsch.SftpException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+
+
+/**
+ * 主数据模版(MdmModule)表服务接口
+ *
+ * @author makejava
+ * @since 2024-06-18 10:33:32
+ */
+public class WsDataInitializer extends PluginBaseEntity {
+    @Autowired
+    private ICustomerService customerService;
+    Logger logger = LoggerFactory.getLogger(WsDataInitializer.class);
+
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    @Override
+    public String getPluginId() {
+        return "WsDataInitializer";
+    }
+
+    @Override
+    public String getPluginName() {
+        return "获取CRM客户档案";
+    }
+
+    @Override
+    public String getPluginLabel() {
+        return "WsDataInitializer";
+    }
+
+    @Override
+    public String getPluginType() {
+        return "1";
+    }
+
+
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) {
+        JsonResultEntity result = new JsonResultEntity();
+        try {
+            result =customerService.getCrmCustomer(requestJson);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return result;
+    }
+
+}
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/pluginCfg.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/pluginCfg.xml
new file mode 100644
index 00000000..ba65a305
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/pluginCfg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+<id>WsDataInitializer</id>
+<name>WsDataInitializer插件</name>
+<category>90000009</category>
+</plugin>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/spring/spring-buildpackage-plugin.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/spring/spring-buildpackage-plugin.xml
new file mode 100644
index 00000000..456b4ce6
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/wsdata/spring/spring-buildpackage-plugin.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+<beans default-autowire="byName">
+<bean name="WsDataInitializer" class="com.hzya.frame.plugin.wsdata.plugin.WsDataInitializer" />
+</beans>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/ICustomerDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/ICustomerDao.java
new file mode 100644
index 00000000..7519d17a
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/ICustomerDao.java
@@ -0,0 +1,24 @@
+package com.hzya.frame.seeyon.customer.dao;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.mdm.mdmModuleSource.entity.MdmModuleSourceEntity;
+import com.hzya.frame.seeyon.customer.entity.CustomerEntity;
+
+import java.util.HashMap;
+import java.util.List;
+
+/***
+ * @Content:客户供应商
+ * @Author  👻👻👻👻yqh👻👻👻👻
+ * @Date 2020/12/29 14:00
+ * @Param
+ * @return
+ **/
+public interface ICustomerDao extends IBaseDao<CustomerEntity,Long> {
+
+    @DS("WS_OA")
+    List<CustomerEntity> selectCustomers( CustomerEntity entity);
+
+    int updaterCustomers(CustomerEntity entity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/impl/CustomerDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/impl/CustomerDaoImpl.java
new file mode 100644
index 00000000..0690b9f5
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/dao/impl/CustomerDaoImpl.java
@@ -0,0 +1,43 @@
+package com.hzya.frame.seeyon.customer.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.execsql.service.IExecSqlService;
+import com.hzya.frame.mdm.mdmModuleSource.entity.MdmModuleSourceEntity;
+import com.hzya.frame.seeyon.customer.dao.ICustomerDao;
+import com.hzya.frame.seeyon.customer.entity.CustomerEntity;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ *
+ * @content 客户
+ * @className: Administrator
+ * @author laborer
+ * @date 2025-04-03 9:58
+ *
+ */
+
+@Repository(value = "CustomerDaoImpl")
+public class CustomerDaoImpl extends MybatisGenericDao<CustomerEntity,Long> implements ICustomerDao {
+    protected Logger logger = LogManager.getLogger(super.getClass());
+
+
+
+
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<CustomerEntity> selectCustomers(CustomerEntity entity) {
+        return (List<CustomerEntity>) super.selectList("com.hzya.frame.seeyon.customer.entity.CustomerEntity.CustomerEntity_list_base",entity);
+    }
+    @DS("#entity.dataSourceCode")
+    @Override
+    public int updaterCustomers(CustomerEntity entity) {
+        return super.update("com.hzya.frame.seeyon.customer.entity.CustomerEntity.CustomerEntity_update",entity);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.java
new file mode 100644
index 00000000..9c085734
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.java
@@ -0,0 +1,27 @@
+package com.hzya.frame.seeyon.customer.entity;
+
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.List;
+
+/**
+ *
+ * @content 客户档案
+ * @className: Administrator
+ * @author laborer
+ * @date 2025-04-03 9:54
+ *
+ */
+
+public class CustomerEntity extends BaseEntity {
+    private String sqlStr;
+
+    public String getSqlStr() {
+        return sqlStr;
+    }
+
+    public void setSqlStr(String sqlStr) {
+        this.sqlStr = sqlStr;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.xml
new file mode 100644
index 00000000..51cd5775
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/entity/CustomerEntity.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hzya.frame.seeyon.customer.entity.CustomerEntity">
+	<resultMap id="get-CustomerEntity-result" type="com.hzya.frame.seeyon.customer.entity.CustomerEntity">
+		<!--主键 -->
+		<result property="id" column="id" />
+
+
+
+  	</resultMap>
+
+	<sql id="CustomerEntity_Base_Column_List">
+		id
+	</sql>
+
+
+	 <select id="CustomerEntity_list_base" resultMap="get-CustomerEntity-result" parameterType="com.hzya.frame.seeyon.customer.entity.CustomerEntity">
+		 ${sqlStr}
+	 </select>
+	<!--通过主键修改方法-->
+	<update id="CustomerEntity_update" parameterType = "java.util.Map" >
+		${sqlStr}
+	</update>
+ </mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/ICustomerService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/ICustomerService.java
new file mode 100644
index 00000000..cc319984
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/ICustomerService.java
@@ -0,0 +1,30 @@
+package com.hzya.frame.seeyon.customer.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.customer.entity.CustomerEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+import java.util.List;
+
+/**
+ *
+ * @content 客户
+ * @className: Administrator
+ * @author laborer
+ * @date 2025-04-03 9:55
+ *
+ */
+
+public interface ICustomerService extends IBaseService<CustomerEntity, Long> {
+/**
+ *
+ * @content 获取CRM客户信息
+ * @className: Administrator
+ * @author laborer
+ * @date 2025-04-03 10:06
+ *
+ */
+
+    JsonResultEntity getCrmCustomer(JSONObject requestJson)throws Exception;
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/impl/CustomerImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/impl/CustomerImpl.java
new file mode 100644
index 00000000..8668a74f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/customer/service/impl/CustomerImpl.java
@@ -0,0 +1,441 @@
+package com.hzya.frame.seeyon.customer.service.impl;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.execsql.service.IExecSqlService;
+import com.hzya.frame.seeyon.customer.dao.ICustomerDao;
+import com.hzya.frame.seeyon.customer.entity.CustomerEntity;
+import com.hzya.frame.seeyon.customer.service.ICustomerService;
+import com.hzya.frame.seeyon.util.OACrmUtil;
+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 javax.annotation.Resource;
+import javax.print.DocFlavor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ *
+ * @content 客户档案
+ * @className: Administrator
+ * @author laborer
+ * @date 2025-04-03 9:56
+ *
+ */
+
+@Service(value = "CustomerImpl")
+public class CustomerImpl extends BaseService<CustomerEntity, Long> implements ICustomerService {
+    @Autowired
+    private ICustomerDao cstomerDao;
+    /**
+     *
+     * @content 获取CRM客户档案信息
+     * @className: Administrator
+     * @author laborer
+     * @date 2025-04-03 10:07
+     *
+     */
+
+    @Override
+    public JsonResultEntity getCrmCustomer(JSONObject requestJson)throws Exception {
+        JsonResultEntity resultJson = new JsonResultEntity();
+        JSONArray datas = new JSONArray();
+        JSONArray result = new JSONArray();
+        //获取CRM可回档案数据
+        int i = 0;
+        while (true){
+            result = getCrmCustomers(i++);
+            if(result.size()>0){
+                datas.addAll(result);
+            }else{
+                break;
+            }
+        }
+        if(datas.size()>0){
+            //处理客户数据推送OA
+            for(int j=0;j<datas.size();j++){
+                System.out.println(j);
+                //将CRM的数据进行转换
+                JSONObject data = bdCrmData(datas.getJSONObject(j));
+                JSONObject tokenParm = new JSONObject();
+                tokenParm.put("password","45562434-8459-47b4-8df0-78fad8405bc4");
+                tokenParm.put("userName","hzya_rest");
+                tokenParm.put("loginName","YongAn");
+
+
+                //通过客户编码以及公司名称判断是否走新增还是更新
+                String gs = data.getString("gs");
+                String u8ckhbh = data.getString("u8ckhbh");
+                if(StrUtil.isEmpty(gs)|| StrUtil.isEmpty(u8ckhbh)){
+                    logger.info("公司名称或者客户编码为空,数据不处理");
+                    continue;
+                }
+                String sqlStr = "select  \n" +
+                        "main.id,\n" +
+                        "item.showvalue as gs\n" +
+                        "from formmain_5753 main \n" +
+                        "left join ctp_enum_item item on main.field0032 = item.id\n" +
+                        "where  item.showvalue is not null\n" +
+                        "and field0005 = '"+u8ckhbh+"' " +
+                        "and item.showvalue = '"+gs+"'";
+                CustomerEntity entity = new CustomerEntity();
+                entity.setDataSourceCode("WS_OA");
+                entity.setSqlStr(sqlStr);
+                List<CustomerEntity>customerEntityList = cstomerDao.selectCustomers(entity);
+                String id = "";
+                if(CollectionUtils.isNotEmpty(customerEntityList)){
+                    id = customerEntityList.get(0).getId();
+                }
+                if(StrUtil.isEmpty(id)){
+                    //获取token
+                    String oaToken  = OACrmUtil.getOaToken(tokenParm.toJSONString(),"8000550010");
+
+                    //将转换的数据进行OA数据组装
+                    JSONObject oaData = getOACrmData(data,oaToken);
+                    logger.info("OA请求前参数"+oaData.toString());
+                    //调用
+                    OACrmUtil.getOaData(oaData.toString(),"8000550012",oaToken);
+
+                }else{
+                    String zq =  StrUtil.isEmpty(data.getString("xyqxt")) ? null :data.getString("xyqxt");
+                    String zxedwy = StrUtil.isEmpty(data.getString("zxedwy")) ? null :data.getString("zxedwy");
+                    String ywy = StrUtil.isEmpty(data.getString("ywy")) ? "" :data.getString("ywy");
+                    String updateSql = "update formmain_5753 " +
+                            "set field0002 = "+zq+", " +
+                            "field0003="+zxedwy+", " +
+                            "field0034='"+ywy+"' " +
+                            "where id = '"+id+"' ";
+//                    System.out.println("");
+                    entity.setSqlStr(updateSql);
+                     cstomerDao.updaterCustomers(entity);
+                }
+            }
+        }
+        return resultJson;
+    }
+
+    private JSONObject getOACrmData(JSONObject data,String token) {
+        JSONObject resultJson = new JSONObject();
+        resultJson.put("formCode","formmain_5753");
+        resultJson.put("loginName","YongAn");
+        resultJson.put("rightId","8225261366084062087.8502143236212605767");
+        JSONArray dataList = new JSONArray();
+        JSONObject dataObj = new JSONObject();
+        JSONObject masterTable = new JSONObject();
+        masterTable.put("name","formmain_5753");
+        JSONObject record = new JSONObject();
+        record.put("id",data.getString("id"));
+        JSONArray fields = new JSONArray();
+        //添加主表数据
+
+        //通过公司名称获取公司主键
+        String gs = data.getString("gs");
+        JSONObject gsObj = new JSONObject();
+        Long ref_enum_id = 4404497076308233424L;
+        gsObj.put("show_value",gs);
+        gsObj.put("ref_enum_id", ref_enum_id);
+        String resultGs =  OACrmUtil.getOaData(gsObj.toString(),"8000550011",token);
+        if(StrUtil.isNotEmpty(resultGs)){
+            JSONObject gsObj1 = JSONObject.parseObject(resultGs);
+            JSONArray gsData = gsObj1.getJSONArray("data");
+            if(gsData.size()>0){
+                JSONObject gsData1 = gsData.getJSONObject(0);
+                JSONObject field0032 = new JSONObject();
+                field0032.put("showValue","公司");
+                field0032.put("name","field0032");
+                field0032.put("value",gsData1.getString("item_id"));
+                fields.add(field0032);
+
+            }
+        }
+        //客户编码
+        JSONObject u8ckhbh = new JSONObject();
+        u8ckhbh.put("showValue","客户编码");
+        u8ckhbh.put("name","field0005");
+        u8ckhbh.put("value",data.getString("u8ckhbh"));
+        fields.add(u8ckhbh);
+
+        //客户名称
+        JSONObject khmc = new JSONObject();
+        khmc.put("showValue","客户名称");
+        khmc.put("name","field0001");
+        khmc.put("value",data.getString("khmc"));
+        fields.add(khmc);
+
+        //最早出库日期
+        JSONObject zzckrq = new JSONObject();
+        zzckrq.put("showValue","最早出库日期");
+        zzckrq.put("name","field0007");
+        zzckrq.put("value",data.getString("zzckrq"));
+        fields.add(zzckrq);
+
+        //账期
+        JSONObject zq = new JSONObject();
+        zq.put("showValue","账期");
+        zq.put("name","field0002");
+        zq.put("value",data.getInteger("xyqxt"));
+        fields.add(zq);
+
+        //信用额度
+        JSONObject zxedwy = new JSONObject();
+        zxedwy.put("showValue","信用额度");
+        zxedwy.put("name","field0003");
+        zxedwy.put("value",data.getString("zxedwy"));
+        fields.add(zxedwy);
+        //是否超账期需要格式化枚举
+        String sfczqStr = data.getString("sfczq");
+        if(StrUtil.isNotEmpty(sfczqStr)){
+            if("是".equals(sfczqStr)){
+                sfczqStr = "2243692026822872135";
+            }
+            if("否".equals(sfczqStr)){
+                sfczqStr = "7200503983140586429";
+            }
+            //是否超账期
+            JSONObject sfczq = new JSONObject();
+            sfczq.put("showValue","是否超账期");
+            sfczq.put("name","field0012");
+            sfczq.put("value",sfczqStr);
+            fields.add(sfczq);
+        }
+
+        //超账期天数
+        JSONObject czqts = new JSONObject();
+        czqts.put("showValue","超账期天数");
+        czqts.put("name","field0016");
+        czqts.put("value",data.getString("czqts"));
+        fields.add(czqts);
+        //客户所属区域
+        JSONObject khssqy = new JSONObject();
+        khssqy.put("showValue","客户所属区域");
+        khssqy.put("name","field0022");
+        khssqy.put("value",data.getString("khssqy"));
+        fields.add(khssqy);
+
+
+        //是否超信用额度
+        String sfcxyedStr = data.getString("sfcxyed");
+        if(StrUtil.isNotEmpty(sfcxyedStr)){
+            if("是".equals(sfcxyedStr)){
+                sfcxyedStr = "2243692026822872135";
+            }
+            if("否".equals(sfcxyedStr)){
+                sfcxyedStr = "7200503983140586429";
+            }
+            //是否超账期
+            JSONObject sfcxyed = new JSONObject();
+            sfcxyed.put("showValue","是否超信用额度");
+            sfcxyed.put("name","field0018");
+            sfcxyed.put("value",sfcxyedStr);
+            fields.add(sfcxyed);
+        }
+
+
+        //超额度金额
+        JSONObject cedjew = new JSONObject();
+        cedjew.put("showValue","超额度金额");
+        cedjew.put("name","field0020");
+        cedjew.put("value",data.getString("cedjew"));
+        fields.add(cedjew);
+
+
+        //国内外
+        String gnwStr = data.getString("gnw");
+        if(StrUtil.isNotEmpty(gnwStr)){
+            if("国内".equals(gnwStr)){
+                gnwStr = "579326676033489409";
+            }
+            if("国外".equals(gnwStr)){
+                gnwStr = "-8968140678130349914";
+            }
+            //是否超账期
+            JSONObject gnw = new JSONObject();
+            gnw.put("showValue","国内外");
+            gnw.put("name","field0010");
+            gnw.put("value",gnwStr);
+            fields.add(gnw);
+        }
+
+        //逾期未收款
+        JSONObject yqwsk = new JSONObject();
+        yqwsk.put("showValue","逾期未收款");
+        yqwsk.put("name","field0024");
+        yqwsk.put("value",data.getString("yqwsk"));
+        fields.add(yqwsk);
+        //业务员
+        JSONObject ywy = new JSONObject();
+        ywy.put("showValue","业务员");
+        ywy.put("name","field0020");
+        ywy.put("value",data.getString("ywy"));
+        fields.add(ywy);
+        record.put("fields",fields);
+        masterTable.put("record",record);
+        dataObj.put("masterTable",masterTable);
+        dataList.add(dataObj);
+        resultJson.put("dataList",dataList);
+        return resultJson;
+    }
+
+    private JSONObject bdCrmData(JSONObject jsonObject) {
+        JSONObject main = new JSONObject();
+        JSONObject mainTable = jsonObject.getJSONObject("mainTable");
+        //主键
+        JSONObject mainid = mainTable.getJSONObject("id");
+        if(null != mainid){
+            main.put("id",mainid.getString("fieldValue"));
+        }
+
+        //客户名称
+        JSONArray khmc = mainTable.getJSONArray("khmc");
+        if(null != khmc && khmc.size()>0){
+            main.put("khmc",khmc.getJSONObject(0).getString("fieldOptionName"));
+        }
+
+        //客户编号
+        JSONObject u8ckhbh = mainTable.getJSONObject("u8ckhbh");
+        if(null != u8ckhbh){
+            main.put("u8ckhbh",u8ckhbh.getString("fieldValue"));
+        }
+
+        //公司
+        JSONArray gs = mainTable.getJSONArray("gs");
+        if(null != gs && gs.size()>0){
+            main.put("gs",gs.getJSONObject(0).getString("fieldOptionName"));
+        }
+        //信用额度(万元)
+        JSONObject zxedwy = mainTable.getJSONObject("zxedwy");
+        if(null != zxedwy){
+            main.put("zxedwy",zxedwy.getString("fieldValue"));
+        }
+
+        //信用期限(天)
+        JSONObject xyqxt = mainTable.getJSONObject("xyqxt");
+        if(null != xyqxt){
+            main.put("xyqxt",xyqxt.getString("fieldValue"));
+        }
+
+        //是否超账期
+        JSONArray sfczq = mainTable.getJSONArray("sfczq");
+        if(null != sfczq && sfczq.size()>0){
+            main.put("sfczq",sfczq.getJSONObject(0).getString("fieldOptionName"));
+        }
+        //客户所属区域
+        JSONArray khssqy = mainTable.getJSONArray("khssqy");
+        if(null != khssqy && khssqy.size()>0){
+            main.put("khssqy",khssqy.getJSONObject(0).getString("fieldOptionName"));
+        }
+        //是否超信用额度
+        JSONArray sfcxyed = mainTable.getJSONArray("sfcxyed");
+        if(null != sfcxyed && sfcxyed.size()>0){
+            main.put("sfcxyed",sfcxyed.getJSONObject(0).getString("fieldOptionName"));
+        }
+        //超账期天数(天)
+        JSONObject czqts = mainTable.getJSONObject("czqts");
+        if(null != czqts){
+            main.put("czqts",czqts.getString("fieldValue"));
+        }
+
+        //超额度金额(万)
+        JSONObject cedjew = mainTable.getJSONObject("cedjew");
+        if(null != cedjew){
+            main.put("cedjew",cedjew.getString("fieldValue"));
+        }
+
+        //国内国外
+        JSONArray gnw = mainTable.getJSONArray("gnw");
+        if(null != gnw && gnw.size()>0){
+            main.put("gnw",gnw.getJSONObject(0).getString("fieldOptionName"));
+        }
+        //逾期未收款
+        JSONObject yqwsk = mainTable.getJSONObject("yqwsk");
+        if(null != yqwsk){
+            main.put("yqwsk",yqwsk.getString("fieldValue"));
+        }
+        //逾期未收款
+        JSONObject zzckrq = mainTable.getJSONObject("zzckrq");
+        if(null != zzckrq){
+            main.put("zzckrq",zzckrq.getString("fieldValue"));
+        }
+
+        //业务员
+        JSONArray ywy = mainTable.getJSONArray("ywy");
+        if(null != ywy && ywy.size()>0){
+            main.put("ywy",ywy.getJSONObject(0).getString("fieldOptionName"));
+        }
+
+//
+//        JSONArray detail1 = jsonObject.getJSONArray("detail1");
+//        JSONArray detailsAdd = new JSONArray();
+//        if(null != detail1 && detail1.size()>0){
+//            detail1.forEach(item->{
+//                JSONObject detail = new JSONObject();
+//                JSONObject itemObj = (JSONObject) item;
+//                //调整日期
+//                JSONObject dzrq = itemObj.getJSONObject("dzrq");
+//                detail.put("dzrq",dzrq.getString("fieldValue"));
+//
+//                //账期
+//                JSONObject zq = itemObj.getJSONObject("zq");
+//                detail.put("zq",zq.getString("fieldValue"));
+//                //额度
+//                JSONObject ed = itemObj.getJSONObject("ed");
+//                detail.put("ed",ed.getString("fieldValue"));
+//                //调整人
+//                JSONArray dzr = itemObj.getJSONArray("dzr");
+//                if(dzr.size()>0){
+//                    detail.put("dzr",dzr.getJSONObject(0).getString("fieldOptionName"));
+//                }
+//                //id
+//                JSONObject id = itemObj.getJSONObject("id");
+//                detail.put("id",id.getString("fieldValue"));
+//                detailsAdd.add(detail);
+//
+//            });
+//        }
+        return main;
+    }
+
+    public JSONArray getCrmCustomers(int num)throws Exception {
+        String method = "CRM_CustomerCreditFile_P002";
+        JSONObject main = new JSONObject();
+        main.put("access_name","oatocrm");
+        main.put("access_pwd","oatocrm");
+        main.put("corpid","bb1c9f7dddb8b44f23610c43da60403");
+        main.put("userid","1089749390615511042");
+        JSONObject datajson = new JSONObject();
+        JSONObject header = new JSONObject();
+        header.put("objId","1112666919331422216");
+        datajson.put("header",header);
+        JSONObject mainTable = new JSONObject();
+        mainTable.put("zt","0");
+        datajson.put("mainTable",mainTable);
+        JSONObject pageInfo = new JSONObject();
+        pageInfo.put("pageNo",num);
+        pageInfo.put("pageSize",1000);
+        datajson.put("pageInfo",pageInfo);
+        JSONObject operationinfo = new JSONObject();
+        operationinfo.put("isReturnDetail","y");
+        operationinfo.put("fieldNoFindIgnore","false");
+        datajson.put("operationinfo",operationinfo);
+        main.put("datajson",datajson);
+        String result = OACrmUtil.getCrmCustomer(method,main.toJSONString());
+        if(StrUtil.isEmpty(result)){
+            throw new RuntimeException("获取客户档案失败");
+        }
+        JSONObject resObj = JSONObject.parseObject(result);
+        JSONObject message = resObj.getJSONObject("message");
+        if(!"success".equals(message.getString("msg"))){
+            throw new RuntimeException("获取客户档案失败"+message.getString("msg"));
+        }
+        JSONObject data = resObj.getJSONObject("data");
+        JSONObject datajsons = data.getJSONObject("datajson");
+        JSONArray datas = datajsons.getJSONArray("datas");
+
+        return datas;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OACrmUtil.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OACrmUtil.java
new file mode 100644
index 00000000..1ece6b6b
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OACrmUtil.java
@@ -0,0 +1,109 @@
+package com.hzya.frame.seeyon.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ * com.hzya.frame.bip.v3.v2207.util
+ *
+ * @author makejava
+ * @date 2024-05 -30 14:20
+ */
+
+public class OACrmUtil {
+private static String IP = "http://192.168.3.70:30800/ws/CRM/";
+    public static String getCrmCustomer(String method,String parm){
+        System.out.println("推送参数"+parm);
+        String result = HttpRequest.post(IP+method)
+                .header("reqid", "3906052d-2d72-4e01-96e3-053e0b47063e")//头信息,多个头信息多次调用此方法即可
+                .header("reqfrom", "reqfrom")//头信息,多个头信息多次调用此方法即可
+                .header("Authorization", "Basic b2EtWFNBUUY1NjE6WXZDWnNGNXQxR1k3bWlSYlcxWE5vcjlpRzZJeE5rYVQ=")//头信息,多个头信息多次调用此方法即可
+                .body(parm)//表单内容
+                .timeout(20000)//超时,毫秒
+                .execute().body();
+        System.out.println("返回参数"+result);
+        return result;
+    }
+
+    public static String sendBillToOa(String parm, String apiCode,String token){
+        String baseUrl = "http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface";
+        System.out.println("推送参数"+parm);
+        String result = HttpRequest.post(baseUrl)
+                .header("appId", "800023")//头信息,多个头信息多次调用此方法即可
+                .header("access_token", token)//头信息,多个头信息多次调用此方法即可
+                .header("apiCode", apiCode)//头信息,多个头信息多次调用此方法即可
+                .header("publicKey", "ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")//头信息,多个头信息多次调用此方法即可
+                .header("secretKey", "7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//头信息,多个头信息多次调用此方法即可
+                .body(parm)//表单内容
+                .timeout(20000)//超时,毫秒
+                .execute().body();
+        System.out.println("返回参数"+result);
+        if(StrUtil.isNotEmpty(result)){
+            return analytic(result);
+        }
+        return null;
+    }
+    public static String getOaData(String parm, String apiCode,String token){
+        String baseUrl = "http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface";
+        System.out.println("推送参数"+parm);
+        String result = HttpRequest.post(baseUrl)
+                .header("appId", "800055")//头信息,多个头信息多次调用此方法即可
+                .header("apiCode", apiCode)//头信息,多个头信息多次调用此方法即可
+                .header("token", token)//头信息,多个头信息多次调用此方法即可
+                .header("publicKey", "ZJYA3QLcONeW3qKqiApiY18mzN1wTyrS8WJBzLp+jGmsJFhCe7eDIk+3zDUT+v578prj")//头信息,多个头信息多次调用此方法即可
+                .header("secretKey", "I2Z0QGHykRnRUhuMuCliVONF2zz1uAI5FHb059netpVuqLC50JYLZHU0gb/kkMHGj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//头信息,多个头信息多次调用此方法即可
+                .body(parm)//表单内容
+                .timeout(20000)//超时,毫秒
+                .execute().body();
+        System.out.println("返回参数"+result);
+        if(StrUtil.isNotEmpty(result)){
+            return analytic(result);
+        }
+        return null;
+    }
+    public static String getOaToken(String parm, String apiCode){
+        String baseUrl = "http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface";
+        String result = HttpRequest.post(baseUrl)
+                .header("appId", "800055")//头信息,多个头信息多次调用此方法即可
+                .header("apiCode", apiCode)//头信息,多个头信息多次调用此方法即可
+                .header("publicKey", "ZJYA3QLcONeW3qKqiApiY18mzN1wTyrS8WJBzLp+jGmsJFhCe7eDIk+3zDUT+v578prj")//头信息,多个头信息多次调用此方法即可
+                .header("secretKey", "I2Z0QGHykRnRUhuMuCliVONF2zz1uAI5FHb059netpVuqLC50JYLZHU0gb/kkMHGj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//头信息,多个头信息多次调用此方法即可
+                .body(parm)//表单内容
+                .timeout(20000)//超时,毫秒
+                .execute().body();
+//        System.out.println("返回参数"+result);
+        if(StrUtil.isNotEmpty(result)){
+            JSONObject obj = JSON.parseObject( analytic(result));
+            return obj.getString("id");
+        }
+        return null;
+    }
+    public static String getToken(String userCode, String apiCode){
+        String baseUrl = "http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface";
+        String result = HttpRequest.post(baseUrl)
+                .header("appId", "800023")//头信息,多个头信息多次调用此方法即可
+                .header("apiCode", apiCode)//头信息,多个头信息多次调用此方法即可
+                .header("usercode", userCode)//头信息,多个头信息多次调用此方法即可
+                .header("publicKey", "ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")//头信息,多个头信息多次调用此方法即可
+                .header("secretKey", "7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//头信息,多个头信息多次调用此方法即可
+                .body("")//表单内容
+                .timeout(20000)//超时,毫秒
+                .execute().body();
+        System.out.println("返回参数"+result);
+        if(StrUtil.isNotEmpty(result)){
+             JSONObject obj = JSON.parseObject( analytic(result));
+            JSONObject data = obj.getJSONObject("data");
+            return data.getString("access_token");
+        }
+        return null;
+    }
+    public static String analytic(String parm){
+        JSONObject main = JSON.parseObject(parm);
+        return main.getString("attribute");
+    }
+
+
+}