diff --git a/.gitignore b/.gitignore
index 1565f44e..b252f4db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,3 +63,6 @@ $RECYCLE.BIN/
 /base-buildpackage/target/
 /base-common/target/
 /base-core/target/
+/base-webapp/target/classes/com/hzya/frame/
+/fw-weixin/target/
+/E:/yongansystem/log/2024-10-15/
diff --git a/base-buildpackage/pom.xml b/base-buildpackage/pom.xml
index 41435a19..b91e52ac 100644
--- a/base-buildpackage/pom.xml
+++ b/base-buildpackage/pom.xml
@@ -38,6 +38,18 @@
                 <profile.active>llg</profile.active>
             </properties>
         </profile>
+        <profile>
+            <id>xel</id> <!--xel-->
+            <properties>
+                <profile.active>xel</profile.active>
+            </properties>
+        </profile>
+        <profile>
+            <id>jianhui</id><!-- 建辉环境打包用这个-->
+            <properties>
+                <profile.active>jianhui</profile.active>
+            </properties>
+        </profile>
        
     </profiles>
     <build>
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/BackUpDatabase/plugin/BackUpDatabaseInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/BackUpDatabase/plugin/BackUpDatabaseInitializer.java
new file mode 100644
index 00000000..7a98112a
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/BackUpDatabase/plugin/BackUpDatabaseInitializer.java
@@ -0,0 +1,386 @@
+package com.hzya.frame.plugin.BackUpDatabase.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+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.apache.commons.net.ftp.FTPClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.io.PrintWriter;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+
+
+/**
+ * 主数据模版(MdmModule)表服务接口
+ *
+ * @author makejava
+ * @since 2024-06-18 10:33:32
+ */
+public class BackUpDatabaseInitializer extends PluginBaseEntity {
+    Logger logger = LoggerFactory.getLogger(BackUpDatabaseInitializer.class);
+
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    @Override
+    public String getPluginId() {
+        return "BackUpDatabasePlugin";
+    }
+
+    @Override
+    public String getPluginName() {
+        return "数据库备份下发";
+    }
+
+    @Override
+    public String getPluginLabel() {
+        return "BackUpDatabasePlugin";
+    }
+
+    @Override
+    public String getPluginType() {
+        return "1";
+    }
+
+    @Value("${database.filePase:}")
+    private String filePase;//文件保存路径
+
+    @Value("${database.fileName:data.sql}")
+    private String fileName;//文件保存名称
+
+    @Value("${database.databaseName:}")
+    private String databaseName;//库名
+
+    @Value("${database.host:}")
+    private String host;//地址
+
+    @Value("${database.port:}")
+    private String port;//端口
+
+    @Value("${database.username:}")
+    private String username;//用户名
+
+    @Value("${database.password:}")
+    private String password;//密码
+
+
+    @Value("${sftp.host:}")
+    private String sftpHost;
+
+    @Value("${sftp.port:}")
+    private Integer sftpPort;
+
+    @Value("${sftp.username:}")
+    private String sftpUsername;
+
+    @Value("${sftp.password:}")
+    private String sftpPassword;
+
+    @Value("${sftp.filePase:}")
+    private String sftpFilePase;
+
+
+    private ChannelSftp sftp = null;
+    private Session sshSession = null;
+
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) {
+        try {
+            if(filePase == null || "".equals(filePase)
+                || databaseName == null || "".equals(databaseName)
+                || fileName == null || "".equals(fileName)
+                || host == null || "".equals(host)
+                || port == null || "".equals(port)
+                || username == null || "".equals(username)
+                || password == null || "".equals(password)
+            ){
+                return BaseResult.getSuccessMessageEntity("系统参数未配置不执行,数据库备份");
+            }
+            //查找是否存在当天数据库
+            //格式化日期
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            String data = sdf.format(new Date());
+            //当天路径
+            String nowDatabasePase = filePase + File.separator + data;
+            //不判断文件是否存在,直接执行
+            if(!backFile(nowDatabasePase)){
+                return BaseResult.getFailureMessageEntity("备份失败");
+            }
+            //判断是否有sftp配置,有的备份,没有的不备份
+            if(sftpHost != null && !"".equals(sftpHost)
+                && sftpPort != null && !"".equals(sftpPort)
+                && sftpUsername != null && !"".equals(sftpUsername)
+                && sftpPassword != null && !"".equals(sftpPassword)
+                && sftpFilePase != null && !"".equals(sftpFilePase)
+            ){
+                String sftpnowDatabasePase = sftpFilePase + File.separator + data;
+                if(!sendFile(nowDatabasePase,sftpnowDatabasePase)){
+                    return BaseResult.getFailureMessageEntity("备份失败");
+                }
+            }
+            logger.info("执行成功");
+            return BaseResult.getSuccessMessageEntity("执行成功");
+        } catch (Exception e) {
+            logger.error("执行失败{}", e.getMessage());
+            return BaseResult.getFailureMessageEntity("备份失败");
+        }
+    }
+
+    private boolean backFile(String nowDatabasePase) {
+        try {
+            // 构建 mysqldump 命令
+            ProcessBuilder processBuilder = new ProcessBuilder(
+                    "mysqldump",
+                    "--ssl-mode=DISABLED",
+                    "-h", host,
+                    "-u", username,
+                    "-p" + password,
+                    "-P" + port,
+                    databaseName);
+            // 启动进程并获取输入流
+            Process process = processBuilder.start();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            File f  = creatFile(nowDatabasePase,fileName);
+            // 将备份内容写入文件
+            FileWriter writer = new FileWriter(f);
+            String line;
+            while ((line = reader.readLine())!= null) {
+                writer.write(line + "\n");
+            }
+            // 关闭资源
+            reader.close();
+            writer.close();
+            process.waitFor();
+            logger.info("文件备份成功路径:"+nowDatabasePase+ File.separator +fileName);
+            return true;
+        } catch (IOException | InterruptedException e) {
+            logger.info("文件备份失败:"+e.getMessage());
+            return false;
+        }
+    }
+    /**
+     * @Author lvleigang
+     * @Description  创建目录及文件
+     * @Date 8:59 上午 2024/10/22
+     * @param filePath
+     * @param fileName
+     * @return java.io.File
+     **/
+    public File creatFile(String filePath, String fileName) {
+        File folder = new File(filePath);
+        //文件夹路径不存在
+        if (!folder.exists()) {
+            boolean mkdirs = folder.mkdirs();
+        }
+        // 如果文件不存在就创建
+        File file = new File(filePath + File.separator + fileName);
+        if (!file.exists()) {
+            try {
+                file.createNewFile();
+            } catch (IOException e) {
+                logger.error("创建备份文件失败:"+e.getMessage());
+            }
+        }
+        return file;
+    }
+
+    private boolean sendFile(String localFilePath,String remoteFileName) {
+        try {
+            connect();
+            uploadFile(remoteFileName,fileName,localFilePath,fileName);
+            disconnect();
+            return true;
+        } catch (Exception e) {
+            logger.error("sftp文件上传失败:"+e.getMessage());
+            return false;
+        }
+    }
+
+    public void connect() {
+        try {
+            JSch jsch = new JSch();
+            jsch.getSession(sftpUsername, sftpHost, sftpPort);
+            sshSession = jsch.getSession(sftpUsername, sftpHost, sftpPort);
+            if (logger.isInfoEnabled()) {
+                logger.info("Session created.");
+            }
+            sshSession.setPassword(sftpPassword);
+            Properties sshConfig = new Properties();
+            sshConfig.put("StrictHostKeyChecking", "no");
+            sshSession.setConfig(sshConfig);
+            sshSession.connect();
+            if (logger.isInfoEnabled()) {
+                logger.info("Session connected.");
+            }
+            Channel channel = sshSession.openChannel("sftp");
+            channel.connect();
+            if (logger.isInfoEnabled()) {
+                logger.info("Opening Channel.");
+            }
+            sftp = (ChannelSftp) channel;
+            if (logger.isInfoEnabled()) {
+                logger.info("Connected to " + host + ".");
+            }
+        } catch (Exception e) {
+        }
+    }
+
+    /**
+     * 关闭连接
+     */
+    public void disconnect() {
+        if (this.sftp != null) {
+            if (this.sftp.isConnected()) {
+                this.sftp.disconnect();
+                if (logger.isInfoEnabled()) {
+                    logger.info("sftp is closed already");
+                }
+            }
+        }
+        if (this.sshSession != null) {
+            if (this.sshSession.isConnected()) {
+                this.sshSession.disconnect();
+                if (logger.isInfoEnabled()) {
+                    logger.info("sshSession is closed already");
+                }
+            }
+        }
+    }
+
+    /**
+     * 上传单个文件
+     *
+     * @param remotePath:远程保存目录
+     * @param remoteFileName:保存文件名
+     * @param localPath:本地上传目录(以路径符号结束)
+     * @param localFileName:上传的文件名
+     * @return
+     */
+    public boolean uploadFile(String remotePath, String remoteFileName, String localPath, String localFileName) {
+        FileInputStream in = null;
+        try {
+            createDir(remotePath);
+            File file = new File(localPath + File.separator +  localFileName);
+            in = new FileInputStream(file);
+            sftp.put(in, remoteFileName, 65536);
+            return true;
+        } catch (FileNotFoundException e) {
+        } catch (SftpException e) {
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 创建目录
+     *
+     * @param createpath
+     * @return
+     */
+    public boolean createDir(String createpath) {
+        try {
+            if (isDirExist(createpath)) {
+                this.sftp.cd(createpath);
+                return true;
+            }
+            String pathArry[] = createpath.split("/");
+            StringBuffer filePath = new StringBuffer("/");
+            for (String path : pathArry) {
+                if (path.equals("")) {
+                    continue;
+                }
+                filePath.append(path + "/");
+                if (isDirExist(filePath.toString())) {
+                    sftp.cd(filePath.toString());
+                } else {
+                    // 建立目录
+                    sftp.mkdir(filePath.toString());
+                    // 进入并设置为当前目录
+                    sftp.cd(filePath.toString());
+                }
+
+            }
+            this.sftp.cd(createpath);
+            return true;
+        } catch (SftpException e) {
+        }
+        return false;
+    }
+
+    /**
+     * 判断目录是否存在
+     *
+     * @param directory
+     * @return
+     */
+    public boolean isDirExist(String directory) {
+        boolean isDirExistFlag = false;
+        try {
+            SftpATTRS sftpATTRS = sftp.lstat(directory);
+            isDirExistFlag = true;
+            return sftpATTRS.isDir();
+        } catch (Exception e) {
+            if (e.getMessage().toLowerCase().equals("no such file")) {
+                isDirExistFlag = false;
+            }
+        }
+        return isDirExistFlag;
+    }
+
+
+
+    /**
+     * 如果目录不存在就创建目录
+     *
+     * @param path
+     */
+    public void mkdirs(String path) {
+        File f = new File(path);
+
+        String fs = f.getParent();
+
+        f = new File(fs);
+
+        if (!f.exists()) {
+            f.mkdirs();
+        }
+    }
+
+
+
+
+
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/mdmDistribute/plugin/MdmModulePluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/mdmDistribute/plugin/MdmModulePluginInitializer.java
index ebff9dc2..beb4c48e 100644
--- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/mdmDistribute/plugin/MdmModulePluginInitializer.java
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/mdmDistribute/plugin/MdmModulePluginInitializer.java
@@ -452,6 +452,7 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
                                             }
                                         }
                                     } catch (Exception e) {
+                                        logger.info("执行异常错误原因:"+e);
                                         logger.error("新增返回脚本解析保存三方id错误"+jsonResultEntity.getAttribute());
                                         taskDetailEntity.setResult("新增返回脚本解析保存三方id错误");
                                         taskLivingDetailsService.updateLogFailToSuccess(taskDetailEntity);
@@ -543,7 +544,7 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
         map1.put("tableName",mainDb);
         map1.put("dataStatus", "N");
         map1.put("deleteStatus", "0");
-        map1.put("size", 10);
+        map1.put("size", 50);
         objects = mdmModuleDao.queryMdmSTs(map1);
         objects = toLowerCaseKeys(objects);
 
@@ -738,7 +739,7 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
         map1.put("tableName",mainDb);
         //map1.put("dataStatus", "F");
         map1.put("updateStatus", "0");
-        map1.put("size", 10);
+        map1.put("size", 50);
         objects = mdmModuleDao.queryMdmSTs(map1);
         objects = toLowerCaseKeys(objects);
 
@@ -926,7 +927,7 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
         map1.put("tableName",mainDb);
         //map1.put("dataStatus", "Y");
         map1.put("addStatus", "0");
-        map1.put("size", 100);
+        map1.put("size", 50);
         objects = mdmModuleDao.queryMdmSTs(map1);
         objects = toLowerCaseKeys(objects);
 
@@ -991,6 +992,7 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
                 mdmModuleSendLogEntity.setTableName(mainDb+"_send_log");
                 mdmModuleSendLogEntity.setFormmainId(doObjects.get(i).getString("id"));
                 mdmModuleSendLogEntity.setSts("Y");
+                mdmModuleSendLogEntity.setDataType("1");
                 mdmModuleSendLogEntity.setAppId(sysApplicationEntity.getId());
                 mdmModuleSendLogEntity.setApiId(apiEntity.getId());
                 //mdmModuleSendLogEntity.setDistributeId(mdmModuleDistributeEntities.get(i1).getId());
@@ -1121,10 +1123,12 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
                     }
                     //保存日志
                     saveMdmModuleSendLogEntity(mainCode,mdmModuleDistributeEntities.get(i1).getId(),"1","发送成功",mainDb,objects.get(i).getString("id"),sysApplicationEntity.getName(),sysApplicationEntity.getId(),apiEntity.getApiName(),apiEntity.getId(),doObjects.get(i).toJSONString(),"1");
+                    objects.get(i).put("sendsanfzt123",true);
                     continue;
                 }else {
                     //保存日志
                     saveMdmModuleSendLogEntity(mainCode,mdmModuleDistributeEntities.get(i1).getId(),"2","转发失败:"+jsonResultEntity.getAttribute(),mainDb,objects.get(i).getString("id"),sysApplicationEntity.getName(),sysApplicationEntity.getId(),apiEntity.getApiName(),apiEntity.getId(),doObjects.get(i).toJSONString(),"1");
+                    objects.get(i).put("sendsanfzt123",false);
                     continue;
                 }
             }
@@ -1132,12 +1136,14 @@ public class MdmModulePluginInitializer extends PluginBaseEntity {
 
         //所有下发发送完成,修改数据状态
         for (int i = 0; i < objects.size(); i++) {
-            Map<String, Object> updateMap = new HashMap<>();
-            updateMap.put("tableName",mainDb);
-            //updateMap.put("dataStatus", "Y");
-            updateMap.put("addStatus", "1");
-            updateMap.put("id", objects.get(i).getString("id"));
-            mdmModuleDao.updateMdmSTs(updateMap);
+            if(objects.get(i).getBoolean("sendsanfzt123")){
+                Map<String, Object> updateMap = new HashMap<>();
+                updateMap.put("tableName",mainDb);
+                //updateMap.put("dataStatus", "Y");
+                updateMap.put("addStatus", "1");
+                updateMap.put("id", objects.get(i).getString("id"));
+                mdmModuleDao.updateMdmSTs(updateMap);
+            }
         }
     }
 
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderBDao.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderBDao.java
new file mode 100644
index 00000000..432e5217
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderBDao.java
@@ -0,0 +1,16 @@
+package com.hzya.frame.plugin.ncc.dao;
+
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.plugin.ncc.entity.POrderBEntity;
+
+/**
+ * @description: 采购订单子表  dao
+ * @tableName: po_order_b 
+ * @entityName: POrderBEntity
+ * @author: code_generator
+ * @history: 1.0
+ */
+public interface IPOrderBDao extends IBaseDao<POrderBEntity, String> {
+
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderHDao.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderHDao.java
new file mode 100644
index 00000000..a1b38e75
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/IPOrderHDao.java
@@ -0,0 +1,16 @@
+package com.hzya.frame.plugin.ncc.dao;
+
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.plugin.ncc.entity.POrderHEntity;
+
+/**
+ * @description: 采购订单主表  dao
+ * @tableName: po_order 
+ * @entityName: POrderHEntity
+ * @author: code_generator
+ * @history: 1.0
+ */
+public interface IPOrderHDao extends IBaseDao<POrderHEntity, String> {
+
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderBDaoImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderBDaoImpl.java
new file mode 100644
index 00000000..c4798dc4
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderBDaoImpl.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.plugin.ncc.dao.impl;
+
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.plugin.ncc.dao.IPOrderBDao;
+import com.hzya.frame.plugin.ncc.entity.POrderBEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @description: 采购订单子表  dao
+ * @tableName: po_order_b
+ * @entityName: POrderBEntity
+ * @author: code_generator
+ * @history:1.0
+ */
+@Repository("po_order_bdao")
+public class POrderBDaoImpl extends MybatisGenericDao<POrderBEntity, String> implements IPOrderBDao {
+
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderHDaoImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderHDaoImpl.java
new file mode 100644
index 00000000..06d51814
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/dao/impl/POrderHDaoImpl.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.plugin.ncc.dao.impl;
+
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.plugin.ncc.dao.IPOrderHDao;
+import com.hzya.frame.plugin.ncc.entity.POrderHEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @description: 采购订单主表  dao
+ * @tableName: po_order
+ * @entityName: POrderHEntity
+ * @author: code_generator
+ * @history:1.0
+ */
+@Repository("po_orderdao")
+public class POrderHDaoImpl extends MybatisGenericDao<POrderHEntity, String> implements IPOrderHDao {
+
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.java
new file mode 100644
index 00000000..112ddc71
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.java
@@ -0,0 +1,869 @@
+package com.hzya.frame.plugin.ncc.entity;
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.math.BigDecimal;
+/**
+ * @description: 采购订单子表  
+ * @tableName:   po_order_b 
+ * @entityName:  POrderBEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+
+public class POrderBEntity extends BaseEntity {
+
+	/**  */
+	private String pk_order;
+	/**  */
+	private String pk_order_b;
+	/** 集团 */
+	private String pk_group;
+	/** 组织 */
+	private String pk_org;
+	/** 行号 */
+	private String crowno;
+	/** 物料 */
+	private String pk_material;
+	/** 物料编码 */
+	private String material_code;
+	/** 物料名称 */
+	private String material_name;
+	private String material_class_id;
+	/** 主单位 */
+	private String cunitid;
+	/** 主单位名称 */
+	private String cunitid_name;
+	/** 辅单位 */
+	private String castunitid;
+	/** 副单位名称 */
+	private String castunitid_name;
+	/** 吨数 */
+	private BigDecimal nnum;
+	/** 件数 */
+	private BigDecimal nastnum;
+	/** 换算率 */
+	private String vchangerate;
+	/** 无税单价 */
+	private BigDecimal norigprice;
+	/** 含税单价 */
+	private BigDecimal norigtaxprice;
+	/** 无税金额 */
+	private BigDecimal norignetprice;
+	/** 含税金额 */
+	private BigDecimal norigtaxnetprice;
+	/** 税额 */
+	private BigDecimal ntax;
+	/** 价税合计 */
+	private BigDecimal norigtaxmny;
+	/** 税率 */
+	private BigDecimal ntaxrate;
+	/** 币种 */
+	private String corigcurrencyid;
+	private String corigcurrencyid_name;
+	/** 来源单据类型	 */
+	private String csourcetypecode;
+	/** 来源单据	 */
+	private String csourceid;
+	/** 来源单据明细	 */
+	private String csourcebid;
+	/** 源头单据类型	 */
+	private String cfirsttypecode;
+	/** 源头单据	 */
+	private String cfirstid;
+	/** 源头单据明细	 */
+	private String cfirstbid;
+	/** 是否赠品	 */
+	private String blargess;
+	/** 源头交易类型	 */
+	private String vfirsttrantype;
+	/** 源头单据号	 */
+	private String vfirstcode;
+	/** 源头单据行号	 */
+	private String vfirstrowno;
+	/** 来源交易类型	 */
+	private String vsourcetrantype;
+	/** 来源单据号	 */
+	private String vsourcecode;
+	/** 来源单据行号	 */
+	private String vsourcerowno;
+	/** 自由辅助属性1 */
+	private String vfree1;
+	/** 自由辅助属性2 */
+	private String vfree2;
+	/** 自由辅助属性3 */
+	private String vfree3;
+	/** 自由辅助属性4 */
+	private String vfree4;
+	/** 自由辅助属性5 */
+	private String vfree5;
+	/** 自由辅助属性6 */
+	private String vfree6;
+	private String pk_grade;
+	/** 自由辅助属性7 */
+	private String vfree7;
+	/** FSC/EUDR主键 */
+
+	private String pk_vfree8;
+	/** FSC/EUDR */
+
+	private String vfree8;
+	/** 自由辅助属性9 */
+	private String vfree9;
+	/** 品牌主键 */
+
+	private String pk_vfree10;
+	/** 品牌 */
+
+	private String vfree10;
+	/** 自定义项1 */
+	private String vbdef1;
+	/** 自定义项2 */
+	private String vbdef2;
+	/** 自定义项3 */
+	private String vbdef3;
+	/** 自定义项4 */
+	private String vbdef4;
+	/** 自定义项5 */
+	private String vbdef5;
+	/** 自定义项6 */
+	private String vbdef6;
+	/** 自定义项7 */
+	private String vbdef7;
+	/** 自定义项8 */
+	private String vbdef8;
+	/** 自定义项9 */
+	private String vbdef9;
+	/** 自定义项10 */
+	private String vbdef10;
+	/** 自定义项11 */
+	private String vbdef11;
+	/** 自定义项12 */
+	private String vbdef12;
+	/** 自定义项13 */
+	private String vbdef13;
+	/** 自定义项14 */
+	private String vbdef14;
+	/** 自定义项15 */
+	private String vbdef15;
+	/** 自定义项16 */
+	private String vbdef16;
+	/** 自定义项17 */
+	private String vbdef17;
+	/** 自定义项18 */
+	private String vbdef18;
+	/** 自定义项19 */
+	private String vbdef19;
+	/** 自定义项20 */
+	private String vbdef20;
+	private String vbmemo;
+	private String external_material_spec;
+	/** 报价单位 */
+	private String cqtunitid;
+	private String cqtunitid_name;
+	/** 报价数量 */
+	private BigDecimal nqtunitnum;
+	/** 折本汇率 */
+	private BigDecimal nexchangerate;
+	/** 收货仓库 */
+	private String pk_recvstordoc;
+	private String recvstordoc_name;
+	/** 计划到货日期 */
+	private String dplanarrvdate;
+
+	private String special_type;
+	private String vbatchcode;
+
+	private String ic_id;
+
+	private BigDecimal price;
+	private BigDecimal taxprice;
+	private String material_id;
+
+	public String getPk_order() {
+		return pk_order;
+	}
+
+	public void setPk_order(String pk_order) {
+		this.pk_order = pk_order;
+	}
+
+	public String getPk_order_b() {
+		return pk_order_b;
+	}
+
+	public void setPk_order_b(String pk_order_b) {
+		this.pk_order_b = pk_order_b;
+	}
+
+	public String getPk_group() {
+		return pk_group;
+	}
+
+	public void setPk_group(String pk_group) {
+		this.pk_group = pk_group;
+	}
+
+	public String getPk_org() {
+		return pk_org;
+	}
+
+	public void setPk_org(String pk_org) {
+		this.pk_org = pk_org;
+	}
+
+	public String getCrowno() {
+		return crowno;
+	}
+
+	public void setCrowno(String crowno) {
+		this.crowno = crowno;
+	}
+
+	public String getPk_material() {
+		return pk_material;
+	}
+
+	public void setPk_material(String pk_material) {
+		this.pk_material = pk_material;
+	}
+
+	public String getMaterial_code() {
+		return material_code;
+	}
+
+	public void setMaterial_code(String material_code) {
+		this.material_code = material_code;
+	}
+
+	public String getMaterial_name() {
+		return material_name;
+	}
+
+	public void setMaterial_name(String material_name) {
+		this.material_name = material_name;
+	}
+
+	public String getMaterial_class_id() {
+		return material_class_id;
+	}
+
+	public void setMaterial_class_id(String material_class_id) {
+		this.material_class_id = material_class_id;
+	}
+
+	public String getCunitid() {
+		return cunitid;
+	}
+
+	public void setCunitid(String cunitid) {
+		this.cunitid = cunitid;
+	}
+
+	public String getCunitid_name() {
+		return cunitid_name;
+	}
+
+	public void setCunitid_name(String cunitid_name) {
+		this.cunitid_name = cunitid_name;
+	}
+
+	public String getCastunitid() {
+		return castunitid;
+	}
+
+	public void setCastunitid(String castunitid) {
+		this.castunitid = castunitid;
+	}
+
+	public String getCastunitid_name() {
+		return castunitid_name;
+	}
+
+	public void setCastunitid_name(String castunitid_name) {
+		this.castunitid_name = castunitid_name;
+	}
+
+	public BigDecimal getNnum() {
+		return nnum;
+	}
+
+	public void setNnum(BigDecimal nnum) {
+		this.nnum = nnum;
+	}
+
+	public BigDecimal getNastnum() {
+		return nastnum;
+	}
+
+	public void setNastnum(BigDecimal nastnum) {
+		this.nastnum = nastnum;
+	}
+
+	public String getVchangerate() {
+		return vchangerate;
+	}
+
+	public void setVchangerate(String vchangerate) {
+		this.vchangerate = vchangerate;
+	}
+
+	public BigDecimal getNorigprice() {
+		return norigprice;
+	}
+
+	public void setNorigprice(BigDecimal norigprice) {
+		this.norigprice = norigprice;
+	}
+
+	public BigDecimal getNorigtaxprice() {
+		return norigtaxprice;
+	}
+
+	public void setNorigtaxprice(BigDecimal norigtaxprice) {
+		this.norigtaxprice = norigtaxprice;
+	}
+
+	public BigDecimal getNorignetprice() {
+		return norignetprice;
+	}
+
+	public void setNorignetprice(BigDecimal norignetprice) {
+		this.norignetprice = norignetprice;
+	}
+
+	public BigDecimal getNorigtaxnetprice() {
+		return norigtaxnetprice;
+	}
+
+	public void setNorigtaxnetprice(BigDecimal norigtaxnetprice) {
+		this.norigtaxnetprice = norigtaxnetprice;
+	}
+
+	public BigDecimal getNtax() {
+		return ntax;
+	}
+
+	public void setNtax(BigDecimal ntax) {
+		this.ntax = ntax;
+	}
+
+	public BigDecimal getNorigtaxmny() {
+		return norigtaxmny;
+	}
+
+	public void setNorigtaxmny(BigDecimal norigtaxmny) {
+		this.norigtaxmny = norigtaxmny;
+	}
+
+	public BigDecimal getNtaxrate() {
+		return ntaxrate;
+	}
+
+	public void setNtaxrate(BigDecimal ntaxrate) {
+		this.ntaxrate = ntaxrate;
+	}
+
+	public String getCorigcurrencyid() {
+		return corigcurrencyid;
+	}
+
+	public void setCorigcurrencyid(String corigcurrencyid) {
+		this.corigcurrencyid = corigcurrencyid;
+	}
+
+	public String getCorigcurrencyid_name() {
+		return corigcurrencyid_name;
+	}
+
+	public void setCorigcurrencyid_name(String corigcurrencyid_name) {
+		this.corigcurrencyid_name = corigcurrencyid_name;
+	}
+
+	public String getCsourcetypecode() {
+		return csourcetypecode;
+	}
+
+	public void setCsourcetypecode(String csourcetypecode) {
+		this.csourcetypecode = csourcetypecode;
+	}
+
+	public String getCsourceid() {
+		return csourceid;
+	}
+
+	public void setCsourceid(String csourceid) {
+		this.csourceid = csourceid;
+	}
+
+	public String getCsourcebid() {
+		return csourcebid;
+	}
+
+	public void setCsourcebid(String csourcebid) {
+		this.csourcebid = csourcebid;
+	}
+
+	public String getCfirsttypecode() {
+		return cfirsttypecode;
+	}
+
+	public void setCfirsttypecode(String cfirsttypecode) {
+		this.cfirsttypecode = cfirsttypecode;
+	}
+
+	public String getCfirstid() {
+		return cfirstid;
+	}
+
+	public void setCfirstid(String cfirstid) {
+		this.cfirstid = cfirstid;
+	}
+
+	public String getCfirstbid() {
+		return cfirstbid;
+	}
+
+	public void setCfirstbid(String cfirstbid) {
+		this.cfirstbid = cfirstbid;
+	}
+
+	public String getBlargess() {
+		return blargess;
+	}
+
+	public void setBlargess(String blargess) {
+		this.blargess = blargess;
+	}
+
+	public String getVfirsttrantype() {
+		return vfirsttrantype;
+	}
+
+	public void setVfirsttrantype(String vfirsttrantype) {
+		this.vfirsttrantype = vfirsttrantype;
+	}
+
+	public String getVfirstcode() {
+		return vfirstcode;
+	}
+
+	public void setVfirstcode(String vfirstcode) {
+		this.vfirstcode = vfirstcode;
+	}
+
+	public String getVfirstrowno() {
+		return vfirstrowno;
+	}
+
+	public void setVfirstrowno(String vfirstrowno) {
+		this.vfirstrowno = vfirstrowno;
+	}
+
+	public String getVsourcetrantype() {
+		return vsourcetrantype;
+	}
+
+	public void setVsourcetrantype(String vsourcetrantype) {
+		this.vsourcetrantype = vsourcetrantype;
+	}
+
+	public String getVsourcecode() {
+		return vsourcecode;
+	}
+
+	public void setVsourcecode(String vsourcecode) {
+		this.vsourcecode = vsourcecode;
+	}
+
+	public String getVsourcerowno() {
+		return vsourcerowno;
+	}
+
+	public void setVsourcerowno(String vsourcerowno) {
+		this.vsourcerowno = vsourcerowno;
+	}
+
+	public String getVfree1() {
+		return vfree1;
+	}
+
+	public void setVfree1(String vfree1) {
+		this.vfree1 = vfree1;
+	}
+
+	public String getVfree2() {
+		return vfree2;
+	}
+
+	public void setVfree2(String vfree2) {
+		this.vfree2 = vfree2;
+	}
+
+	public String getVfree3() {
+		return vfree3;
+	}
+
+	public void setVfree3(String vfree3) {
+		this.vfree3 = vfree3;
+	}
+
+	public String getVfree4() {
+		return vfree4;
+	}
+
+	public void setVfree4(String vfree4) {
+		this.vfree4 = vfree4;
+	}
+
+	public String getVfree5() {
+		return vfree5;
+	}
+
+	public void setVfree5(String vfree5) {
+		this.vfree5 = vfree5;
+	}
+
+	public String getVfree6() {
+		return vfree6;
+	}
+
+	public void setVfree6(String vfree6) {
+		this.vfree6 = vfree6;
+	}
+
+	public String getPk_grade() {
+		return pk_grade;
+	}
+
+	public void setPk_grade(String pk_grade) {
+		this.pk_grade = pk_grade;
+	}
+
+	public String getVfree7() {
+		return vfree7;
+	}
+
+	public void setVfree7(String vfree7) {
+		this.vfree7 = vfree7;
+	}
+
+	public String getPk_vfree8() {
+		return pk_vfree8;
+	}
+
+	public void setPk_vfree8(String pk_vfree8) {
+		this.pk_vfree8 = pk_vfree8;
+	}
+
+	public String getVfree8() {
+		return vfree8;
+	}
+
+	public void setVfree8(String vfree8) {
+		this.vfree8 = vfree8;
+	}
+
+	public String getVfree9() {
+		return vfree9;
+	}
+
+	public void setVfree9(String vfree9) {
+		this.vfree9 = vfree9;
+	}
+
+	public String getPk_vfree10() {
+		return pk_vfree10;
+	}
+
+	public void setPk_vfree10(String pk_vfree10) {
+		this.pk_vfree10 = pk_vfree10;
+	}
+
+	public String getVfree10() {
+		return vfree10;
+	}
+
+	public void setVfree10(String vfree10) {
+		this.vfree10 = vfree10;
+	}
+
+	public String getVbdef1() {
+		return vbdef1;
+	}
+
+	public void setVbdef1(String vbdef1) {
+		this.vbdef1 = vbdef1;
+	}
+
+	public String getVbdef2() {
+		return vbdef2;
+	}
+
+	public void setVbdef2(String vbdef2) {
+		this.vbdef2 = vbdef2;
+	}
+
+	public String getVbdef3() {
+		return vbdef3;
+	}
+
+	public void setVbdef3(String vbdef3) {
+		this.vbdef3 = vbdef3;
+	}
+
+	public String getVbdef4() {
+		return vbdef4;
+	}
+
+	public void setVbdef4(String vbdef4) {
+		this.vbdef4 = vbdef4;
+	}
+
+	public String getVbdef5() {
+		return vbdef5;
+	}
+
+	public void setVbdef5(String vbdef5) {
+		this.vbdef5 = vbdef5;
+	}
+
+	public String getVbdef6() {
+		return vbdef6;
+	}
+
+	public void setVbdef6(String vbdef6) {
+		this.vbdef6 = vbdef6;
+	}
+
+	public String getVbdef7() {
+		return vbdef7;
+	}
+
+	public void setVbdef7(String vbdef7) {
+		this.vbdef7 = vbdef7;
+	}
+
+	public String getVbdef8() {
+		return vbdef8;
+	}
+
+	public void setVbdef8(String vbdef8) {
+		this.vbdef8 = vbdef8;
+	}
+
+	public String getVbdef9() {
+		return vbdef9;
+	}
+
+	public void setVbdef9(String vbdef9) {
+		this.vbdef9 = vbdef9;
+	}
+
+	public String getVbdef10() {
+		return vbdef10;
+	}
+
+	public void setVbdef10(String vbdef10) {
+		this.vbdef10 = vbdef10;
+	}
+
+	public String getVbdef11() {
+		return vbdef11;
+	}
+
+	public void setVbdef11(String vbdef11) {
+		this.vbdef11 = vbdef11;
+	}
+
+	public String getVbdef12() {
+		return vbdef12;
+	}
+
+	public void setVbdef12(String vbdef12) {
+		this.vbdef12 = vbdef12;
+	}
+
+	public String getVbdef13() {
+		return vbdef13;
+	}
+
+	public void setVbdef13(String vbdef13) {
+		this.vbdef13 = vbdef13;
+	}
+
+	public String getVbdef14() {
+		return vbdef14;
+	}
+
+	public void setVbdef14(String vbdef14) {
+		this.vbdef14 = vbdef14;
+	}
+
+	public String getVbdef15() {
+		return vbdef15;
+	}
+
+	public void setVbdef15(String vbdef15) {
+		this.vbdef15 = vbdef15;
+	}
+
+	public String getVbdef16() {
+		return vbdef16;
+	}
+
+	public void setVbdef16(String vbdef16) {
+		this.vbdef16 = vbdef16;
+	}
+
+	public String getVbdef17() {
+		return vbdef17;
+	}
+
+	public void setVbdef17(String vbdef17) {
+		this.vbdef17 = vbdef17;
+	}
+
+	public String getVbdef18() {
+		return vbdef18;
+	}
+
+	public void setVbdef18(String vbdef18) {
+		this.vbdef18 = vbdef18;
+	}
+
+	public String getVbdef19() {
+		return vbdef19;
+	}
+
+	public void setVbdef19(String vbdef19) {
+		this.vbdef19 = vbdef19;
+	}
+
+	public String getVbdef20() {
+		return vbdef20;
+	}
+
+	public void setVbdef20(String vbdef20) {
+		this.vbdef20 = vbdef20;
+	}
+
+	public String getVbmemo() {
+		return vbmemo;
+	}
+
+	public void setVbmemo(String vbmemo) {
+		this.vbmemo = vbmemo;
+	}
+
+	public String getExternal_material_spec() {
+		return external_material_spec;
+	}
+
+	public void setExternal_material_spec(String external_material_spec) {
+		this.external_material_spec = external_material_spec;
+	}
+
+	public String getCqtunitid() {
+		return cqtunitid;
+	}
+
+	public void setCqtunitid(String cqtunitid) {
+		this.cqtunitid = cqtunitid;
+	}
+
+	public String getCqtunitid_name() {
+		return cqtunitid_name;
+	}
+
+	public void setCqtunitid_name(String cqtunitid_name) {
+		this.cqtunitid_name = cqtunitid_name;
+	}
+
+	public BigDecimal getNqtunitnum() {
+		return nqtunitnum;
+	}
+
+	public void setNqtunitnum(BigDecimal nqtunitnum) {
+		this.nqtunitnum = nqtunitnum;
+	}
+
+	public BigDecimal getNexchangerate() {
+		return nexchangerate;
+	}
+
+	public void setNexchangerate(BigDecimal nexchangerate) {
+		this.nexchangerate = nexchangerate;
+	}
+
+	public String getPk_recvstordoc() {
+		return pk_recvstordoc;
+	}
+
+	public void setPk_recvstordoc(String pk_recvstordoc) {
+		this.pk_recvstordoc = pk_recvstordoc;
+	}
+
+	public String getRecvstordoc_name() {
+		return recvstordoc_name;
+	}
+
+	public void setRecvstordoc_name(String recvstordoc_name) {
+		this.recvstordoc_name = recvstordoc_name;
+	}
+
+	public String getDplanarrvdate() {
+		return dplanarrvdate;
+	}
+
+	public void setDplanarrvdate(String dplanarrvdate) {
+		this.dplanarrvdate = dplanarrvdate;
+	}
+
+	public String getSpecial_type() {
+		return special_type;
+	}
+
+	public void setSpecial_type(String special_type) {
+		this.special_type = special_type;
+	}
+
+	public String getVbatchcode() {
+		return vbatchcode;
+	}
+
+	public void setVbatchcode(String vbatchcode) {
+		this.vbatchcode = vbatchcode;
+	}
+
+	public String getIc_id() {
+		return ic_id;
+	}
+
+	public void setIc_id(String ic_id) {
+		this.ic_id = ic_id;
+	}
+
+	public BigDecimal getPrice() {
+		return price;
+	}
+
+	public void setPrice(BigDecimal price) {
+		this.price = price;
+	}
+
+	public BigDecimal getTaxprice() {
+		return taxprice;
+	}
+
+	public void setTaxprice(BigDecimal taxprice) {
+		this.taxprice = taxprice;
+	}
+
+	public String getMaterial_id() {
+		return material_id;
+	}
+
+	public void setMaterial_id(String material_id) {
+		this.material_id = material_id;
+	}
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.xml b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.xml
new file mode 100644
index 00000000..ae72f7f0
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderBEntity.xml
@@ -0,0 +1,183 @@
+<?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.plugin.ncc.dao.impl.POrderBDaoImpl">
+	<resultMap id="get-POrderBEntity-result" type="com.hzya.frame.plugin.ncc.entity.POrderBEntity">
+		<!-- -->
+		<!-- -->
+		<result property="pk_order" column="pk_order" />
+		<!-- -->
+		<result property="pk_order_b" column="pk_order_b" />
+		<!--集团 -->
+		<result property="pk_group" column="pk_group" />
+		<!--组织 -->
+		<result property="pk_org" column="pk_org" />
+		<!--行号 -->
+		<result property="crowno" column="crowno" />
+		<!--物料 -->
+		<result property="pk_material" column="pk_material" />
+		<!--物料编码 -->
+		<result property="material_code" column="material_code" />
+		<!--物料名称 -->
+		<result property="material_name" column="material_name" />
+		<!--主单位 -->
+		<result property="cunitid" column="cunitid" />
+		<!--主单位名称 -->
+		<result property="cunitid_name" column="cunitid_name" />
+		<!--辅单位 -->
+		<result property="castunitid" column="castunitid" />
+		<!--副单位名称 -->
+		<result property="castunitid_name" column="castunitid_name" />
+		<!--吨数 -->
+		<result property="nnum" column="nnum" />
+		<!--件数 -->
+		<result property="nastnum" column="nastnum" />
+		<!--换算率 -->
+		<result property="vchangerate" column="vchangerate" />
+		<!--无税单价 -->
+		<result property="norigprice" column="norigprice" />
+		<!--含税单价 -->
+		<result property="norigtaxprice" column="norigtaxprice" />
+		<!--无税金额 -->
+		<result property="norignetprice" column="norignetprice" />
+		<!--含税金额 -->
+		<result property="norigtaxnetprice" column="norigtaxnetprice" />
+		<!--税额 -->
+		<result property="ntax" column="ntax" />
+		<!--价税合计 -->
+		<result property="norigtaxmny" column="norigtaxmny" />
+		<!--税率 -->
+		<result property="ntaxrate" column="ntaxrate" />
+		<!--币种 -->
+		<result property="corigcurrencyid" column="corigcurrencyid" />
+		<result property="corigcurrencyid_name" column="corigcurrencyid_name" />
+		<!--来源单据类型	 -->
+		<result property="csourcetypecode" column="csourcetypecode" />
+		<!--来源单据	 -->
+		<result property="csourceid" column="csourceid" />
+		<!--来源单据明细	 -->
+		<result property="csourcebid" column="csourcebid" />
+		<!--源头单据类型	 -->
+		<result property="cfirsttypecode" column="cfirsttypecode" />
+		<!--源头单据	 -->
+		<result property="cfirstid" column="cfirstid" />
+		<!--源头单据明细	 -->
+		<result property="cfirstbid" column="cfirstbid" />
+		<!--是否赠品	 -->
+		<result property="blargess" column="blargess" />
+		<!--源头交易类型	 -->
+		<result property="vfirsttrantype" column="vfirsttrantype" />
+		<!--源头单据号	 -->
+		<result property="vfirstcode" column="vfirstcode" />
+		<!--源头单据行号	 -->
+		<result property="vfirstrowno" column="vfirstrowno" />
+		<!--来源交易类型	 -->
+		<result property="vsourcetrantype" column="vsourcetrantype" />
+		<!--来源单据号	 -->
+		<result property="vsourcecode" column="vsourcecode" />
+		<!--来源单据行号	 -->
+		<result property="vsourcerowno" column="vsourcerowno" />
+		<!--自由辅助属性1 -->
+		<result property="vfree1" column="vfree1" />
+		<!--自由辅助属性2 -->
+		<result property="vfree2" column="vfree2" />
+		<!--自由辅助属性3 -->
+		<result property="vfree3" column="vfree3" />
+		<!--自由辅助属性4 -->
+		<result property="vfree4" column="vfree4" />
+		<!--自由辅助属性5 -->
+		<result property="vfree5" column="vfree5" />
+		<!--自由辅助属性6 -->
+		<result property="vfree6" column="vfree6" />
+		<!--自由辅助属性7 -->
+		<result property="vfree7" column="vfree7" />
+		<!--FSC/EUDR主键  -->
+		<result property="pk_vfree8" column="pk_vfree8" />
+		<!--FSC/EUDR -->
+		<result property="vfree8" column="vfree8" />
+		<!--自由辅助属性9 -->
+		<result property="vfree9" column="vfree9" />
+		<!--品牌主键 -->
+		<result property="pk_vfree10" column="pk_vfree10" />
+		<!--品牌 -->
+		<result property="vfree10" column="vfree10" />
+		<!--自定义项1 -->
+		<result property="vbdef1" column="vbdef1" />
+		<!--自定义项2 -->
+		<result property="vbdef2" column="vbdef2" />
+		<!--自定义项3 -->
+		<result property="vbdef3" column="vbdef3" />
+		<!--自定义项4 -->
+		<result property="vbdef4" column="vbdef4" />
+		<!--自定义项5 -->
+		<result property="vbdef5" column="vbdef5" />
+		<!--自定义项6 -->
+		<result property="vbdef6" column="vbdef6" />
+		<!--自定义项7 -->
+		<result property="vbdef7" column="vbdef7" />
+		<!--自定义项8 -->
+		<result property="vbdef8" column="vbdef8" />
+		<!--自定义项9 -->
+		<result property="vbdef9" column="vbdef9" />
+		<!--自定义项10 -->
+		<result property="vbdef10" column="vbdef10" />
+		<!--自定义项11 -->
+		<result property="vbdef11" column="vbdef11" />
+		<!--自定义项12 -->
+		<result property="vbdef12" column="vbdef12" />
+		<!--自定义项13 -->
+		<result property="vbdef13" column="vbdef13" />
+		<!--自定义项14 -->
+		<result property="vbdef14" column="vbdef14" />
+		<!--自定义项15 -->
+		<result property="vbdef15" column="vbdef15" />
+		<!--自定义项16 -->
+		<result property="vbdef16" column="vbdef16" />
+		<!--自定义项17 -->
+		<result property="vbdef17" column="vbdef17" />
+		<!--自定义项18 -->
+		<result property="vbdef18" column="vbdef18" />
+		<!--自定义项19 -->
+		<result property="vbdef19" column="vbdef19" />
+		<!--自定义项20 -->
+		<result property="vbdef20" column="vbdef20" />
+		<result property="vbmemo" column="vbmemo" />
+		<!--报价单位 -->
+		<result property="cqtunitid" column="cqtunitid" />
+		<result property="cqtunitid_name" column="cqtunitid_name" />
+		<!--报价数量 -->
+		<result property="nqtunitnum" column="nqtunitnum" />
+		<!--折本汇率 -->
+		<result property="nexchangerate" column="nexchangerate" />
+		<!--收货仓库 -->
+		<result property="pk_recvstordoc" column="pk_recvstordoc" />
+		<!--计划到货日期 -->
+		<result property="dplanarrvdate" column="dplanarrvdate" />
+		<result property="dr" column="dr" />
+	</resultMap>
+
+
+
+	<!--获取NCC采购订单表体数据 -->
+	<select id="entity_list_base" resultMap="get-POrderBEntity-result" parameterType="com.hzya.frame.plugin.ncc.entity.POrderBEntity">
+		SELECT
+		po_order_b.*,
+		bd_material.code material_code,
+		bd_material.name material_name,
+		bdm1.name cunitid_name,
+		bdm2.name castunitid_name,
+		bdm3.name cqtunitid_name,
+		bd_currtype.name corigcurrencyid_name,
+		po_order_b.dr
+		FROM
+		po_order_b
+		left join bd_material on po_order_b.pk_material = bd_material.pk_material
+		left join bd_measdoc bdm1 on po_order_b.cunitid = bdm1.pk_measdoc
+		left join bd_measdoc bdm2 on po_order_b.castunitid = bdm2.pk_measdoc
+		left join bd_measdoc bdm3 on po_order_b.cqtunitid = bdm3.pk_measdoc
+		left join bd_currtype on po_order_b.corigcurrencyid = bd_currtype.pk_currtype
+		<trim prefix="where" prefixOverrides="and">
+			1 = 1
+			<if test="pk_order != null "> and po_order_b.pk_order  = #{pk_order}</if>
+		</trim>
+	</select>
+</mapper>
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.java
new file mode 100644
index 00000000..912ffd17
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.java
@@ -0,0 +1,163 @@
+package com.hzya.frame.plugin.ncc.entity;
+
+
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @description: 采购订单主表  
+ * @tableName:   po_order 
+ * @entityName:  POrderHEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+
+public class POrderHEntity extends BaseEntity {
+
+	/** 采购订单 */
+	private String pk_order;
+	/** 集团 */
+	private String pk_group;
+	/** 集团名称 */
+	private String group_name;
+	/** 采购组织 */
+	private String pk_org;
+	private String pk_orgs;
+	private String pk_org_search;
+	/** 采购组织版本信息 */
+	private String pk_org_v;
+	/** 组织名称 */
+	private String org_name;
+	/** 订单编号	 */
+	private String vbillcode;
+	/** 订单日期	 */
+	private String dbilldate;
+	/** 供应商	 */
+	private String pk_supplier;
+	/** 供应商版本 */
+	private String pk_supplier_v;
+	/** 供应商名称 */
+	private String supplier_name;
+	/** 采购部门 */
+	private String pk_dept;
+	/** 部门名称 */
+	private String dept_name;
+	/** 采购员	 */
+	private String cemployeeid;
+	/** 采购员名称 */
+	private String cemployeeid_name;
+	/** 订单类型编码	 */
+	private String vtrantypecode;
+	/** 订单类型名称 */
+	private String vtrantypecode_name;
+	/** 供应商发货地址	 */
+	private String pk_deliveradd;
+	/** 供应商发货地址 */
+	private String deliveradd_name;
+	/** 单据状态	 */
+	private String forderstatus;
+	private String forderstatus_name;
+	/** 备注	 */
+	private String vmemo;
+	/** 运输方式	 */
+	private String pk_transporttype;
+	/** 运输方式 */
+	private String transporttype_name;
+	/** 付款协议	 */
+	private String pk_payterm;
+	/** 付款协议名称 */
+	private String payterm_name;
+	/** 最新版本	 */
+	private String bislatest;
+	private String bislatest_name;
+	/** 总数量	 */
+	private String ntotalastnum;
+	/** 总件数	 */
+	private String ntotalpiece;
+	/** 价税合计	 */
+	private String ntotalorigmny;
+	/** 业务流程	 */
+	private String pk_busitype;
+	/** 结算方式	 */
+	private String pk_balatype;
+	/** 币种 */
+	private String corigcurrencyid;
+	private String corigcurrencyid_name;
+	/** 进口合同号*/
+	private String vdef1;
+	/**  */
+	private String vdef2;
+	/** 提单号 */
+	private String vdef3;
+	/**  */
+	private String vdef4;
+	/**  */
+	private String vdef5;
+	/**  */
+	private String vdef6;
+	/** 承运商 */
+	private String vdef7;
+	private String vdef7_name;
+	/**  */
+	private String vdef8;
+	/**  */
+	private String vdef9;
+	/**  */
+	private String vdef10;
+	/**  */
+	private String vdef11;
+	/**  */
+	private String vdef12;
+	/**  */
+	private String vdef13;
+	/** 合同号 */
+	private String vdef14;
+	/**  */
+	private String vdef15;
+	/**  */
+	private String vdef16;
+	/**  */
+	private String vdef17;
+	/**  */
+	private String vdef18;
+	/**  */
+	private String vdef19;
+	/**  */
+	private String vdef20;
+	private String breturn;
+	/** 推送状态 */
+	private String push_status;
+	/** 项目 */
+	private String pk_project;
+	/** 项目名称 */
+	private String project_name;
+
+	private String type;
+
+	private String systate = "0";
+
+	private List<String> rowIds;
+
+	private List<POrderBEntity> detailList;
+
+	private Map<String, Object> icMap;
+
+	private String ic_id;
+	private String it_type;
+	private Boolean exempted_flag;
+	private Boolean isNotPo;
+
+
+	private String tms_bill_code;
+
+	private String bill_code_search;
+
+	// 是否关闭
+	private String bfinalclose;
+
+	// 发货地址
+	private String ship_address;
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.xml b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.xml
new file mode 100644
index 00000000..fa55b988
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/entity/POrderHEntity.xml
@@ -0,0 +1,168 @@
+<?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.plugin.ncc.dao.impl.POrderHDaoImpl">
+	<resultMap id="get-POrderHEntity-result" type="com.hzya.frame.plugin.ncc.entity.POrderHEntity">
+		<!-- -->
+		<!--采购订单 -->
+		<result property="pk_order" column="pk_order" />
+		<!--集团 -->
+		<result property="pk_group" column="pk_group" />
+		<!--集团名称 -->
+		<result property="group_name" column="group_name" />
+		<!--采购组织 -->
+		<result property="pk_org" column="pk_org" />
+		<!--采购组织版本信息 -->
+		<result property="pk_org_v" column="pk_org_v" />
+		<!--组织名称 -->
+		<result property="org_name" column="org_name" />
+		<!--订单编号	 -->
+		<result property="vbillcode" column="vbillcode" />
+		<!--订单日期	 -->
+		<result property="dbilldate" column="dbilldate" />
+		<!--供应商	 -->
+		<result property="pk_supplier" column="pk_supplier" />
+		<!--供应商版本 -->
+		<result property="pk_supplier_v" column="pk_supplier_v" />
+		<!--供应商名称 -->
+		<result property="supplier_name" column="supplier_name" />
+		<!--采购部门 -->
+		<result property="pk_dept" column="pk_dept" />
+		<!--部门名称 -->
+		<result property="dept_name" column="dept_name" />
+		<!--采购员	 -->
+		<result property="cemployeeid" column="cemployeeid" />
+		<!--采购员名称 -->
+		<result property="cemployeeid_name" column="cemployeeid_name" />
+		<!--订单类型编码	 -->
+		<result property="vtrantypecode" column="vtrantypecode" />
+		<!--订单类型名称 -->
+		<result property="vtrantypecode_name" column="vtrantypecode_name" />
+		<!--供应商发货地址	 -->
+		<result property="pk_deliveradd" column="pk_deliveradd" />
+		<!--供应商发货地址 -->
+		<result property="deliveradd_name" column="deliveradd_name" />
+		<!--单据状态	 -->
+		<result property="forderstatus" column="forderstatus" />
+		<result property="forderstatus_name" column="forderstatus_name" />
+		<!--备注	 -->
+		<result property="vmemo" column="vmemo" />
+		<!--运输方式	 -->
+		<result property="pk_transporttype" column="pk_transporttype" />
+		<!--运输方式 -->
+		<result property="transporttype_name" column="transporttype_name" />
+		<!--付款协议	 -->
+		<result property="pk_payterm" column="pk_payterm" />
+		<!--付款协议名称 -->
+		<result property="payterm_name" column="payterm_name" />
+		<!--最新版本	 -->
+		<result property="bislatest" column="bislatest" />
+		<!--总数量	 -->
+		<result property="ntotalastnum" column="ntotalastnum" />
+		<!--总件数	 -->
+		<result property="ntotalpiece" column="ntotalpiece" />
+		<!--价税合计	 -->
+		<result property="ntotalorigmny" column="ntotalorigmny" />
+		<!--业务流程	 -->
+		<result property="pk_busitype" column="pk_busitype" />
+		<!--结算方式	 -->
+		<result property="pk_balatype" column="pk_balatype" />
+		<!--币种 -->
+		<result property="corigcurrencyid" column="corigcurrencyid" />
+		<result property="corigcurrencyid_name" column="corigcurrencyid_name" />
+		<!--进口合同号
+
+ -->
+		<result property="vdef1" column="vdef1" />
+		<!-- -->
+		<result property="vdef2" column="vdef2" />
+		<!--提单号 -->
+		<result property="vdef3" column="vdef3" />
+		<!-- -->
+		<result property="vdef4" column="vdef4" />
+		<!-- -->
+		<result property="vdef5" column="vdef5" />
+		<!-- -->
+		<result property="vdef6" column="vdef6" />
+		<!--承运商 -->
+		<result property="vdef7" column="vdef7" />
+		<!-- -->
+		<result property="vdef8" column="vdef8" />
+		<!-- -->
+		<result property="vdef9" column="vdef9" />
+		<!-- -->
+		<result property="vdef10" column="vdef10" />
+		<!-- -->
+		<result property="vdef11" column="vdef11" />
+		<!-- -->
+		<result property="vdef12" column="vdef12" />
+		<!-- -->
+		<result property="vdef13" column="vdef13" />
+		<!--合同号 -->
+		<result property="vdef14" column="vdef14" />
+		<!-- -->
+		<result property="vdef15" column="vdef15" />
+		<!-- -->
+		<result property="vdef16" column="vdef16" />
+		<!-- -->
+		<result property="vdef17" column="vdef17" />
+		<!-- -->
+		<result property="vdef18" column="vdef18" />
+		<!-- -->
+		<result property="vdef19" column="vdef19" />
+		<!-- -->
+		<result property="vdef20" column="vdef20" />
+		<result property="breturn" column="breturn" />
+		<result property="bfinalclose" column="bfinalclose" />
+		<!--项目 -->
+		<result property="pk_project" column="pk_project" />
+		<!--项目名称 -->
+		<result property="project_name" column="project_name" />
+		<result property="dr" column="dr" />
+	</resultMap>
+
+
+	<!--获取NCC采购订单表头数据 -->
+	<select id="entity_list_base" resultMap="get-POrderHEntity-result" parameterType="com.hzya.frame.plugin.ncc.entity.POrderHEntity">
+		SELECT
+		po_order.*,
+		po_order.dr,
+		org_orgs.name org_name,
+		bd_supplier.name supplier_name,
+		org_dept.name dept_name,
+		bd_psndoc.name cemployeeid_name,
+		bd_billtype.billtypename vtrantypecode_name,
+		bd_payment.name transporttype_name,
+		bd_project.project_name project_name,
+		bd_currtype.name corigcurrencyid_name,
+		CASE po_order.forderstatus
+		WHEN 0 THEN
+		'自由'
+		WHEN 1 THEN
+		'提交'
+		WHEN 2 THEN
+		'正在审批'
+		WHEN 4 THEN
+		'审批不通过'
+		ELSE
+		'审批通过'
+		END forderstatus_name
+		FROM
+		po_order
+		left join org_orgs on po_order.pk_org = org_orgs.pk_org
+		left join bd_supplier on po_order.pk_supplier = bd_supplier.pk_supplier
+		left join org_dept on po_order.pk_dept = org_dept.pk_dept
+		left join bd_psndoc on po_order.cemployeeid = bd_psndoc.pk_psndoc
+		left join bd_billtype on po_order.vtrantypecode = bd_billtype.pk_billtypecode
+		left join bd_payment on po_order.pk_transporttype = bd_payment.pk_payment
+		left join bd_project on po_order.pk_project = bd_project.pk_project
+		left join bd_currtype on po_order.corigcurrencyid = bd_currtype.pk_currtype
+		<trim prefix="where" prefixOverrides="and">
+			po_order.forderstatus = '3'
+			<if test="pk_org != null and pk_org  != ''"> and po_order.pk_org = #{pk_org}</if>
+			<if test="pk_orgs != null and pk_orgs  != ''"> and po_order.pk_org in (${pk_orgs})</if>
+			<if test="vbillcode != null and  vbillcode != ''"> and po_order.vbillcode = #{vbillcode}</if>
+			<if test="dbilldate != null and dbilldate != ''"> and po_order.dbilldate &gt;= #{dbilldate}</if>
+			<if test="timestamp != null and timestamp != ''"> and po_order.ts &gt;= #{timestamp}</if>
+		</trim>
+	</select>
+</mapper>
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/plugin/PoOrderPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/plugin/PoOrderPluginInitializer.java
new file mode 100644
index 00000000..2a304941
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/plugin/PoOrderPluginInitializer.java
@@ -0,0 +1,102 @@
+package com.hzya.frame.plugin.ncc.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @Description NCC采购订单传发起OA审批
+ * @Author xiangerlin
+ * @Date 2025/6/3 19:01
+ **/
+public class PoOrderPluginInitializer extends PluginBaseEntity {
+    Logger logger = LoggerFactory.getLogger(PoOrderPluginInitializer.class);
+    /***
+     * 插件初始化方法
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 10:48
+     * @Param []
+     * @return void
+     **/
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    /****
+     * 插件销毁方法
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    /****
+     * 插件的ID
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginId() {
+        return "PoOrderPluginInitializer";
+    }
+
+    /****
+     * 插件的名称
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginName() {
+        return "NCC采购订单传OA";
+    }
+
+    /****
+     * 插件的显示值
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginLabel() {
+        return "NCC采购订单传OA";
+    }
+
+    /***
+     * 插件类型 1、场景插件
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 14:01
+     * @Param []
+     * @return java.lang.String
+     **/
+    @Override
+    public String getPluginType() {
+        return "1";
+    }
+
+    /***
+     * 执行业务代码
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-07 11:20
+     * @param requestJson  执行业务代码的参数
+     * @return void
+     **/
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
+        try {
+            logger.info("======开始执行NCC采购订单传OA插件======");
+        }catch (Exception e){
+            logger.info("======执行NCC采购订单传OA插件出错======{}",e.getMessage());
+            return BaseResult.getFailureMessageEntity("请NCC采购订单传OA插件执行失败",e.getMessage());
+        }
+        return BaseResult.getSuccessMessageEntity("NCC采购订单传OA插件执行成功");
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderBService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderBService.java
new file mode 100644
index 00000000..297d0814
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderBService.java
@@ -0,0 +1,24 @@
+package com.hzya.frame.plugin.ncc.service;
+
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.plugin.ncc.entity.POrderBEntity;
+
+import java.util.List;
+
+/**
+ * @description: 采购订单子表  service
+ * @tableName:   po_order_b 
+ * @entityName:  POrderBEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+public interface IPOrderBService extends IBaseService<POrderBEntity,String> {
+
+    /**
+     * 查询采购订单子表
+     * @param entity
+     * @return
+     */
+    List<POrderBEntity> queryList(POrderBEntity entity);
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderHService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderHService.java
new file mode 100644
index 00000000..fec9123b
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPOrderHService.java
@@ -0,0 +1,24 @@
+package com.hzya.frame.plugin.ncc.service;
+
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.plugin.ncc.entity.POrderHEntity;
+
+import java.util.List;
+
+/**
+ * @description: 采购订单主表  service
+ * @tableName:   po_order 
+ * @entityName:  POrderHEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+public interface IPOrderHService extends IBaseService<POrderHEntity,String> {
+
+    /**
+     * 查询采购订单主表
+     * @param entity
+     * @return
+     */
+    List<POrderHEntity> queryList(POrderHEntity entity);
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPoOrderPluginInService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPoOrderPluginInService.java
new file mode 100644
index 00000000..da120eb2
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/IPoOrderPluginInService.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.plugin.ncc.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * @Description NCC采购订单
+ * @Author xiangerlin
+ * @Date 2025/6/3 19:09
+ **/
+public interface IPoOrderPluginInService {
+
+    /**
+     * NCC采购订单传到OA走审批流
+     * @param requestJson
+     * @return
+     */
+    JsonResultEntity sync2oa(JSONObject requestJson);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderBServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderBServiceImpl.java
new file mode 100644
index 00000000..eb4d80a8
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderBServiceImpl.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.plugin.ncc.service.impl;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.plugin.ncc.dao.IPOrderBDao;
+import com.hzya.frame.plugin.ncc.entity.POrderBEntity;
+import com.hzya.frame.plugin.ncc.service.IPOrderBService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @description: 采购订单子表  service
+ * @tableName:   po_order_b 
+ * @entityName:  POrderBEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+@Service(value="po_order_bService")
+public class  POrderBServiceImpl extends BaseService<POrderBEntity,String> implements IPOrderBService {
+	
+	protected IPOrderBDao  porderbDao;
+	
+	@Autowired
+	public void setPOrderBDao(IPOrderBDao dao) {
+		this.porderbDao = dao;
+		this.dao=dao;
+	}
+
+	/**
+	 * 查询采购订单子表
+	 *
+	 * @param entity
+	 * @return
+	 */
+	@DS(value = "#entity.dataSourceCode")
+	@Override
+	public List<POrderBEntity> queryList(POrderBEntity entity) {
+		List<POrderBEntity> queryList = porderbDao.query(entity);
+		return queryList;
+	}
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderHServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderHServiceImpl.java
new file mode 100644
index 00000000..5f64606c
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/POrderHServiceImpl.java
@@ -0,0 +1,53 @@
+package com.hzya.frame.plugin.ncc.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.plugin.ncc.dao.IPOrderHDao;
+import com.hzya.frame.plugin.ncc.entity.POrderHEntity;
+import com.hzya.frame.plugin.ncc.service.IPOrderHService;
+import org.apache.ibatis.session.SqlSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 采购订单主表  service
+ * @tableName:   po_order
+ * @entityName:  POrderHEntity
+ * @author: 	 code_generator
+ * @history:	 1.0
+ */
+@Service(value="po_orderService")
+public class  POrderHServiceImpl extends BaseService<POrderHEntity,String> implements IPOrderHService {
+
+	protected IPOrderHDao porderhDao;
+
+
+	@Autowired
+	public void setPOrderHDao(IPOrderHDao dao) {
+
+		this.porderhDao = dao;
+		this.dao=dao;
+	}
+
+	/**
+	 * 查询采购订单主表
+	 *
+	 * @param entity
+	 * @return
+	 */
+	@DS(value = "#entity.dataSourceCode")
+	@Override
+	public List<POrderHEntity> queryList(POrderHEntity entity) {
+		List<POrderHEntity> queryList = porderhDao.query(entity);
+		return queryList;
+	}
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/PoOrderPluginInServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/PoOrderPluginInServiceImpl.java
new file mode 100644
index 00000000..06fab256
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/ncc/service/impl/PoOrderPluginInServiceImpl.java
@@ -0,0 +1,104 @@
+package com.hzya.frame.plugin.ncc.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.plugin.ncc.service.IPOrderBService;
+import com.hzya.frame.plugin.ncc.service.IPOrderHService;
+import com.hzya.frame.plugin.ncc.service.IPoOrderPluginInService;
+import com.hzya.frame.seeyon.util.OARestUtil;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @Description NCC采购订单
+ * @Author xiangerlin
+ * @Date 2025/6/3 19:09
+ **/
+public class PoOrderPluginInServiceImpl implements IPoOrderPluginInService {
+
+    Logger logger = LoggerFactory.getLogger(PoOrderPluginInServiceImpl.class);
+    @Autowired
+    private IPOrderHService pOrderHService;
+    @Autowired
+    private IPOrderBService pOrderBService;
+    @Value("${zt.url}")
+    private String interfaceUrl;
+    @Autowired
+    private OARestUtil oaRestUtil;
+    /**
+     * NCC采购订单传到OA走审批流
+     *
+     * @param requestJson
+     * @return
+     */
+    @Override
+    public JsonResultEntity sync2oa(JSONObject requestJson) {
+        //数据源编码
+        String datasourceCode = requestJson.getString("sourceCode");
+        if (StrUtil.isNotEmpty(datasourceCode)){
+            //查NCC单据
+            //组装参数
+            JSONObject formmain_0256 = new JSONObject();//主表数据
+            List<JSONObject> formson_0257_list = new LinkedList<>();//子表数据
+            formmain_0256.put("采购组织","");
+            formmain_0256.put("订单编号","");
+            formmain_0256.put("订单日期","");
+            formmain_0256.put("供应商","");
+            formmain_0256.put("采购员","");
+            formmain_0256.put("开票供应商","");
+            formmain_0256.put("付款协议","");
+            formmain_0256.put("发起人","");
+            formmain_0256.put("单据状态","");
+            formmain_0256.put("备注","");
+            formmain_0256.put("补货","");
+            formmain_0256.put("退货","");
+            formmain_0256.put("总数量","");
+            formmain_0256.put("总价税合计","");
+            formmain_0256.put("币种","");
+            formmain_0256.put("退货退库基于原订单补货","");
+            formmain_0256.put("最终关闭","");
+            formmain_0256.put("采购部门","");
+            formmain_0256.put("订单类型","");
+            //子表
+            JSONObject formson_0257 = new JSONObject();
+            formson_0257.put("收货库存组织","");
+            formson_0257.put("行号","");
+            formson_0257.put("物料编码","");
+            formson_0257.put("物料名称","");
+            formson_0257.put("单位","");
+            formson_0257.put("数量","");
+            formson_0257.put("换算率","");
+            formson_0257.put("无税单价","");
+            formson_0257.put("含税单价","");
+            formson_0257.put("集团本币无税金额","");
+            formson_0257.put("集团本币价税合计","");
+            formson_0257.put("计划收货日期","");
+            formson_0257.put("收货仓库","");
+            formson_0257.put("税率","");
+            formson_0257_list.add(formson_0257);
+            String param = oaRestUtil.processParamValueOf(formmain_0256, formson_0257_list, "模板编号", "formmain_0256", "formson_0257");
+            String token = oaRestUtil.getToken("hzyaRest", "8000640001");
+            logger.info("NCC发起OA采购订单请求参数{}",param);
+            //调用OA接口
+            String result = HttpRequest.post(interfaceUrl)
+                    .header("token",token)// token
+                    .header("appId","800064")// 建辉OA应用
+                    .header("apiCode","8000640000")//流程表单接口
+                    .header("publicKey","ZJYAAr9TeFduBYu7uJeie2KYdQsnBaEYZHmOjPWMMVZmzelCe7eDIk+3zDUT+v578prj")//NCC应用key
+                    .header("secretKey","f4SSnYcDQmdkwwuGJd2+934q6lM1NnUm5dmOw/4Wvy2mo6PgkKsI/drXYyyLWQCaj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//NCC应用密钥
+                    .body(param).execute().body();
+            // JsonResultEntity resultEntity = (JsonResultEntity) oerDjmlService.handleOerDjml(paramJSON);
+            // logger.info("保存GRPU8响应参数:{}",JSONObject.toJSON(resultEntity));
+            logger.info("NCC发起OA采购订单响应参数:{}",result);
+            //更新NCC推送状态
+        }
+        return null;
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PayResultPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PayResultPluginInitializer.java
new file mode 100644
index 00000000..a3a24a08
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PayResultPluginInitializer.java
@@ -0,0 +1,102 @@
+package com.hzya.frame.plugin.oa.payment.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.plugin.oa.payment.service.IPaymentPluginService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description 查询交易结果
+ * @Author xiangerlin
+ * @Date 2025/5/29 17:19
+ **/
+public class PayResultPluginInitializer extends PluginBaseEntity {
+    Logger logger = LoggerFactory.getLogger(PayResultPluginInitializer.class);
+    @Autowired
+    private IPaymentPluginService paymentPluginService;
+    /***
+     * 插件初始化方法
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 10:48
+     * @Param []
+     * @return void
+     **/
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    /****
+     * 插件销毁方法
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    /****
+     * 插件的ID
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginId() {
+        return "PayResultPlugin";
+    }
+
+    /****
+     * 插件的名称
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginName() {
+        return "查询CBS交易结果";
+    }
+
+    /****
+     * 插件的显示值
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginLabel() {
+        return "查询CBS交易结果";
+    }
+
+    /***
+     * 插件类型 1、场景插件
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 14:01
+     * @Param []
+     * @return java.lang.String
+     **/
+    @Override
+    public String getPluginType() {
+        return "0";
+    }
+
+    /***
+     * 执行业务代码
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-07 11:20
+     * @param requestJson  执行业务代码的参数
+     * @return void
+     **/
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
+        logger.info("======开始查询CBS交易结果======");
+        paymentPluginService.payRequest(requestJson);
+        return BaseResult.getSuccessMessageEntity("执行成功");
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaymentRequestPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaymentRequestPluginInitializer.java
new file mode 100644
index 00000000..2ba565fb
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/plugin/PaymentRequestPluginInitializer.java
@@ -0,0 +1,107 @@
+package com.hzya.frame.plugin.oa.payment.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.plugin.oa.payment.service.IPaymentPluginService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description 支付申请
+ * @Author xiangerlin
+ * @Date 2025/5/29 15:40
+ **/
+public class PaymentRequestPluginInitializer extends PluginBaseEntity {
+    Logger logger = LoggerFactory.getLogger(PaymentRequestPluginInitializer.class);
+    @Autowired
+    private IPaymentPluginService paymentPluginService;
+    /***
+     * 插件初始化方法
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 10:48
+     * @Param []
+     * @return void
+     **/
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    /****
+     * 插件销毁方法
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    /****
+     * 插件的ID
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginId() {
+        return "PaymentRequestPlugin";
+    }
+
+    /****
+     * 插件的名称
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginName() {
+        return "OA支付申请CBS插件";
+    }
+
+    /****
+     * 插件的显示值
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginLabel() {
+        return "OA支付申请CBS插件";
+    }
+
+    /***
+     * 插件类型 1、场景插件
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 14:01
+     * @Param []
+     * @return java.lang.String
+     **/
+    @Override
+    public String getPluginType() {
+        return "1";
+    }
+
+    /***
+     * 执行业务代码
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-07 11:20
+     * @param requestJson  执行业务代码的参数
+     * @return void
+     **/
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
+        try {
+            logger.info("======开始执行OA支付申请CBS插件======");
+            JsonResultEntity jsonResultEntity = paymentPluginService.payRequest(requestJson);
+            return BaseResult.getSuccessMessageEntity("OA支付申请CBS插件执行成功",jsonResultEntity);
+        }catch (Exception e){
+            logger.info("======执行OA支付申请CBS插件出错======{}",e.getMessage());
+            return BaseResult.getFailureMessageEntity("OA支付申请CBS插件执行失败",e.getMessage());
+        }
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaymentPluginService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaymentPluginService.java
new file mode 100644
index 00000000..764ed390
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/IPaymentPluginService.java
@@ -0,0 +1,24 @@
+package com.hzya.frame.plugin.oa.payment.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * @Description 支付申请
+ * @Author xiangerlin
+ * @Date 2025/5/29 15:43
+ **/
+public interface IPaymentPluginService {
+    /**
+     * 支付申请
+     * @param requestJson
+     * @return
+     */
+    JsonResultEntity payRequest(JSONObject requestJson);
+
+    /**
+     * 查询交易结果
+     * @param requestJson
+     */
+    void queryPayResult(JSONObject requestJson);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaymentPluginServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaymentPluginServiceImpl.java
new file mode 100644
index 00000000..5a315624
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/payment/service/impl/PaymentPluginServiceImpl.java
@@ -0,0 +1,181 @@
+package com.hzya.frame.plugin.oa.payment.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.cbs8.dto.req.PayResultRequestDTO;
+import com.hzya.frame.cbs8.dto.res.PayResponseDTO;
+import com.hzya.frame.cbs8.dto.res.PayResultResDTO;
+import com.hzya.frame.cbs8.service.ICbs8Service;
+import com.hzya.frame.cbs8.util.CBSUtil;
+import com.hzya.frame.cbs8.util.PayState;
+import com.hzya.frame.plugin.oa.payment.service.IPaymentPluginService;
+import com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.cbs8.service.ICbsLogService;
+import com.hzya.frame.seeyon.cbs8.service.IPaymentService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * @Description 支付申请
+ * @Author xiangerlin
+ * @Date 2025/5/29 15:43
+ **/
+public class PaymentPluginServiceImpl implements IPaymentPluginService {
+
+    Logger logger = LoggerFactory.getLogger(PaymentPluginServiceImpl.class);
+    @Autowired
+    private IPaymentService paymentService;
+    @Autowired
+    private ICbs8Service cbs8Service;
+    @Autowired
+    private ICbsLogService cbsLogService;;
+    /**
+     * 支付申请
+     *
+     * @param requestJson
+     * @return
+     */
+    @Override
+    public JsonResultEntity payRequest(JSONObject requestJson) {
+        String headersStr = requestJson.getString("headers");//请求头
+        String formAppId = requestJson.getString("formAppId");
+        String eventType = requestJson.getString("eventType");
+        String id = requestJson.getString("id");
+        String dataSouceCode = requestJson.getString("sourceCode");
+        Assert.notEmpty(id,"id不能为空");
+        Assert.notEmpty(formAppId,"formAppId不能为空");
+        Assert.notEmpty(eventType,"eventType不能为空");
+        Assert.notEmpty(headersStr,"headers不能为空");
+        Assert.notEmpty(dataSouceCode,"数据源编码不能为空");
+        logger.info("准备开始查询待支付的单据");
+        PaymentEntity paymentEntity = new PaymentEntity();
+        paymentEntity.setId(id);
+        paymentEntity.setDataSourceCode(dataSouceCode);
+        try {
+            //查询OA待支付的数据
+            List<PaymentEntity> paymentList = paymentService.queryUnpaid(paymentEntity);
+            if (CollectionUtils.isNotEmpty(paymentList) && paymentList.size() == 1){
+                PaymentEntity pay = paymentList.get(0);
+                PayResponseDTO payResponseDTO = cbs8Service.payApply(JSONObject.toJSONString(pay));
+                String payResStr = JSONObject.toJSONString(payResponseDTO);
+                logger.info("支付申请响应结果:{}",payResStr);
+                if (null != payResponseDTO){
+                    //保存支付日志
+                    saveCbsLog(pay,payResponseDTO,dataSouceCode);
+                    if (payResponseDTO.getSuccessed()) {
+                        return BaseResult.getSuccessMessageEntity("支付申请成功",payResponseDTO.getBusNum());
+                    }else {
+                        BaseResult.getFailureMessageEntity("支付申请失败:{}",payResStr);
+                    }
+                }else {
+                    BaseResult.getFailureMessageEntity("支付申请失败");
+                }
+                return BaseResult.getSuccessMessageEntity("",payResponseDTO);
+            }
+        }catch (Exception e){
+            logger.error("OA单据推CBS支付申请失败:{}",e);
+        }
+
+        return null;
+    }
+
+    /**
+     * 查询交易结果
+     *
+     * @param requestJson
+     */
+    @Override
+    public void queryPayResult(JSONObject requestJson) {
+        String dataSourceCode = requestJson.getString("sourceCode");
+        Assert.notEmpty(dataSourceCode,"数据源编码不能为空");
+        try {
+            CbsLogEntity cbsLogEntity = new CbsLogEntity();
+            cbsLogEntity.setDataSourceCode(dataSourceCode);
+            List<CbsLogEntity> queryList = cbsLogService.queryInPayment(cbsLogEntity);
+            if (CollectionUtils.isNotEmpty(queryList)){
+                for (CbsLogEntity entity : queryList) {
+                    List<PayResultResDTO> payResultResDTOList = cbs8Service.queryPayResult(new PayResultRequestDTO(entity.getBill_code()));
+                    if (CollectionUtils.isNotEmpty(payResultResDTOList)){
+                        PayResultResDTO payResultResDTO = payResultResDTOList.get(0);
+                        String status = payResultResDTO.getStatus();//支付申请状态
+                        String pay_status = payResultResDTO.getPayStatus();//支付状态
+                        if (!PayState.p.getType().equals(pay_status)){//不等于支付中的时候才更新
+                            //如果支付状态为空,保存支付申请状态,如果支付状态不为空,则保存支付状态
+                            PaymentEntity paymentEntity = new PaymentEntity();
+                            paymentEntity.setOaId(entity.getOa_id());
+                            paymentEntity.setDataSourceCode(dataSourceCode);
+                            List<PaymentEntity> paymentList = paymentService.query(paymentEntity);
+                            if (CollectionUtils.isNotEmpty(paymentList)){
+                                paymentEntity = paymentList.get(0);
+                                if (StrUtil.isEmpty(pay_status)) {
+                                    paymentEntity.setPayResult(PayState.payStateGetValue(status));//支付申请状态 支付状态和支付申请状态用一个
+                                } else {
+                                    paymentEntity.setPayResult(PayState.payStateGetValue(pay_status));//支付状态 支付状态和支付申请状态用一个
+                                }
+                                if (StrUtil.isNotEmpty(pay_status) && pay_status.equals(PayState.g.getType())) {
+                                    paymentEntity.setPayDate(CBSUtil.convertTimestampToString(payResultResDTO.getPayDate()));//支付时间
+                                }
+                                paymentService.updatePayState(paymentEntity);
+                                //更新日志表状态
+                                entity.setPay_state(paymentEntity.getPayResult());
+                                entity.setApply_state(PayState.payStateGetValue(status));
+                                entity.setDataSourceCode(dataSourceCode);
+                                cbsLogService.update(entity);
+                            }
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            logger.error("查询交易结果出错:{}",e);
+        }
+    }
+
+    /**
+     * 保存支付日志
+     * @param entity 支付参数
+     * @param payResponseDTO cbs返回参数
+     * @param dataSourceCode 数据源编码
+     * @throws Exception
+     */
+    private void saveCbsLog(PaymentEntity entity,PayResponseDTO payResponseDTO,String dataSourceCode)throws Exception{
+        if (null != payResponseDTO){
+            //4. 保存日志
+            CbsLogEntity cbsLogEntity = new CbsLogEntity();
+            cbsLogEntity.setTitle(entity.getTitle());
+            cbsLogEntity.setPay_company(entity.getPayCompany());
+            cbsLogEntity.setPayee(entity.getRevAccountName());
+            cbsLogEntity.setAmount(entity.getAmount());
+            cbsLogEntity.setOa_id(entity.getOaId());
+            cbsLogEntity.setBill_code(Convert.toStr(entity.getReferenceNumNew(),entity.getReferenceNum()));
+            cbsLogEntity.setTab_name_ch(entity.getBillName());
+            cbsLogEntity.setTab_name_en(entity.getTableName());
+            Boolean successed = payResponseDTO.getSuccessed();
+            if (successed){
+                cbsLogEntity.setPay_state(PayState.p.getValue());
+                cbsLogEntity.setApply_state(PayState.two.getValue());
+                cbsLogEntity.setCbs_apply_code(payResponseDTO.getBusNum());
+                cbsLogEntity.setSuccessed("true");
+                entity.setPayResult(PayState.p.getValue());
+            }else {
+                cbsLogEntity.setPay_state("推送失败");
+                cbsLogEntity.setMessage(payResponseDTO.getErrorMsg());
+                cbsLogEntity.setSuccessed("false");
+                entity.setPayResult("推送失败");
+            }
+            cbsLogEntity.setDataSourceCode(dataSourceCode);
+            cbsLogService.saveLog(cbsLogEntity);
+            //5.更新视图的支付状态
+            paymentService.updatePayState(entity);
+        }
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/IRequisitionOrderDao.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/IRequisitionOrderDao.java
new file mode 100644
index 00000000..a347bea7
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/IRequisitionOrderDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.plugin.oa.praybill.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity;
+
+/**
+ * @Description OA请购单
+ * @Author xiangerlin
+ * @Date 2025/6/8 17:06
+ **/
+public interface IRequisitionOrderDao extends IBaseDao<RequisitionOrderEntity,String> {
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/impl/RequisitionOrderDaoImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/impl/RequisitionOrderDaoImpl.java
new file mode 100644
index 00000000..dfa2a381
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/dao/impl/RequisitionOrderDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.plugin.oa.praybill.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.plugin.oa.praybill.dao.IRequisitionOrderDao;
+import com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description OA请购单
+ * @Author xiangerlin
+ * @Date 2025/6/8 17:08
+ **/
+@Repository("requisitionOrderDaoImpl")
+public class RequisitionOrderDaoImpl extends MybatisGenericDao<RequisitionOrderEntity,String> implements IRequisitionOrderDao {
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.java
new file mode 100644
index 00000000..6d6beb5a
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.java
@@ -0,0 +1,31 @@
+package com.hzya.frame.plugin.oa.praybill.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description OA请购单
+ *
+ * @Author xiangerlin
+ * @Date 2025/6/8 17:04
+ **/
+public class RequisitionOrderEntity extends BaseEntity {
+
+    private String field0001;//单据号
+    private String field0059;//NCC
+
+    public String getField0001() {
+        return field0001;
+    }
+
+    public void setField0001(String field0001) {
+        this.field0001 = field0001;
+    }
+
+    public String getField0059() {
+        return field0059;
+    }
+
+    public void setField0059(String field0059) {
+        this.field0059 = field0059;
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.xml b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.xml
new file mode 100644
index 00000000..88f2528f
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/entity/RequisitionOrderEntity.xml
@@ -0,0 +1,8 @@
+<?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.plugin.oa.praybill.dao.impl.RequisitionOrderDaoImpl">
+
+    <update id="entity_update" parameterType="com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity">
+        update formmain_0254 set field0059 = #{field0059} where id = #{id}
+    </update>
+</mapper>
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/plugin/RequisitionOrderPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/plugin/RequisitionOrderPluginInitializer.java
new file mode 100644
index 00000000..480b81ba
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/plugin/RequisitionOrderPluginInitializer.java
@@ -0,0 +1,108 @@
+package com.hzya.frame.plugin.oa.praybill.plugin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.plugin.oa.praybill.service.IRequisitionOrderPluginService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description 请购单传NCC
+ * @Author xiangerlin
+ * @Date 2025/5/21 16:50
+ **/
+public class RequisitionOrderPluginInitializer extends PluginBaseEntity {
+    Logger logger = LoggerFactory.getLogger(RequisitionOrderPluginInitializer.class);
+    @Autowired
+    private IRequisitionOrderPluginService requisitionOrderPluginService;
+    /***
+     * 插件初始化方法
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 10:48
+     * @Param []
+     * @return void
+     **/
+    @Override
+    public void initialize() {
+        logger.info(getPluginLabel() + "執行初始化方法initialize()");
+    }
+
+    /****
+     * 插件销毁方法
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public void destroy() {
+        logger.info(getPluginLabel() + "執行銷毀方法destroy()");
+    }
+
+    /****
+     * 插件的ID
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginId() {
+        return "RequisitionOrderPlugin";
+    }
+
+    /****
+     * 插件的名称
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginName() {
+        return "请购单传NCC插件";
+    }
+
+    /****
+     * 插件的显示值
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-02 10:48
+     * @return void
+     **/
+    @Override
+    public String getPluginLabel() {
+        return "请购单传NCC插件";
+    }
+
+    /***
+     * 插件类型 1、场景插件
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-02 14:01
+     * @Param []
+     * @return java.lang.String
+     **/
+    @Override
+    public String getPluginType() {
+        return "1";
+    }
+
+    /***
+     * 执行业务代码
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2023-08-07 11:20
+     * @param requestJson  执行业务代码的参数
+     * @return void
+     **/
+    @Override
+    public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception {
+        try {
+            logger.info("======开始执行请购单传NCC插件======{}",JSONObject.toJSONString(requestJson));
+            requisitionOrderPluginService.sync2ncc(requestJson);
+        }catch (Exception e){
+            e.printStackTrace();
+            logger.info("======执行请购单传NCC插件出错======{}",e.getMessage());
+            return BaseResult.getFailureMessageEntity("请购单传NCC插件执行失败",e.getMessage());
+        }
+        return BaseResult.getSuccessMessageEntity("请购单传NCC插件执行成功");
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderPluginService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderPluginService.java
new file mode 100644
index 00000000..893c97ad
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderPluginService.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.plugin.oa.praybill.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * @Description 请购单传nCC
+ * @Author xiangerlin
+ * @Date 2025/5/21 17:44
+ **/
+public interface IRequisitionOrderPluginService {
+
+    /**
+     * 请购单同步到ncc
+     * @param requestJson
+     * @return
+     */
+    JsonResultEntity sync2ncc(JSONObject requestJson);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderService.java
new file mode 100644
index 00000000..3a09ff4c
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/IRequisitionOrderService.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.plugin.oa.praybill.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity;
+
+/**
+ * @Description OA 请购单
+ * @Author xiangerlin
+ * @Date 2025/6/8 17:10
+ **/
+public interface IRequisitionOrderService extends IBaseService<RequisitionOrderEntity,String> {
+
+    /**
+     * 更新OA单据
+     * @param entity
+     * @return
+     */
+    int updateOrder(RequisitionOrderEntity entity);
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderPluginServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderPluginServiceImpl.java
new file mode 100644
index 00000000..68710684
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderPluginServiceImpl.java
@@ -0,0 +1,299 @@
+package com.hzya.frame.plugin.oa.praybill.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity;
+import com.hzya.frame.plugin.oa.praybill.service.IRequisitionOrderPluginService;
+import com.hzya.frame.plugin.oa.praybill.service.IRequisitionOrderService;
+import com.hzya.frame.seeyon.entity.CollAttachmentResDTO;
+import com.hzya.frame.seeyon.enums.ColEventTypeEnum;
+import com.hzya.frame.seeyon.util.OARestUtil;
+import com.hzya.frame.sysnew.integtationTaskLivingDetails.entity.IntegrationTaskLivingDetailsEntity;
+import com.hzya.frame.sysnew.integtationTaskLivingDetails.service.IIntegrationTaskLivingDetailsService;
+import com.hzya.frame.uuid.UUIDUtils;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+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.File;
+import java.net.URLDecoder;
+import java.util.Base64;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @Description OA请购单传NCC
+ * @Author xiangerlin
+ * @Date 2025/5/21 17:44
+ **/
+public class RequisitionOrderPluginServiceImpl implements IRequisitionOrderPluginService {
+    @Value("${zt.url}")
+    private String baseUrl;
+    @Autowired
+    private IIntegrationTaskLivingDetailsService taskLivingDetailsService;
+    @Autowired
+     private IRequisitionOrderService requisitionOrderService;
+    @Autowired
+    private OARestUtil oaRestUtil;
+    Logger logger = LoggerFactory.getLogger(IRequisitionOrderPluginService.class);
+    /**
+     * 请购单同步到ncc
+     *
+     * @param requestJson
+     * @return
+     */
+    @Override
+    public JsonResultEntity sync2ncc(JSONObject requestJson) {
+        //数据源编码
+        String datasourceCode = requestJson.getString("sourceCode");
+        String task_living_details_id = requestJson.getString("integration_task_living_details_id");
+        String headersStr = requestJson.getString("headers");//请求头
+        String eventType = requestJson.getString("eventType");
+        String summaryId = requestJson.getString("summaryId");
+        JSONObject headers = requestJson.getJSONObject("headers");
+        Assert.notEmpty(eventType,"eventType不能为空");
+        Assert.notEmpty(headersStr,"headers不能为空");
+        String formmainTableName = headers.getString("formmainTableName");
+        String forsonTableName = headers.getString("forsonTableName");
+        String fileApiCode = headers.getString("fileApiCode");
+        JSONObject jsonStrObj = requestJson.getJSONObject("jsonStr");
+        JSONObject businessData = jsonStrObj.getJSONObject("businessDataStr");
+        JSONObject formmainData = businessData.getJSONObject(formmainTableName);
+        JSONArray forsonData = businessData.getJSONArray(forsonTableName);
+        //流程结束
+        if (ColEventTypeEnum.ONPROCESSFINISHED.getType().equals(eventType)){
+            //组装请购单报文
+            JSONArray reqParams = praybillVaueOf(headers, formmainData, forsonData);
+            String req = JSONObject.toJSONString(reqParams);
+            logger.info("======OA请购单传NCC请求参数:{}======",req);
+            String result = HttpRequest.post(baseUrl)
+                    .header("appId", "800065")//NCC请购单接口
+                    .header("apiCode", "8000650000")//NCC应用
+                    .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
+                    .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
+                    .body(req)//表单内容
+                    .timeout(30000)//超时,毫秒
+                    .execute().body();
+            logger.info("======OA请购单传NCC响应参数:{}======",result);
+            if (StrUtil.isNotEmpty(result)){
+                JSONObject resultJson = JSONObject.parseObject(result);
+                Boolean flag = resultJson.getBoolean("flag");
+                //保存日志
+                IntegrationTaskLivingDetailsEntity taskLivingDetail = new IntegrationTaskLivingDetailsEntity();
+                Date now = new Date();
+                taskLivingDetail.setCreate_time(now);
+                taskLivingDetail.setModify_time(now);
+                taskLivingDetail.setRootAppPk(formmainData.getString("id"));
+                taskLivingDetail.setRootAppBill(formmainData.getString("field0001"));
+                taskLivingDetail.setPluginId("RequisitionOrderPlugin");
+                taskLivingDetail.setRootAppNewData(req);
+                taskLivingDetail.setNewTransmitInfo(result);
+                taskLivingDetail.setNewPushDate(now);
+                saveLog(task_living_details_id,flag,taskLivingDetail);
+                //回写NCC单号到OA单据
+                JSONObject attribute = resultJson.getJSONObject("attribute");
+                if (null != attribute){
+                    String code = attribute.getString("code");
+                    if ("success".equals(code)){
+                        JSONObject data = attribute.getJSONObject("data");
+                        if (null != data){
+                            JSONObject headVO = data.getJSONObject("headVO");
+                            if (null != headVO){
+                                String vbillcode = headVO.getString("code");
+                                String pk_bill = headVO.getString("id");
+                                logger.info("======vbillcode======:{}",vbillcode);
+                                RequisitionOrderEntity requisitionOrderEntity = new RequisitionOrderEntity();
+                                requisitionOrderEntity.setField0059(vbillcode);
+                                requisitionOrderEntity.setDataSourceCode(datasourceCode);
+                                requisitionOrderEntity.setId(formmainData.getString("id"));
+                                requisitionOrderService.updateOrder(requisitionOrderEntity);
+                                //下载OA附件上传到NCC
+                                try {
+                                    uploadFile(summaryId, headers, fileApiCode, pk_bill);
+                                }catch (Exception e){
+                                    logger.error("下载OA附件上传到NCC出错:{}",e);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return BaseResult.getSuccessMessageEntity("请购单推NCC成功");
+    }
+
+    /**
+     * 下载OA附件上传到NCC
+     * @param summaryId
+     * @param headers
+     * @param fileApiCode
+     * @param pk_bill
+     */
+    public void uploadFile(String summaryId, JSONObject headers, String fileApiCode, String pk_bill) {
+        String token = oaRestUtil.getToken(null, fileApiCode);
+        List<CollAttachmentResDTO> collAttachmentList = oaRestUtil.getColAttachments(summaryId, "0", fileApiCode, token);
+        if (CollectionUtils.isNotEmpty(collAttachmentList)){
+            //获取OA token
+            for (CollAttachmentResDTO collAttachment : collAttachmentList) {
+                try {
+                    String fileName = URLDecoder.decode(collAttachment.getFilename(), "UTF-8");
+                    byte[] bytes = oaRestUtil.downloadFileBytes("hzya", fileApiCode, collAttachment.getFileUrl(), fileName, token);
+                    String base64File = Base64.getEncoder().encodeToString(bytes);
+                    JSONObject fileParams = new JSONObject();
+                    fileParams.put("creator", headers.getString("creator"));
+                    fileParams.put("pk_bill", pk_bill);
+                    fileParams.put("filename",fileName);
+                    fileParams.put("file",base64File);
+                    String result = HttpRequest.post(baseUrl)
+                            .header("appId", "800065")//NCC应用
+                            .header("apiCode", "8000650001")//NCC附件上传接口
+                            .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥
+                            .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥
+                            .body(fileParams.toString())//表单内容
+                            .timeout(30000)//超时,毫秒
+                            .execute().body();
+                    logger.info("======OA请购单附件上传到NCC响应参数:{}======",result);
+                }catch(Exception e){
+                    e.printStackTrace();
+                    logger.error("下载OA附件出错:{}",e);
+                }
+            }
+        }
+    }
+
+    /**
+     * 组装请购单报文
+     * @param headers 请求头
+     * @param formmainData 主表数据
+     * @param forsonData 子表数据
+     * @return
+     */
+    @NotNull
+    private static JSONArray praybillVaueOf(JSONObject headers, JSONObject formmainData, JSONArray forsonData) {
+        JSONObject paramObj = new JSONObject();
+        JSONObject praybill = new JSONObject();
+        paramObj.put("head", praybill);
+        praybill.put("pk_group", formmainData.getString("field0058"));//集团
+        praybill.put("pk_org", formmainData.getString("field0027"));//库存组织
+        praybill.put("pk_org_v", formmainData.getString("field0051"));//库存组织v
+        //praybill.put("vbillcode",formmainData.getString("field0001"));//请购单号
+        praybill.put("dbilldate", formmainData.getString("field0004"));//请购日期
+        boolean bsctype  = false;
+        if ("1".equals(formmainData.getString("field0009"))){
+            bsctype = true;
+        }
+        praybill.put("bsctype",bsctype);//委外
+        praybill.put("pk_planpsn", formmainData.getString("field0030"));//计划员
+        praybill.put("pk_plandept", formmainData.getString("field0052"));//计划部门
+        praybill.put("pk_plandept_v", formmainData.getString("field0053"));//计划部门v
+        praybill.put("vmemo", formmainData.getString("field0013"));//备注
+        praybill.put("fbillstatus", headers.getString("fbillstatus"));//单据状态
+        praybill.put("bdirecttransit",false);//zhiyun
+        praybill.put("billmaker", headers.getString("billmaker"));//制单人 yonyou99
+        praybill.put("dmakedate", formmainData.getString("field0004"));//制单日期
+        praybill.put("ctrantypeid", formmainData.getString("field0039"));//请购类型
+        praybill.put("bislatest", true);//最新版本
+        praybill.put("vdef1", formmainData.getString("field0037"));
+        praybill.put("creator", headers.getString("creator"));//
+        praybill.put("fpraysource", headers.getString("fpraysource"));//
+        praybill.put("ccurrencyid", headers.getString("ccurrencyid"));//
+        praybill.put("nversion", headers.getString("nversion"));//
+        praybill.put("nversion", headers.getString("nversion"));//
+        List<JSONObject> parybillList = new LinkedList<>();
+        paramObj.put("body",parybillList);
+        String pk_org = formmainData.getString("field0027");
+        String pk_org_v = formmainData.getString("field0051");
+        for(int i = 0; i< forsonData.size(); i++){
+            JSONObject forson = forsonData.getJSONObject(i);
+            JSONObject praybillB = new JSONObject();
+            praybillB.put("crowno",forson.getString("field0014"));
+            praybillB.put("nnum",forson.getString("field0020"));
+            praybillB.put("pk_org",pk_org);
+            praybillB.put("pk_org_v",pk_org_v);
+            praybillB.put("vchangerate","1");
+            praybillB.put("pk_srcmaterial",forson.getString("field0054"));//物料pk带版本的那个
+            praybillB.put("pk_material",forson.getString("field0031"));//物料pk
+            praybillB.put("castunitid",forson.getString("field0055"));//计量单位pk
+            praybillB.put("cunitid",forson.getString("field0055"));//计量单位pk
+            praybillB.put("nastnum",forson.getString("field0020"));//数量
+            praybillB.put("dreqdate",forson.getString("field0021"));//需求日期
+            praybillB.put("dsuggestdate",forson.getString("field0022"));//建议订货日期
+            praybillB.put("pk_purchaseorg",pk_org);//采购组织
+            praybillB.put("pk_purchaseorg_v",pk_org_v);//采购组织 带版本的那个
+            praybillB.put("pk_suggestsupplier",forson.getString("field0056"));//建议供应商
+            praybillB.put("pk_suggestsupplier_v",forson.getString("field0056"));//建议供应商
+            praybillB.put("pk_reqstoorg",pk_org);
+            praybillB.put("pk_reqstoorg_v",pk_org_v);
+            praybillB.put("pk_group", formmainData.getString("field0058"));
+            praybillB.put("browclose","N");//行关闭
+            praybillB.put("vbdef1",forson.getString("field0032"));//现存量
+            praybillB.put("vbdef2",forson.getString("field0033"));//在途量
+            praybillB.put("vbdef3",forson.getString("field0035"));//月度消耗
+            praybillB.put("vbdef4",forson.getString("field0034"));//安全库存
+            parybillList.add(praybillB);
+        }
+        //调用NCC接口
+        JSONArray reqParams = new JSONArray();
+        reqParams.add(paramObj);
+        return reqParams;
+    }
+
+    public static void main(String[] args) {
+        String result = "{\"msg\":\"转发失败\",\"type\":null,\"flag\":false,\"status\":\"500\",\"attribute\":{\"code\":\"success\",\"data\":{\"bodyVOList\":[{\"rowno\":\"1\",\"pk_material\":\"1001P1100000000IT34Q\",\"id\":\"1001A3100000001B2UOG\"}],\"headVO\":{\"code\":\"QG2025060800000182\",\"id\":\"1001A3100000001B2UOF\",\"vtrantypeid\":\"1001P1100000000IR21W\"}},\"message\":\"提示:========NCC-请购单保存提交《成功》!!!========。单据信息:《id》 = 1001A3100000001B2UOF  ,《code》 = QG2025060800000182\"}}";
+        JSONObject resultJson = JSONObject.parseObject(result);
+        JSONObject attribute = resultJson.getJSONObject("attribute");
+        if (null != attribute){
+            String code = attribute.getString("code");
+            if ("success".equals(code)){
+                JSONObject data = attribute.getJSONObject("data");
+                if (null != data){
+                    JSONObject headVO = data.getJSONObject("headVO");
+                    if (null != headVO){
+                        String vbillcode = headVO.getString("code");
+                        System.out.println(vbillcode);
+                    }
+                }
+            }
+        }
+        JSONObject headers =new JSONObject();
+        headers.put("creator","1001P1100000000NUULI");
+        RequisitionOrderPluginServiceImpl service = new RequisitionOrderPluginServiceImpl();
+        service.uploadFile("-333447786976688302",headers,"8000640003","1001A3100000001B4COB");
+    }
+    //保存日志
+    public void saveLog(String integration_task_living_details_id, Boolean flag, IntegrationTaskLivingDetailsEntity taskLivingDetail){
+        try {
+            //判断,成功调用这个方法
+            if (StrUtil.isEmpty(integration_task_living_details_id)){
+                if (flag){
+                    taskLivingDetailsService.saveLogToSuccess(taskLivingDetail);
+                }else {
+                    //失败 调用这个方法
+                    taskLivingDetailsService.saveLogToFail(taskLivingDetail);
+                }
+            }else {
+                taskLivingDetail.setId(integration_task_living_details_id);
+                if (flag){
+                    //如果是重试 成功调这个方法
+                    taskLivingDetailsService.saveLogFailToSuccess(taskLivingDetail);
+                }else {
+                    //如果是重试 失败调这个方法
+                    taskLivingDetailsService.updateLogFailToSuccess(taskLivingDetail);
+                }
+            }
+        }catch (Exception e){
+            logger.error("保存日志出错:{}",e);
+        }
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderServiceImpl.java
new file mode 100644
index 00000000..468fdf81
--- /dev/null
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/praybill/service/impl/RequisitionOrderServiceImpl.java
@@ -0,0 +1,42 @@
+package com.hzya.frame.plugin.oa.praybill.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.plugin.oa.praybill.dao.IRequisitionOrderDao;
+import com.hzya.frame.plugin.oa.praybill.entity.RequisitionOrderEntity;
+import com.hzya.frame.plugin.oa.praybill.service.IRequisitionOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description OA请购单
+ * @Author xiangerlin
+ * @Date 2025/6/8 17:11
+ **/
+@Service(value = "requisitionOrderServiceImpl")
+public class RequisitionOrderServiceImpl extends BaseService<RequisitionOrderEntity,String> implements IRequisitionOrderService {
+
+    private IRequisitionOrderDao requisitionOrderDao;
+
+    @Autowired
+    public void setRequisitionOrderDao(IRequisitionOrderDao dao) {
+        this.requisitionOrderDao = dao;
+        this.dao = dao;
+    }
+
+    /**
+     * 更新OA单据
+     *
+     * @param entity
+     * @return
+     */
+    @DS(value = "#entity.dataSourceCode")
+    @Override
+    public int updateOrder(RequisitionOrderEntity entity) {
+        if (null != entity && StrUtil.isNotEmpty(entity.getId())){
+            requisitionOrderDao.update(entity);
+        }
+        return 0;
+    }
+}
diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/pushMessage/plugin/PushMessagePluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/pushMessage/plugin/PushMessagePluginInitializer.java
index 3e0a996f..3bc07a67 100644
--- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/pushMessage/plugin/PushMessagePluginInitializer.java
+++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/pushMessage/plugin/PushMessagePluginInitializer.java
@@ -62,6 +62,7 @@ public class PushMessagePluginInitializer extends PluginBaseEntity {
     public JsonResultEntity executeBusiness(JSONObject requestJson) {
         try {
             logger.info("======开始执行定时消息推送========");
+            //目前只查询一周内的异常日志进行消息推送
             List<SysPushMessageEntity> list = sysPushMessageDao.getAll();
 
             for(SysPushMessageEntity entity : list){
diff --git a/base-buildpackage/src/main/resources/application-jianhui.yml b/base-buildpackage/src/main/resources/application-jianhui.yml
new file mode 100644
index 00000000..c96136ce
--- /dev/null
+++ b/base-buildpackage/src/main/resources/application-jianhui.yml
@@ -0,0 +1,29 @@
+#######################本地环境#######################
+logging:
+  #日志级别 指定目录级别
+  level:
+    root: info
+  encodings: UTF-8
+  file:
+#    日志保存路径
+    path: D:\yongansystem\kangarooDataCenter\v3\logs
+spring:
+  datasource:
+    dynamic:
+      datasource:
+        master:
+#          url: jdbc:mysql://ufidahz.com.cn:9096/businesscenternew?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowLoadLocalInfile=false&autoReconnect=true&failOverReadOnly=false&connectTimeout=30000&socketTimeout=30000&autoReconnectForPools=true
+#          username: root
+#          password: bd993088e8a7c3dc5f44441617f9b4bf
+#          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
+           url: jdbc:mysql://127.0.0.1:3307/businesscenter?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowLoadLocalInfile=false&autoReconnect=true&failOverReadOnly=false&connectTimeout=30000&socketTimeout=30000&autoReconnectForPools=true
+           username: root
+           password: bd993088e8a7c3dc5f44441617f9b4bf
+           driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
+savefile:
+    #    文件保存路径
+  path: D:\yongansystem\kangarooDataCenter\v3\logs
+  tomcatpath: D:\yongansystem\kangarooDataCenter\v3\tomcat
+  pluginpath: D:\yongansystem\kangarooDataCenter\v3\plugin
+zt:
+  url: http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface
diff --git a/base-buildpackage/src/main/resources/application-llg.yml b/base-buildpackage/src/main/resources/application-llg.yml
index 5953ca0d..11273505 100644
--- a/base-buildpackage/src/main/resources/application-llg.yml
+++ b/base-buildpackage/src/main/resources/application-llg.yml
@@ -45,7 +45,7 @@ savefile:
   tomcatpath: /Users/apple/Desktop/log/local
   pluginpath: /Users/apple/Desktop/log/local
 zt:
-  url: http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface
+  url: http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface
 cbs8:
   appId: 1P4AGrpz
   appSecret: 2c2369ae5dc04382844bbe3a5abf39e1bea9cd3a
@@ -59,4 +59,24 @@ cbs8:
   #电子回单下载临时存放位置
   elec_path: /Users/xiangerlin/Downloads/
 OA:
-  data_source_code: yc_oa
\ No newline at end of file
+  data_source_code: yc_oa
+server:
+  port: 10086
+
+#  mysqldump -d mylm -hhzya.ufyct.com -p9096  -uroot -phzya1314 >%dirName%\table_view.sql
+
+
+database:
+  databaseName: businesscenter
+  host: 192.168.2.237
+  port: 3306
+  username: root
+  password: hzya@1314
+  filePase: /Users/apple/Desktop/log
+  fileName: data.sql
+#sftp:
+#  host: 192.168.2.237
+#  port: 9091
+#  username: cs237
+#  password: hzya@1314
+#  filePase: /databaseBack
diff --git a/base-buildpackage/src/main/resources/application-xel.yml b/base-buildpackage/src/main/resources/application-xel.yml
index e53ca4c4..9b81c4da 100644
--- a/base-buildpackage/src/main/resources/application-xel.yml
+++ b/base-buildpackage/src/main/resources/application-xel.yml
@@ -14,22 +14,24 @@ spring:
         master:
           url: jdbc:mysql://ufidahz.com.cn:9014/businesscenter?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowLoadLocalInfile=false&autoReconnect=true&failOverReadOnly=false&connectTimeout=30000&socketTimeout=30000&autoReconnectForPools=true
           username: root
-          password: 62e4295b615a30dbf3b8ee96f41c820b
+          password: bd993088e8a7c3dc5f44441617f9b4bf
           driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
 savefile:
     #    文件保存路径
   path: /Users/xiangerlin/work/app/file/dev
+  pluginpath: /Users/xiangerlin/work/app/file/dev
+  tomcatpath: /Users/xiangerlin/work/app/file/dev
+zt:
+  url: http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface
 cbs8:
   appId: 1P4AGrpz
   appSecret: 2c2369ae5dc04382844bbe3a5abf39e1bea9cd3a
   url: https://cbs8-openapi-reprd.csuat.cmburl.cn
-    # 测试用这个 这个是银行给的,和下面的公钥不是一对密钥
+  # 测试用这个 这个是银行给的,和下面的公钥不是一对密钥
   ya_private_key: 83BA7EC821D35F4CB31FF9A51C1EFA520FC52AF828C2337F88E91CF119B07F44
   # 这个私钥到时候上传到cbs,和下面到是同一对
   #ya_private_key: e1eacfdee9b8d4184437d5a2071e17ce31befc3d93395f9f05709ed562e8dc46
   ya_public_key: 044fa399d2223760f17b81b863cb482b009294c4516f8a605dea1475ec09e720eaa98468715e5ad509a592a0b426061551c5a3df236966c23253a7d894eac0dcde
-  cbs_public_key: 0469146F06BF3B01236E84632441E826F3067A6B93BC3839C836A06007869CD351FBBE388B51F742859388BBC1DE089923AAFBC69E448F15141DDF30EE6CE90185
+  cbs_public_key: 0469146F06BF3B01236E84632441E826
   #电子回单下载临时存放位置
-  elec_path: /Users/xiangerlin/Downloads/
-OA:
-  data_source_code: yc-test
+  elec_path: /Users/xiangerlin/Downloads/
\ No newline at end of file
diff --git a/base-buildpackage/src/main/resources/application-zqtlocal.yml b/base-buildpackage/src/main/resources/application-zqtlocal.yml
index ffff00a3..5aeac683 100644
--- a/base-buildpackage/src/main/resources/application-zqtlocal.yml
+++ b/base-buildpackage/src/main/resources/application-zqtlocal.yml
@@ -36,4 +36,4 @@ cbs8:
 OA:
   data_source_code: yc_oa
 zt:
-  url: http://127.0.0.1:9082/kangarooDataCenterV3/entranceController/externalCallInterface
\ No newline at end of file
+  url: http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface
\ No newline at end of file
diff --git a/base-buildpackage/src/main/resources/application.yml b/base-buildpackage/src/main/resources/application.yml
index 7b481a9d..b87e5bf7 100644
--- a/base-buildpackage/src/main/resources/application.yml
+++ b/base-buildpackage/src/main/resources/application.yml
@@ -1,5 +1,5 @@
 server:
-  port: 9999
+  port: 10086
   servlet:
     context-path: /kangarooDataCenterV3
   localIP: 127.0.0.1
@@ -93,7 +93,7 @@ mybatis-plus:
     db-config:
       id-type: auto  # 主键策略
 zt:
-  url: http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface
+  url: http://127.0.0.1:10086/kangarooDataCenterV3/entranceController/externalCallInterface
 #JimuReport[minidao配置]
 minidao :
   base-package: org.jeecg.modules.jmreport.desreport.dao*
@@ -126,3 +126,17 @@ jeecg :
     bucketName: ??
 data:
   use: true
+database:
+  databaseName:
+  host:
+  port:
+  username:
+  password:
+  filePase:
+  fileName:
+sftp:
+  host:
+  port:
+  username:
+  password:
+  filePase:
\ No newline at end of file
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/pluginCfg.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/pluginCfg.xml
new file mode 100644
index 00000000..774971d0
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/pluginCfg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+<id>BackUpDatabasePlugin</id>
+<name>BackUpDatabasePlugin插件</name>
+<category>20241021</category>
+</plugin>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/spring/spring-buildpackage-plugin.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/spring/spring-buildpackage-plugin.xml
new file mode 100644
index 00000000..29896996
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/BackUpDatabase/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="backUpDatabaseInitializer" class="com.hzya.frame.plugin.BackUpDatabase.plugin.BackUpDatabaseInitializer" />
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/pluginCfg.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/pluginCfg.xml
new file mode 100644
index 00000000..76cf338f
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/pluginCfg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+<id>JHNCCPlugin</id>
+<name>建辉NCC插件</name>
+<category>202505210001</category>
+</plugin>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-dao.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-dao.xml
new file mode 100644
index 00000000..f857d7fc
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-dao.xml
@@ -0,0 +1,4 @@
+<?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">
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-plugin.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-plugin.xml
new file mode 100644
index 00000000..c37cfb36
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-plugin.xml
@@ -0,0 +1,6 @@
+<?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="requisitionOrderPluginInitializer" class="com.hzya.frame.plugin.oa.praybill.plugin.RequisitionOrderPluginInitializer" />
+<bean name="poOrderPluginInitializer" class="com.hzya.frame.plugin.ncc.plugin.PoOrderPluginInitializer" />
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-service.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-service.xml
new file mode 100644
index 00000000..f013d0cd
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/ncc/spring/spring-buildpackage-service.xml
@@ -0,0 +1,6 @@
+<?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="requisitionOrderPluginServiceImpl" class="com.hzya.frame.plugin.oa.praybill.service.impl.RequisitionOrderPluginServiceImpl" />
+    <bean name="poOrderPluginInServiceImpl" class="com.hzya.frame.plugin.ncc.service.impl.PoOrderPluginInServiceImpl" />
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/pluginCfg.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/pluginCfg.xml
new file mode 100644
index 00000000..294b6b5e
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/pluginCfg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+<id>JHOAPlugin</id>
+<name>建辉OA插件</name>
+<category>202505230001</category>
+</plugin>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-dao.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-dao.xml
new file mode 100644
index 00000000..c7c87be7
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-dao.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">
+
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml
new file mode 100644
index 00000000..18b699e5
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-plugin.xml
@@ -0,0 +1,6 @@
+<?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="paymentRequestPluginInitializer" class="com.hzya.frame.plugin.oa.payment.plugin.PaymentRequestPluginInitializer" />
+<bean name="payResultPluginInitializer" class="com.hzya.frame.plugin.oa.payment.plugin.PayResultPluginInitializer" />
+</beans>
diff --git a/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-service.xml b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-service.xml
new file mode 100644
index 00000000..0a778465
--- /dev/null
+++ b/base-buildpackage/src/main/resources/cfgHome/plugin/oa/payment/spring/spring-buildpackage-service.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="paymentRequestPluginServiceImpl" class="com.hzya.frame.plugin.oa.payment.service.impl.PaymentPluginServiceImpl" />
+</beans>
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/Test1.java b/base-buildpackage/src/test/java/com/hzya/frame/Test1.java
new file mode 100644
index 00000000..3bc330ac
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/Test1.java
@@ -0,0 +1,30 @@
+package com.hzya.frame;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.plugin.oa.praybill.service.impl.RequisitionOrderPluginServiceImpl;
+import com.hzya.frame.util.AESUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2025/6/11 10:20
+ **/
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {WebappApplication.class})
+public class Test1 {
+
+    @Autowired
+    private RequisitionOrderPluginServiceImpl requisitionOrderPluginService;
+    @Test
+    public void test01() {
+        JSONObject headers =new JSONObject();
+        headers.put("creator","1001P1100000000NUULI");
+        RequisitionOrderPluginServiceImpl service = new RequisitionOrderPluginServiceImpl();
+        requisitionOrderPluginService.uploadFile("-333447786976688302",headers,"8000640001","1001A3100000001B4COB");
+    }
+}
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java b/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java
index 68701ee7..96cdde01 100644
--- a/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java
+++ b/base-buildpackage/src/test/java/com/hzya/frame/temButtom.java
@@ -1,30 +1,146 @@
 package com.hzya.frame;
 
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.hzya.frame.util.AESUtil;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @ClassName dsasas
  * @Description
  * @Author llg
  * Date 2023/7/16 8:18 上午
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = {WebappApplication.class})
+//@RunWith(SpringRunner.class)
+//@SpringBootTest(classes = {WebappApplication.class})
 public class temButtom {
 
     @Test
     public void test01() {
-        String a = AESUtil.encrypt("hzya@1314");
+        String a = AESUtil.encrypt("hzya1314");
         System.out.println(a);
         String b = AESUtil.decrypt("62e4295b615a30dbf3b8ee96f41c820b");
         System.out.println(b);
     }
 
 
+    @Test
+    public void test02() {
+//	1056162015172640840	-7858803986346327947	3178176833471791293	合同评审-待办测试(bdmanager 2024-10-22 16:45)	7743552636545550897	bdmanager	18058147870	pending	start	success	新增成功!
+//	success	更新待办为已办成功!
+//	task7803207f54ff047d6008dcce31c2628f	新增成功!
+//	2024-10-24	2024-10-24
+
+        String phone ="19357235324";
+        String taskid ="task8b0c7ca72439bc9b0c1c89e8866c8275";
+        //token
+        Map<String, String> headers = new HashMap<>();
+        String token ="https://oapi.dingtalk.com/gettoken?appkey=dingxewtjaserj292ggu&appsecret=DuRw6EEEvhGXfr6Q8wN_x4025qKjrffIGCXF9KeCKKIID-LVSsR6_8KWMei6sug1";
+        String body = sendGet(token,headers);
+        JSONObject tokenobject = JSONObject.parseObject(body);
+
+        //钉钉id
+        headers = new HashMap<>();
+        //https://oapi.dingtalk.com/user/get_by_mobile?access_token=9abd3996cb103ba48dd8c69fea5473e7&mobile=15700100840
+        String ddid ="https://oapi.dingtalk.com/user/get_by_mobile?access_token="+tokenobject.get("access_token")+"&mobile="+phone;
+        String ddidbody = sendGet(ddid,headers);
+        JSONObject ddidobject = JSONObject.parseObject(ddidbody);
+
+        //人员id
+        headers = new HashMap<>();
+        //https://oapi.dingtalk.com/user/get?userid=111336474727636213&access_token=3d21a6614fb037a98542a537336e8149
+        String userid ="https://oapi.dingtalk.com/user/get?userid="+ddidobject.get("userid")+"&access_token="+tokenobject.get("access_token");
+        String useridbody = sendGet(userid,headers);
+        JSONObject useridobject = JSONObject.parseObject(useridbody);
+
+
+
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        HttpPut httpPut = new HttpPut("https://api.dingtalk.com/v1.0/todo/users/"+useridobject.get("unionid")+"/tasks/"+taskid);
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build();
+        httpPut.setConfig(requestConfig);
+        httpPut.setHeader("Content-type", "application/json");
+        httpPut.setHeader("x-acs-dingtalk-access-token", tokenobject.getString("access_token"));
+        Map<String, Object> dataMap = new HashMap();
+        dataMap.put("done", true);
+        CloseableHttpResponse httpResponse = null;
+
+        try {
+            httpPut.setEntity(new StringEntity("{\"done\": true}"));
+            httpResponse = httpClient.execute(httpPut);
+            HttpEntity entity = httpResponse.getEntity();
+            String results = EntityUtils.toString(entity);
+            System.out.println(results);
+        } catch (Exception var15) {
+        } finally {
+            try {
+                httpResponse.close();
+                httpClient.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    private String sendGet(String url, Map<String, String> headers) {
+        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+        // HttpClient
+        CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build();
+        HttpGet get = new HttpGet(url.toString());
+        CloseableHttpResponse response = null;
+
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000).build();
+        get.setConfig(requestConfig);//设置请求参数【超时时间】
+        if (headers != null && headers.size() > 0) {
+            for (String key : headers.keySet()) {
+                get.setHeader(key, headers.get(key));
+            }
+        }
+        StringBuilder body = new StringBuilder();
+
+        try {
+
+            response = closeableHttpClient.execute(get);
+            HttpEntity entity = response.getEntity();
+             body.append(EntityUtils.toString(entity,"UTF-8"));
+        } catch (Exception e) {
+            body.append(e.getMessage());
+        } finally {
+            try {
+                // 关闭响应对象
+                if (response != null) {
+                    response.close();
+                }
+                // 关闭响应对象
+                if (closeableHttpClient != null) {
+                    closeableHttpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return body.toString();
+    }
 
 
 }
diff --git a/base-common/src/main/java/com/hzya/frame/basedao/dao/MybatisGenericDao.java b/base-common/src/main/java/com/hzya/frame/basedao/dao/MybatisGenericDao.java
index 95e43393..3852d256 100644
--- a/base-common/src/main/java/com/hzya/frame/basedao/dao/MybatisGenericDao.java
+++ b/base-common/src/main/java/com/hzya/frame/basedao/dao/MybatisGenericDao.java
@@ -96,7 +96,7 @@ public abstract class MybatisGenericDao<E extends Serializable, PK extends Seria
     public E query(E o, String stamentID) {
         return (E) this.sqlSession.selectOne(stamentID, o);
     }
-
+    @DS("#o.dataSourceCode")
     @Override
     public List<E> queryList(E o, String stamentID) {
         List<E> tempList = this.sqlSession.selectList(stamentID, o);
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java b/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java
new file mode 100755
index 00000000..f01431f0
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/enums/OrgEventEnum.java
@@ -0,0 +1,48 @@
+package com.hzya.frame.dingtalk.enums;
+
+/**
+ * @Description 通讯录事件类型
+ * @Author xiangerlin
+ * @Date 2024/8/27 15:58
+ **/
+public enum OrgEventEnum {
+    USER_ADD_ORG("user_add_org","通讯录用户新增"),
+    USER_MODIFY_ORG("user_modify_org","通讯录用户更改"),
+    USER_LEAVE_ORG("user_leave_org","通讯录用户离职"),
+    USER_ACTIVE_ORG("user_active_org","加入企业后用户激活"),
+    ORG_DEPT_CREATE("org_dept_create","通讯录企业部门创建"),
+    ORG_DEPT_MODIFY("org_dept_modify","通讯录企业部门更改"),
+    ORG_DEPT_REMOVE("org_dept_remove","通讯录企业部门删除"),
+    ;
+
+
+    private String code;
+    private String explain;
+
+    OrgEventEnum(String code, String explain) {
+        this.code = code;
+        this.explain = explain;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getExplain() {
+        return explain;
+    }
+
+    /**
+     * 根据code获取事件类型
+     * @param code
+     * @return
+     */
+    public static OrgEventEnum getByCode(String code){
+        for (OrgEventEnum org : OrgEventEnum.values()) {
+            if (org.getCode().equals(code)){
+                return org;
+            }
+        }
+        return null;
+    }
+}
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java
new file mode 100755
index 00000000..ffbba432
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkExtService.java
@@ -0,0 +1,32 @@
+package com.hzya.frame.dingtalk.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+
+/**
+ * @Description 钉钉集成扩展类
+ * @Author xiangerlin
+ * @Date 2024/8/28 14:25
+ **/
+public interface IDingTalkExtService {
+
+    /**
+     * 调用这个方法初始化钉钉参数
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity init(SysExtensionApiEntity entity);
+
+    /**
+     * 查询配置在应用上的钉钉参数
+     * @param sysApplication
+     * @return
+     */
+    JSONObject getDingTalkConfig(SysApplicationEntity sysApplication);
+
+    /**
+     * 清空配置缓存
+     */
+    void clearDingTalkConfigCatch();
+}
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java
new file mode 100755
index 00000000..be742955
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/IDingTalkService.java
@@ -0,0 +1,66 @@
+package com.hzya.frame.dingtalk.service;
+
+import com.dingtalk.api.request.OapiV2UserListRequest;
+import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
+import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
+import com.dingtalk.api.response.OapiV2UserListResponse;
+
+import java.util.List;
+
+/**
+ * @Description 钉钉service
+ * @Author xiangerlin
+ * @Date 2024/8/27 16:17
+ **/
+public interface IDingTalkService {
+
+    /**
+     * 根据userid获取用户详情
+     * @param userId 钉钉userid
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    OapiV2UserGetResponse.UserGetResponse getUserById(String userId, String appKey, String appSecret);
+
+    /**
+     * 根据userid获取用户详情
+     * @param userId
+     * @return
+     */
+    OapiV2UserGetResponse.UserGetResponse getUserById(String userId);
+
+    /**
+     * 获取部门用户列表
+     * @param req 请求参数
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    OapiV2UserListResponse.PageResult getUserListByDeptId(OapiV2UserListRequest req, String appKey, String appSecret);
+    /**
+     * 根据部门id获取部门详情
+     * @param deptId 钉钉部门id
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId, String appKey, String appSecret);
+
+    /**
+     * 根据部门id获取部门详情
+     * @param deptId
+     * @return
+     */
+    OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId);
+
+    /**
+     * 获取部门列表,此接口只会返回下一级部门信息
+     * @param deptId 部门id,如果不传则查询一级部门
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList(Long deptId, String appKey, String appSecret);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java
new file mode 100755
index 00000000..dd0267f8
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkExtServiceImpl.java
@@ -0,0 +1,100 @@
+package com.hzya.frame.dingtalk.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.dingtalk.service.IDingTalkExtService;
+import com.hzya.frame.dingtalk.util.DingTalkAccessToken;
+import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity;
+import com.hzya.frame.sysnew.application.apiPara.dao.ISysApplicationApiParaDao;
+import com.hzya.frame.sysnew.application.apiPara.entity.SysApplicationApiParaEntity;
+import com.hzya.frame.sysnew.application.apiPara.service.ISysApplicationApiParaService;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @Description 钉钉集成扩展类
+ * @Author xiangerlin
+ * @Date 2024/8/28 14:25
+ **/
+@Service(value = "dingTalkExtService")
+public class DingTalkExtServiceImpl implements IDingTalkExtService {
+
+
+    @Resource
+    private ISysApplicationApiParaDao sysApplicationApiParaDao;
+    private final ConcurrentHashMap<String, JSONObject> dingTalkMap = new ConcurrentHashMap<>();
+    /**
+     * 调用这个方法初始化钉钉参数
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity init(SysExtensionApiEntity entity) {
+        Map<String, String> headers = entity.getHeaders();
+        if (null == headers){
+            headers = new HashMap<>();
+        }
+        SysApplicationEntity receiveApp = entity.getReceiveApp();
+        //查询应用上配置的参数
+        JSONObject dingTalkConfig = getDingTalkConfig(receiveApp);
+        //给token赋值
+        entity.setQuerys("access_token="+DingTalkAccessToken.getAccessToken(dingTalkConfig.getString("appKey"),dingTalkConfig.getString("appSecret")));
+        return entity;
+    }
+
+    /**
+     * 查询配置在应用上的钉钉参数
+     *
+     * @param sysApplication
+     * @return
+     */
+    @Override
+    public JSONObject getDingTalkConfig(SysApplicationEntity sysApplication) {
+        if (null != sysApplication && StrUtil.isNotEmpty(sysApplication.getId()) && null != sysApplication.getAppId()){
+            JSONObject jsonObject = new JSONObject();
+            String key = sysApplication.getAppId()+"dingTalk";
+            if (null != dingTalkMap.get(key)){
+                return dingTalkMap.get(key);
+            }else {
+                //查询应用上配置的参数
+                SysApplicationApiParaEntity paraEntity = new SysApplicationApiParaEntity();
+                paraEntity.setAppId(sysApplication.getId());
+                List<SysApplicationApiParaEntity> paraList = sysApplicationApiParaDao.query(paraEntity);
+                if (CollectionUtils.isNotEmpty(paraList)) {
+                    List<SysApplicationApiParaEntity> appKeyList = paraList.stream().filter(p -> p.getInterfaceKey().equals("appKey")).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(appKeyList)) {
+                        jsonObject.put("appKey", appKeyList.get(0).getInterfaceValue());
+                    }
+                    List<SysApplicationApiParaEntity> appSecretList = paraList.stream().filter(p -> p.getInterfaceKey().equals("appSecret")).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(appSecretList)) {
+                        jsonObject.put("appSecret", appSecretList.get(0).getInterfaceValue());
+                    }
+                    dingTalkMap.put(key,jsonObject);
+                    return dingTalkMap.get(key);
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 清空配置缓存
+     */
+    @Override
+    public void clearDingTalkConfigCatch() {
+        dingTalkMap.clear();
+    }
+}
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java
new file mode 100755
index 00000000..8e74ae9d
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/service/impl/DingTalkServiceImpl.java
@@ -0,0 +1,164 @@
+package com.hzya.frame.dingtalk.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiV2DepartmentGetRequest;
+import com.dingtalk.api.request.OapiV2DepartmentListsubRequest;
+import com.dingtalk.api.request.OapiV2UserGetRequest;
+import com.dingtalk.api.request.OapiV2UserListRequest;
+import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
+import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
+import com.dingtalk.api.response.OapiV2UserListResponse;
+import com.hzya.frame.dingtalk.service.IDingTalkService;
+import com.hzya.frame.dingtalk.util.DingTalkAccessToken;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description 钉钉service
+ * @Author xiangerlin
+ * @Date 2024/8/27 16:17
+ **/
+@Service(value = "dingTalkService")
+public class DingTalkServiceImpl implements IDingTalkService {
+    Logger logger = LoggerFactory.getLogger(getClass());
+    @Value("${dingtalk.appKey:}")
+    private String dAppKey;
+    @Value("${dingtalk.appSecret:}")
+    private String dAppSecret;
+
+
+    /**
+     * 根据userid获取用户详情
+     *
+     * @param userId    钉钉userid
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    @Override
+    public OapiV2UserGetResponse.UserGetResponse getUserById(String userId, String appKey, String appSecret) {
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
+        OapiV2UserGetRequest req = new OapiV2UserGetRequest();
+        req.setUserid(userId);
+        req.setLanguage("zh_CN");
+        try {
+            OapiV2UserGetResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret));
+            if (rsp.isSuccess()){
+                OapiV2UserGetResponse.UserGetResponse result = rsp.getResult();
+                String s = JSONObject.toJSONString(result);
+                logger.info("人员详情信息:{}",s);
+                return result;
+            }
+        }catch (Exception e){
+            logger.error("根据部门id获取钉钉用户详情出错:{}",e);
+        }
+        return null;
+    }
+
+    /**
+     * 根据userid获取用户详情
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public OapiV2UserGetResponse.UserGetResponse getUserById(String userId) {
+        return getUserById(userId,dAppKey,dAppSecret);
+    }
+
+    /**
+     * 获取部门用户列表
+     *
+     * @param req 请求参数
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    @Override
+    public OapiV2UserListResponse.PageResult getUserListByDeptId(OapiV2UserListRequest req, String appKey, String appSecret) {
+        try {
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
+            req.setSize(100L);//每页最大只能查100条
+            req.setOrderField("modify_desc");
+            req.setContainAccessLimit(false);
+            req.setLanguage("zh_CN");
+            OapiV2UserListResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret));
+            OapiV2UserListResponse.PageResult result = rsp.getResult();
+            return result;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 根据部门id获取部门详情
+     *
+     * @param deptId    钉钉部门id
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    @Override
+    public OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId, String appKey, String appSecret) {
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get");
+        OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
+        req.setDeptId(deptId);
+        req.setLanguage("zh_CN");
+        try {
+            OapiV2DepartmentGetResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret));
+            if (rsp.isSuccess()){
+                OapiV2DepartmentGetResponse.DeptGetResponse result = rsp.getResult();
+                String s = JSONObject.toJSONString(result);
+                logger.info("部门详情信息:{}",s);
+                return result;
+            }
+        }catch(Exception e){
+            logger.error("根据部门id获取钉钉部门出错:{}",e);
+        }
+        return null;
+    }
+
+    /**
+     * 根据部门id获取部门详情
+     *
+     * @param deptId
+     * @return
+     */
+    @Override
+    public OapiV2DepartmentGetResponse.DeptGetResponse getDeptById(Long deptId) {
+        return getDeptById(deptId,dAppKey,dAppSecret);
+    }
+
+    /**
+     * 获取部门列表,此接口只会返回下一级部门信息
+     * @param deptId 部门id,如果不传则查询一级部门
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    @Override
+    public List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList(Long deptId,String appKey,String appSecret) {
+        try {
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+            OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
+            req.setDeptId(deptId);
+            req.setLanguage("zh_CN");
+            OapiV2DepartmentListsubResponse rsp = client.execute(req, DingTalkAccessToken.getAccessToken(appKey,appSecret));
+            if (rsp.isSuccess()){
+                List<OapiV2DepartmentListsubResponse.DeptBaseResponse> result = rsp.getResult();
+                return result;
+            }
+        }catch (Exception e){
+            logger.error("获取部门列表接口出错:{}",e);
+        }
+        return null;
+    }
+}
diff --git a/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java b/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java
new file mode 100755
index 00000000..eb951180
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/dingtalk/util/DingTalkAccessToken.java
@@ -0,0 +1,103 @@
+package com.hzya.frame.dingtalk.util;
+
+import cn.hutool.core.util.StrUtil;
+import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
+import com.aliyun.tea.TeaException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.time.Instant;
+
+/**
+ * @Description 钉钉获取accessToken
+ * @Author xiangerlin
+ * @Date 2024/8/27 14:05
+ **/
+public class DingTalkAccessToken {
+    static Logger logger = LoggerFactory.getLogger(DingTalkAccessToken.class);
+    //token
+    private static String accessToken;
+    //过期时间
+    private static Instant expireTime;
+    private static final Long CACHE_EXPIRY_TIME = 7000L; // 缓存有效时间(秒)
+    //应用key
+    private static String appKey;
+    //应用密钥
+    private static String appSecret;
+    @Value("${dingtalk.appKey:}")
+    public static void setAppKey(String appKey) {
+        DingTalkAccessToken.appKey = appKey;
+    }
+    @Value("${dingtalk.appSecret:}")
+    public static void setAppSecret(String appSecret) {
+        DingTalkAccessToken.appSecret = appSecret;
+    }
+
+    /**
+     * 获取token
+     * @return
+     */
+    public static String getAccessToken(){
+        return getAccessToken(appKey,appSecret);
+    }
+    /**
+     * 获取accessToken
+     *
+     * @param appKey
+     * @param appSecret
+     * @return
+     */
+    public static String getAccessToken(String appKey,String appSecret) {
+        //判断是否过期 如果没过期直接返回
+        if (null != accessToken && expireTime != null && Instant.now().isBefore(expireTime)) {
+            return accessToken;
+        }
+        //获取新的accessToken
+        accessToken = fetchNewAccessToken(appKey,appSecret);
+        //过期时间设置成当前事件+7000s,预留200s的时间
+        expireTime = Instant.now().plusSeconds(CACHE_EXPIRY_TIME);
+        return accessToken;
+    }
+
+    /**
+     * 获取新的accessToken
+     *
+     * @return
+     */
+    private static String fetchNewAccessToken(String appKey,String appSecret) {
+        try {
+            //查询应用上配置的钉钉信息
+            if (StrUtil.isNotEmpty(appKey) && StrUtil.isNotEmpty(appSecret)) {
+                //查询应用上的信息
+                com.aliyun.dingtalkoauth2_1_0.Client client = DingTalkAccessToken.createClient();
+                com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
+                        .setAppKey(appKey)
+                        .setAppSecret(appSecret);
+                GetAccessTokenResponse accessToken = client.getAccessToken(getAccessTokenRequest);
+                String accessToken1 = accessToken.getBody().getAccessToken();
+                return accessToken1;
+            }
+        } catch (Exception _err) {
+            TeaException err = new TeaException(_err.getMessage(), _err);
+            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
+                // err 中含有 code 和 message 属性,可帮助开发定位问题
+            }
+            logger.error("获取钉钉token出错:{}", _err);
+        }
+        return null;
+    }
+
+    /**
+     * 使用 Token 初始化账号Client
+     *
+     * @return Client
+     * @throws Exception
+     */
+    private static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
+        config.protocol = "https";
+        config.regionId = "central";
+        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
+    }
+}
diff --git a/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java b/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java
index 6ee65aa3..cda6cf9c 100644
--- a/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/home/service/impl/HomeServiceImpl.java
@@ -50,6 +50,7 @@ public class HomeServiceImpl extends BaseService<HomeEntity, String> implements
 					for (int a = 0; a < sysApplicationEntities.size(); a++) {
 						if(homeEntities.get(i).getAppId()!= null && sysApplicationEntities.get(a).getId().equals(homeEntities.get(i).getAppId())){
 							homeEntities.get(i).setPath(sysApplicationEntities.get(a).getAppLogo());
+							homeEntities.get(i).setName(sysApplicationEntities.get(a).getName());
 							continue;
 						}
 					}
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java b/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java
new file mode 100644
index 00000000..f6bd998b
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/mdm/entity/MdmFiledsRuleDto.java
@@ -0,0 +1,77 @@
+package com.hzya.frame.mdm.entity;
+
+
+public class MdmFiledsRuleDto {
+    /**  主数据模版ID */
+    private String mdmId;
+    /**  模版数据库id */
+    private String dbId;
+    /**  模版数据库字段id */
+    private String filedId;
+    /**  字段类型 1、select 2、treeselect */
+    private String filedType;
+    /**  字段服务 */
+    private String typeFiled;
+    /**  字段服务 */
+    private String id;
+    /**  字段服务 */
+    private String dataId;
+
+    public String getMdmId() {
+        return mdmId;
+    }
+
+    public void setMdmId(String mdmId) {
+        this.mdmId = mdmId;
+    }
+
+    public String getDbId() {
+        return dbId;
+    }
+
+    public void setDbId(String dbId) {
+        this.dbId = dbId;
+    }
+
+    public String getFiledId() {
+        return filedId;
+    }
+
+    public void setFiledId(String filedId) {
+        this.filedId = filedId;
+    }
+
+    public String getFiledType() {
+        return filedType;
+    }
+
+    public void setFiledType(String filedType) {
+        this.filedType = filedType;
+    }
+
+    public String getTypeFiled() {
+        return typeFiled;
+    }
+
+    public void setTypeFiled(String typeFiled) {
+        this.typeFiled = typeFiled;
+    }
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getDataId() {
+        return dataId;
+    }
+
+    public void setDataId(String dataId) {
+        this.dataId = dataId;
+    }
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java
index 1940d472..7c936af7 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java
+++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/IMdmModuleDao.java
@@ -3,6 +3,7 @@ package com.hzya.frame.mdm.mdmModule.dao;
 import com.alibaba.fastjson.JSONObject;
 import com.hzya.frame.mdm.entity.MdmDataDto;
 import com.hzya.frame.mdm.entity.MdmDto;
+import com.hzya.frame.mdm.entity.MdmFiledsRuleDto;
 import com.hzya.frame.mdm.entity.MdmQuery;
 import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity;
 import com.hzya.frame.basedao.dao.IBaseDao;
@@ -68,5 +69,7 @@ public interface IMdmModuleDao extends IBaseDao<MdmModuleEntity, String> {
     void updataTreeUpData(Map<String, String> updateMaps);
 
     void updataTreeUpDataDetail(Map<String, String> updateMaps);
+
+    MdmFiledsRuleDto queryDataId(MdmFiledsRuleDto mdmFiledsRuleDto);
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java
index c9d4ea70..56e4777e 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/dao/impl/MdmModuleDaoImpl.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.hzya.frame.basedao.dao.MybatisGenericDao;
 import com.hzya.frame.mdm.entity.MdmDataDto;
 import com.hzya.frame.mdm.entity.MdmDto;
+import com.hzya.frame.mdm.entity.MdmFiledsRuleDto;
 import com.hzya.frame.mdm.entity.MdmQuery;
 import com.hzya.frame.mdm.mdmModule.dao.IMdmModuleDao;
 import com.hzya.frame.mdm.mdmModule.entity.MdmModuleEntity;
@@ -181,6 +182,12 @@ public class MdmModuleDaoImpl extends MybatisGenericDao<MdmModuleEntity, String>
         super.update(getSqlIdPrifx() + "updataTreeUpDataDetail", maps);
     }
 
+    @Override
+    public MdmFiledsRuleDto queryDataId(MdmFiledsRuleDto mdmFiledsRuleDto) {
+        MdmFiledsRuleDto o = (MdmFiledsRuleDto) super.selectOne(getSqlIdPrifx() + "queryDataId", mdmFiledsRuleDto);
+        return o;
+    }
+
     @Override
     public List<String> queryMdMFields(Map<String, Object> maps) {
         List<String> o = (List<String>) super.selectList(getSqlIdPrifx() + "queryMdMFields", maps);
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml
index 629067a8..822bd239 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/entity/MdmModuleEntity.xml
@@ -974,10 +974,10 @@ where id = #{id}
                             &lt; #{item.filedVaule}
                         </when>
                         <when test="item.compareType == '5'.toString() ">
-                            like concat('%',#{item.filedVaule},'%')
+                            like #{item.filedVaule}
                         </when>
                         <when test="item.compareType == '6'.toString() ">
-                            not like concat('%',#{item.filedVaule},'%')
+                            not like #{item.filedVaule}
                         </when>
                     </choose>
 
@@ -1086,5 +1086,14 @@ where id = #{id}
           AND b.sts = 'Y'
           AND b.data_status != 'N'
     </update>
+
+
+    <!-- 分页查询列表 采用like格式 -->
+    <select id="queryDataId" resultType="com.hzya.frame.mdm.entity.MdmFiledsRuleDto"
+            parameterType="com.hzya.frame.mdm.entity.MdmFiledsRuleDto">
+        select
+        data_id as dataId
+        from ${typeFiled} where  sts='Y' and id = #{id}
+    </select>
 </mapper>
 
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java
index 7169f57f..c32080d1 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/mdm/mdmModule/service/impl/MdmModuleServiceImpl.java
@@ -2340,7 +2340,20 @@ public class MdmModuleServiceImpl extends BaseService<MdmModuleEntity, String> i
                         xf.setCreate();
                         sysButtonConfigDao.save(xf);
                     }
-
+                    if ("viewData".equals(mdmModuleViewButtonEntities.get(i).getButtonValue())) {
+                        SysButtonConfigEntity xf = new SysButtonConfigEntity();
+                        xf.setCode("viewData");
+                        xf.setNameCh("查看数据格式");
+                        xf.setNameEn("viewData");
+                        xf.setMenuId(module.getId());
+                        xf.setIconName("");
+                        xf.setStyles("");
+                        xf.setBtnFunction("viewData");
+                        xf.setRemark("查看数据格式");
+                        xf.setSorts(i + 1L);
+                        xf.setCreate();
+                        sysButtonConfigDao.save(xf);
+                    }
 
                 }
             }
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java b/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java
index fff31302..70de4325 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java
+++ b/base-service/src/main/java/com/hzya/frame/mdm/service/IMdmService.java
@@ -87,6 +87,15 @@ public interface IMdmService {
      * @Date 9:40 上午 2023/10/18
      **/
     JsonResultEntity queryMdmShowDetailsData(JSONObject jsonObject);
+
+    /**
+     * @param jsonObject
+     * @return com.hzya.frame.web.entity.JsonResultEntity
+     * @Author lvleigang
+     * @Description 主数据详情数据字典
+     * @Date 9:40 上午 2023/10/18
+     **/
+    JsonResultEntity queryMdmShowDetailsDictionary(JSONObject jsonObject);
     //
     /**
      * @param jsonObject
diff --git a/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java b/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java
index fcb46154..8550e8cb 100644
--- a/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/mdm/service/impl/MdmServiceImpl.java
@@ -101,12 +101,6 @@ public class MdmServiceImpl implements IMdmService {
     @Resource
     private IMdmServiceCache mdmServiceCache;
     @Resource
-    private ISysMenuConfigDao sysMenuConfigDao;
-    @Resource
-    private ISysButtonConfigDao sysButtonConfigDao;
-    @Resource
-    private ISysPopedomOperateDao sysPopedomOperateDao;
-    @Resource
     private IMdmModuleDbDao mdmModuleDbDao;
     @Resource
     private ISysUserDao sysUserDao;
@@ -1381,15 +1375,188 @@ public class MdmServiceImpl implements IMdmService {
             }
 
         }
-        //if (tablename != null && !"".equals(tablename)) {
-        //    Map<String, Object> queryData = new HashMap<>();
-        //    queryData.put("tableName", tablename);//表名
-        //    queryData.put("id", entity.getId());//字段
-        //    List<HashMap<String, Object>> datas = mdmModuleDbDao.getServiceByDistributeId(queryData);
-        //    jsonObject.put(tablename, datas);
-        //}
 
 
+
+        return BaseResult.getSuccessMessageEntity("获取数据成功", jsonObject);
+    }
+
+
+    /**
+     * @param object
+     * @return com.hzya.frame.web.entity.JsonResultEntity
+     * @Author lvleigang
+     * @Description 主数据详情数据字典
+     * @Date 9:40 上午 2023/10/18
+     **/
+    @Override
+    public JsonResultEntity queryMdmShowDetailsDictionary(JSONObject object) {
+        MdmDto entity = getData("jsonStr", object, MdmDto.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getMdmCode() == null || "".equals(entity.getMdmCode())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        //查询模版
+
+        MdmModuleEntity mdmModuleEntity = mdmServiceCache.getMdmModuleEntity(entity.getMdmCode());
+        if (mdmModuleEntity == null) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        //查询数据源主表
+        MdmModuleDbEntity mdmModuleDbEntity = new MdmModuleDbEntity();
+        mdmModuleDbEntity.setMdmId(mdmModuleEntity.getId());
+        mdmModuleDbEntity.setSts("Y");
+        List<MdmModuleDbEntity> mdmModuleDbEntityList = mdmServiceCache.queryMdmModuleDb(mdmModuleDbEntity);
+        if (mdmModuleDbEntityList == null || mdmModuleDbEntityList.size() == 0) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        MdmModuleDbFiledsEntity queryFild = new MdmModuleDbFiledsEntity();
+        queryFild.setMdmId(mdmModuleEntity.getId());
+        queryFild.setSts("Y");
+        List<MdmModuleDbFiledsEntity> mdmModuleDbFiledsEntities = mdmServiceCache.queryMdmModuleDbFileds(queryFild);
+
+        MdmModuleDbFiledsRuleEntity mdmModuleDbFiledsRuleEntity = new MdmModuleDbFiledsRuleEntity();
+        mdmModuleDbFiledsRuleEntity.setMdmId(mdmModuleEntity.getId());
+        mdmModuleDbFiledsRuleEntity.setSts("Y");
+        List<MdmModuleDbFiledsRuleEntity> mdmModuleDbFiledsRuleEntities = mdmModuleDbFiledsRuleDao.queryBase(mdmModuleDbFiledsRuleEntity);
+
+        List<MdmFiledsRuleDto> mdmFiledsRuleDtos = new ArrayList<>();
+        if(mdmModuleDbFiledsRuleEntities != null && mdmModuleDbFiledsRuleEntities.size() > 0){
+            for (int i = 0; i < mdmModuleDbFiledsRuleEntities.size(); i++) {
+                if("treeselect".equals(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue()) || "select".equals(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue())){
+                    MdmFiledsRuleDto mdmFiledsRuleDto = new MdmFiledsRuleDto();
+                    mdmFiledsRuleDto.setDbId(mdmModuleDbFiledsRuleEntities.get(i).getDbId());
+                    mdmFiledsRuleDto.setFiledId(mdmModuleDbFiledsRuleEntities.get(i).getFiledId());
+                    mdmFiledsRuleDto.setMdmId(mdmModuleDbFiledsRuleEntities.get(i).getMdmId());
+                    mdmFiledsRuleDto.setFiledType(mdmModuleDbFiledsRuleEntities.get(i).getRuleValue());
+                    mdmFiledsRuleDtos.add(mdmFiledsRuleDto);
+                }
+            }
+        }
+
+        if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){
+            for (int i = 0; i < mdmFiledsRuleDtos.size(); i++) {
+                for (int i1 = 0; i1 < mdmModuleDbFiledsRuleEntities.size(); i1++) {
+                    if(mdmFiledsRuleDtos.get(i).getFiledId().equals(mdmModuleDbFiledsRuleEntities.get(i1).getFiledId())
+                            && "service".equals(mdmModuleDbFiledsRuleEntities.get(i1).getRuleCode())){
+                        mdmFiledsRuleDtos.get(i).setTypeFiled(mdmModuleDbFiledsRuleEntities.get(i1).getRuleValue());
+                    }
+                }
+            }
+        }
+
+        //String tablename = null;
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("appName","数智中台");
+        jsonObject.put("appCode","800004");
+        jsonObject.put("mdmCode",entity.getMdmCode());
+        jsonObject.put("optionName","admin");
+        for (int i = 0; i < mdmModuleDbEntityList.size(); i++) {
+            if ("1".equals(mdmModuleDbEntityList.get(i).getDbType()) || "2".equals(mdmModuleDbEntityList.get(i).getDbType())) {
+                //查询数据
+                Map<String, Object> queryData = new HashMap<>();
+                queryData.put("tableName", mdmModuleDbEntityList.get(i).getDbName());//表名
+                if ("1".equals(mdmModuleDbEntityList.get(i).getDbType())) {
+                    queryData.put("detailFlag", false);//是否明细
+                    queryData.put("id", entity.getId());//字段
+                    HashMap<String, Object> datas = mdmModuleDbDao.getServiceDataById(queryData);
+                    convertKeysToLowerCase(datas);
+                    JSONObject zbdata = new JSONObject();
+                    if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){
+                        for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) {
+                            if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){
+                                if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){
+                                    //判断是否是下拉类型
+                                    Object data = datas.get(mdmModuleDbFiledsEntities.get(i2).getEnName());
+                                    if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){
+                                        for (int i1 = 0; i1 < mdmFiledsRuleDtos.size(); i1++) {
+                                            if(mdmModuleDbFiledsEntities.get(i2).getId().equals(mdmFiledsRuleDtos.get(i1).getFiledId())){
+                                                //查询对应的data_id
+                                                String strData = String.valueOf(data);
+                                                int index = strData.lastIndexOf(',');
+                                                if (index!= -1) {
+                                                    strData = strData.substring(index + 1);
+                                                }
+                                                mdmFiledsRuleDtos.get(i1).setId(strData);
+                                                MdmFiledsRuleDto mdmFiledsRuleDto =  mdmModuleDao.queryDataId(mdmFiledsRuleDtos.get(i1));
+                                                if(mdmFiledsRuleDto != null && mdmFiledsRuleDto.getDataId() != null &&  !"".equals(mdmFiledsRuleDto.getDataId())){
+                                                    data = mdmFiledsRuleDto.getDataId();
+                                                }else {
+                                                    data = null;
+                                                }
+                                            }
+                                        }
+                                    }
+                                    zbdata.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),data);
+                                }
+                            }
+                        }
+                    }
+                    jsonObject.put(mdmModuleDbEntityList.get(i).getDbName(), zbdata);
+                } else {
+                    queryData.put("detailFlag", true);//是否明细
+                    queryData.put("id", entity.getId());//字段
+                    List<HashMap<String, Object>> datas = mdmModuleDbDao.getServiceByFormmainId(queryData);
+                    convertKeysToLowerCase(datas);
+                    List<JSONObject> mxDataList = new ArrayList<>();
+                    if(datas != null && datas.size() > 0){
+                        for (int i1 = 0; i1 < datas.size(); i1++) {
+                            JSONObject mxData = new JSONObject();
+                            if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){
+                                for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) {
+                                    if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){
+                                        if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){
+
+                                            //判断是否是下拉类型
+                                            Object data = datas.get(i1).get(mdmModuleDbFiledsEntities.get(i2).getEnName());
+                                            if(mdmFiledsRuleDtos != null && mdmFiledsRuleDtos.size() > 0){
+                                                for (int b = 0; b < mdmFiledsRuleDtos.size(); b++) {
+                                                    if(mdmModuleDbFiledsEntities.get(i2).getId().equals(mdmFiledsRuleDtos.get(b).getFiledId())){
+                                                        //查询对应的data_id
+                                                        String strData = String.valueOf(data);
+                                                        int index = strData.lastIndexOf(',');
+                                                        if (index!= -1) {
+                                                            strData = strData.substring(index + 1);
+                                                        }
+                                                        mdmFiledsRuleDtos.get(b).setId(strData);
+                                                        MdmFiledsRuleDto mdmFiledsRuleDto =  mdmModuleDao.queryDataId(mdmFiledsRuleDtos.get(b));
+                                                        if(mdmFiledsRuleDto != null && mdmFiledsRuleDto.getDataId() != null &&  !"".equals(mdmFiledsRuleDto.getDataId())){
+                                                            data = mdmFiledsRuleDto.getDataId();
+                                                        }else {
+                                                            data = null;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                            mxData.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),data);
+                                        }
+                                    }
+                                }
+                            }
+                            mxDataList.add(mxData);
+                        }
+                    }else {
+                        JSONObject mxData = new JSONObject();
+                        if(mdmModuleDbFiledsEntities != null && mdmModuleDbFiledsEntities.size() > 0){
+                            for (int i2 = 0; i2 < mdmModuleDbFiledsEntities.size(); i2++) {
+                                if(mdmModuleDbFiledsEntities.get(i2).getDbId().equals(mdmModuleDbEntityList.get(i).getId())){
+                                    if("1".equals(mdmModuleDbFiledsEntities.get(i2).getViewType())){
+                                        mxData.put(mdmModuleDbFiledsEntities.get(i2).getEnName(),null);
+                                    }
+                                }
+                            }
+                        }
+                        mxDataList.add(mxData);
+                    }
+                    jsonObject.put(mdmModuleDbEntityList.get(i).getDbName(), mxDataList);
+                }
+            }
+        }
         return BaseResult.getSuccessMessageEntity("获取数据成功", jsonObject);
     }
 
@@ -1944,7 +2111,8 @@ public class MdmServiceImpl implements IMdmService {
             return BaseResult.getSuccessMessageEntity("发送成功");
         } else {
             saveMdmModuleSendLogEntity(mdmModuleEntity.getMdmCode(), mdmModuleDistributeEntity.getId(), "2", "转发失败:"+jsonResultEntity.getAttribute(), dbname, object.getString("id"), sysApplicationEntity.getName(), sysApplicationEntity.getId(), apiEntity.getApiName(), apiEntity.getId(), object.toJSONString(), type);
-            return BaseResult.getFailureMessageEntity("发送错误:" + jsonResultEntity.getAttribute());
+            JSONObject object1 = JSONObject.parseObject(jsonResultEntity.getAttribute().toString());
+            return BaseResult.getFailureMessageEntity("发送错误:" +object1.getString("msg"));
         }
     }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/ISysDictionaryshopNewService.java b/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/ISysDictionaryshopNewService.java
index 252971c5..9bc3fe1d 100644
--- a/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/ISysDictionaryshopNewService.java
+++ b/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/ISysDictionaryshopNewService.java
@@ -13,4 +13,13 @@ import com.hzya.frame.sys.dictionaryshopNew.entity.SysDictionaryshopNew;
 public interface ISysDictionaryshopNewService {
 
         JsonResultEntity test(SysDictionaryshopNew object);
+
+        /**
+         * 查询数据字典
+         * @param tabName 表名
+         * @param columnName 字段名
+         * @param columnValue 字典值
+         * @return
+         */
+        SysDictionaryshopNew getDictionaryshopByValue(String tabName, String columnName, String columnValue);
 }
\ No newline at end of file
diff --git a/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/impl/SysDictionaryshopNewServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/impl/SysDictionaryshopNewServiceImpl.java
index 92ac11cf..72dac9f1 100644
--- a/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/impl/SysDictionaryshopNewServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sys/dictionaryshopNew/service/impl/SysDictionaryshopNewServiceImpl.java
@@ -33,4 +33,20 @@ public class  SysDictionaryshopNewServiceImpl extends ServiceUtil implements ISy
 		return BaseResult.getSuccessMessageEntity("获取应用成功");
 	}
 
+	/**
+	 * 查询数据字典
+	 *
+	 * @param tabName     表名
+	 * @param columnName  字段名
+	 * @param columnValue 字典值
+	 * @return
+	 */
+	@Override
+	public SysDictionaryshopNew getDictionaryshopByValue(String tabName, String columnName, String columnValue) {
+		SysDictionaryshopNew sysDictionaryshopNew = new SysDictionaryshopNew();
+		sysDictionaryshopNew.setTabName(tabName);
+		sysDictionaryshopNew.setColumnName(columnName);
+		sysDictionaryshopNew.setColumnValue(columnValue);
+		return sysdictionaryshopnewMapper.entity_get_by_value(sysDictionaryshopNew);
+	}
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassDao.java
new file mode 100644
index 00000000..9437bf82
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowClassEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 流程分类;对应数环通项目分类(sys_flow_class: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowClassDao extends IBaseDao<SysFlowClassEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassRuleDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassRuleDao.java
new file mode 100644
index 00000000..6359bb58
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowClassRuleDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 流程分类权限表(sys_flow_class_rule: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowClassRuleDao extends IBaseDao<SysFlowClassRuleEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowDao.java
new file mode 100644
index 00000000..985be186
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 流程主表;流程就是数环通的Linkup(sys_flow: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:19
+ */
+public interface ISysFlowDao extends IBaseDao<SysFlowEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowNifiConstantDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowNifiConstantDao.java
new file mode 100644
index 00000000..b7c829ce
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowNifiConstantDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * nifi常量(sys_flow_nifi_constant: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowNifiConstantDao extends IBaseDao<SysFlowNifiConstantEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepAccountDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepAccountDao.java
new file mode 100644
index 00000000..d5a3c40f
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepAccountDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 流程步骤账户表(sys_flow_step_account: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowStepAccountDao extends IBaseDao<SysFlowStepAccountEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigBDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigBDao.java
new file mode 100644
index 00000000..68042e35
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigBDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 映射信息表体(sys_flow_step_config_b: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepConfigBDao extends IBaseDao<SysFlowStepConfigBEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigDao.java
new file mode 100644
index 00000000..70f0cd14
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepConfigDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 映射信息主表(sys_flow_step_config: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepConfigDao extends IBaseDao<SysFlowStepConfigEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepDao.java
new file mode 100644
index 00000000..52f0a3d5
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 流程步骤信息(sys_flow_step: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowStepDao extends IBaseDao<SysFlowStepEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepRelationDao.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepRelationDao.java
new file mode 100644
index 00000000..41bbb415
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/ISysFlowStepRelationDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sys.flow.dao;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 步骤关联关系表(sys_flow_step_relation: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepRelationDao extends IBaseDao<SysFlowStepRelationEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassDaoImpl.java
new file mode 100644
index 00000000..ef35f356
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowClassEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowClassDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 流程分类;对应数环通项目分类(SysFlowClass)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Repository(value = "SysFlowClassDaoImpl")
+public class SysFlowClassDaoImpl extends MybatisGenericDao<SysFlowClassEntity, String> implements ISysFlowClassDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassRuleDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassRuleDaoImpl.java
new file mode 100644
index 00000000..02ace295
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowClassRuleDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowClassRuleDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 流程分类权限表(SysFlowClassRule)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Repository(value = "SysFlowClassRuleDaoImpl")
+public class SysFlowClassRuleDaoImpl extends MybatisGenericDao<SysFlowClassRuleEntity, String> implements ISysFlowClassRuleDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowDaoImpl.java
new file mode 100644
index 00000000..9bd21c11
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 流程主表;流程就是数环通的Linkup(SysFlow)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:21
+ */
+@Repository(value = "SysFlowDaoImpl")
+public class SysFlowDaoImpl extends MybatisGenericDao<SysFlowEntity, String> implements ISysFlowDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowNifiConstantDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowNifiConstantDaoImpl.java
new file mode 100644
index 00000000..628b92fb
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowNifiConstantDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowNifiConstantDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * nifi常量(SysFlowNifiConstant)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Repository(value = "SysFlowNifiConstantDaoImpl")
+public class SysFlowNifiConstantDaoImpl extends MybatisGenericDao<SysFlowNifiConstantEntity, String> implements ISysFlowNifiConstantDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepAccountDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepAccountDaoImpl.java
new file mode 100644
index 00000000..2c9f580a
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepAccountDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepAccountDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 流程步骤账户表(SysFlowStepAccount)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Repository(value = "SysFlowStepAccountDaoImpl")
+public class SysFlowStepAccountDaoImpl extends MybatisGenericDao<SysFlowStepAccountEntity, String> implements ISysFlowStepAccountDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigBDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigBDaoImpl.java
new file mode 100644
index 00000000..377098c8
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigBDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepConfigBDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 映射信息表体(SysFlowStepConfigB)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Repository(value = "SysFlowStepConfigBDaoImpl")
+public class SysFlowStepConfigBDaoImpl extends MybatisGenericDao<SysFlowStepConfigBEntity, String> implements ISysFlowStepConfigBDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigDaoImpl.java
new file mode 100644
index 00000000..b3be492c
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepConfigDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepConfigDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 映射信息主表(SysFlowStepConfig)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Repository(value = "SysFlowStepConfigDaoImpl")
+public class SysFlowStepConfigDaoImpl extends MybatisGenericDao<SysFlowStepConfigEntity, String> implements ISysFlowStepConfigDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepDaoImpl.java
new file mode 100644
index 00000000..f25dc8fc
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 流程步骤信息(SysFlowStep)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Repository(value = "SysFlowStepDaoImpl")
+public class SysFlowStepDaoImpl extends MybatisGenericDao<SysFlowStepEntity, String> implements ISysFlowStepDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepRelationDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepRelationDaoImpl.java
new file mode 100644
index 00000000..c47941b2
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/dao/impl/SysFlowStepRelationDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sys.flow.dao.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepRelationDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 步骤关联关系表(SysFlowStepRelation)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Repository(value = "SysFlowStepRelationDaoImpl")
+public class SysFlowStepRelationDaoImpl extends MybatisGenericDao<SysFlowStepRelationEntity, String> implements ISysFlowStepRelationDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.java
new file mode 100644
index 00000000..ff75dbcc
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.java
@@ -0,0 +1,36 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 流程分类;对应数环通项目分类(SysFlowClass)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public class SysFlowClassEntity extends BaseEntity {
+ 
+  /**  分类名称 */
+   private String name;
+  /**  上级id */
+   private String parentId;
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.xml
new file mode 100644
index 00000000..0c6ab408
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassEntity.xml
@@ -0,0 +1,195 @@
+<?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.sys.flow.dao.impl.SysFlowClassDaoImpl">
+
+    <resultMap id="get-SysFlowClassEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowClassEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="name" column="name" jdbcType="VARCHAR"/>
+           <result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowClassEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,name 
+        ,parent_id 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowClassEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity">
+    select
+    <include refid="SysFlowClassEntity_Base_Column_List" />
+    from sys_flow_class
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="parentId != null and parentId != ''"> and parent_id = #{parentId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity">
+        select  count(1)   from sys_flow_class
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="parentId != null and parentId != ''"> and parent_id = #{parentId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowClassEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity">
+    select
+    <include refid="SysFlowClassEntity_Base_Column_List" />
+    from sys_flow_class
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="name != null and name != ''"> and name like concat('%',#{name},'%') </if>
+            <if test="parentId != null and parentId != ''"> and parent_id like concat('%',#{parentId},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowClassentity_list_or" resultMap="get-SysFlowClassEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity">
+    select
+    <include refid="SysFlowClassEntity_Base_Column_List" />
+    from sys_flow_class
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="name != null and name != ''"> or name = #{name} </if>
+             <if test="parentId != null and parentId != ''"> or parent_id = #{parentId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_class(
+    <trim suffix="" suffixOverrides=",">
+        <if test="id != null and id != ''">id ,</if>
+        <if test="create_user_id != null and create_user_id != ''">create_user_id ,</if>
+        <if test="create_time != null">create_time ,</if>
+        <if test="modify_user_id != null and modify_user_id != ''">modify_user_id ,</if>
+        <if test="modify_time != null">modify_time ,</if>
+        <if test="sts != null and sts != ''">sts ,</if>
+        <if test="name != null and name != ''">name ,</if>
+        <if test="parentId != null and parentId != ''">parent_id ,</if>
+        <if test="sorts == null ">sorts,</if>
+        <if test="sts == null ">sts,</if>
+    </trim>
+    )values(
+    <trim suffix="" suffixOverrides=",">
+        <if test="id != null and id != ''">#{id} ,</if>
+        <if test="create_user_id != null and create_user_id != ''">#{create_user_id} ,</if>
+        <if test="create_time != null">#{create_time} ,</if>
+        <if test="modify_user_id != null and modify_user_id != ''">#{modify_user_id} ,</if>
+        <if test="modify_time != null">#{modify_time} ,</if>
+        <if test="sts != null and sts != ''">#{sts} ,</if>
+        <if test="name != null and name != ''">#{name} ,</if>
+        <if test="parentId != null and parentId != ''">#{parentId} ,</if>
+        <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_class a WHERE
+            a.sts = 'Y' ),1),
+        </if>
+        <if test="sts == null ">'Y',</if>
+    </trim>
+    )
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_class(create_user_id, create_time, modify_user_id, modify_time, sts, name, parent_id,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},#{entity.parentId}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_class(create_user_id, create_time, modify_user_id, modify_time, sts, name, parent_id)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},#{entity.parentId})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    name = values(name),
+    parent_id = values(parent_id)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity" >
+update sys_flow_class  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="name != null and name != ''"> name = #{name},</if>
+  <if test="parentId != null and parentId != ''"> parent_id = #{parentId},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity" >
+update sys_flow_class  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowClassEntity" >
+update sys_flow_class  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="parentId != null and parentId != ''"> and parent_id = #{parentId} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_class where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.java
new file mode 100644
index 00000000..cea32985
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.java
@@ -0,0 +1,75 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import java.util.List;
+
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 流程分类权限表(SysFlowClassRule)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public class SysFlowClassRuleEntity extends BaseEntity {
+ 
+  /**  流程分类id */
+   private String flowClassId;
+  /**  用户id */
+   private String userId;
+  /**  用户名 */
+   private String userName;
+  /**  用户编码 */
+   private String userCode;
+  /**  头像 */
+   private String profileIcon;
+   //权限列表
+   List<SysFlowClassRuleEntity> ruleList;
+    public String getFlowClassId() {
+        return flowClassId;
+    }
+
+    public void setFlowClassId(String flowClassId) {
+        this.flowClassId = flowClassId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserCode() {
+        return userCode;
+    }
+
+    public void setUserCode(String userCode) {
+        this.userCode = userCode;
+    }
+
+    public String getProfileIcon() {
+        return profileIcon;
+    }
+
+    public void setProfileIcon(String profileIcon) {
+        this.profileIcon = profileIcon;
+    }
+
+    public List<SysFlowClassRuleEntity> getRuleList() {
+        return ruleList;
+    }
+
+    public void setRuleList(List<SysFlowClassRuleEntity> ruleList) {
+        this.ruleList = ruleList;
+    }
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.xml
new file mode 100644
index 00000000..8ef807fe
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowClassRuleEntity.xml
@@ -0,0 +1,247 @@
+<?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.sys.flow.dao.impl.SysFlowClassRuleDaoImpl">
+
+    <resultMap id="get-SysFlowClassRuleEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+        <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+        <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+        <result property="sts" column="sts" jdbcType="VARCHAR"/>
+        <result property="flowClassId" column="flow_class_id" jdbcType="VARCHAR"/>
+        <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+        <result property="userCode" column="user_code" jdbcType="VARCHAR"/>
+        <result property="profileIcon" column="profile_icon" jdbcType="VARCHAR"/>
+    </resultMap>
+    <!-- 查询的字段-->
+    <sql id="SysFlowClassRuleEntity_Base_Column_List">
+        id
+        ,create_user_id
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,flow_class_id 
+        ,user_id 
+        ,user_name 
+        ,user_code 
+        ,profile_icon
+    </sql>
+    <!-- 查询 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-SysFlowClassRuleEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        select
+        <include refid="SysFlowClassRuleEntity_Base_Column_List"/>
+        from sys_flow_class_rule
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="flowClassId != null and flowClassId != ''">and flow_class_id = #{flowClassId}</if>
+            <if test="userId != null and userId != ''">and user_id = #{userId}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="userCode != null and userCode != ''">and user_code = #{userCode}</if>
+            <if test="profileIcon != null and profileIcon != ''">and profile_icon = #{profileIcon}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询符合条件的数量 -->
+    <select id="entity_count" resultType="Integer"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        select count(1) from sys_flow_class_rule
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="flowClassId != null and flowClassId != ''">and flow_class_id = #{flowClassId}</if>
+            <if test="userId != null and userId != ''">and user_id = #{userId}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="userCode != null and userCode != ''">and user_code = #{userCode}</if>
+            <if test="profileIcon != null and profileIcon != ''">and profile_icon = #{profileIcon}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+    <select id="entity_list_like" resultMap="get-SysFlowClassRuleEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        select
+        <include refid="SysFlowClassRuleEntity_Base_Column_List"/>
+        from sys_flow_class_rule
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id like concat('%',#{id},'%')</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id like
+                concat('%',#{create_user_id},'%')
+            </if>
+            <if test="create_time != null">and create_time like concat('%',#{create_time},'%')</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id like
+                concat('%',#{modify_user_id},'%')
+            </if>
+            <if test="modify_time != null">and modify_time like concat('%',#{modify_time},'%')</if>
+            <if test="sts != null and sts != ''">and sts like concat('%',#{sts},'%')</if>
+            <if test="flowClassId != null and flowClassId != ''">and flow_class_id like concat('%',#{flowClassId},'%')
+            </if>
+            <if test="userId != null and userId != ''">and user_id like concat('%',#{userId},'%')</if>
+            <if test="userName != null and userName != ''">and user_name like concat('%',#{userName},'%')</if>
+            <if test="userCode != null and userCode != ''">and user_code like concat('%',#{userCode},'%')</if>
+            <if test="profileIcon != null and profileIcon != ''">and profile_icon like concat('%',#{profileIcon},'%')
+            </if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询列表 字段采用or格式 -->
+    <select id="SysFlowClassRuleentity_list_or" resultMap="get-SysFlowClassRuleEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        select
+        <include refid="SysFlowClassRuleEntity_Base_Column_List"/>
+        from sys_flow_class_rule
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">or id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">or create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">or create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">or modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">or modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">or sts = #{sts}</if>
+            <if test="flowClassId != null and flowClassId != ''">or flow_class_id = #{flowClassId}</if>
+            <if test="userId != null and userId != ''">or user_id = #{userId}</if>
+            <if test="userName != null and userName != ''">or user_name = #{userName}</if>
+            <if test="userCode != null and userCode != ''">or user_code = #{userCode}</if>
+            <if test="profileIcon != null and profileIcon != ''">or profile_icon = #{profileIcon}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString()  ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!--新增所有列-->
+    <insert id="entity_insert" parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity" keyProperty="id"
+            useGeneratedKeys="true">
+        insert into sys_flow_class_rule(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">id ,</if>
+            <if test="create_user_id != null and create_user_id != ''">create_user_id ,</if>
+            <if test="create_time != null">create_time ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id ,</if>
+            <if test="modify_time != null">modify_time ,</if>
+            <if test="sts != null and sts != ''">sts ,</if>
+            <if test="flowClassId != null and flowClassId != ''">flow_class_id ,</if>
+            <if test="userId != null and userId != ''">user_id ,</if>
+            <if test="userName != null and userName != ''">user_name ,</if>
+            <if test="userCode != null and userCode != ''">user_code ,</if>
+            <if test="profileIcon != null and profileIcon != ''">profile_icon ,</if>
+            <if test="sorts == null ">sorts,</if>
+            <if test="sts == null ">sts,</if>
+        </trim>
+        )values(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''">#{create_user_id} ,</if>
+            <if test="create_time != null">#{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">#{modify_user_id} ,</if>
+            <if test="modify_time != null">#{modify_time} ,</if>
+            <if test="sts != null and sts != ''">#{sts} ,</if>
+            <if test="flowClassId != null and flowClassId != ''">#{flowClassId} ,</if>
+            <if test="userId != null and userId != ''">#{userId} ,</if>
+            <if test="userName != null and userName != ''">#{userName} ,</if>
+            <if test="userCode != null and userCode != ''">#{userCode} ,</if>
+            <if test="profileIcon != null and profileIcon != ''">#{profileIcon} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_class_rule a WHERE a.sts = 'Y' ),1),</if>
+            <if test="sts == null ">'Y',</if>
+        </trim>
+        )
+    </insert>
+    <!-- 批量新增 -->
+    <insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_flow_class_rule(create_user_id, create_time, modify_user_id, modify_time, sts, flow_class_id,
+        user_id, user_name, user_code, profile_icon, sts)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.flowClassId},#{entity.userId},#{entity.userName},#{entity.userCode},#{entity.profileIcon},
+            'Y')
+        </foreach>
+    </insert>
+    <!-- 批量新增或者修改-->
+    <insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_flow_class_rule(create_user_id, create_time, modify_user_id, modify_time, sts, flow_class_id,
+        user_id, user_name, user_code, profile_icon)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.flowClassId},#{entity.userId},#{entity.userName},#{entity.userCode},#{entity.profileIcon})
+        </foreach>
+        on duplicate key update
+        create_user_id = values(create_user_id),
+        create_time = values(create_time),
+        modify_user_id = values(modify_user_id),
+        modify_time = values(modify_time),
+        sts = values(sts),
+        flow_class_id = values(flow_class_id),
+        user_id = values(user_id),
+        user_name = values(user_name),
+        user_code = values(user_code),
+        profile_icon = values(profile_icon)
+    </insert>
+    <!--通过主键修改方法-->
+    <update id="entity_update" parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        update sys_flow_class_rule set
+        <trim suffix="" suffixOverrides=",">
+            <if test="create_user_id != null and create_user_id != ''">create_user_id = #{create_user_id},</if>
+            <if test="create_time != null">create_time = #{create_time},</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id = #{modify_user_id},</if>
+            <if test="modify_time != null">modify_time = #{modify_time},</if>
+            <if test="sts != null and sts != ''">sts = #{sts},</if>
+            <if test="flowClassId != null and flowClassId != ''">flow_class_id = #{flowClassId},</if>
+            <if test="userId != null and userId != ''">user_id = #{userId},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="userCode != null and userCode != ''">user_code = #{userCode},</if>
+            <if test="profileIcon != null and profileIcon != ''">profile_icon = #{profileIcon},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 逻辑删除 -->
+    <update id="entity_logicDelete" parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        update sys_flow_class_rule
+        set sts= 'N',
+            modify_time = #{modify_time},
+            modify_user_id = #{modify_user_id}
+        where id = #{id}
+    </update>
+    <!-- 多条件逻辑删除 -->
+    <update id="entity_logicDelete_Multi_Condition"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity">
+        update sys_flow_class_rule set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="flowClassId != null and flowClassId != ''">and flow_class_id = #{flowClassId}</if>
+            <if test="userId != null and userId != ''">and user_id = #{userId}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="userCode != null and userCode != ''">and user_code = #{userCode}</if>
+            <if test="profileIcon != null and profileIcon != ''">and profile_icon = #{profileIcon}</if>
+            and sts='Y'
+        </trim>
+    </update>
+    <!--通过主键删除-->
+    <delete id="entity_delete">
+        delete
+        from sys_flow_class_rule
+        where id = #{id}
+    </delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.java
new file mode 100644
index 00000000..fe3b4ce1
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.java
@@ -0,0 +1,92 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 流程主表;流程就是数环通的Linkup(SysFlow)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:23
+ */
+public class SysFlowEntity extends BaseEntity {
+ 
+  /**  流程名称 */
+   private String name;
+  /**  流程分类id */
+   private String classId;
+   private String className;
+  /**  触发方式id */
+   private String triggerModeId;
+   private String triggerModeName;
+  /**  应用组id */
+   private String nifiGroupId;
+  /**  流程描述 */
+   private String description;
+
+   //状态, 启动/停止
+   private String status;
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    public String getTriggerModeId() {
+        return triggerModeId;
+    }
+
+    public void setTriggerModeId(String triggerModeId) {
+        this.triggerModeId = triggerModeId;
+    }
+
+    public String getNifiGroupId() {
+        return nifiGroupId;
+    }
+
+    public void setNifiGroupId(String nifiGroupId) {
+        this.nifiGroupId = nifiGroupId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public String getTriggerModeName() {
+        return triggerModeName;
+    }
+
+    public void setTriggerModeName(String triggerModeName) {
+        this.triggerModeName = triggerModeName;
+    }
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.xml
new file mode 100644
index 00000000..fb84024c
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowEntity.xml
@@ -0,0 +1,241 @@
+<?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.sys.flow.dao.impl.SysFlowDaoImpl">
+
+    <resultMap id="get-SysFlowEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="name" column="name" jdbcType="VARCHAR"/>
+           <result property="status" column="status" jdbcType="VARCHAR"/>
+           <result property="classId" column="class_id" jdbcType="VARCHAR"/>
+           <result property="className" column="className" jdbcType="VARCHAR"/>
+           <result property="triggerModeId" column="trigger_mode_id" jdbcType="VARCHAR"/>
+           <result property="nifiGroupId" column="nifi_group_id" jdbcType="VARCHAR"/>
+           <result property="description" column="description" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowEntity_Base_Column_List">
+        sf.id
+       ,sf.create_user_id
+        ,sf.create_time
+        ,sf.modify_user_id
+        ,sf.modify_time
+        ,sf.sts
+        ,sf.name
+        ,sf.status
+        ,sf.class_id
+        ,sfc.name as className
+        ,sf.trigger_mode_id
+        ,sf.nifi_group_id
+        ,sf.description
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity">
+    select
+    <include refid="SysFlowEntity_Base_Column_List" />
+    from sys_flow sf
+    left join sys_flow_class sfc on sfc.id = sf.class_id
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and sf.id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and sf.create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and sf.create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and sf.modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and sf.modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sf.sts = #{sts} </if>
+            <if test="name != null and name != ''"> and sf.name = #{name} </if>
+            <if test="status != null and status != ''"> and sf.status = #{status} </if>
+            <if test="classId != null and classId != ''"> and sf.class_id = #{classId} </if>
+            <if test="triggerModeId != null and triggerModeId != ''"> and sf.trigger_mode_id = #{triggerModeId} </if>
+            <if test="nifiGroupId != null and nifiGroupId != ''"> and sf.nifi_group_id = #{nifiGroupId} </if>
+            <if test="description != null and description != ''"> and sf.description = #{description} </if>
+            and sf.sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sf.sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity">
+        select  count(1)   from sys_flow
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="status != null and status != ''"> and status = #{status} </if>
+            <if test="classId != null and classId != ''"> and class_id = #{classId} </if>
+            <if test="triggerModeId != null and triggerModeId != ''"> and trigger_mode_id = #{triggerModeId} </if>
+            <if test="nifiGroupId != null and nifiGroupId != ''"> and nifi_group_id = #{nifiGroupId} </if>
+            <if test="description != null and description != ''"> and description = #{description} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity">
+    select
+    <include refid="SysFlowEntity_Base_Column_List" />
+    from sys_flow sf
+    left join sys_flow_class sfc on sfc.id = sf.class_id
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and sf.id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and sf.create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and sf.create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and sf.modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and sf.modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sf.sts like concat('%',#{sts},'%') </if>
+            <if test="name != null and name != ''"> and sf.name like concat('%',#{name},'%') </if>
+            <if test="status != null and status != ''"> and sf.status like concat('%',#{status},'%') </if>
+            <if test="classId != null and classId != ''"> and sf.class_id like concat('%',#{classId},'%') </if>
+            <if test="triggerModeId != null and triggerModeId != ''"> and sf.trigger_mode_id like concat('%',#{triggerModeId},'%') </if>
+            <if test="nifiGroupId != null and nifiGroupId != ''"> and sf.nifi_group_id like concat('%',#{nifiGroupId},'%') </if>
+            <if test="description != null and description != ''"> and sf.description like concat('%',#{description},'%') </if>
+            and sf.sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sf.sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowentity_list_or" resultMap="get-SysFlowEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity">
+    select
+    <include refid="SysFlowEntity_Base_Column_List" />
+    from sys_flow sf
+    left join sys_flow_class sfc on sfc.id = sf.class_id
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or sf.id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or sf.create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or sf.create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or sf.modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or sf.modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sf.sts = #{sts} </if>
+             <if test="name != null and name != ''"> or sf.name = #{name} </if>
+             <if test="status != null and status != ''"> or sf.status = #{status} </if>
+             <if test="classId != null and classId != ''"> or sf.class_id = #{classId} </if>
+             <if test="triggerModeId != null and triggerModeId != ''"> or sf.trigger_mode_id = #{triggerModeId} </if>
+             <if test="nifiGroupId != null and nifiGroupId != ''"> or sf.nifi_group_id = #{nifiGroupId} </if>
+             <if test="description != null and description != ''"> or sf.description = #{description} </if>
+            and sf.sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow(
+    <trim suffix="" suffixOverrides=",">
+        <if test="id != null and id != ''">id ,</if>
+        <if test="create_user_id != null and create_user_id != ''">create_user_id ,</if>
+        <if test="create_time != null">create_time ,</if>
+        <if test="modify_user_id != null and modify_user_id != ''">modify_user_id ,</if>
+        <if test="modify_time != null">modify_time ,</if>
+        <if test="sts != null and sts != ''">sts ,</if>
+        <if test="name != null and name != ''">name ,</if>
+        <if test="status != null and status != ''">status ,</if>
+        <if test="classId != null and classId != ''">class_id ,</if>
+        <if test="triggerModeId != null and triggerModeId != ''">trigger_mode_id ,</if>
+        <if test="nifiGroupId != null and nifiGroupId != ''">nifi_group_id ,</if>
+        <if test="description != null and description != ''">description ,</if>
+        <if test="sorts == null ">sorts,</if>
+        <if test="sts == null ">sts,</if>
+    </trim>
+    )values(
+    <trim suffix="" suffixOverrides=",">
+        <if test="id != null and id != ''">#{id} ,</if>
+        <if test="create_user_id != null and create_user_id != ''">#{create_user_id} ,</if>
+        <if test="create_time != null">#{create_time} ,</if>
+        <if test="modify_user_id != null and modify_user_id != ''">#{modify_user_id} ,</if>
+        <if test="modify_time != null">#{modify_time} ,</if>
+        <if test="sts != null and sts != ''">#{sts} ,</if>
+        <if test="name != null and name != ''">#{name} ,</if>
+        <if test="status != null and status != ''">#{status} ,</if>
+        <if test="classId != null and classId != ''">#{classId} ,</if>
+        <if test="triggerModeId != null and triggerModeId != ''">#{triggerModeId} ,</if>
+        <if test="nifiGroupId != null and nifiGroupId != ''">#{nifiGroupId} ,</if>
+        <if test="description != null and description != ''">#{description} ,</if>
+        <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow a WHERE a.sts = 'Y' ),1),
+        </if>
+        <if test="sts == null ">'Y',</if>
+    </trim>
+    )
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow(create_user_id, create_time, modify_user_id, modify_time, sts, name,status, class_id, trigger_mode_id, nifi_group_id, description,  sts)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},${entity.status},#{entity.classId},#{entity.triggerModeId},#{entity.nifiGroupId},#{entity.description}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow(create_user_id, create_time, modify_user_id, modify_time, sts, name, status,class_id, trigger_mode_id, nifi_group_id, description)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},#{entity.status},#{entity.classId},#{entity.triggerModeId},#{entity.nifiGroupId},#{entity.description})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    name = values(name),
+    class_id = values(class_id),
+    trigger_mode_id = values(trigger_mode_id),
+    nifi_group_id = values(nifi_group_id),
+    description = values(description)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity" >
+update sys_flow  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="name != null and name != ''"> name = #{name},</if>
+  <if test="status != null and status != ''"> status = #{status},</if>
+  <if test="classId != null and classId != ''"> class_id = #{classId},</if>
+  <if test="triggerModeId != null and triggerModeId != ''"> trigger_mode_id = #{triggerModeId},</if>
+  <if test="nifiGroupId != null and nifiGroupId != ''"> nifi_group_id = #{nifiGroupId},</if>
+  <if test="description != null and description != ''"> description = #{description},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity" >
+update sys_flow  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowEntity" >
+update sys_flow  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="classId != null and classId != ''"> and class_id = #{classId} </if>
+            <if test="triggerModeId != null and triggerModeId != ''"> and trigger_mode_id = #{triggerModeId} </if>
+            <if test="nifiGroupId != null and nifiGroupId != ''"> and nifi_group_id = #{nifiGroupId} </if>
+            <if test="description != null and description != ''"> and description = #{description} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.java
new file mode 100644
index 00000000..1935fe3a
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.java
@@ -0,0 +1,66 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * nifi常量(SysFlowNifiConstant)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public class SysFlowNifiConstantEntity extends BaseEntity {
+ 
+  /**  键 */
+   private String nifiKey;
+  /**  值 */
+   private String nifiValue;
+  /**  显示值 */
+   private String showValue;
+  /**  描述 */
+   private String description;
+  /**  分类 */
+   private String type;
+
+
+    public String getNifiKey() {
+        return nifiKey;
+    }
+
+    public void setNifiKey(String nifiKey) {
+        this.nifiKey = nifiKey;
+    }
+
+    public String getNifiValue() {
+        return nifiValue;
+    }
+
+    public void setNifiValue(String nifiValue) {
+        this.nifiValue = nifiValue;
+    }
+
+    public String getShowValue() {
+        return showValue;
+    }
+
+    public void setShowValue(String showValue) {
+        this.showValue = showValue;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.xml
new file mode 100644
index 00000000..08a53105
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowNifiConstantEntity.xml
@@ -0,0 +1,226 @@
+<?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.sys.flow.dao.impl.SysFlowNifiConstantDaoImpl">
+
+    <resultMap id="get-SysFlowNifiConstantEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="nifiKey" column="nifi_key" jdbcType="VARCHAR"/>
+           <result property="nifiValue" column="nifi_value" jdbcType="VARCHAR"/>
+           <result property="showValue" column="show_value" jdbcType="VARCHAR"/>
+           <result property="description" column="description" jdbcType="VARCHAR"/>
+           <result property="type" column="type" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowNifiConstantEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,nifi_key
+        ,nifi_value
+        ,show_value 
+        ,description 
+        ,type 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowNifiConstantEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity">
+    select
+    <include refid="SysFlowNifiConstantEntity_Base_Column_List" />
+    from sys_flow_nifi_constant
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="nifiKey != null and nifiKey != ''"> and nifi_key = #{nifiKey} </if>
+            <if test="nifiValue != null and value != ''"> and nifi_value = #{nifiValue} </if>
+            <if test="showValue != null and showValue != ''"> and show_value = #{showValue} </if>
+            <if test="description != null and description != ''"> and description = #{description} </if>
+            <if test="type != null and type != ''"> and type = #{type} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity">
+        select  count(1)   from sys_flow_nifi_constant
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="nifiKey != null and nifiKey != ''"> and nifi_key = #{nifiKey} </if>
+            <if test="nifiValue != null and nifiValue != ''"> and nifi_value = #{nifiValue} </if>
+            <if test="showValue != null and showValue != ''"> and show_value = #{showValue} </if>
+            <if test="description != null and description != ''"> and description = #{description} </if>
+            <if test="type != null and type != ''"> and type = #{type} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowNifiConstantEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity">
+    select
+    <include refid="SysFlowNifiConstantEntity_Base_Column_List" />
+    from sys_flow_nifi_constant
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="nifiKey != null and nifiKey != ''"> and nifi_key like concat('%',#{nifiKey},'%') </if>
+            <if test="nifiValue != null and nifiValue != ''"> and nifi_value like concat('%',#{nifiValue},'%') </if>
+            <if test="showValue != null and showValue != ''"> and show_value like concat('%',#{showValue},'%') </if>
+            <if test="description != null and description != ''"> and description like concat('%',#{description},'%') </if>
+            <if test="type != null and type != ''"> and type like concat('%',#{type},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowNifiConstantentity_list_or" resultMap="get-SysFlowNifiConstantEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity">
+    select
+    <include refid="SysFlowNifiConstantEntity_Base_Column_List" />
+    from sys_flow_nifi_constant
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="nifiKey != null and nifiKey != ''"> or nifi_key = #{nifiKey} </if>
+             <if test="nifiValue != null and nifiValue != ''"> or nifi_value = #{nifiValue} </if>
+             <if test="showValue != null and showValue != ''"> or show_value = #{showValue} </if>
+             <if test="description != null and description != ''"> or description = #{description} </if>
+             <if test="type != null and type != ''"> or type = #{type} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_nifi_constant(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="nifiKey != null and nifiKey != ''"> nifi_key , </if>
+            <if test="nifiValue != null and nifiValue != ''"> nifi_value , </if>
+            <if test="showValue != null and showValue != ''"> show_value , </if>
+            <if test="description != null and description != ''"> description , </if>
+            <if test="type != null and type != ''"> type , </if>
+            <if test="sorts == null ">sorts,</if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="nifiKey != null and nifiKey != ''"> #{nifiKey} ,</if>
+            <if test="nifiValue != null and nifiValue != ''"> #{nifiValue} ,</if>
+            <if test="showValue != null and showValue != ''"> #{showValue} ,</if>
+            <if test="description != null and description != ''"> #{description} ,</if>
+            <if test="type != null and type != ''"> #{type} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_nifi_constant a WHERE a.sts = 'Y' ),1),</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_nifi_constant(create_user_id, create_time, modify_user_id, modify_time, sts, nifi_key, nifi_value, show_value, description, type,  sts)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.nifiKey},#{entity.nifiValue},#{entity.showValue},#{entity.description},#{entity.type}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_nifi_constant(create_user_id, create_time, modify_user_id, modify_time, sts, nifi_key, nifi_value, show_value, description, type)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.nifiKey},#{entity.nifiValue},#{entity.showValue},#{entity.description},#{entity.type})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    nifi_key = values(nifiKey),
+    nifi_value = values(nifiValue),
+    show_value = values(show_value),
+    description = values(description),
+    type = values(type)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity" >
+update sys_flow_nifi_constant  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="nifiKey != null and nifiKey != ''"> nifi_key = #{nifiKey},</if>
+  <if test="nifiValue != null and nifiValue != ''"> nifi_value = #{nifiValue},</if>
+  <if test="showValue != null and showValue != ''"> show_value = #{showValue},</if>
+  <if test="description != null and description != ''"> description = #{description},</if>
+  <if test="type != null and type != ''"> type = #{type},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity" >
+update sys_flow_nifi_constant  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity" >
+update sys_flow_nifi_constant  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="nifiKey != null and nifiKey != ''"> andnifi_ key = #{nifiKey} </if>
+            <if test="nifiValue != null and nifiValue != ''"> and nifi_value = #{nifiValue} </if>
+            <if test="showValue != null and showValue != ''"> and show_value = #{showValue} </if>
+            <if test="description != null and description != ''"> and description = #{description} </if>
+            <if test="type != null and type != ''"> and type = #{type} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_nifi_constant where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.java
new file mode 100644
index 00000000..246f11f4
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.java
@@ -0,0 +1,126 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 流程步骤账户表(SysFlowStepAccount)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public class SysFlowStepAccountEntity extends BaseEntity {
+ 
+  /**  账户名称 */
+   private String name;
+  /**  ip地址 */
+   private String ipAddress;
+  /**  端口 */
+   private String port;
+  /**  数据库名称 */
+   private String dbName;
+  /**  用户名 */
+   private String userName;
+  /**  密码 */
+   private String password;
+  /**  数据库类型 */
+   private String dbType;
+  /**  应用key */
+   private String appKey;
+  /**  应用密钥 */
+   private String appSecret;
+  /**  企业id */
+   private String corpid;
+  /**  应用id */
+   private String agentid;
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getDbName() {
+        return dbName;
+    }
+
+    public void setDbName(String dbName) {
+        this.dbName = dbName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getDbType() {
+        return dbType;
+    }
+
+    public void setDbType(String dbType) {
+        this.dbType = dbType;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public String getCorpid() {
+        return corpid;
+    }
+
+    public void setCorpid(String corpid) {
+        this.corpid = corpid;
+    }
+
+    public String getAgentid() {
+        return agentid;
+    }
+
+    public void setAgentid(String agentid) {
+        this.agentid = agentid;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.xml
new file mode 100644
index 00000000..acf594f0
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepAccountEntity.xml
@@ -0,0 +1,292 @@
+<?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.sys.flow.dao.impl.SysFlowStepAccountDaoImpl">
+
+    <resultMap id="get-SysFlowStepAccountEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="name" column="name" jdbcType="VARCHAR"/>
+           <result property="ipAddress" column="ip_address" jdbcType="VARCHAR"/>
+           <result property="port" column="port" jdbcType="VARCHAR"/>
+           <result property="dbName" column="db_name" jdbcType="VARCHAR"/>
+           <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+           <result property="password" column="password" jdbcType="VARCHAR"/>
+           <result property="dbType" column="db_type" jdbcType="VARCHAR"/>
+           <result property="appKey" column="app_key" jdbcType="VARCHAR"/>
+           <result property="appSecret" column="app_secret" jdbcType="VARCHAR"/>
+           <result property="corpid" column="corpId" jdbcType="VARCHAR"/>
+           <result property="agentid" column="agentId" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowStepAccountEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,name 
+        ,ip_address 
+        ,port 
+        ,db_name 
+        ,user_name 
+        ,password 
+        ,db_type 
+        ,app_key 
+        ,app_secret 
+        ,corpId 
+        ,agentId 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowStepAccountEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity">
+    select
+    <include refid="SysFlowStepAccountEntity_Base_Column_List" />
+    from sys_flow_step_account
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="ipAddress != null and ipAddress != ''"> and ip_address = #{ipAddress} </if>
+            <if test="port != null and port != ''"> and port = #{port} </if>
+            <if test="dbName != null and dbName != ''"> and db_name = #{dbName} </if>
+            <if test="userName != null and userName != ''"> and user_name = #{userName} </if>
+            <if test="password != null and password != ''"> and password = #{password} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="appKey != null and appKey != ''"> and app_key = #{appKey} </if>
+            <if test="appSecret != null and appSecret != ''"> and app_secret = #{appSecret} </if>
+            <if test="corpid != null and corpid != ''"> and corpId = #{corpid} </if>
+            <if test="agentid != null and agentid != ''"> and agentId = #{agentid} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity">
+        select  count(1)   from sys_flow_step_account
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="ipAddress != null and ipAddress != ''"> and ip_address = #{ipAddress} </if>
+            <if test="port != null and port != ''"> and port = #{port} </if>
+            <if test="dbName != null and dbName != ''"> and db_name = #{dbName} </if>
+            <if test="userName != null and userName != ''"> and user_name = #{userName} </if>
+            <if test="password != null and password != ''"> and password = #{password} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="appKey != null and appKey != ''"> and app_key = #{appKey} </if>
+            <if test="appSecret != null and appSecret != ''"> and app_secret = #{appSecret} </if>
+            <if test="corpid != null and corpid != ''"> and corpId = #{corpid} </if>
+            <if test="agentid != null and agentid != ''"> and agentId = #{agentid} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowStepAccountEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity">
+    select
+    <include refid="SysFlowStepAccountEntity_Base_Column_List" />
+    from sys_flow_step_account
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="name != null and name != ''"> and name like concat('%',#{name},'%') </if>
+            <if test="ipAddress != null and ipAddress != ''"> and ip_address like concat('%',#{ipAddress},'%') </if>
+            <if test="port != null and port != ''"> and port like concat('%',#{port},'%') </if>
+            <if test="dbName != null and dbName != ''"> and db_name like concat('%',#{dbName},'%') </if>
+            <if test="userName != null and userName != ''"> and user_name like concat('%',#{userName},'%') </if>
+            <if test="password != null and password != ''"> and password like concat('%',#{password},'%') </if>
+            <if test="dbType != null and dbType != ''"> and db_type like concat('%',#{dbType},'%') </if>
+            <if test="appKey != null and appKey != ''"> and app_key like concat('%',#{appKey},'%') </if>
+            <if test="appSecret != null and appSecret != ''"> and app_secret like concat('%',#{appSecret},'%') </if>
+            <if test="corpid != null and corpid != ''"> and corpId like concat('%',#{corpid},'%') </if>
+            <if test="agentid != null and agentid != ''"> and agentId like concat('%',#{agentid},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowStepAccountentity_list_or" resultMap="get-SysFlowStepAccountEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity">
+    select
+    <include refid="SysFlowStepAccountEntity_Base_Column_List" />
+    from sys_flow_step_account
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="name != null and name != ''"> or name = #{name} </if>
+             <if test="ipAddress != null and ipAddress != ''"> or ip_address = #{ipAddress} </if>
+             <if test="port != null and port != ''"> or port = #{port} </if>
+             <if test="dbName != null and dbName != ''"> or db_name = #{dbName} </if>
+             <if test="userName != null and userName != ''"> or user_name = #{userName} </if>
+             <if test="password != null and password != ''"> or password = #{password} </if>
+             <if test="dbType != null and dbType != ''"> or db_type = #{dbType} </if>
+             <if test="appKey != null and appKey != ''"> or app_key = #{appKey} </if>
+             <if test="appSecret != null and appSecret != ''"> or app_secret = #{appSecret} </if>
+             <if test="corpid != null and corpid != ''"> or corpId = #{corpid} </if>
+             <if test="agentid != null and agentid != ''"> or agentId = #{agentid} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_account(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="name != null and name != ''"> name , </if>
+            <if test="ipAddress != null and ipAddress != ''"> ip_address , </if>
+            <if test="port != null and port != ''"> port , </if>
+            <if test="dbName != null and dbName != ''"> db_name , </if>
+            <if test="userName != null and userName != ''"> user_name , </if>
+            <if test="password != null and password != ''"> password , </if>
+            <if test="dbType != null and dbType != ''"> db_type , </if>
+            <if test="appKey != null and appKey != ''"> app_key , </if>
+            <if test="appSecret != null and appSecret != ''"> app_secret , </if>
+            <if test="corpid != null and corpid != ''"> corpId , </if>
+            <if test="agentid != null and agentid != ''"> agentId , </if>
+            <if test="sorts == null ">sorts,</if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="name != null and name != ''"> #{name} ,</if>
+            <if test="ipAddress != null and ipAddress != ''"> #{ipAddress} ,</if>
+            <if test="port != null and port != ''"> #{port} ,</if>
+            <if test="dbName != null and dbName != ''"> #{dbName} ,</if>
+            <if test="userName != null and userName != ''"> #{userName} ,</if>
+            <if test="password != null and password != ''"> #{password} ,</if>
+            <if test="dbType != null and dbType != ''"> #{dbType} ,</if>
+            <if test="appKey != null and appKey != ''"> #{appKey} ,</if>
+            <if test="appSecret != null and appSecret != ''"> #{appSecret} ,</if>
+            <if test="corpid != null and corpid != ''"> #{corpid} ,</if>
+            <if test="agentid != null and agentid != ''"> #{agentid} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_step_account a WHERE a.sts = 'Y' ),1),</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_step_account(create_user_id, create_time, modify_user_id, modify_time, sts, name, ip_address, port, db_name, user_name, password, db_type, app_key, app_secret, corpId, agentId,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},#{entity.ipAddress},#{entity.port},#{entity.dbName},#{entity.userName},#{entity.password},#{entity.dbType},#{entity.appKey},#{entity.appSecret},#{entity.corpid},#{entity.agentid}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_account(create_user_id, create_time, modify_user_id, modify_time, sts, name, ip_address, port, db_name, user_name, password, db_type, app_key, app_secret, corpId, agentId)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.name},#{entity.ipAddress},#{entity.port},#{entity.dbName},#{entity.userName},#{entity.password},#{entity.dbType},#{entity.appKey},#{entity.appSecret},#{entity.corpid},#{entity.agentid})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    name = values(name),
+    ip_address = values(ip_address),
+    port = values(port),
+    db_name = values(db_name),
+    user_name = values(user_name),
+    password = values(password),
+    db_type = values(db_type),
+    app_key = values(app_key),
+    app_secret = values(app_secret),
+    corpId = values(corpId),
+    agentId = values(agentId)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity" >
+update sys_flow_step_account  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="name != null and name != ''"> name = #{name},</if>
+  <if test="ipAddress != null and ipAddress != ''"> ip_address = #{ipAddress},</if>
+  <if test="port != null and port != ''"> port = #{port},</if>
+  <if test="dbName != null and dbName != ''"> db_name = #{dbName},</if>
+  <if test="userName != null and userName != ''"> user_name = #{userName},</if>
+  <if test="password != null and password != ''"> password = #{password},</if>
+  <if test="dbType != null and dbType != ''"> db_type = #{dbType},</if>
+  <if test="appKey != null and appKey != ''"> app_key = #{appKey},</if>
+  <if test="appSecret != null and appSecret != ''"> app_secret = #{appSecret},</if>
+  <if test="corpid != null and corpid != ''"> corpId = #{corpid},</if>
+  <if test="agentid != null and agentid != ''"> agentId = #{agentid},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity" >
+update sys_flow_step_account  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity" >
+update sys_flow_step_account  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="ipAddress != null and ipAddress != ''"> and ip_address = #{ipAddress} </if>
+            <if test="port != null and port != ''"> and port = #{port} </if>
+            <if test="dbName != null and dbName != ''"> and db_name = #{dbName} </if>
+            <if test="userName != null and userName != ''"> and user_name = #{userName} </if>
+            <if test="password != null and password != ''"> and password = #{password} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="appKey != null and appKey != ''"> and app_key = #{appKey} </if>
+            <if test="appSecret != null and appSecret != ''"> and app_secret = #{appSecret} </if>
+            <if test="corpid != null and corpid != ''"> and corpId = #{corpid} </if>
+            <if test="agentid != null and agentid != ''"> and agentId = #{agentid} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_step_account where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.java
new file mode 100644
index 00000000..89e9bcda
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.java
@@ -0,0 +1,126 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 映射信息表体(SysFlowStepConfigB)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public class SysFlowStepConfigBEntity extends BaseEntity {
+ 
+  /**  主表id */
+   private String mainId;
+  /**  流程id */
+   private String flowId;
+  /**  步骤id */
+   private String stepId;
+  /**  是否主键 */
+   private String primaryKeyFlag;
+  /**  字段名 */
+   private String fieldName;
+  /**  字段备注 */
+   private String fieldDescription;
+  /**  字段类型 */
+   private String fieldType;
+  /**  查询条件 */
+   private String whereCondition;
+  /**  源字段名称;适用于插入场景 */
+   private String sourceFieldName;
+  /**  源字段类型;适用于插入场景 */
+   private String sourceFieldType;
+  /**  源字段描述;适用于插入场景 */
+   private String sourceFieldDescription;
+
+
+    public String getMainId() {
+        return mainId;
+    }
+
+    public void setMainId(String mainId) {
+        this.mainId = mainId;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getStepId() {
+        return stepId;
+    }
+
+    public void setStepId(String stepId) {
+        this.stepId = stepId;
+    }
+
+    public String getPrimaryKeyFlag() {
+        return primaryKeyFlag;
+    }
+
+    public void setPrimaryKeyFlag(String primaryKeyFlag) {
+        this.primaryKeyFlag = primaryKeyFlag;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getFieldDescription() {
+        return fieldDescription;
+    }
+
+    public void setFieldDescription(String fieldDescription) {
+        this.fieldDescription = fieldDescription;
+    }
+
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
+
+    public String getWhereCondition() {
+        return whereCondition;
+    }
+
+    public void setWhereCondition(String whereCondition) {
+        this.whereCondition = whereCondition;
+    }
+
+    public String getSourceFieldName() {
+        return sourceFieldName;
+    }
+
+    public void setSourceFieldName(String sourceFieldName) {
+        this.sourceFieldName = sourceFieldName;
+    }
+
+    public String getSourceFieldType() {
+        return sourceFieldType;
+    }
+
+    public void setSourceFieldType(String sourceFieldType) {
+        this.sourceFieldType = sourceFieldType;
+    }
+
+    public String getSourceFieldDescription() {
+        return sourceFieldDescription;
+    }
+
+    public void setSourceFieldDescription(String sourceFieldDescription) {
+        this.sourceFieldDescription = sourceFieldDescription;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.xml
new file mode 100644
index 00000000..0af1386b
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigBEntity.xml
@@ -0,0 +1,292 @@
+<?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.sys.flow.dao.impl.SysFlowStepConfigBDaoImpl">
+
+    <resultMap id="get-SysFlowStepConfigBEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="mainId" column="main_id" jdbcType="VARCHAR"/>
+           <result property="flowId" column="flow_id" jdbcType="VARCHAR"/>
+           <result property="stepId" column="step_id" jdbcType="VARCHAR"/>
+           <result property="primaryKeyFlag" column="primary_key_flag" jdbcType="VARCHAR"/>
+           <result property="fieldName" column="field_name" jdbcType="VARCHAR"/>
+           <result property="fieldDescription" column="field_description" jdbcType="VARCHAR"/>
+           <result property="fieldType" column="field_type" jdbcType="VARCHAR"/>
+           <result property="whereCondition" column="where_condition" jdbcType="VARCHAR"/>
+           <result property="sourceFieldName" column="source_field_name" jdbcType="VARCHAR"/>
+           <result property="sourceFieldType" column="source_field_type" jdbcType="VARCHAR"/>
+           <result property="sourceFieldDescription" column="source_field_description" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowStepConfigBEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,main_id 
+        ,flow_id 
+        ,step_id 
+        ,primary_key_flag 
+        ,field_name 
+        ,field_description 
+        ,field_type 
+        ,where_condition 
+        ,source_field_name 
+        ,source_field_type 
+        ,source_field_description 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowStepConfigBEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity">
+    select
+    <include refid="SysFlowStepConfigBEntity_Base_Column_List" />
+    from sys_flow_step_config_b
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="mainId != null and mainId != ''"> and main_id = #{mainId} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> and primary_key_flag = #{primaryKeyFlag} </if>
+            <if test="fieldName != null and fieldName != ''"> and field_name = #{fieldName} </if>
+            <if test="fieldDescription != null and fieldDescription != ''"> and field_description = #{fieldDescription} </if>
+            <if test="fieldType != null and fieldType != ''"> and field_type = #{fieldType} </if>
+            <if test="whereCondition != null and whereCondition != ''"> and where_condition = #{whereCondition} </if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> and source_field_name = #{sourceFieldName} </if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> and source_field_type = #{sourceFieldType} </if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> and source_field_description = #{sourceFieldDescription} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity">
+        select  count(1)   from sys_flow_step_config_b
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="mainId != null and mainId != ''"> and main_id = #{mainId} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> and primary_key_flag = #{primaryKeyFlag} </if>
+            <if test="fieldName != null and fieldName != ''"> and field_name = #{fieldName} </if>
+            <if test="fieldDescription != null and fieldDescription != ''"> and field_description = #{fieldDescription} </if>
+            <if test="fieldType != null and fieldType != ''"> and field_type = #{fieldType} </if>
+            <if test="whereCondition != null and whereCondition != ''"> and where_condition = #{whereCondition} </if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> and source_field_name = #{sourceFieldName} </if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> and source_field_type = #{sourceFieldType} </if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> and source_field_description = #{sourceFieldDescription} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowStepConfigBEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity">
+    select
+    <include refid="SysFlowStepConfigBEntity_Base_Column_List" />
+    from sys_flow_step_config_b
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="mainId != null and mainId != ''"> and main_id like concat('%',#{mainId},'%') </if>
+            <if test="flowId != null and flowId != ''"> and flow_id like concat('%',#{flowId},'%') </if>
+            <if test="stepId != null and stepId != ''"> and step_id like concat('%',#{stepId},'%') </if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> and primary_key_flag like concat('%',#{primaryKeyFlag},'%') </if>
+            <if test="fieldName != null and fieldName != ''"> and field_name like concat('%',#{fieldName},'%') </if>
+            <if test="fieldDescription != null and fieldDescription != ''"> and field_description like concat('%',#{fieldDescription},'%') </if>
+            <if test="fieldType != null and fieldType != ''"> and field_type like concat('%',#{fieldType},'%') </if>
+            <if test="whereCondition != null and whereCondition != ''"> and where_condition like concat('%',#{whereCondition},'%') </if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> and source_field_name like concat('%',#{sourceFieldName},'%') </if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> and source_field_type like concat('%',#{sourceFieldType},'%') </if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> and source_field_description like concat('%',#{sourceFieldDescription},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowStepConfigBentity_list_or" resultMap="get-SysFlowStepConfigBEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity">
+    select
+    <include refid="SysFlowStepConfigBEntity_Base_Column_List" />
+    from sys_flow_step_config_b
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="mainId != null and mainId != ''"> or main_id = #{mainId} </if>
+             <if test="flowId != null and flowId != ''"> or flow_id = #{flowId} </if>
+             <if test="stepId != null and stepId != ''"> or step_id = #{stepId} </if>
+             <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> or primary_key_flag = #{primaryKeyFlag} </if>
+             <if test="fieldName != null and fieldName != ''"> or field_name = #{fieldName} </if>
+             <if test="fieldDescription != null and fieldDescription != ''"> or field_description = #{fieldDescription} </if>
+             <if test="fieldType != null and fieldType != ''"> or field_type = #{fieldType} </if>
+             <if test="whereCondition != null and whereCondition != ''"> or where_condition = #{whereCondition} </if>
+             <if test="sourceFieldName != null and sourceFieldName != ''"> or source_field_name = #{sourceFieldName} </if>
+             <if test="sourceFieldType != null and sourceFieldType != ''"> or source_field_type = #{sourceFieldType} </if>
+             <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> or source_field_description = #{sourceFieldDescription} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_config_b(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="mainId != null and mainId != ''"> main_id , </if>
+            <if test="flowId != null and flowId != ''"> flow_id , </if>
+            <if test="stepId != null and stepId != ''"> step_id , </if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> primary_key_flag , </if>
+            <if test="fieldName != null and fieldName != ''"> field_name , </if>
+            <if test="fieldDescription != null and fieldDescription != ''"> field_description , </if>
+            <if test="fieldType != null and fieldType != ''"> field_type , </if>
+            <if test="whereCondition != null and whereCondition != ''"> where_condition , </if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> source_field_name , </if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> source_field_type , </if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> source_field_description , </if>
+            <if test="sorts == null ">sorts,</if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="mainId != null and mainId != ''"> #{mainId} ,</if>
+            <if test="flowId != null and flowId != ''"> #{flowId} ,</if>
+            <if test="stepId != null and stepId != ''"> #{stepId} ,</if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> #{primaryKeyFlag} ,</if>
+            <if test="fieldName != null and fieldName != ''"> #{fieldName} ,</if>
+            <if test="fieldDescription != null and fieldDescription != ''"> #{fieldDescription} ,</if>
+            <if test="fieldType != null and fieldType != ''"> #{fieldType} ,</if>
+            <if test="whereCondition != null and whereCondition != ''"> #{whereCondition} ,</if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> #{sourceFieldName} ,</if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> #{sourceFieldType} ,</if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> #{sourceFieldDescription} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_step_config_b a WHERE a.sts = 'Y' ),1),</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_step_config_b(create_user_id, create_time, modify_user_id, modify_time, sts, main_id, flow_id, step_id, primary_key_flag, field_name, field_description, field_type, where_condition, source_field_name, source_field_type, source_field_description,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.mainId},#{entity.flowId},#{entity.stepId},#{entity.primaryKeyFlag},#{entity.fieldName},#{entity.fieldDescription},#{entity.fieldType},#{entity.whereCondition},#{entity.sourceFieldName},#{entity.sourceFieldType},#{entity.sourceFieldDescription}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_config_b(create_user_id, create_time, modify_user_id, modify_time, sts, main_id, flow_id, step_id, primary_key_flag, field_name, field_description, field_type, where_condition, source_field_name, source_field_type, source_field_description)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.mainId},#{entity.flowId},#{entity.stepId},#{entity.primaryKeyFlag},#{entity.fieldName},#{entity.fieldDescription},#{entity.fieldType},#{entity.whereCondition},#{entity.sourceFieldName},#{entity.sourceFieldType},#{entity.sourceFieldDescription})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    main_id = values(main_id),
+    flow_id = values(flow_id),
+    step_id = values(step_id),
+    primary_key_flag = values(primary_key_flag),
+    field_name = values(field_name),
+    field_description = values(field_description),
+    field_type = values(field_type),
+    where_condition = values(where_condition),
+    source_field_name = values(source_field_name),
+    source_field_type = values(source_field_type),
+    source_field_description = values(source_field_description)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity" >
+update sys_flow_step_config_b  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="mainId != null and mainId != ''"> main_id = #{mainId},</if>
+  <if test="flowId != null and flowId != ''"> flow_id = #{flowId},</if>
+  <if test="stepId != null and stepId != ''"> step_id = #{stepId},</if>
+  <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> primary_key_flag = #{primaryKeyFlag},</if>
+  <if test="fieldName != null and fieldName != ''"> field_name = #{fieldName},</if>
+  <if test="fieldDescription != null and fieldDescription != ''"> field_description = #{fieldDescription},</if>
+  <if test="fieldType != null and fieldType != ''"> field_type = #{fieldType},</if>
+  <if test="whereCondition != null and whereCondition != ''"> where_condition = #{whereCondition},</if>
+  <if test="sourceFieldName != null and sourceFieldName != ''"> source_field_name = #{sourceFieldName},</if>
+  <if test="sourceFieldType != null and sourceFieldType != ''"> source_field_type = #{sourceFieldType},</if>
+  <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> source_field_description = #{sourceFieldDescription},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity" >
+update sys_flow_step_config_b  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity" >
+update sys_flow_step_config_b  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="mainId != null and mainId != ''"> and main_id = #{mainId} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="primaryKeyFlag != null and primaryKeyFlag != ''"> and primary_key_flag = #{primaryKeyFlag} </if>
+            <if test="fieldName != null and fieldName != ''"> and field_name = #{fieldName} </if>
+            <if test="fieldDescription != null and fieldDescription != ''"> and field_description = #{fieldDescription} </if>
+            <if test="fieldType != null and fieldType != ''"> and field_type = #{fieldType} </if>
+            <if test="whereCondition != null and whereCondition != ''"> and where_condition = #{whereCondition} </if>
+            <if test="sourceFieldName != null and sourceFieldName != ''"> and source_field_name = #{sourceFieldName} </if>
+            <if test="sourceFieldType != null and sourceFieldType != ''"> and source_field_type = #{sourceFieldType} </if>
+            <if test="sourceFieldDescription != null and sourceFieldDescription != ''"> and source_field_description = #{sourceFieldDescription} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_step_config_b where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.java
new file mode 100644
index 00000000..e8e426d9
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.java
@@ -0,0 +1,136 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 映射信息主表(SysFlowStepConfig)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public class SysFlowStepConfigEntity extends BaseEntity {
+ 
+  /**  流程id */
+   private String flowId;
+  /**  步骤id */
+   private String stepId;
+  /**  流程操作步骤配置表id */
+   private String setpConfigId;
+  /**  操作类型 */
+   private String actionName;
+  /**  数据库类型;数据库类型+版本 */
+   private String dbType;
+  /**  表名称 */
+   private String tableName;
+  /**  页码 */
+   private String rowNum;
+  /**  每页条数 */
+   private String pageLimit;
+  /**  增量数据字段;例如ts */
+   private String maxValueField;
+  /**  是否建表 */
+   private String createTableFlag;
+  /**  写入模式;覆盖写入/增量写入 */
+   private String writeType;
+  /**  动态sql语句 */
+   private String sqlStatement;
+
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getStepId() {
+        return stepId;
+    }
+
+    public void setStepId(String stepId) {
+        this.stepId = stepId;
+    }
+
+    public String getSetpConfigId() {
+        return setpConfigId;
+    }
+
+    public void setSetpConfigId(String setpConfigId) {
+        this.setpConfigId = setpConfigId;
+    }
+
+    public String getActionName() {
+        return actionName;
+    }
+
+    public void setActionName(String actionName) {
+        this.actionName = actionName;
+    }
+
+    public String getDbType() {
+        return dbType;
+    }
+
+    public void setDbType(String dbType) {
+        this.dbType = dbType;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getRowNum() {
+        return rowNum;
+    }
+
+    public void setRowNum(String rowNum) {
+        this.rowNum = rowNum;
+    }
+
+    public String getpageLimit() {
+        return pageLimit;
+    }
+
+    public void setpageLimit(String pageLimit) {
+        this.pageLimit = pageLimit;
+    }
+
+    public String getMaxValueField() {
+        return maxValueField;
+    }
+
+    public void setMaxValueField(String maxValueField) {
+        this.maxValueField = maxValueField;
+    }
+
+    public String getCreateTableFlag() {
+        return createTableFlag;
+    }
+
+    public void setCreateTableFlag(String createTableFlag) {
+        this.createTableFlag = createTableFlag;
+    }
+
+    public String getWriteType() {
+        return writeType;
+    }
+
+    public void setWriteType(String writeType) {
+        this.writeType = writeType;
+    }
+
+    public String getSqlStatement() {
+        return sqlStatement;
+    }
+
+    public void setSqlStatement(String sqlStatement) {
+        this.sqlStatement = sqlStatement;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.xml
new file mode 100644
index 00000000..9137ef34
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepConfigEntity.xml
@@ -0,0 +1,303 @@
+<?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.sys.flow.dao.impl.SysFlowStepConfigDaoImpl">
+
+    <resultMap id="get-SysFlowStepConfigEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="flowId" column="flow_id" jdbcType="VARCHAR"/>
+           <result property="stepId" column="step_id" jdbcType="VARCHAR"/>
+           <result property="setpConfigId" column="setp_config_id" jdbcType="VARCHAR"/>
+           <result property="actionName" column="action_name" jdbcType="VARCHAR"/>
+           <result property="dbType" column="db_type" jdbcType="VARCHAR"/>
+           <result property="tableName" column="table_name" jdbcType="VARCHAR"/>
+           <result property="rowNum" column="row_num" jdbcType="VARCHAR"/>
+           <result property="pageLimit" column="page_limit" jdbcType="VARCHAR"/>
+           <result property="maxValueField" column="max_value_field" jdbcType="VARCHAR"/>
+           <result property="createTableFlag" column="create_table_flag" jdbcType="VARCHAR"/>
+           <result property="writeType" column="write_type" jdbcType="VARCHAR"/>
+           <result property="sqlStatement" column="sql_statement" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowStepConfigEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,flow_id 
+        ,step_id 
+        ,setp_config_id 
+        ,action_name 
+        ,db_type 
+        ,table_name 
+        ,row_num 
+        ,page_limit 
+        ,max_value_field 
+        ,create_table_flag 
+        ,write_type 
+        ,sql_statement 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowStepConfigEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity">
+    select
+    <include refid="SysFlowStepConfigEntity_Base_Column_List" />
+    from sys_flow_step_config
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="setpConfigId != null and setpConfigId != ''"> and setp_config_id = #{setpConfigId} </if>
+            <if test="actionName != null and actionName != ''"> and action_name = #{actionName} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="tableName != null and tableName != ''"> and table_name = #{tableName} </if>
+            <if test="rowNum != null and rowNum != ''"> and row_num = #{rowNum} </if>
+            <if test="pageLimit != null and pageLimit != ''"> and page_limit = #{pageLimit} </if>
+            <if test="maxValueField != null and maxValueField != ''"> and max_value_field = #{maxValueField} </if>
+            <if test="createTableFlag != null and createTableFlag != ''"> and create_table_flag = #{createTableFlag} </if>
+            <if test="writeType != null and writeType != ''"> and write_type = #{writeType} </if>
+            <if test="sqlStatement != null and sqlStatement != ''"> and sql_statement = #{sqlStatement} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity">
+        select  count(1)   from sys_flow_step_config
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="setpConfigId != null and setpConfigId != ''"> and setp_config_id = #{setpConfigId} </if>
+            <if test="actionName != null and actionName != ''"> and action_name = #{actionName} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="tableName != null and tableName != ''"> and table_name = #{tableName} </if>
+            <if test="rowNum != null and rowNum != ''"> and row_num = #{rowNum} </if>
+            <if test="pageLimit != null and pageLimit != ''"> and page_limit = #{pageLimit} </if>
+            <if test="maxValueField != null and maxValueField != ''"> and max_value_field = #{maxValueField} </if>
+            <if test="createTableFlag != null and createTableFlag != ''"> and create_table_flag = #{createTableFlag} </if>
+            <if test="writeType != null and writeType != ''"> and write_type = #{writeType} </if>
+            <if test="sqlStatement != null and sqlStatement != ''"> and sql_statement = #{sqlStatement} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowStepConfigEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity">
+    select
+    <include refid="SysFlowStepConfigEntity_Base_Column_List" />
+    from sys_flow_step_config
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="flowId != null and flowId != ''"> and flow_id like concat('%',#{flowId},'%') </if>
+            <if test="stepId != null and stepId != ''"> and step_id like concat('%',#{stepId},'%') </if>
+            <if test="setpConfigId != null and setpConfigId != ''"> and setp_config_id like concat('%',#{setpConfigId},'%') </if>
+            <if test="actionName != null and actionName != ''"> and action_name like concat('%',#{actionName},'%') </if>
+            <if test="dbType != null and dbType != ''"> and db_type like concat('%',#{dbType},'%') </if>
+            <if test="tableName != null and tableName != ''"> and table_name like concat('%',#{tableName},'%') </if>
+            <if test="rowNum != null and rowNum != ''"> and row_num like concat('%',#{rowNum},'%') </if>
+            <if test="pageLimit != null and pageLimit != ''"> and page_limit like concat('%',#{pageLimit},'%') </if>
+            <if test="maxValueField != null and maxValueField != ''"> and max_value_field like concat('%',#{maxValueField},'%') </if>
+            <if test="createTableFlag != null and createTableFlag != ''"> and create_table_flag like concat('%',#{createTableFlag},'%') </if>
+            <if test="writeType != null and writeType != ''"> and write_type like concat('%',#{writeType},'%') </if>
+            <if test="sqlStatement != null and sqlStatement != ''"> and sql_statement like concat('%',#{sqlStatement},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowStepConfigentity_list_or" resultMap="get-SysFlowStepConfigEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity">
+    select
+    <include refid="SysFlowStepConfigEntity_Base_Column_List" />
+    from sys_flow_step_config
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="flowId != null and flowId != ''"> or flow_id = #{flowId} </if>
+             <if test="stepId != null and stepId != ''"> or step_id = #{stepId} </if>
+             <if test="setpConfigId != null and setpConfigId != ''"> or setp_config_id = #{setpConfigId} </if>
+             <if test="actionName != null and actionName != ''"> or action_name = #{actionName} </if>
+             <if test="dbType != null and dbType != ''"> or db_type = #{dbType} </if>
+             <if test="tableName != null and tableName != ''"> or table_name = #{tableName} </if>
+             <if test="rowNum != null and rowNum != ''"> or row_num = #{rowNum} </if>
+             <if test="pageLimit != null and pageLimit != ''"> or page_limit = #{pageLimit} </if>
+             <if test="maxValueField != null and maxValueField != ''"> or max_value_field = #{maxValueField} </if>
+             <if test="createTableFlag != null and createTableFlag != ''"> or create_table_flag = #{createTableFlag} </if>
+             <if test="writeType != null and writeType != ''"> or write_type = #{writeType} </if>
+             <if test="sqlStatement != null and sqlStatement != ''"> or sql_statement = #{sqlStatement} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_config(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="flowId != null and flowId != ''"> flow_id , </if>
+            <if test="stepId != null and stepId != ''"> step_id , </if>
+            <if test="setpConfigId != null and setpConfigId != ''"> setp_config_id , </if>
+            <if test="actionName != null and actionName != ''"> action_name , </if>
+            <if test="dbType != null and dbType != ''"> db_type , </if>
+            <if test="tableName != null and tableName != ''"> table_name , </if>
+            <if test="rowNum != null and rowNum != ''"> row_num , </if>
+            <if test="pageLimit != null and pageLimit != ''"> page_limit , </if>
+            <if test="maxValueField != null and maxValueField != ''"> max_value_field , </if>
+            <if test="createTableFlag != null and createTableFlag != ''"> create_table_flag , </if>
+            <if test="writeType != null and writeType != ''"> write_type , </if>
+            <if test="sqlStatement != null and sqlStatement != ''"> sql_statement , </if>
+            <if test="sorts == null ">sorts,</if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="flowId != null and flowId != ''"> #{flowId} ,</if>
+            <if test="stepId != null and stepId != ''"> #{stepId} ,</if>
+            <if test="setpConfigId != null and setpConfigId != ''"> #{setpConfigId} ,</if>
+            <if test="actionName != null and actionName != ''"> #{actionName} ,</if>
+            <if test="dbType != null and dbType != ''"> #{dbType} ,</if>
+            <if test="tableName != null and tableName != ''"> #{tableName} ,</if>
+            <if test="rowNum != null and rowNum != ''"> #{rowNum} ,</if>
+            <if test="pageLimit != null and pageLimit != ''"> #{pageLimit} ,</if>
+            <if test="maxValueField != null and maxValueField != ''"> #{maxValueField} ,</if>
+            <if test="createTableFlag != null and createTableFlag != ''"> #{createTableFlag} ,</if>
+            <if test="writeType != null and writeType != ''"> #{writeType} ,</if>
+            <if test="sqlStatement != null and sqlStatement != ''"> #{sqlStatement} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_step_config a WHERE a.sts = 'Y' ),1),</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_step_config(create_user_id, create_time, modify_user_id, modify_time, sts, flow_id, step_id, setp_config_id, action_name, db_type, table_name, row_num, page_limit, max_value_field, create_table_flag, write_type, sql_statement,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.flowId},#{entity.stepId},#{entity.setpConfigId},#{entity.actionName},#{entity.dbType},#{entity.tableName},#{entity.rowNum},#{entity.pageLimit},#{entity.maxValueField},#{entity.createTableFlag},#{entity.writeType},#{entity.sqlStatement}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_config(create_user_id, create_time, modify_user_id, modify_time, sts, flow_id, step_id, setp_config_id, action_name, db_type, table_name, row_num, page_limit, max_value_field, create_table_flag, write_type, sql_statement)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.flowId},#{entity.stepId},#{entity.setpConfigId},#{entity.actionName},#{entity.dbType},#{entity.tableName},#{entity.rowNum},#{entity.pageLimit},#{entity.maxValueField},#{entity.createTableFlag},#{entity.writeType},#{entity.sqlStatement})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    flow_id = values(flow_id),
+    step_id = values(step_id),
+    setp_config_id = values(setp_config_id),
+    action_name = values(action_name),
+    db_type = values(db_type),
+    table_name = values(table_name),
+    row_num = values(row_num),
+    page_limit = values(page_limit),
+    max_value_field = values(max_value_field),
+    create_table_flag = values(create_table_flag),
+    write_type = values(write_type),
+    sql_statement = values(sql_statement)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity" >
+update sys_flow_step_config  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="flowId != null and flowId != ''"> flow_id = #{flowId},</if>
+  <if test="stepId != null and stepId != ''"> step_id = #{stepId},</if>
+  <if test="setpConfigId != null and setpConfigId != ''"> setp_config_id = #{setpConfigId},</if>
+  <if test="actionName != null and actionName != ''"> action_name = #{actionName},</if>
+  <if test="dbType != null and dbType != ''"> db_type = #{dbType},</if>
+  <if test="tableName != null and tableName != ''"> table_name = #{tableName},</if>
+  <if test="rowNum != null and rowNum != ''"> row_num = #{rowNum},</if>
+  <if test="pageLimit != null and pageLimit != ''"> page_limit = #{pageLimit},</if>
+  <if test="maxValueField != null and maxValueField != ''"> max_value_field = #{maxValueField},</if>
+  <if test="createTableFlag != null and createTableFlag != ''"> create_table_flag = #{createTableFlag},</if>
+  <if test="writeType != null and writeType != ''"> write_type = #{writeType},</if>
+  <if test="sqlStatement != null and sqlStatement != ''"> sql_statement = #{sqlStatement},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity" >
+update sys_flow_step_config  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity" >
+update sys_flow_step_config  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="flowId != null and flowId != ''"> and flow_id = #{flowId} </if>
+            <if test="stepId != null and stepId != ''"> and step_id = #{stepId} </if>
+            <if test="setpConfigId != null and setpConfigId != ''"> and setp_config_id = #{setpConfigId} </if>
+            <if test="actionName != null and actionName != ''"> and action_name = #{actionName} </if>
+            <if test="dbType != null and dbType != ''"> and db_type = #{dbType} </if>
+            <if test="tableName != null and tableName != ''"> and table_name = #{tableName} </if>
+            <if test="rowNum != null and rowNum != ''"> and row_num = #{rowNum} </if>
+            <if test="pageLimit != null and pageLimit != ''"> and page_limit = #{pageLimit} </if>
+            <if test="maxValueField != null and maxValueField != ''"> and max_value_field = #{maxValueField} </if>
+            <if test="createTableFlag != null and createTableFlag != ''"> and create_table_flag = #{createTableFlag} </if>
+            <if test="writeType != null and writeType != ''"> and write_type = #{writeType} </if>
+            <if test="sqlStatement != null and sqlStatement != ''"> and sql_statement = #{sqlStatement} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_step_config where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.java
new file mode 100644
index 00000000..bbef689c
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.java
@@ -0,0 +1,125 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 流程步骤信息(SysFlowStep)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public class SysFlowStepEntity extends BaseEntity {
+ 
+  /**  步骤序号 */
+   private Integer step;
+   //流程id
+   private String flowId;
+  /**  步骤类型;1定时任务2数据库3应用 */
+   private String stepType;
+  /**  描述 */
+   private String description;
+  /**  操作动作(名称);api名称/插件名称 */
+   private String apiName;
+  /**  操作动作类型;api/插件 */
+   private String actionType;
+  /**  应用id */
+   private String appId;
+  /**  操作动作id;api_id,根据操作动作类型来决定是查api还是插件 */
+   private String apiId;
+  /**  nifi返回的应用id;刘工接口返回的nifi应用id,不确定要不要 */
+   private String nifiAppId;
+  /**  nifi的apiId */
+   private String nifiApiId;
+  /**  nifi应用排序模式;先进先出/先进后出 */
+   private String sortMode;
+
+
+    public Integer getStep() {
+        return step;
+    }
+
+    public void setStep(Integer step) {
+        this.step = step;
+    }
+
+    public String getStepType() {
+        return stepType;
+    }
+
+    public void setStepType(String stepType) {
+        this.stepType = stepType;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getApiName() {
+        return apiName;
+    }
+
+    public void setApiName(String apiName) {
+        this.apiName = apiName;
+    }
+
+    public String getActionType() {
+        return actionType;
+    }
+
+    public void setActionType(String actionType) {
+        this.actionType = actionType;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getApiId() {
+        return apiId;
+    }
+
+    public void setApiId(String apiId) {
+        this.apiId = apiId;
+    }
+
+    public String getNifiAppId() {
+        return nifiAppId;
+    }
+
+    public void setNifiAppId(String nifiAppId) {
+        this.nifiAppId = nifiAppId;
+    }
+
+    public String getNifiApiId() {
+        return nifiApiId;
+    }
+
+    public void setNifiApiId(String nifiApiId) {
+        this.nifiApiId = nifiApiId;
+    }
+
+    public String getSortMode() {
+        return sortMode;
+    }
+
+    public void setSortMode(String sortMode) {
+        this.sortMode = sortMode;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.xml
new file mode 100644
index 00000000..adc6a741
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepEntity.xml
@@ -0,0 +1,312 @@
+<?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.sys.flow.dao.impl.SysFlowStepDaoImpl">
+
+    <resultMap id="get-SysFlowStepEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+        <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+        <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+        <result property="sts" column="sts" jdbcType="VARCHAR"/>
+        <result property="step" column="step" jdbcType="INTEGER"/>
+        <result property="stepType" column="step_type" jdbcType="VARCHAR"/>
+        <result property="flowId" column="flow_id" jdbcType="VARCHAR"/>
+        <result property="description" column="description" jdbcType="VARCHAR"/>
+        <result property="apiName" column="api_name" jdbcType="VARCHAR"/>
+        <result property="actionType" column="action_type" jdbcType="VARCHAR"/>
+        <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+        <result property="apiId" column="api_id" jdbcType="VARCHAR"/>
+        <result property="nifiAppId" column="nifi_app_id" jdbcType="VARCHAR"/>
+        <result property="nifiApiId" column="nifi_api_id" jdbcType="VARCHAR"/>
+        <result property="sortMode" column="sort_mode" jdbcType="VARCHAR"/>
+    </resultMap>
+    <!-- 查询的字段-->
+    <sql id="SysFlowStepEntity_Base_Column_List">
+        id
+        ,create_user_id
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,step 
+        ,step_type 
+        ,flowId
+        ,description
+        ,api_name 
+        ,action_type 
+        ,app_id 
+        ,api_id 
+        ,nifi_app_id 
+        ,nifi_api_id 
+        ,sort_mode
+    </sql>
+    <!-- 查询 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-SysFlowStepEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        select
+        <include refid="SysFlowStepEntity_Base_Column_List"/>
+        from sys_flow_step
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="step != null">and step = #{step}</if>
+            <if test="stepType != null and stepType != ''">and step_type = #{stepType}</if>
+            <if test="flowId != null and flowId != ''">and flow_id = #{flowId}</if>
+            <if test="description != null and description != ''">and description = #{description}</if>
+            <if test="apiName != null and apiName != ''">and api_name = #{apiName}</if>
+            <if test="actionType != null and actionType != ''">and action_type = #{actionType}</if>
+            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
+            <if test="apiId != null and apiId != ''">and api_id = #{apiId}</if>
+            <if test="nifiAppId != null and nifiAppId != ''">and nifi_app_id = #{nifiAppId}</if>
+            <if test="nifiApiId != null and nifiApiId != ''">and nifi_api_id = #{nifiApiId}</if>
+            <if test="sortMode != null and sortMode != ''">and sort_mode = #{sortMode}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询符合条件的数量 -->
+    <select id="entity_count" resultType="Integer" parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        select count(1) from sys_flow_step
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="step != null">and step = #{step}</if>
+            <if test="stepType != null and stepType != ''">and step_type = #{stepType}</if>
+            <if test="flowId != null and flowId != ''">and flow_id = #{flowId}</if>
+            <if test="description != null and description != ''">and description = #{description}</if>
+            <if test="apiName != null and apiName != ''">and api_name = #{apiName}</if>
+            <if test="actionType != null and actionType != ''">and action_type = #{actionType}</if>
+            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
+            <if test="apiId != null and apiId != ''">and api_id = #{apiId}</if>
+            <if test="nifiAppId != null and nifiAppId != ''">and nifi_app_id = #{nifiAppId}</if>
+            <if test="nifiApiId != null and nifiApiId != ''">and nifi_api_id = #{nifiApiId}</if>
+            <if test="sortMode != null and sortMode != ''">and sort_mode = #{sortMode}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+    <select id="entity_list_like" resultMap="get-SysFlowStepEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        select
+        <include refid="SysFlowStepEntity_Base_Column_List"/>
+        from sys_flow_step
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id like concat('%',#{id},'%')</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id like
+                concat('%',#{create_user_id},'%')
+            </if>
+            <if test="create_time != null">and create_time like concat('%',#{create_time},'%')</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id like
+                concat('%',#{modify_user_id},'%')
+            </if>
+            <if test="modify_time != null">and modify_time like concat('%',#{modify_time},'%')</if>
+            <if test="sts != null and sts != ''">and sts like concat('%',#{sts},'%')</if>
+            <if test="step != null">and step like concat('%',#{step},'%')</if>
+            <if test="stepType != null and stepType != ''">and step_type like concat('%',#{stepType},'%')</if>
+            <if test="flowId != null and flowId != ''">and flow_id like concat('%',#{flowId},'%')</if>
+            <if test="description != null and description != ''">and description like concat('%',#{description},'%')
+            </if>
+            <if test="apiName != null and apiName != ''">and api_name like concat('%',#{apiName},'%')</if>
+            <if test="actionType != null and actionType != ''">and action_type like concat('%',#{actionType},'%')</if>
+            <if test="appId != null and appId != ''">and app_id like concat('%',#{appId},'%')</if>
+            <if test="apiId != null and apiId != ''">and api_id like concat('%',#{apiId},'%')</if>
+            <if test="nifiAppId != null and nifiAppId != ''">and nifi_app_id like concat('%',#{nifiAppId},'%')</if>
+            <if test="nifiApiId != null and nifiApiId != ''">and nifi_api_id like concat('%',#{nifiApiId},'%')</if>
+            <if test="sortMode != null and sortMode != ''">and sort_mode like concat('%',#{sortMode},'%')</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询列表 字段采用or格式 -->
+    <select id="SysFlowStepentity_list_or" resultMap="get-SysFlowStepEntity-result"
+            parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        select
+        <include refid="SysFlowStepEntity_Base_Column_List"/>
+        from sys_flow_step
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">or id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">or create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">or create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">or modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">or modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">or sts = #{sts}</if>
+            <if test="step != null">or step = #{step}</if>
+            <if test="stepType != null and stepType != ''">or step_type = #{stepType}</if>
+            <if test="flowId != null and flowId != ''">or flow_id = #{flowId}</if>
+            <if test="description != null and description != ''">or description = #{description}</if>
+            <if test="apiName != null and apiName != ''">or api_name = #{apiName}</if>
+            <if test="actionType != null and actionType != ''">or action_type = #{actionType}</if>
+            <if test="appId != null and appId != ''">or app_id = #{appId}</if>
+            <if test="apiId != null and apiId != ''">or api_id = #{apiId}</if>
+            <if test="nifiAppId != null and nifiAppId != ''">or nifi_app_id = #{nifiAppId}</if>
+            <if test="nifiApiId != null and nifiApiId != ''">or nifi_api_id = #{nifiApiId}</if>
+            <if test="sortMode != null and sortMode != ''">or sort_mode = #{sortMode}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString()  ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!--新增所有列-->
+    <insert id="entity_insert" parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity" keyProperty="id"
+            useGeneratedKeys="true">
+        insert into sys_flow_step(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">id ,</if>
+            <if test="create_user_id != null and create_user_id != ''">create_user_id ,</if>
+            <if test="create_time != null">create_time ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id ,</if>
+            <if test="modify_time != null">modify_time ,</if>
+            <if test="sts != null and sts != ''">sts ,</if>
+            <if test="step != null">step ,</if>
+            <if test="stepType != null and stepType != ''">step_type ,</if>
+            <if test="flowId != null and flowId != ''">flow_id ,</if>
+            <if test="description != null and description != ''">description ,</if>
+            <if test="apiName != null and apiName != ''">api_name ,</if>
+            <if test="actionType != null and actionType != ''">action_type ,</if>
+            <if test="appId != null and appId != ''">app_id ,</if>
+            <if test="apiId != null and apiId != ''">api_id ,</if>
+            <if test="nifiAppId != null and nifiAppId != ''">nifi_app_id ,</if>
+            <if test="nifiApiId != null and nifiApiId != ''">nifi_api_id ,</if>
+            <if test="sortMode != null and sortMode != ''">sort_mode ,</if>
+            <if test="sorts == null ">sorts,</if>
+            <if test="sts == null ">sts,</if>
+        </trim>
+        )values(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''">#{create_user_id} ,</if>
+            <if test="create_time != null">#{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">#{modify_user_id} ,</if>
+            <if test="modify_time != null">#{modify_time} ,</if>
+            <if test="sts != null and sts != ''">#{sts} ,</if>
+            <if test="step != null">#{step} ,</if>
+            <if test="stepType != null and stepType != ''">#{stepType} ,</if>
+            <if test="flowId != null and flowId != ''">#{flowId} ,</if>
+            <if test="description != null and description != ''">#{description} ,</if>
+            <if test="apiName != null and apiName != ''">#{apiName} ,</if>
+            <if test="actionType != null and actionType != ''">#{actionType} ,</if>
+            <if test="appId != null and appId != ''">#{appId} ,</if>
+            <if test="apiId != null and apiId != ''">#{apiId} ,</if>
+            <if test="nifiAppId != null and nifiAppId != ''">#{nifiAppId} ,</if>
+            <if test="nifiApiId != null and nifiApiId != ''">#{nifiApiId} ,</if>
+            <if test="sortMode != null and sortMode != ''">#{sortMode} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_step a
+                WHERE a.sts = 'Y' ),1),
+            </if>
+            <if test="sts == null ">'Y',</if>
+        </trim>
+        )
+    </insert>
+    <!-- 批量新增 -->
+    <insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_flow_step(create_user_id, create_time, modify_user_id, modify_time, sts, step,
+        step_type,flow_id, description, api_name, action_type, app_id, api_id, nifi_app_id, nifi_api_id, sort_mode, sts)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.step},#{entity.stepType},#{entity.flowId},#{entity.description},#{entity.apiName},#{entity.actionType},#{entity.appId},#{entity.apiId},#{entity.nifiAppId},#{entity.nifiApiId},#{entity.sortMode},
+            'Y')
+        </foreach>
+    </insert>
+    <!-- 批量新增或者修改-->
+    <insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_flow_step(create_user_id, create_time, modify_user_id, modify_time, sts, step, step_type,
+        flow_id,description, api_name, action_type, app_id, api_id, nifi_app_id, nifi_api_id, sort_mode)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.step},#{entity.stepType},#{entity.flowId},#{entity.description},#{entity.apiName},#{entity.actionType},#{entity.appId},#{entity.apiId},#{entity.nifiAppId},#{entity.nifiApiId},#{entity.sortMode})
+        </foreach>
+        on duplicate key update
+        create_user_id = values(create_user_id),
+        create_time = values(create_time),
+        modify_user_id = values(modify_user_id),
+        modify_time = values(modify_time),
+        sts = values(sts),
+        step = values(step),
+        step_type = values(step_type),
+        flow_id = values(flow_id),
+        description = values(description),
+        api_name = values(api_name),
+        action_type = values(action_type),
+        app_id = values(app_id),
+        api_id = values(api_id),
+        nifi_app_id = values(nifi_app_id),
+        nifi_api_id = values(nifi_api_id),
+        sort_mode = values(sort_mode)
+    </insert>
+    <!--通过主键修改方法-->
+    <update id="entity_update" parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        update sys_flow_step set
+        <trim suffix="" suffixOverrides=",">
+            <if test="create_user_id != null and create_user_id != ''">create_user_id = #{create_user_id},</if>
+            <if test="create_time != null">create_time = #{create_time},</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id = #{modify_user_id},</if>
+            <if test="modify_time != null">modify_time = #{modify_time},</if>
+            <if test="sts != null and sts != ''">sts = #{sts},</if>
+            <if test="step != null">step = #{step},</if>
+            <if test="stepType != null and stepType != ''">step_type = #{stepType},</if>
+            <if test="flowId != null and flowId != ''">flow_id = #{flowId},</if>
+            <if test="description != null and description != ''">description = #{description},</if>
+            <if test="apiName != null and apiName != ''">api_name = #{apiName},</if>
+            <if test="actionType != null and actionType != ''">action_type = #{actionType},</if>
+            <if test="appId != null and appId != ''">app_id = #{appId},</if>
+            <if test="apiId != null and apiId != ''">api_id = #{apiId},</if>
+            <if test="nifiAppId != null and nifiAppId != ''">nifi_app_id = #{nifiAppId},</if>
+            <if test="nifiApiId != null and nifiApiId != ''">nifi_api_id = #{nifiApiId},</if>
+            <if test="sortMode != null and sortMode != ''">sort_mode = #{sortMode},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 逻辑删除 -->
+    <update id="entity_logicDelete" parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        update sys_flow_step
+        set sts= 'N',
+            modify_time = #{modify_time},
+            modify_user_id = #{modify_user_id}
+        where id = #{id}
+    </update>
+    <!-- 多条件逻辑删除 -->
+    <update id="entity_logicDelete_Multi_Condition" parameterType="com.hzya.frame.sys.flow.entity.SysFlowStepEntity">
+        update sys_flow_step set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="step != null">and step = #{step}</if>
+            <if test="stepType != null and stepType != ''">and step_type = #{stepType}</if>
+            <if test="flowId != null and flowId != ''">and flow_id = #{flowId}</if>
+            <if test="description != null and description != ''">and description = #{description}</if>
+            <if test="apiName != null and apiName != ''">and api_name = #{apiName}</if>
+            <if test="actionType != null and actionType != ''">and action_type = #{actionType}</if>
+            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
+            <if test="apiId != null and apiId != ''">and api_id = #{apiId}</if>
+            <if test="nifiAppId != null and nifiAppId != ''">and nifi_app_id = #{nifiAppId}</if>
+            <if test="nifiApiId != null and nifiApiId != ''">and nifi_api_id = #{nifiApiId}</if>
+            <if test="sortMode != null and sortMode != ''">and sort_mode = #{sortMode}</if>
+            and sts='Y'
+        </trim>
+    </update>
+    <!--通过主键删除-->
+    <delete id="entity_delete">
+        delete
+        from sys_flow_step
+        where id = #{id}
+    </delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.java b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.java
new file mode 100644
index 00000000..71db7af2
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.java
@@ -0,0 +1,76 @@
+package com.hzya.frame.sys.flow.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 步骤关联关系表(SysFlowStepRelation)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public class SysFlowStepRelationEntity extends BaseEntity {
+ 
+  /**  输入步骤 */
+   private String inputStepId;
+  /**  输出步骤 */
+   private String outputStepId;
+  /**  输入nifi app id */
+   private String inputNifiAppId;
+  /**  输出nifiidapp id */
+   private String outputNifiAppId;
+  /**  输入nifi api id */
+   private String inputNifiApiId;
+  /**  输出nifiidapi id */
+   private String outputNifiApiId;
+
+
+    public String getInputStepId() {
+        return inputStepId;
+    }
+
+    public void setInputStepId(String inputStepId) {
+        this.inputStepId = inputStepId;
+    }
+
+    public String getOutputStepId() {
+        return outputStepId;
+    }
+
+    public void setOutputStepId(String outputStepId) {
+        this.outputStepId = outputStepId;
+    }
+
+    public String getInputNifiAppId() {
+        return inputNifiAppId;
+    }
+
+    public void setInputNifiAppId(String inputNifiAppId) {
+        this.inputNifiAppId = inputNifiAppId;
+    }
+
+    public String getOutputNifiAppId() {
+        return outputNifiAppId;
+    }
+
+    public void setOutputNifiAppId(String outputNifiAppId) {
+        this.outputNifiAppId = outputNifiAppId;
+    }
+
+    public String getInputNifiApiId() {
+        return inputNifiApiId;
+    }
+
+    public void setInputNifiApiId(String inputNifiApiId) {
+        this.inputNifiApiId = inputNifiApiId;
+    }
+
+    public String getOutputNifiApiId() {
+        return outputNifiApiId;
+    }
+
+    public void setOutputNifiApiId(String outputNifiApiId) {
+        this.outputNifiApiId = outputNifiApiId;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.xml b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.xml
new file mode 100644
index 00000000..39e19cda
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/entity/SysFlowStepRelationEntity.xml
@@ -0,0 +1,237 @@
+<?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.sys.flow.dao.impl.SysFlowStepRelationDaoImpl">
+
+    <resultMap id="get-SysFlowStepRelationEntity-result" type="com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="inputStepId" column="input_step_id" jdbcType="VARCHAR"/>
+           <result property="outputStepId" column="output_step_id" jdbcType="VARCHAR"/>
+           <result property="inputNifiAppId" column="input_nifi_app_id" jdbcType="VARCHAR"/>
+           <result property="outputNifiAppId" column="output_nifi_app_id" jdbcType="VARCHAR"/>
+           <result property="inputNifiApiId" column="input_nifi_api_id" jdbcType="VARCHAR"/>
+           <result property="outputNifiApiId" column="output_nifi_api_id" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysFlowStepRelationEntity_Base_Column_List">
+        id
+       ,create_user_id 
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,input_step_id 
+        ,output_step_id 
+        ,input_nifi_app_id 
+        ,output_nifi_app_id 
+        ,input_nifi_api_id 
+        ,output_nifi_api_id 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysFlowStepRelationEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity">
+    select
+    <include refid="SysFlowStepRelationEntity_Base_Column_List" />
+    from sys_flow_step_relation
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="inputStepId != null and inputStepId != ''"> and input_step_id = #{inputStepId} </if>
+            <if test="outputStepId != null and outputStepId != ''"> and output_step_id = #{outputStepId} </if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> and input_nifi_app_id = #{inputNifiAppId} </if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> and output_nifi_app_id = #{outputNifiAppId} </if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> and input_nifi_api_id = #{inputNifiApiId} </if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> and output_nifi_api_id = #{outputNifiApiId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity">
+        select  count(1)   from sys_flow_step_relation
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="inputStepId != null and inputStepId != ''"> and input_step_id = #{inputStepId} </if>
+            <if test="outputStepId != null and outputStepId != ''"> and output_step_id = #{outputStepId} </if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> and input_nifi_app_id = #{inputNifiAppId} </if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> and output_nifi_app_id = #{outputNifiAppId} </if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> and input_nifi_api_id = #{inputNifiApiId} </if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> and output_nifi_api_id = #{outputNifiApiId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysFlowStepRelationEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity">
+    select
+    <include refid="SysFlowStepRelationEntity_Base_Column_List" />
+    from sys_flow_step_relation
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="inputStepId != null and inputStepId != ''"> and input_step_id like concat('%',#{inputStepId},'%') </if>
+            <if test="outputStepId != null and outputStepId != ''"> and output_step_id like concat('%',#{outputStepId},'%') </if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> and input_nifi_app_id like concat('%',#{inputNifiAppId},'%') </if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> and output_nifi_app_id like concat('%',#{outputNifiAppId},'%') </if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> and input_nifi_api_id like concat('%',#{inputNifiApiId},'%') </if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> and output_nifi_api_id like concat('%',#{outputNifiApiId},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysFlowStepRelationentity_list_or" resultMap="get-SysFlowStepRelationEntity-result" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity">
+    select
+    <include refid="SysFlowStepRelationEntity_Base_Column_List" />
+    from sys_flow_step_relation
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="inputStepId != null and inputStepId != ''"> or input_step_id = #{inputStepId} </if>
+             <if test="outputStepId != null and outputStepId != ''"> or output_step_id = #{outputStepId} </if>
+             <if test="inputNifiAppId != null and inputNifiAppId != ''"> or input_nifi_app_id = #{inputNifiAppId} </if>
+             <if test="outputNifiAppId != null and outputNifiAppId != ''"> or output_nifi_app_id = #{outputNifiAppId} </if>
+             <if test="inputNifiApiId != null and inputNifiApiId != ''"> or input_nifi_api_id = #{inputNifiApiId} </if>
+             <if test="outputNifiApiId != null and outputNifiApiId != ''"> or output_nifi_api_id = #{outputNifiApiId} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_relation(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="inputStepId != null and inputStepId != ''"> input_step_id , </if>
+            <if test="outputStepId != null and outputStepId != ''"> output_step_id , </if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> input_nifi_app_id , </if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> output_nifi_app_id , </if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> input_nifi_api_id , </if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> output_nifi_api_id , </if>
+            <if test="sorts == null ">sorts,</if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="inputStepId != null and inputStepId != ''"> #{inputStepId} ,</if>
+            <if test="outputStepId != null and outputStepId != ''"> #{outputStepId} ,</if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> #{inputNifiAppId} ,</if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> #{outputNifiAppId} ,</if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> #{inputNifiApiId} ,</if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> #{outputNifiApiId} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_flow_step_relation a WHERE a.sts = 'Y' ),1),</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_flow_step_relation(create_user_id, create_time, modify_user_id, modify_time, sts, input_step_id, output_step_id, input_nifi_app_id, output_nifi_app_id, input_nifi_api_id, output_nifi_api_id,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.inputStepId},#{entity.outputStepId},#{entity.inputNifiAppId},#{entity.outputNifiAppId},#{entity.inputNifiApiId},#{entity.outputNifiApiId}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_flow_step_relation(create_user_id, create_time, modify_user_id, modify_time, sts, input_step_id, output_step_id, input_nifi_app_id, output_nifi_app_id, input_nifi_api_id, output_nifi_api_id)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.inputStepId},#{entity.outputStepId},#{entity.inputNifiAppId},#{entity.outputNifiAppId},#{entity.inputNifiApiId},#{entity.outputNifiApiId})
+    </foreach>
+    on duplicate key update
+    create_user_id = values(create_user_id),
+    create_time = values(create_time),
+    modify_user_id = values(modify_user_id),
+    modify_time = values(modify_time),
+    sts = values(sts),
+    input_step_id = values(input_step_id),
+    output_step_id = values(output_step_id),
+    input_nifi_app_id = values(input_nifi_app_id),
+    output_nifi_app_id = values(output_nifi_app_id),
+    input_nifi_api_id = values(input_nifi_api_id),
+    output_nifi_api_id = values(output_nifi_api_id)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity" >
+update sys_flow_step_relation  set
+<trim suffix="" suffixOverrides=",">
+  <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="inputStepId != null and inputStepId != ''"> input_step_id = #{inputStepId},</if>
+  <if test="outputStepId != null and outputStepId != ''"> output_step_id = #{outputStepId},</if>
+  <if test="inputNifiAppId != null and inputNifiAppId != ''"> input_nifi_app_id = #{inputNifiAppId},</if>
+  <if test="outputNifiAppId != null and outputNifiAppId != ''"> output_nifi_app_id = #{outputNifiAppId},</if>
+  <if test="inputNifiApiId != null and inputNifiApiId != ''"> input_nifi_api_id = #{inputNifiApiId},</if>
+  <if test="outputNifiApiId != null and outputNifiApiId != ''"> output_nifi_api_id = #{outputNifiApiId},</if>
+</trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity" >
+update sys_flow_step_relation  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity" >
+update sys_flow_step_relation  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+                                                                <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="inputStepId != null and inputStepId != ''"> and input_step_id = #{inputStepId} </if>
+            <if test="outputStepId != null and outputStepId != ''"> and output_step_id = #{outputStepId} </if>
+            <if test="inputNifiAppId != null and inputNifiAppId != ''"> and input_nifi_app_id = #{inputNifiAppId} </if>
+            <if test="outputNifiAppId != null and outputNifiAppId != ''"> and output_nifi_app_id = #{outputNifiAppId} </if>
+            <if test="inputNifiApiId != null and inputNifiApiId != ''"> and input_nifi_api_id = #{inputNifiApiId} </if>
+            <if test="outputNifiApiId != null and outputNifiApiId != ''"> and output_nifi_api_id = #{outputNifiApiId} </if>
+            and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_flow_step_relation where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassRuleService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassRuleService.java
new file mode 100644
index 00000000..2996732c
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassRuleService.java
@@ -0,0 +1,57 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 流程分类权限表(SysFlowClassRule)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowClassRuleService extends IBaseService<SysFlowClassRuleEntity, String>{
+
+    /**
+     * 新增流程分类权限
+     * @param object
+     * @return
+     */
+    JsonResultEntity saveFlowClassRule(JSONObject object);
+
+    /**
+     * 修改流程分类权限
+     * @param object
+     * @return
+     */
+    JsonResultEntity updateFlowClassRule(JSONObject object);
+
+    /**
+     * 删除流程分类权限
+     * @param object
+     * @return
+     */
+    JsonResultEntity deleteFlowClassRule(JSONObject object);
+
+    /**
+     * 列表查询
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryRuleList(JSONObject object);
+
+    /**
+     * 分页查询
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryRulePagedInfo(JSONObject object);
+
+    /**
+     * 查询待分配权限的用户列表
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryUserList(JSONObject object);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassService.java
new file mode 100644
index 00000000..d72e06a8
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowClassService.java
@@ -0,0 +1,42 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.flow.entity.SysFlowClassEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 流程分类;对应数环通项目分类(SysFlowClass)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowClassService extends IBaseService<SysFlowClassEntity, String>{
+
+    /**
+     * 根据Id查询
+     * @param object
+     * @return
+     */
+    JsonResultEntity getFlowClass(JSONObject object);
+    /**
+     * 新增流程分类
+     * @param object
+     * @return
+     */
+    JsonResultEntity saveFlowClass(JSONObject object);
+
+    /**
+     * 修改流程分类
+     * @param object
+     * @return
+     */
+    JsonResultEntity updateFlowClass(JSONObject object);
+
+    /**
+     * 删除流程分类
+     * @param object
+     * @return
+     */
+    JsonResultEntity deleteFlowClass(JSONObject object);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowNifiConstantService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowNifiConstantService.java
new file mode 100644
index 00000000..17c8d90a
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowNifiConstantService.java
@@ -0,0 +1,43 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * nifi常量(SysFlowNifiConstant)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowNifiConstantService extends IBaseService<SysFlowNifiConstantEntity, String>{
+
+    /**
+     * 详情
+     * @param object
+     * @return
+     */
+    JsonResultEntity getNifiConstant(JSONObject object);
+
+    /**
+     * 保存nifi常量
+     * @param object
+     * @return
+     */
+    JsonResultEntity saveNifiConstant(JSONObject object);
+
+    /**
+     * 更新nifi常量
+     * @param object
+     * @return
+     */
+    JsonResultEntity updateNifiConstant(JSONObject object);
+
+    /**
+     * 更新nifi常量
+     * @param object
+     * @return
+     */
+    JsonResultEntity deleteNifiConstant(JSONObject object);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowService.java
new file mode 100644
index 00000000..e2792bff
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowService.java
@@ -0,0 +1,49 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.flow.entity.SysFlowEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 流程主表;流程就是数环通的Linkup(SysFlow)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:24
+ */
+public interface ISysFlowService extends IBaseService<SysFlowEntity, String>{
+    /**
+     * 保存流程主表
+     * @param object
+     * @return
+     */
+    JsonResultEntity saveFlow(JSONObject object);
+
+    /**
+     * 更新流程主表
+     * @param object
+     * @return
+     */
+    JsonResultEntity updateFlow(JSONObject object);
+
+    /**
+     * 删除流程主表
+     * @param object
+     * @return
+     */
+    JsonResultEntity deleteFlow(JSONObject object);
+
+    /**
+     * 列表查询
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryFlowList(JSONObject object);
+
+    /**
+     * 分页查询
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryFlowPagedInfo(JSONObject object);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepAccountService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepAccountService.java
new file mode 100644
index 00000000..eb7f5df1
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepAccountService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+/**
+ * 流程步骤账户表(SysFlowStepAccount)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepAccountService extends IBaseService<SysFlowStepAccountEntity, String>{
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigBService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigBService.java
new file mode 100644
index 00000000..80f74441
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigBService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+/**
+ * 映射信息表体(SysFlowStepConfigB)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepConfigBService extends IBaseService<SysFlowStepConfigBEntity, String>{
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigService.java
new file mode 100644
index 00000000..385d92c4
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepConfigService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+/**
+ * 映射信息主表(SysFlowStepConfig)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepConfigService extends IBaseService<SysFlowStepConfigEntity, String>{
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepRelationService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepRelationService.java
new file mode 100644
index 00000000..f5358083
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepRelationService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+/**
+ * 步骤关联关系表(SysFlowStepRelation)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+public interface ISysFlowStepRelationService extends IBaseService<SysFlowStepRelationEntity, String>{
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepService.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepService.java
new file mode 100644
index 00000000..9d3e226f
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/ISysFlowStepService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.sys.flow.service;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+/**
+ * 流程步骤信息(SysFlowStep)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+public interface ISysFlowStepService extends IBaseService<SysFlowStepEntity, String>{
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassRuleServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassRuleServiceImpl.java
new file mode 100644
index 00000000..ed3a58c8
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassRuleServiceImpl.java
@@ -0,0 +1,193 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowClassRuleDao;
+import com.hzya.frame.sys.flow.service.ISysFlowClassRuleService;
+import com.hzya.frame.sysnew.user.dao.ISysUserDao;
+import com.hzya.frame.sysnew.user.entity.SysUserEntity;
+import com.hzya.frame.uuid.UUIDUtils;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+
+import java.util.List;
+
+/**
+ * 流程分类权限表(SysFlowClassRule)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Service(value = "sysFlowClassRuleService")
+public class SysFlowClassRuleServiceImpl extends BaseService<SysFlowClassRuleEntity, String> implements ISysFlowClassRuleService {
+     
+    private ISysFlowClassRuleDao sysFlowClassRuleDao;
+	@Autowired
+	private ISysUserDao sysUserDao;
+    @Autowired
+	public void setSysFlowClassRuleDao(ISysFlowClassRuleDao dao) {
+		this.sysFlowClassRuleDao = dao;
+		this.dao = dao;
+	}
+
+
+	/**
+	 * 新增流程分类权限
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity saveFlowClassRule(JSONObject object) {
+		SysFlowClassRuleEntity ruleEntity = getData("jsonStr",object,SysFlowClassRuleEntity.class);
+		try {
+			this.checkParams(ruleEntity,"save");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		addRule(ruleEntity);
+		return BaseResult.getSuccessMessageEntity("保存成功");
+	}
+
+	//保存
+	private void addRule(SysFlowClassRuleEntity ruleEntity) {
+		List<SysFlowClassRuleEntity> ruleList = ruleEntity.getRuleList();
+		for (SysFlowClassRuleEntity r : ruleList) {
+			r.setId(UUIDUtils.getUUID());
+			r.setCreate_time(Convert.toDate(ruleEntity.getCreate_time(),ruleEntity.getModify_time()));
+			r.setCreate_user_id(Convert.toStr(ruleEntity.getCreate_user_id(),ruleEntity.getModify_user_id()));
+			r.setModify_time(r.getCreate_time());
+			r.setModify_user_id(r.getCreate_user_id());
+			r.setFlowClassId(ruleEntity.getFlowClassId());
+			sysFlowClassRuleDao.save(r);
+		}
+	}
+
+	/**
+	 * 修改流程分类权限
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity updateFlowClassRule(JSONObject object) {
+		SysFlowClassRuleEntity ruleEntity = getData("jsonStr",object,SysFlowClassRuleEntity.class);
+		try {
+			this.checkParams(ruleEntity,"update");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		//先删除 再重新保存
+		SysFlowClassRuleEntity rule = new SysFlowClassRuleEntity();
+		rule.setFlowClassId(ruleEntity.getFlowClassId());
+		sysFlowClassRuleDao.logicRemoveMultiCondition(rule);
+		addRule(ruleEntity);
+		return BaseResult.getSuccessMessageEntity("更新成功");
+	}
+
+	/**
+	 * 删除流程分类权限
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity deleteFlowClassRule(JSONObject object) {
+		SysFlowClassRuleEntity ruleEntity = getData("jsonStr",object,SysFlowClassRuleEntity.class);
+		try {
+			this.checkParams(ruleEntity,"delete");
+		}catch (Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		SysFlowClassRuleEntity deleteRuleEntity = new SysFlowClassRuleEntity();
+		deleteRuleEntity.setFlowClassId(ruleEntity.getFlowClassId());
+		deleteRuleEntity.setUserId(ruleEntity.getUserId());
+		sysFlowClassRuleDao.logicRemoveMultiCondition(deleteRuleEntity);
+		return BaseResult.getSuccessMessageEntity("删除成功");
+	}
+
+	/**
+	 * 列表查询
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryRuleList(JSONObject object) {
+		SysFlowClassRuleEntity ruleEntity = getData("jsonStr",object,SysFlowClassRuleEntity.class);
+		try {
+			checkParams(ruleEntity,"queryList");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		List<SysFlowClassRuleEntity> sysFlowClassRuleEntities = sysFlowClassRuleDao.queryByLike(ruleEntity);
+		SysFlowClassRuleEntity reuslt = new SysFlowClassRuleEntity();
+		reuslt.setFlowClassId(ruleEntity.getFlowClassId());
+		reuslt.setRuleList(sysFlowClassRuleEntities);
+		return BaseResult.getSuccessMessageEntity("查询数据成功",reuslt);
+	}
+
+	/**
+	 * 分页查询
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryRulePagedInfo(JSONObject object) {
+		SysFlowClassRuleEntity ruleEntity = getData("jsonStr",object,SysFlowClassRuleEntity.class);
+		try {
+			checkParams(ruleEntity,"queryPaged");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		PageHelper.startPage(ruleEntity.getPageNum(), ruleEntity.getPageSize());
+		List<SysFlowClassRuleEntity> queryByLike = this.dao.queryByLike(ruleEntity);
+		PageInfo pageInfo = new PageInfo(queryByLike);
+		return BaseResult.getSuccessMessageEntity("查询数据成功",pageInfo);
+	}
+	/**
+	 * 查询待分配权限的用户列表
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryUserList(JSONObject object) {
+		SysUserEntity userEntity = getData("jsonStr",object,SysUserEntity.class);
+		if (StrUtil.isEmpty(userEntity.getFlowClassId())){
+			return BaseResult.getFailureMessageEntity("flowClassId不能为空");
+		}
+		List<SysUserEntity> sysUserEntities = sysUserDao.queryList(userEntity, "com.hzya.frame.sysnew.user.dao.impl.SysUserDaoImpl.entity_list_notin_sys_flowClass");
+		return BaseResult.getSuccessMessageEntity("查询成功",sysUserEntities);
+	}
+	/**
+	 * 检查参数
+	 * @param entity 参数对象
+	 * @param type 操作;类型
+	 */
+	private void checkParams(SysFlowClassRuleEntity entity,String type){
+		Assert.notNull(entity,"请求参数不能为空");
+		Assert.notEmpty(entity.getFlowClassId(),"flowClassId不能为空");
+		if ("save".equals(type)){
+			Assert.notEmpty(entity.getRuleList(),"ruleList不能为空");
+		}else if ("update".equals(type)){
+			Assert.notEmpty(entity.getRuleList(),"ruleList不能为空");
+		}else if ("delete".equals(type)){
+
+		}else if ("queryPaged".equals(type)){
+			Assert.notNull(entity.getPageNum(),"pageNum不能为空");
+			Assert.notNull(entity.getPageSize(),"pageSize不能为空");
+		}
+
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassServiceImpl.java
new file mode 100644
index 00000000..ced25510
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowClassServiceImpl.java
@@ -0,0 +1,179 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.dictionaryshopNew.service.ISysDictionaryshopNewService;
+import com.hzya.frame.sys.flow.dao.ISysFlowClassRuleDao;
+import com.hzya.frame.sys.flow.dao.ISysFlowDao;
+import com.hzya.frame.sys.flow.entity.SysFlowClassEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowClassDao;
+import com.hzya.frame.sys.flow.entity.SysFlowClassRuleEntity;
+import com.hzya.frame.sys.flow.entity.SysFlowEntity;
+import com.hzya.frame.sys.flow.service.ISysFlowClassService;
+import com.hzya.frame.sysnew.user.dao.ISysUserDao;
+import com.hzya.frame.sysnew.user.entity.SysUserEntity;
+import com.hzya.frame.uuid.UUIDLong;
+import com.hzya.frame.uuid.UUIDUtils;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.hzya.frame.basedao.service.impl.BaseService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 流程分类;对应数环通项目分类(SysFlowClass)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Service(value = "sysFlowClassService")
+public class SysFlowClassServiceImpl extends BaseService<SysFlowClassEntity, String> implements ISysFlowClassService {
+     
+    private ISysFlowClassDao sysFlowClassDao;
+	@Autowired
+	private ISysFlowDao sysFlowDao;
+	@Autowired
+	private ISysFlowClassRuleDao flowClassRuleDao;
+	@Autowired
+	private ISysUserDao sysUserDao;
+    @Autowired
+	public void setSysFlowClassDao(ISysFlowClassDao dao) {
+		this.sysFlowClassDao = dao;
+		this.dao = dao;
+	}
+
+	/**
+	 * 根据Id查询
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity getFlowClass(JSONObject object) {
+		SysFlowClassEntity flowClass = getData("jsonStr",object,SysFlowClassEntity.class);
+		try {
+			this.checkParams(flowClass,"get");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		SysFlowClassEntity sysFlowClassEntity = sysFlowClassDao.queryOne(flowClass);
+		return BaseResult.getSuccessMessageEntity("查询详情成功",sysFlowClassEntity);
+	}
+
+	/**
+	 * 新增流程分类
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity saveFlowClass(JSONObject object) {
+		SysFlowClassEntity flowClass = getData("jsonStr",object,SysFlowClassEntity.class);
+		try {
+			this.checkParams(flowClass,"add");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		flowClass.setId(UUIDUtils.getUUID());
+		sysFlowClassDao.save(flowClass);
+		//给创建分类的用户保存一下权限
+		SysUserEntity sysUserEntity = sysUserDao.get(flowClass.getCreate_user_id());
+		SysFlowClassRuleEntity ruleEntity = new SysFlowClassRuleEntity();
+		ruleEntity.setFlowClassId(flowClass.getId());
+		ruleEntity.setUserId(flowClass.getCreate_user_id());
+		if (null != sysUserEntity){
+			ruleEntity.setUserName(sysUserEntity.getPersonName());
+			ruleEntity.setUserCode(sysUserEntity.getPersonCode());
+		}
+		ruleEntity.setCreate_time(new Date());
+		ruleEntity.setModify_time(new Date());
+		ruleEntity.setCreate_user_id(flowClass.getCreate_user_id());
+		ruleEntity.setModify_user_id(flowClass.getModify_user_id());
+		ruleEntity.setId(UUIDUtils.getUUID());
+		flowClassRuleDao.save(ruleEntity);
+		return BaseResult.getSuccessMessageEntity("新增成功");
+	}
+
+	/**
+	 * 修改流程分类
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity updateFlowClass(JSONObject object) {
+		SysFlowClassEntity flowClass = getData("jsonStr",object,SysFlowClassEntity.class);
+		try {
+			this.checkParams(flowClass,"update");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowClassDao.update(flowClass);
+		return BaseResult.getSuccessMessageEntity("更新成功");
+	}
+
+	/**
+	 * 删除流程分类
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity deleteFlowClass(JSONObject object) {
+		SysFlowClassEntity flowClass = getData("jsonStr",object,SysFlowClassEntity.class);
+		try {
+			this.checkParams(flowClass,"delete");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowClassDao.logicRemove(flowClass);
+		return BaseResult.getSuccessMessageEntity("删除成功");
+	}
+	/**
+	 * 参数检查
+	 * @param flowClass
+	 * @param type
+	 */
+	private  void checkParams(SysFlowClassEntity flowClass,String type){
+		Assert.notNull(flowClass,"请求参数不能为空");
+		if ("add".equals(type)){//新增
+			Assert.notEmpty(flowClass.getName(),"名称不能为空");
+			//查询是否有同名的
+			SysFlowClassEntity flowQuery = new SysFlowClassEntity();
+			flowQuery.setName(flowClass.getName());
+			List<SysFlowClassEntity> query = sysFlowClassDao.query(flowQuery);
+			if (CollectionUtils.isNotEmpty(query)){
+				throw new BaseSystemException(flowClass.getName()+"已存在");
+			}
+		}else if ("update".equals(type)){//更新
+			Assert.notEmpty(flowClass.getId(),"id不能为空");
+			//查一下有没有同名的
+			SysFlowClassEntity flowQuery = new SysFlowClassEntity();
+			flowQuery.setName(flowClass.getName());
+			List<SysFlowClassEntity> query = sysFlowClassDao.query(flowQuery);
+			if (CollectionUtils.isNotEmpty(query)){
+				for (SysFlowClassEntity f : query) {
+					if (!f.getId().equals(flowClass.getId())){
+						throw new BaseSystemException(flowClass.getName()+"已存在");
+					}
+				}
+			}
+		}else if ("delete".equals(type)){//删除
+			Assert.notEmpty(flowClass.getId(),"id不能为空");
+			//查一下这个分类有没有被引用
+			SysFlowEntity sysFlowEntity = new SysFlowEntity();
+			sysFlowEntity.setClassId(flowClass.getId());
+			List<SysFlowEntity> query = sysFlowDao.query(sysFlowEntity);
+			if (CollectionUtils.isNotEmpty(query)){
+				throw new BaseSystemException("该分类已被引用,删除失败");
+			}
+		}else if ("get".equals(type)){//查询详情
+			Assert.notEmpty(flowClass.getId(),"id不能为空");
+		}
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowNifiConstantServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowNifiConstantServiceImpl.java
new file mode 100644
index 00000000..17c5778d
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowNifiConstantServiceImpl.java
@@ -0,0 +1,155 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sys.flow.entity.SysFlowNifiConstantEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowNifiConstantDao;
+import com.hzya.frame.sys.flow.service.ISysFlowNifiConstantService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+
+import java.util.List;
+
+/**
+ * nifi常量(SysFlowNifiConstant)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Service(value = "sysFlowNifiConstantService")
+public class SysFlowNifiConstantServiceImpl extends BaseService<SysFlowNifiConstantEntity, String> implements ISysFlowNifiConstantService {
+     
+    private ISysFlowNifiConstantDao sysFlowNifiConstantDao;
+    
+    @Autowired
+	public void setSysFlowNifiConstantDao(ISysFlowNifiConstantDao dao) {
+		this.sysFlowNifiConstantDao = dao;
+		this.dao = dao;
+	}
+
+	/**
+	 * 详情
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity getNifiConstant(JSONObject object) {
+		SysFlowNifiConstantEntity sysFlowNifiConstantEntity = null;
+		try {
+			sysFlowNifiConstantEntity = preCheck(object,"get");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		SysFlowNifiConstantEntity nifiConstant = sysFlowNifiConstantDao.queryOne(sysFlowNifiConstantEntity);
+		return BaseResult.getSuccessMessageEntity("查询详情成功",nifiConstant);
+	}
+
+	/**
+	 * 保存nifi常量
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity saveNifiConstant(JSONObject object) {
+		SysFlowNifiConstantEntity sysFlowNifiConstantEntity = null;
+		try {
+			sysFlowNifiConstantEntity = preCheck(object,"save");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowNifiConstantDao.save(sysFlowNifiConstantEntity);
+		return BaseResult.getSuccessMessageEntity("保存成功");
+	}
+
+	/**
+	 * 更新nifi常量
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity updateNifiConstant(JSONObject object) {
+		SysFlowNifiConstantEntity sysFlowNifiConstantEntity = null;
+		try {
+			sysFlowNifiConstantEntity = preCheck(object,"update");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowNifiConstantDao.update(sysFlowNifiConstantEntity);
+		return BaseResult.getSuccessMessageEntity("更新成功");
+	}
+
+	/**
+	 * 更新nifi常量
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity deleteNifiConstant(JSONObject object) {
+		SysFlowNifiConstantEntity sysFlowNifiConstantEntity = null;
+		try {
+			sysFlowNifiConstantEntity = preCheck(object,"delete");
+		}catch(Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowNifiConstantDao.logicRemove(sysFlowNifiConstantEntity);
+		return BaseResult.getSuccessMessageEntity("删除成功");
+	}
+
+
+	/**
+	 * 参数校验
+	 * @param entity
+	 * @param type
+	 */
+	private void checkParams(SysFlowNifiConstantEntity entity,String type){
+		Assert.notNull(entity,"请求参数不能为空");
+		if ("save".equals(type)){
+			Assert.notEmpty(entity.getNifiKey(),"nifiKey不能为空");
+			Assert.notEmpty(entity.getNifiValue(),"nifiValue不能为空");
+			//检查是否有重名的key
+			SysFlowNifiConstantEntity nifi = new SysFlowNifiConstantEntity();
+			nifi.setNifiKey(entity.getNifiKey());
+			List<SysFlowNifiConstantEntity> query = sysFlowNifiConstantDao.query(nifi);
+			if (CollectionUtils.isNotEmpty(query)){
+				throw new BaseSystemException(nifi.getNifiKey()+"重复");
+			}
+		}else if ("update".equals(type)){
+			Assert.notEmpty(entity.getId(),"id不能为空");
+			Assert.notEmpty(entity.getNifiKey(),"key不能为空");
+			Assert.notEmpty(entity.getNifiValue(),"value不能为空");
+			SysFlowNifiConstantEntity nifi = new SysFlowNifiConstantEntity();
+			nifi.setNifiKey(entity.getNifiKey());
+			List<SysFlowNifiConstantEntity> query = sysFlowNifiConstantDao.query(nifi);
+			if (CollectionUtils.isNotEmpty(query)){
+				for (SysFlowNifiConstantEntity n : query) {
+					if (!n.getId().equals(entity.getId())){
+						throw new BaseSystemException(entity.getNifiKey()+"重复");
+					}
+				}
+			}
+		}else if ("delete".equals(type)){
+			Assert.notEmpty(entity.getId(),"id不能为空");
+		}else if ("get".equals(type)){
+			Assert.notEmpty(entity.getId(),"id不能为空");
+		}
+	}
+
+	//前置操作
+	private SysFlowNifiConstantEntity preCheck(JSONObject object,String type){
+		SysFlowNifiConstantEntity entity = getData("jsonStr", object,SysFlowNifiConstantEntity.class);
+		checkParams(entity,type);
+		return entity;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowServiceImpl.java
new file mode 100644
index 00000000..3411b427
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowServiceImpl.java
@@ -0,0 +1,190 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.hzya.frame.sys.dictionaryshopNew.entity.SysDictionaryshopNew;
+import com.hzya.frame.sys.dictionaryshopNew.service.ISysDictionaryshopNewService;
+import com.hzya.frame.sys.flow.entity.SysFlowEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowDao;
+import com.hzya.frame.sys.flow.service.ISysFlowService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+
+import java.util.List;
+
+/**
+ * 流程主表;流程就是数环通的Linkup(SysFlow)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:26
+ */
+@Service(value = "sysFlowService")
+public class SysFlowServiceImpl extends BaseService<SysFlowEntity, String> implements ISysFlowService {
+     
+    private ISysFlowDao sysFlowDao;
+	@Autowired
+	private ISysDictionaryshopNewService sysDictionaryshopNewService;
+    @Autowired
+	public void setSysFlowDao(ISysFlowDao dao) {
+		this.sysFlowDao = dao;
+		this.dao = dao;
+	}
+
+	/**
+	 * 保存流程主表
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity saveFlow(JSONObject object) {
+		SysFlowEntity flowEntity = getData("jsonStr",object,SysFlowEntity.class);
+		try {
+			checkParams(flowEntity,"save");
+		} catch (Exception e) {
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowDao.save(flowEntity);
+		return BaseResult.getSuccessMessageEntity("保存成功");
+	}
+
+	/**
+	 * 更新流程主表
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity updateFlow(JSONObject object) {
+		SysFlowEntity flowEntity = getData("jsonStr",object,SysFlowEntity.class);
+		try {
+			checkParams(flowEntity,"update");
+		} catch (Exception e) {
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysFlowDao.update(flowEntity);
+		return BaseResult.getSuccessMessageEntity("更新成功");
+	}
+
+	/**
+	 * 删除流程主表
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity deleteFlow(JSONObject object) {
+		SysFlowEntity flowEntity = getData("jsonStr",object,SysFlowEntity.class);
+		try {
+			checkParams(flowEntity,"delete");
+		} catch (Exception e) {
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		//删除主表
+		sysFlowDao.logicRemove(flowEntity);
+		//删除子表
+		return BaseResult.getSuccessMessageEntity("删除成功");
+	}
+
+	/**
+	 * 列表查询
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryFlowList(JSONObject object) {
+		SysFlowEntity flowEntity = getData("jsonStr",object,SysFlowEntity.class);
+		try {
+			checkParams(flowEntity,"queryList");
+		} catch (Exception e) {
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		List<SysFlowEntity> list = sysFlowDao.query(flowEntity);
+		if (CollectionUtils.isNotEmpty(list)){
+			for (SysFlowEntity sysFlowEntity : list) {
+				transferDictionary(sysFlowEntity);
+			}
+		}
+		return BaseResult.getSuccessMessageEntity("查询数据成功",list);
+	}
+
+	/**
+	 * 分页查询
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryFlowPagedInfo(JSONObject object) {
+		SysFlowEntity flowEntity = getData("jsonStr",object,SysFlowEntity.class);
+		try {
+			checkParams(flowEntity,"queryPaged");
+		} catch (Exception e) {
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		PageHelper.startPage(flowEntity.getPageNum(),flowEntity.getPageSize());
+		List<SysFlowEntity> queryByLike = sysFlowDao.queryByLike(flowEntity);
+		if (CollectionUtils.isNotEmpty(queryByLike)){
+			for (SysFlowEntity sysFlowEntity : queryByLike) {
+				transferDictionary(sysFlowEntity);
+			}
+		}
+		PageInfo pageInfo = new PageInfo(queryByLike);
+		return BaseResult.getSuccessMessageEntity("pageInfo",pageInfo);
+	}
+
+	/**
+	 * 参数检查
+	 * @param entity
+	 * @param type
+	 */
+	private void checkParams(SysFlowEntity entity,String type){
+		Assert.notNull(entity,"请求参数不能为空");
+		if ("save".equals(type)){
+			Assert.notEmpty(entity.getClassId(),"classId不能为空");
+			Assert.notEmpty(entity.getName(),"name不能为空");
+			SysFlowEntity flow = new SysFlowEntity();
+			flow.setName(entity.getName());
+			List<SysFlowEntity> flowList = sysFlowDao.query(flow);
+			if (CollectionUtils.isNotEmpty(flowList)){
+				throw new BaseSystemException(entity.getName()+"重复");
+			}
+		}else if("update".equals(type)){
+			Assert.notEmpty(entity.getId(),"Id不能为空");
+			SysFlowEntity flow = new SysFlowEntity();
+			flow.setName(entity.getName());
+			List<SysFlowEntity> flowList = sysFlowDao.query(flow);
+			if (CollectionUtils.isNotEmpty(flowList)){
+				for (SysFlowEntity sysFlowEntity : flowList) {
+					if (!sysFlowEntity.getId().equals(entity.getId())){
+						throw new BaseSystemException(entity.getName()+"重复");
+					}
+				}
+			}
+		}else if ("delete".equals(type)){
+			Assert.notEmpty(entity.getId(),"Id不能为空");
+
+		}else if ("queryPaged".equals(type)){
+			Assert.notNull(entity.getPageNum(),"pageNum不能为空");
+			Assert.notNull(entity.getPageSize(),"pageSize不能为空");
+		}
+	}
+
+	private void transferDictionary(SysFlowEntity sysFlowEntity){
+		if (null != sysFlowEntity){
+			SysDictionaryshopNew dictionaryshopByValue = sysDictionaryshopNewService.getDictionaryshopByValue("sys_flow", "trigger_mode_id", sysFlowEntity.getTriggerModeId());
+			if (null != dictionaryshopByValue){
+				sysFlowEntity.setTriggerModeName(dictionaryshopByValue.getColumnContent());
+			}
+		}
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepAccountServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepAccountServiceImpl.java
new file mode 100644
index 00000000..a82cac3a
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepAccountServiceImpl.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepAccountEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepAccountDao;
+import com.hzya.frame.sys.flow.service.ISysFlowStepAccountService;
+import org.springframework.stereotype.Service; 
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 流程步骤账户表(SysFlowStepAccount)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Service(value = "sysFlowStepAccountService")
+public class SysFlowStepAccountServiceImpl extends BaseService<SysFlowStepAccountEntity, String> implements ISysFlowStepAccountService {
+     
+    private ISysFlowStepAccountDao sysFlowStepAccountDao;
+    
+    @Autowired
+	public void setSysFlowStepAccountDao(ISysFlowStepAccountDao dao) {
+		this.sysFlowStepAccountDao = dao;
+		this.dao = dao;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigBServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigBServiceImpl.java
new file mode 100644
index 00000000..3addfd52
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigBServiceImpl.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigBEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepConfigBDao;
+import com.hzya.frame.sys.flow.service.ISysFlowStepConfigBService;
+import org.springframework.stereotype.Service; 
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 映射信息表体(SysFlowStepConfigB)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Service(value = "sysFlowStepConfigBService")
+public class SysFlowStepConfigBServiceImpl extends BaseService<SysFlowStepConfigBEntity, String> implements ISysFlowStepConfigBService {
+     
+    private ISysFlowStepConfigBDao sysFlowStepConfigBDao;
+    
+    @Autowired
+	public void setSysFlowStepConfigBDao(ISysFlowStepConfigBDao dao) {
+		this.sysFlowStepConfigBDao = dao;
+		this.dao = dao;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigServiceImpl.java
new file mode 100644
index 00000000..4c06c479
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepConfigServiceImpl.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepConfigEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepConfigDao;
+import com.hzya.frame.sys.flow.service.ISysFlowStepConfigService;
+import org.springframework.stereotype.Service; 
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 映射信息主表(SysFlowStepConfig)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Service(value = "sysFlowStepConfigService")
+public class SysFlowStepConfigServiceImpl extends BaseService<SysFlowStepConfigEntity, String> implements ISysFlowStepConfigService {
+     
+    private ISysFlowStepConfigDao sysFlowStepConfigDao;
+    
+    @Autowired
+	public void setSysFlowStepConfigDao(ISysFlowStepConfigDao dao) {
+		this.sysFlowStepConfigDao = dao;
+		this.dao = dao;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepRelationServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepRelationServiceImpl.java
new file mode 100644
index 00000000..a34d3d43
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepRelationServiceImpl.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepRelationEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepRelationDao;
+import com.hzya.frame.sys.flow.service.ISysFlowStepRelationService;
+import org.springframework.stereotype.Service; 
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 步骤关联关系表(SysFlowStepRelation)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:28
+ */
+@Service(value = "sysFlowStepRelationService")
+public class SysFlowStepRelationServiceImpl extends BaseService<SysFlowStepRelationEntity, String> implements ISysFlowStepRelationService {
+     
+    private ISysFlowStepRelationDao sysFlowStepRelationDao;
+    
+    @Autowired
+	public void setSysFlowStepRelationDao(ISysFlowStepRelationDao dao) {
+		this.sysFlowStepRelationDao = dao;
+		this.dao = dao;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepServiceImpl.java
new file mode 100644
index 00000000..0c9a1b29
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sys/flow/service/impl/SysFlowStepServiceImpl.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.sys.flow.service.impl;
+
+import com.hzya.frame.sys.flow.entity.SysFlowStepEntity;
+import com.hzya.frame.sys.flow.dao.ISysFlowStepDao;
+import com.hzya.frame.sys.flow.service.ISysFlowStepService;
+import org.springframework.stereotype.Service; 
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 流程步骤信息(SysFlowStep)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-04-29 10:16:27
+ */
+@Service(value = "sysFlowStepService")
+public class SysFlowStepServiceImpl extends BaseService<SysFlowStepEntity, String> implements ISysFlowStepService {
+     
+    private ISysFlowStepDao sysFlowStepDao;
+    
+    @Autowired
+	public void setSysFlowStepDao(ISysFlowStepDao dao) {
+		this.sysFlowStepDao = dao;
+		this.dao = dao;
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/entity/SysApplicationApiEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/entity/SysApplicationApiEntity.xml
index 089b6eb5..cc0d29be 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/entity/SysApplicationApiEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/entity/SysApplicationApiEntity.xml
@@ -42,6 +42,7 @@
         <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
         <result property="sts" column="sts" jdbcType="VARCHAR"/>
         <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
+        <result property="appName" column="app_name" jdbcType="VARCHAR"/>
     </resultMap>
     <!-- 查询的字段-->
     <sql id="SysApplicationApiEntity_Base_Column_List">
@@ -83,6 +84,7 @@
     <!--api联查应用表,like查询 -->
     <sql id="SysApplicationApiEntity_join_sysApp_like_Column_Lis">
     sys_application_api.id,
+    sys_application.id as app_id,
 	sys_application.app_id as app_code,
 	sys_application_api.api_code,
 	sys_application_api.api_name,
@@ -156,52 +158,87 @@ WHERE
     <select id="entity_list_base" resultMap="get-SysApplicationApiEntity-result"
             parameterType="com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity">
         select
-        <include refid="SysApplicationApiEntity_Base_Column_List"/>
-        from sys_application_api
+        api.id
+        ,api.api_status
+        ,api.api_code
+        ,api.api_path
+        ,api.app_id
+        ,api.catalogue_id
+        ,api.api_name
+        ,api.api_remark
+        ,api.need_Login
+        ,api.authentication_port
+        ,api.parameter_passing_mode
+        ,api.destination_address
+        ,api.request_coding
+        ,api.request_method
+        ,api.timeout_period
+        ,api.current_limiting
+        ,api.header_in
+        ,api.query_in
+        ,api.body_in_type
+        ,api.body_in
+        ,api.body_out
+        ,api.bean_name
+        ,api.return_msg
+        ,api.return_success_field
+        ,api.return_success_value
+        ,api.fun_name
+        ,api.extension_api
+        ,api.sorts
+        ,api.create_user_id
+        ,api.create_time
+        ,api.modify_user_id
+        ,api.modify_time
+        ,api.sts
+        ,api.org_id
+        ,app.name as app_name
+        from sys_application_api api
+        left join sys_application app on api.app_id = app.id
         <trim prefix="where" prefixOverrides="and">
-            <if test="id != null and id != ''">and id = #{id}</if>
-            <if test="apiStatus != null and apiStatus != ''">and api_status = #{apiStatus}</if>
-            <if test="apiCode != null ">and api_code = #{apiCode}</if>
-            <if test="apiPath != null and apiPath != ''">and api_path = #{apiPath}</if>
-            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
-            <if test="catalogueId != null and catalogueId != ''">and catalogue_id = #{catalogueId}</if>
-            <if test="apiName != null and apiName != ''">and api_name = #{apiName}</if>
-            <if test="apiRemark != null and apiRemark != ''">and api_remark = #{apiRemark}</if>
-            <if test="needLogin != null and needLogin != ''">and need_Login = #{needLogin}</if>
-            <if test="authenticationPort != null and authenticationPort != ''">and authentication_port =
+            <if test="id != null and id != ''">and api.id = #{id}</if>
+            <if test="apiStatus != null and apiStatus != ''">and api.api_status = #{apiStatus}</if>
+            <if test="apiCode != null ">and api.api_code = #{apiCode}</if>
+            <if test="apiPath != null and apiPath != ''">and api.api_path = #{apiPath}</if>
+            <if test="appId != null and appId != ''">and api.app_id = #{appId}</if>
+            <if test="catalogueId != null and catalogueId != ''">and api.catalogue_id = #{catalogueId}</if>
+            <if test="apiName != null and apiName != ''">and api.api_name = #{apiName}</if>
+            <if test="apiRemark != null and apiRemark != ''">and api.api_remark = #{apiRemark}</if>
+            <if test="needLogin != null and needLogin != ''">and api.need_Login = #{needLogin}</if>
+            <if test="authenticationPort != null and authenticationPort != ''">and api.authentication_port =
                 #{authenticationPort}
             </if>
-            <if test="parameterPassingMode != null and parameterPassingMode != ''">and parameter_passing_mode =
+            <if test="parameterPassingMode != null and parameterPassingMode != ''">and api.parameter_passing_mode =
                 #{parameterPassingMode}
             </if>
-            <if test="destinationAddress != null and destinationAddress != ''">and destination_address =
+            <if test="destinationAddress != null and destinationAddress != ''">and api.destination_address =
                 #{destinationAddress}
             </if>
-            <if test="requestCoding != null and requestCoding != ''">and request_coding = #{requestCoding}</if>
-            <if test="requestMethod != null and requestMethod != ''">and request_method = #{requestMethod}</if>
-            <if test="timeoutPeriod != null and timeoutPeriod != ''">and timeout_period = #{timeoutPeriod}</if>
-            <if test="currentLimiting != null and currentLimiting != ''">and current_limiting = #{currentLimiting}</if>
-            <if test="headerIn != null and headerIn != ''">and header_in = #{headerIn}</if>
-            <if test="queryIn != null and queryIn != ''">and query_in = #{queryIn}</if>
-            <if test="bodyInType != null and bodyInType != ''">and body_in_type = #{bodyInType}</if>
-            <if test="bodyIn != null and bodyIn != ''">and body_in = #{bodyIn}</if>
-            <if test="bodyOut != null and bodyOut != ''">and body_out = #{bodyOut}</if>
-            <if test="beanName != null and beanName != ''">and bean_name = #{beanName}</if>
-            <if test="returnMsg != null and returnMsg != ''">and return_msg = #{returnMsg}</if>
-            <if test="returnSuccessField != null and returnSuccessField != ''">and return_success_field = #{returnSuccessField}</if>
-            <if test="returnSuccessValue != null and returnSuccessValue != ''">and return_success_value = #{returnSuccessValue}</if>
-            <if test="funName != null and funName != ''">and fun_name = #{funName}</if>
-            <if test="extensionApi != null and extensionApi != ''">and extension_api = #{extensionApi}</if>
-            <if test="sorts != null">and sorts = #{sorts}</if>
-            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
-            <if test="create_time != null">and create_time = #{create_time}</if>
-            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
-            <if test="modify_time != null">and modify_time = #{modify_time}</if>
-            <if test="sts != null and sts != ''">and sts = #{sts}</if>
-            <if test="org_id != null and org_id != ''">and org_id = #{org_id}</if>
-            and sts='Y'
+            <if test="requestCoding != null and requestCoding != ''">and api.request_coding = #{requestCoding}</if>
+            <if test="requestMethod != null and requestMethod != ''">and api.request_method = #{requestMethod}</if>
+            <if test="timeoutPeriod != null and timeoutPeriod != ''">and api.timeout_period = #{timeoutPeriod}</if>
+            <if test="currentLimiting != null and currentLimiting != ''">and api.current_limiting = #{currentLimiting}</if>
+            <if test="headerIn != null and headerIn != ''">and api.header_in = #{headerIn}</if>
+            <if test="queryIn != null and queryIn != ''">and api.query_in = #{queryIn}</if>
+            <if test="bodyInType != null and bodyInType != ''">and api.body_in_type = #{bodyInType}</if>
+            <if test="bodyIn != null and bodyIn != ''">and api.body_in = #{bodyIn}</if>
+            <if test="bodyOut != null and bodyOut != ''">and api.body_out = #{bodyOut}</if>
+            <if test="beanName != null and beanName != ''">and api.bean_name = #{beanName}</if>
+            <if test="returnMsg != null and returnMsg != ''">and api.return_msg = #{returnMsg}</if>
+            <if test="returnSuccessField != null and returnSuccessField != ''">and api.return_success_field = #{returnSuccessField}</if>
+            <if test="returnSuccessValue != null and returnSuccessValue != ''">and api.return_success_value = #{returnSuccessValue}</if>
+            <if test="funName != null and funName != ''">and api.fun_name = #{funName}</if>
+            <if test="extensionApi != null and extensionApi != ''">and api.extension_api = #{extensionApi}</if>
+            <if test="sorts != null">and api.sorts = #{sorts}</if>
+            <if test="create_user_id != null and create_user_id != ''">and api.create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and api.create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and api.modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and api.modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and api.sts = #{sts}</if>
+            <if test="org_id != null and org_id != ''">and api.org_id = #{org_id}</if>
+            and api.sts='Y'
         </trim>
-        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort == null or sort == ''.toString() ">order by api.sorts asc</if>
         <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
     </select>
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/ISysApplicationApiService.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/ISysApplicationApiService.java
index 2218bf04..52272f22 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/ISysApplicationApiService.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/ISysApplicationApiService.java
@@ -24,6 +24,8 @@ public interface ISysApplicationApiService extends IBaseService<SysApplicationAp
      **/
     JsonResultEntity queryEntity(JSONObject jsonObject);
 
+    JsonResultEntity queryMultiAppPage(JSONObject jsonObject);
+
     /**
      * 模糊查询,联查sys_app
      * @param entity
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/impl/SysApplicationApiServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/impl/SysApplicationApiServiceImpl.java
index 488d88f6..5bf964a3 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/impl/SysApplicationApiServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/api/service/impl/SysApplicationApiServiceImpl.java
@@ -1,10 +1,13 @@
 package com.hzya.frame.sysnew.application.api.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity;
 import com.hzya.frame.sysnew.application.api.dao.ISysApplicationApiDao;
 import com.hzya.frame.sysnew.application.api.service.ISysApplicationApiService;
 import com.hzya.frame.sysnew.application.plugin.entity.SysApplicationPluginEntity;
+import com.hzya.frame.sysnew.messageTemplate.entity.SysMessageTemplateEntity;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
 import org.springframework.stereotype.Service;
@@ -12,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import javax.annotation.Resource;
 import com.hzya.frame.basedao.service.impl.BaseService;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -49,6 +53,42 @@ public class SysApplicationApiServiceImpl extends BaseService<SysApplicationApiE
 		return BaseResult.getSuccessMessageEntity("查询数据成功", list);
 	}
 
+	@Override
+	public JsonResultEntity queryMultiAppPage(JSONObject jsonObject){
+		SysApplicationApiEntity entity = getData("jsonStr", jsonObject, SysApplicationApiEntity.class);
+		//判断分页
+		if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
+			return BaseResult.getFailureMessageEntity("分页查询参数不存在");
+		}
+		int pageNum = entity.getPageNum();
+		int pageSize = entity.getPageSize();
+		//查询时不分页
+		entity.setPageNum(null);
+		entity.setPageSize(null);
+		String appIds = entity.getAppId();
+		if(appIds == null || "".equals(appIds.trim())){
+			return BaseResult.getFailureMessageEntity("应用ID不能为空");
+		}
+		String[] appIdList = appIds.split(",");
+		List<SysApplicationApiEntity> resultList = new ArrayList<>();
+		for (int i = 0; i < appIdList.length; i++) {
+			entity.setAppId(appIdList[i]);
+			List<SysApplicationApiEntity> list = sysApplicationApiDao.queryBase(entity);
+			resultList.addAll(list);
+		}
+        //手动分页
+		int total = resultList.size();
+		int fromIndex = (pageNum - 1) * pageSize;
+		int toIndex = Math.min(fromIndex + pageSize, total);
+		List<SysApplicationApiEntity> pageList = resultList.subList(fromIndex, toIndex);
+
+		PageInfo<SysApplicationApiEntity> pageInfo = new PageInfo<>(pageList);
+		pageInfo.setTotal(total);
+		pageInfo.setPages((total + pageSize - 1) / pageSize);
+
+		return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
+	}
+
 	/**
 	 * 模糊查询,联查sys_app
 	 *
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/ISysApplicationAccountDao.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/ISysApplicationAccountDao.java
new file mode 100644
index 00000000..598bfc10
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/ISysApplicationAccountDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sysnew.application.appAcount.dao;
+
+import com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 应用账户表(sys_application_account: table)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-05-10 15:52:21
+ */
+public interface ISysApplicationAccountDao extends IBaseDao<SysApplicationAccountEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/impl/SysApplicationAccountDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/impl/SysApplicationAccountDaoImpl.java
new file mode 100644
index 00000000..359a8503
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/dao/impl/SysApplicationAccountDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sysnew.application.appAcount.dao.impl;
+
+import com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity;
+import com.hzya.frame.sysnew.application.appAcount.dao.ISysApplicationAccountDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 应用账户表(SysApplicationAccount)表数据库访问层
+ *
+ * @author xiang2lin
+ * @since 2025-05-10 15:52:23
+ */
+@Repository(value = "SysApplicationAccountDaoImpl")
+public class SysApplicationAccountDaoImpl extends MybatisGenericDao<SysApplicationAccountEntity, String> implements ISysApplicationAccountDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.java
new file mode 100644
index 00000000..3542e200
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.java
@@ -0,0 +1,137 @@
+package com.hzya.frame.sysnew.application.appAcount.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 应用账户表(SysApplicationAccount)实体类
+ *
+ * @author xiang2lin
+ * @since 2025-05-10 15:52:24
+ */
+public class SysApplicationAccountEntity extends BaseEntity {
+
+    /**
+     * 应用id
+     */
+  private String appId;
+  /**  账户名称 */
+   private String name;
+  /**  ip地址 */
+   private String ipAddress;
+  /**  端口 */
+   private String port;
+  /**  数据库名称 */
+   private String dbName;
+  /**  用户名 */
+   private String userName;
+  /**  密码 */
+   private String password;
+  /**  数据库类型 */
+   private String dbType;
+  /**  应用key */
+   private String appKey;
+  /**  应用密钥 */
+   private String appSecret;
+  /**  企业id */
+   private String corpid;
+  /**  应用id */
+   private String agentid;
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getDbName() {
+        return dbName;
+    }
+
+    public void setDbName(String dbName) {
+        this.dbName = dbName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getDbType() {
+        return dbType;
+    }
+
+    public void setDbType(String dbType) {
+        this.dbType = dbType;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public String getCorpid() {
+        return corpid;
+    }
+
+    public void setCorpid(String corpid) {
+        this.corpid = corpid;
+    }
+
+    public String getAgentid() {
+        return agentid;
+    }
+
+    public void setAgentid(String agentid) {
+        this.agentid = agentid;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.xml
new file mode 100644
index 00000000..b29ae0fe
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/entity/SysApplicationAccountEntity.xml
@@ -0,0 +1,333 @@
+<?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.sysnew.application.appAcount.dao.impl.SysApplicationAccountDaoImpl">
+
+    <resultMap id="get-SysApplicationAccountEntity-result"
+               type="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+        <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+        <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+        <result property="sts" column="sts" jdbcType="VARCHAR"/>
+        <result property="sorts" column="sorts" jdbcType="INTEGER"/>
+        <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="ipAddress" column="ip_address" jdbcType="VARCHAR"/>
+        <result property="port" column="port" jdbcType="VARCHAR"/>
+        <result property="dbName" column="db_name" jdbcType="VARCHAR"/>
+        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+        <result property="password" column="password" jdbcType="VARCHAR"/>
+        <result property="dbType" column="db_type" jdbcType="VARCHAR"/>
+        <result property="appKey" column="app_key" jdbcType="VARCHAR"/>
+        <result property="appSecret" column="app_secret" jdbcType="VARCHAR"/>
+        <result property="corpid" column="corpId" jdbcType="VARCHAR"/>
+        <result property="agentid" column="agentId" jdbcType="VARCHAR"/>
+    </resultMap>
+    <!-- 查询的字段-->
+    <sql id="SysApplicationAccountEntity_Base_Column_List">
+        id
+        ,create_user_id
+        ,create_time 
+        ,modify_user_id 
+        ,modify_time 
+        ,sts 
+        ,sorts 
+        ,appId
+        ,name
+        ,ip_address
+        ,port 
+        ,db_name 
+        ,user_name 
+        ,password 
+        ,db_type 
+        ,app_key 
+        ,app_secret 
+        ,corpId 
+        ,agentId
+    </sql>
+    <!-- 查询 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-SysApplicationAccountEntity-result"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        select
+        <include refid="SysApplicationAccountEntity_Base_Column_List"/>
+        from sys_application_account
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="sorts != null">and sorts = #{sorts}</if>
+            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
+            <if test="name != null and name != ''">and name = #{name}</if>
+            <if test="ipAddress != null and ipAddress != ''">and ip_address = #{ipAddress}</if>
+            <if test="port != null and port != ''">and port = #{port}</if>
+            <if test="dbName != null and dbName != ''">and db_name = #{dbName}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="password != null and password != ''">and password = #{password}</if>
+            <if test="dbType != null and dbType != ''">and db_type = #{dbType}</if>
+            <if test="appKey != null and appKey != ''">and app_key = #{appKey}</if>
+            <if test="appSecret != null and appSecret != ''">and app_secret = #{appSecret}</if>
+            <if test="corpid != null and corpid != ''">and corpId = #{corpid}</if>
+            <if test="agentid != null and agentid != ''">and agentId = #{agentid}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询符合条件的数量 -->
+    <select id="entity_count" resultType="Integer"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        select count(1) from sys_application_account
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">and create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">and modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="sorts != null">and sorts = #{sorts}</if>
+            <if test="appId != null and appId != ''">and app_id = #{appId}</if>
+            <if test="name != null and name != ''">and name = #{name}</if>
+            <if test="ipAddress != null and ipAddress != ''">and ip_address = #{ipAddress}</if>
+            <if test="port != null and port != ''">and port = #{port}</if>
+            <if test="dbName != null and dbName != ''">and db_name = #{dbName}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="password != null and password != ''">and password = #{password}</if>
+            <if test="dbType != null and dbType != ''">and db_type = #{dbType}</if>
+            <if test="appKey != null and appKey != ''">and app_key = #{appKey}</if>
+            <if test="appSecret != null and appSecret != ''">and app_secret = #{appSecret}</if>
+            <if test="corpid != null and corpid != ''">and corpId = #{corpid}</if>
+            <if test="agentid != null and agentid != ''">and agentId = #{agentid}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+    <select id="entity_list_like" resultMap="get-SysApplicationAccountEntity-result"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        select
+        <include refid="SysApplicationAccountEntity_Base_Column_List"/>
+        from sys_application_account
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id like concat('%',#{id},'%')</if>
+            <if test="create_user_id != null and create_user_id != ''">and create_user_id like
+                concat('%',#{create_user_id},'%')
+            </if>
+            <if test="create_time != null">and create_time like concat('%',#{create_time},'%')</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and modify_user_id like
+                concat('%',#{modify_user_id},'%')
+            </if>
+            <if test="modify_time != null">and modify_time like concat('%',#{modify_time},'%')</if>
+            <if test="sts != null and sts != ''">and sts like concat('%',#{sts},'%')</if>
+            <if test="sorts != null">and sorts like concat('%',#{sorts},'%')</if>
+            <if test="name != null and name != ''">and name like concat('%',#{name},'%')</if>
+            <if test="appId != null and appId != ''">and app_id like concat('%',#{appId},'%')</if>
+            <if test="ipAddress != null and ipAddress != ''">and ip_address like concat('%',#{ipAddress},'%')</if>
+            <if test="port != null and port != ''">and port like concat('%',#{port},'%')</if>
+            <if test="dbName != null and dbName != ''">and db_name like concat('%',#{dbName},'%')</if>
+            <if test="userName != null and userName != ''">and user_name like concat('%',#{userName},'%')</if>
+            <if test="password != null and password != ''">and password like concat('%',#{password},'%')</if>
+            <if test="dbType != null and dbType != ''">and db_type like concat('%',#{dbType},'%')</if>
+            <if test="appKey != null and appKey != ''">and app_key like concat('%',#{appKey},'%')</if>
+            <if test="appSecret != null and appSecret != ''">and app_secret like concat('%',#{appSecret},'%')</if>
+            <if test="corpid != null and corpid != ''">and corpId like concat('%',#{corpid},'%')</if>
+            <if test="agentid != null and agentid != ''">and agentId like concat('%',#{agentid},'%')</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 查询列表 字段采用or格式 -->
+    <select id="SysApplicationAccountentity_list_or" resultMap="get-SysApplicationAccountEntity-result"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        select
+        <include refid="SysApplicationAccountEntity_Base_Column_List"/>
+        from sys_application_account
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">or id = #{id}</if>
+            <if test="create_user_id != null and create_user_id != ''">or create_user_id = #{create_user_id}</if>
+            <if test="create_time != null">or create_time = #{create_time}</if>
+            <if test="modify_user_id != null and modify_user_id != ''">or modify_user_id = #{modify_user_id}</if>
+            <if test="modify_time != null">or modify_time = #{modify_time}</if>
+            <if test="sts != null and sts != ''">or sts = #{sts}</if>
+            <if test="sorts != null">or sorts = #{sorts}</if>
+            <if test="name != null and name != ''">or name = #{name}</if>
+            <if test="ipAddress != null and ipAddress != ''">or ip_address = #{ipAddress}</if>
+            <if test="port != null and port != ''">or port = #{port}</if>
+            <if test="dbName != null and dbName != ''">or db_name = #{dbName}</if>
+            <if test="userName != null and userName != ''">or user_name = #{userName}</if>
+            <if test="password != null and password != ''">or password = #{password}</if>
+            <if test="dbType != null and dbType != ''">or db_type = #{dbType}</if>
+            <if test="appKey != null and appKey != ''">or app_key = #{appKey}</if>
+            <if test="appSecret != null and appSecret != ''">or app_secret = #{appSecret}</if>
+            <if test="corpid != null and corpid != ''">or corpId = #{corpid}</if>
+            <if test="agentid != null and agentid != ''">or agentId = #{agentid}</if>
+            and sts='Y'
+        </trim>
+        <if test=" sort == null or sort == ''.toString()  ">order by sorts asc</if>
+        <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+    </select>
+
+    <!--新增所有列-->
+    <insert id="entity_insert"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity"
+            keyProperty="id" useGeneratedKeys="true">
+        insert into sys_application_account(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">id ,</if>
+            <if test="create_user_id != null and create_user_id != ''">create_user_id ,</if>
+            <if test="create_time != null">create_time ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id ,</if>
+            <if test="modify_time != null">modify_time ,</if>
+            <if test="sts != null and sts != ''">sts ,</if>
+            <if test="sorts != null">sorts ,</if>
+            <if test="name != null and name != ''">name ,</if>
+            <if test="ipAddress != null and ipAddress != ''">ip_address ,</if>
+            <if test="port != null and port != ''">port ,</if>
+            <if test="dbName != null and dbName != ''">db_name ,</if>
+            <if test="userName != null and userName != ''">user_name ,</if>
+            <if test="password != null and password != ''">password ,</if>
+            <if test="dbType != null and dbType != ''">db_type ,</if>
+            <if test="appKey != null and appKey != ''">app_key ,</if>
+            <if test="appSecret != null and appSecret != ''">app_secret ,</if>
+            <if test="corpid != null and corpid != ''">corpId ,</if>
+            <if test="agentid != null and agentid != ''">agentId ,</if>
+            <if test="sorts == null ">sorts,</if>
+            <if test="sts == null ">sts,</if>
+        </trim>
+        )values(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id} ,</if>
+            <if test="create_user_id != null and create_user_id != ''">#{create_user_id} ,</if>
+            <if test="create_time != null">#{create_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''">#{modify_user_id} ,</if>
+            <if test="modify_time != null">#{modify_time} ,</if>
+            <if test="sts != null and sts != ''">#{sts} ,</if>
+            <if test="sorts != null">#{sorts} ,</if>
+            <if test="name != null and name != ''">#{name} ,</if>
+            <if test="ipAddress != null and ipAddress != ''">#{ipAddress} ,</if>
+            <if test="port != null and port != ''">#{port} ,</if>
+            <if test="dbName != null and dbName != ''">#{dbName} ,</if>
+            <if test="userName != null and userName != ''">#{userName} ,</if>
+            <if test="password != null and password != ''">#{password} ,</if>
+            <if test="dbType != null and dbType != ''">#{dbType} ,</if>
+            <if test="appKey != null and appKey != ''">#{appKey} ,</if>
+            <if test="appSecret != null and appSecret != ''">#{appSecret} ,</if>
+            <if test="corpid != null and corpid != ''">#{corpid} ,</if>
+            <if test="agentid != null and agentid != ''">#{agentid} ,</if>
+            <if test="sorts == null ">COALESCE((select (max(IFNULL( a.sorts, 0 )) + 1) as sort from sys_application_account a
+                WHERE a.sts = 'Y' )1),
+            </if>
+            <if test="sts == null ">'Y',</if>
+        </trim>
+        )
+    </insert>
+    <!-- 批量新增 -->
+    <insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_application_account(create_user_id, create_time, modify_user_id, modify_time, sts, sorts, name,
+        ip_address, port, db_name, user_name, password, db_type, app_key, app_secret, corpId, agentId, sts)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.sorts},#{entity.name},#{entity.ipAddress},#{entity.port},#{entity.dbName},#{entity.userName},#{entity.password},#{entity.dbType},#{entity.appKey},#{entity.appSecret},#{entity.corpid},#{entity.agentid},
+            'Y')
+        </foreach>
+    </insert>
+    <!-- 批量新增或者修改-->
+    <insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into sys_application_account(create_user_id, create_time, modify_user_id, modify_time, sts, sorts, name,
+        ip_address, port, db_name, user_name, password, db_type, app_key, app_secret, corpId, agentId)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.sorts},#{entity.name},#{entity.ipAddress},#{entity.port},#{entity.dbName},#{entity.userName},#{entity.password},#{entity.dbType},#{entity.appKey},#{entity.appSecret},#{entity.corpid},#{entity.agentid})
+        </foreach>
+        on duplicate key update
+        create_user_id = values(create_user_id),
+        create_time = values(create_time),
+        modify_user_id = values(modify_user_id),
+        modify_time = values(modify_time),
+        sts = values(sts),
+        sorts = values(sorts),
+        name = values(name),
+        ip_address = values(ip_address),
+        port = values(port),
+        db_name = values(db_name),
+        user_name = values(user_name),
+        password = values(password),
+        db_type = values(db_type),
+        app_key = values(app_key),
+        app_secret = values(app_secret),
+        corpId = values(corpId),
+        agentId = values(agentId)
+    </insert>
+    <!--通过主键修改方法-->
+    <update id="entity_update"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        update sys_application_account set
+        <trim suffix="" suffixOverrides=",">
+            <if test="create_user_id != null and create_user_id != ''">create_user_id = #{create_user_id},</if>
+            <if test="create_time != null">create_time = #{create_time},</if>
+            <if test="modify_user_id != null and modify_user_id != ''">modify_user_id = #{modify_user_id},</if>
+            <if test="modify_time != null">modify_time = #{modify_time},</if>
+            <if test="sts != null and sts != ''">sts = #{sts},</if>
+            <if test="sorts != null">sorts = #{sorts},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="ipAddress != null and ipAddress != ''">ip_address = #{ipAddress},</if>
+            <if test="port != null and port != ''">port = #{port},</if>
+            <if test="dbName != null and dbName != ''">db_name = #{dbName},</if>
+            <if test="userName != null and userName != ''">user_name = #{userName},</if>
+            <if test="password != null and password != ''">password = #{password},</if>
+            <if test="dbType != null and dbType != ''">db_type = #{dbType},</if>
+            <if test="appKey != null and appKey != ''">app_key = #{appKey},</if>
+            <if test="appSecret != null and appSecret != ''">app_secret = #{appSecret},</if>
+            <if test="corpid != null and corpid != ''">corpId = #{corpid},</if>
+            <if test="agentid != null and agentid != ''">agentId = #{agentid},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 逻辑删除 -->
+    <update id="entity_logicDelete"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        update sys_application_account
+        set sts= 'N',
+            modify_time = #{modify_time},
+            modify_user_id = #{modify_user_id}
+        where id = #{id}
+    </update>
+    <!-- 多条件逻辑删除 -->
+    <update id="entity_logicDelete_Multi_Condition"
+            parameterType="com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity">
+        update sys_application_account set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and id = #{id}</if>
+            <if test="sts != null and sts != ''">and sts = #{sts}</if>
+            <if test="sorts != null">and sorts = #{sorts}</if>
+            <if test="name != null and name != ''">and name = #{name}</if>
+            <if test="ipAddress != null and ipAddress != ''">and ip_address = #{ipAddress}</if>
+            <if test="port != null and port != ''">and port = #{port}</if>
+            <if test="dbName != null and dbName != ''">and db_name = #{dbName}</if>
+            <if test="userName != null and userName != ''">and user_name = #{userName}</if>
+            <if test="password != null and password != ''">and password = #{password}</if>
+            <if test="dbType != null and dbType != ''">and db_type = #{dbType}</if>
+            <if test="appKey != null and appKey != ''">and app_key = #{appKey}</if>
+            <if test="appSecret != null and appSecret != ''">and app_secret = #{appSecret}</if>
+            <if test="corpid != null and corpid != ''">and corpId = #{corpid}</if>
+            <if test="agentid != null and agentid != ''">and agentId = #{agentid}</if>
+            and sts='Y'
+        </trim>
+    </update>
+    <!--通过主键删除-->
+    <delete id="entity_delete">
+        delete
+        from sys_application_account
+        where id = #{id}
+    </delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/ISysApplicationAccountService.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/ISysApplicationAccountService.java
new file mode 100644
index 00000000..c06d2ed8
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/ISysApplicationAccountService.java
@@ -0,0 +1,57 @@
+package com.hzya.frame.sysnew.application.appAcount.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 应用账户表(SysApplicationAccount)表服务接口
+ *
+ * @author xiang2lin
+ * @since 2025-05-10 15:52:25
+ */
+public interface ISysApplicationAccountService extends IBaseService<SysApplicationAccountEntity, String>{
+
+    /**
+     * 保存账户信息
+     * @param object
+     * @return
+     */
+    JsonResultEntity saveAccount(JSONObject object);
+
+    /**
+     * 更新账户信息
+     * @param object
+     * @return
+     */
+    JsonResultEntity updateAccount(JSONObject object);
+
+    /**
+     * 删除账户信息
+     * @param object
+     * @return
+     */
+    JsonResultEntity deleteAccount(JSONObject object);
+
+    /**
+     * 查询账户详情
+     * @param object
+     * @return
+     */
+    JsonResultEntity getAccount(JSONObject object);
+
+    /**
+     * 查询账户列表数据
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryAccountList(JSONObject object);
+
+    /**
+     * 查询账户分页数据
+     * @param object
+     * @return
+     */
+    JsonResultEntity queryAccountPaged(JSONObject object);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/impl/SysApplicationAccountServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/impl/SysApplicationAccountServiceImpl.java
new file mode 100644
index 00000000..486e4526
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/appAcount/service/impl/SysApplicationAccountServiceImpl.java
@@ -0,0 +1,107 @@
+package com.hzya.frame.sysnew.application.appAcount.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.appAcount.entity.SysApplicationAccountEntity;
+import com.hzya.frame.sysnew.application.appAcount.dao.ISysApplicationAccountDao;
+import com.hzya.frame.sysnew.application.appAcount.service.ISysApplicationAccountService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+/**
+ * 应用账户表(SysApplicationAccount)表服务实现类
+ *
+ * @author xiang2lin
+ * @since 2025-05-10 15:52:26
+ */
+@Service(value = "sysApplicationAccountService")
+public class SysApplicationAccountServiceImpl extends BaseService<SysApplicationAccountEntity, String> implements ISysApplicationAccountService {
+     
+    private ISysApplicationAccountDao sysApplicationAccountDao;
+    
+    @Autowired
+	public void setSysApplicationAccountDao(ISysApplicationAccountDao dao) {
+		this.sysApplicationAccountDao = dao;
+		this.dao = dao;
+	}
+
+	/**
+	 * 保存账户信息
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity saveAccount(JSONObject object) {
+		SysApplicationAccountEntity entity =  getData("jsonStr", object, SysApplicationAccountEntity.class);
+		try {
+			checkParam(entity,"save");
+		}catch (Exception e){
+			return BaseResult.getFailureMessageEntity(e.getMessage());
+		}
+		sysApplicationAccountDao.save(entity);
+		return BaseResult.getSuccessMessageEntity("新增成功");
+	}
+
+	/**
+	 * 更新账户信息
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity updateAccount(JSONObject object) {
+		return null;
+	}
+
+	/**
+	 * 删除账户信息
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity deleteAccount(JSONObject object) {
+		return null;
+	}
+
+	/**
+	 * 查询账户详情
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity getAccount(JSONObject object) {
+		return null;
+	}
+
+	/**
+	 * 查询账户列表数据
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryAccountList(JSONObject object) {
+		return null;
+	}
+
+	/**
+	 * 查询账户分页数据
+	 *
+	 * @param object
+	 * @return
+	 */
+	@Override
+	public JsonResultEntity queryAccountPaged(JSONObject object) {
+		return null;
+	}
+
+	//数据检查
+	private void checkParam(SysApplicationAccountEntity entity,String type){
+
+	}
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationDto.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationDto.java
index e619ae21..87e28f54 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationDto.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationDto.java
@@ -61,6 +61,8 @@ public class SysApplicationDto {
     private List<SysApplicationApiParaEntity> apiParas;
     /**  系统类型  1、致远OA 2、用友U8C 3、用友BIP */
     private String appType;
+    //nifi的id
+    private String nifiAppId;
     //数据源
     private SysApplicationDatabaseEntity databaseEntity;
     private Integer pageNum;
@@ -271,5 +273,13 @@ public class SysApplicationDto {
     public void setAppType(String appType) {
         this.appType = appType;
     }
+
+    public String getNifiAppId() {
+        return nifiAppId;
+    }
+
+    public void setNifiAppId(String nifiAppId) {
+        this.nifiAppId = nifiAppId;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.java
index 3eb1ff34..ee1f05fe 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.java
@@ -42,6 +42,18 @@ public class SysApplicationEntity extends BaseEntity {
    private String interfaceStatus;
   /**  数据源是否启用(1、开启 2、关闭) */
    private String dbStatus;
+   /**  新消息数 */
+   private int newMessageCount;
+   //nifi的appid
+   private String nifiAppId;
+
+    public int getNewMessageCount() {
+        return newMessageCount;
+    }
+
+    public void setNewMessageCount(int newMessageCount) {
+        this.newMessageCount = newMessageCount;
+    }
 
     /**  系统类型  1、致远OA 2、用友U8C 3、用友BIP */
     private String appType;
@@ -201,5 +213,13 @@ public class SysApplicationEntity extends BaseEntity {
     public void setAppType(String appType) {
         this.appType = appType;
     }
+
+    public String getNifiAppId() {
+        return nifiAppId;
+    }
+
+    public void setNifiAppId(String nifiAppId) {
+        this.nifiAppId = nifiAppId;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.xml
index e9852749..ecfc0d3f 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/entity/SysApplicationEntity.xml
@@ -23,6 +23,7 @@
            <result property="interfaceStatus" column="interface_status" jdbcType="VARCHAR"/>
            <result property="dbStatus" column="db_status" jdbcType="VARCHAR"/>
            <result property="appType" column="app_type" jdbcType="VARCHAR"/>
+           <result property="nifiAppId" column="nifi_app_id" jdbcType="VARCHAR"/>
            <result property="sorts" column="sorts" jdbcType="INTEGER"/>
            <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
            <result property="sts" column="sts" jdbcType="VARCHAR"/>
@@ -53,6 +54,7 @@
         ,interface_status 
         ,db_status 
         ,app_type
+        ,nifi_app_id
         ,sorts
         ,org_id 
         ,sts 
@@ -93,6 +95,7 @@
             <if test="interfaceStatus != null and interfaceStatus != ''"> and interface_status = #{interfaceStatus} </if>
             <if test="dbStatus != null and dbStatus != ''"> and db_status = #{dbStatus} </if>
             <if test="appType != null and appType != ''"> and app_type = #{appType} </if>
+            <if test="nifiAppId != null and nifiAppId != ''"> and nifi_app_id = #{nifiAppId} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="sts != null and sts != ''"> and sts = #{sts} </if>
@@ -130,6 +133,7 @@
             <if test="interfaceStatus != null and interfaceStatus != ''"> and interface_status = #{interfaceStatus} </if>
             <if test="dbStatus != null and dbStatus != ''"> and db_status = #{dbStatus} </if>
             <if test="appType != null and appType != ''"> and app_type = #{appType} </if>
+            <if test="nifiAppId != null and nifiAppId != ''"> and nifi_app_id = #{nifiAppId} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="sts != null and sts != ''"> and sts = #{sts} </if>
@@ -169,6 +173,7 @@
             <if test="interfaceStatus != null and interfaceStatus != ''"> and interface_status like concat('%',#{interfaceStatus},'%') </if>
             <if test="dbStatus != null and dbStatus != ''"> and db_status like concat('%',#{dbStatus},'%') </if>
             <if test="appType != null and appType != ''"> and app_type like concat('%',#{appType},'%') </if>
+            <if test="nifiAppId != null and nifiAppId != ''"> and nifi_app_id like concat('%',#{nifiAppId},'%') </if>
             <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
             <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
             <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
@@ -208,6 +213,7 @@
              <if test="interfaceStatus != null and interfaceStatus != ''"> or interface_status = #{interfaceStatus} </if>
              <if test="dbStatus != null and dbStatus != ''"> or db_status = #{dbStatus} </if>
              <if test="appType != null and appType != ''"> or app_type = #{appType} </if>
+             <if test="nifiAppId != null and nifiAppId != ''"> or nifi_app_id = #{nifiAppId} </if>
              <if test="sorts != null"> or sorts = #{sorts} </if>
              <if test="org_id != null and org_id != ''"> or org_id = #{org_id} </if>
               <if test="sts != null and sts != ''"> or sts = #{sts} </if>
@@ -246,6 +252,7 @@
             <if test="interfaceStatus != null and interfaceStatus != ''"> interface_status , </if>
             <if test="dbStatus != null and dbStatus != ''"> db_status , </if>
             <if test="appType != null and appType != ''"> app_type , </if>
+            <if test="nifiAppId != null and nifiAppId != ''"> nifi_app_id , </if>
             <if test="sorts != null"> sorts , </if>
             <if test="org_id != null and org_id != ''"> org_id , </if>
             <if test="sts != null and sts != ''"> sts , </if>
@@ -278,6 +285,7 @@
             <if test="interfaceStatus != null and interfaceStatus != ''"> #{interfaceStatus} ,</if>
             <if test="dbStatus != null and dbStatus != ''"> #{dbStatus} ,</if>
             <if test="appType != null and appType != ''"> #{appType} ,</if>
+            <if test="nifiAppId != null and nifiAppId != ''"> #{nifiAppId} ,</if>
             <if test="sorts != null"> #{sorts} ,</if>
             <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
             <if test="sts != null and sts != ''"> #{sts} ,</if>
@@ -291,18 +299,18 @@
 </insert>
 <!-- 批量新增 -->
 <insert id="entityInsertBatch" >
-  insert into sys_application(app_logo, app_status, name, version_number, app_id, system_address, access_mode, affiliation_field, manufacturer, app_introduction, client_path, web_path, program_path, public_key, secret_key, interface_address, interface_status, db_status,app_type, sorts, org_id, sts, create_time, create_user_id, modify_time, modify_user_id,  sts)
+  insert into sys_application(app_logo, app_status, name, version_number, app_id, system_address, access_mode, affiliation_field, manufacturer, app_introduction, client_path, web_path, program_path, public_key, secret_key, interface_address, interface_status, db_status,app_type,nifi_app_id, sorts, org_id, sts, create_time, create_user_id, modify_time, modify_user_id,  sts)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.appLogo},#{entity.appStatus},#{entity.name},#{entity.versionNumber},#{entity.appId},#{entity.systemAddress},#{entity.accessMode},#{entity.affiliationField},#{entity.manufacturer},#{entity.appIntroduction},#{entity.clientPath},#{entity.webPath},#{entity.programPath},#{entity.publicKey},#{entity.secretKey},#{entity.interfaceAddress},#{entity.interfaceStatus},#{entity.dbStatus},#{entity.appType},#{entity.sorts},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id}, 'Y')
+    (#{entity.appLogo},#{entity.appStatus},#{entity.name},#{entity.versionNumber},#{entity.appId},#{entity.systemAddress},#{entity.accessMode},#{entity.affiliationField},#{entity.manufacturer},#{entity.appIntroduction},#{entity.clientPath},#{entity.webPath},#{entity.programPath},#{entity.publicKey},#{entity.secretKey},#{entity.interfaceAddress},#{entity.interfaceStatus},#{entity.dbStatus},#{entity.appType},#{entity.nifiAppId},#{entity.sorts},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id}, 'Y')
     </foreach>
 </insert>
 <!-- 批量新增或者修改-->
 <insert id="entityInsertOrUpdateBatch" >
-    insert into sys_application(app_logo, app_status, name, version_number,app_id,system_address, access_mode, affiliation_field, manufacturer, app_introduction, client_path, web_path, program_path, public_key, secret_key, interface_address, interface_status, db_status,app_type, sorts, org_id, sts, create_time, create_user_id, modify_time, modify_user_id)
+    insert into sys_application(app_logo, app_status, name, version_number,app_id,system_address, access_mode, affiliation_field, manufacturer, app_introduction, client_path, web_path, program_path, public_key, secret_key, interface_address, interface_status, db_status,app_type,nifi_app_id, sorts, org_id, sts, create_time, create_user_id, modify_time, modify_user_id)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.appLogo},#{entity.appStatus},#{entity.name},#{entity.versionNumber},#{entity.appId},#{entity.systemAddress},#{entity.accessMode},#{entity.affiliationField},#{entity.manufacturer},#{entity.appIntroduction},#{entity.clientPath},#{entity.webPath},#{entity.programPath},#{entity.publicKey},#{entity.secretKey},#{entity.interfaceAddress},#{entity.interfaceStatus},#{entity.dbStatus},#{entity.appType},#{entity.sorts},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id})
+    (#{entity.appLogo},#{entity.appStatus},#{entity.name},#{entity.versionNumber},#{entity.appId},#{entity.systemAddress},#{entity.accessMode},#{entity.affiliationField},#{entity.manufacturer},#{entity.appIntroduction},#{entity.clientPath},#{entity.webPath},#{entity.programPath},#{entity.publicKey},#{entity.secretKey},#{entity.interfaceAddress},#{entity.interfaceStatus},#{entity.dbStatus},#{entity.appType},#{entity.nifiAppId},#{entity.sorts},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id})
     </foreach>
     on duplicate key update
     app_logo = values(app_logo),
@@ -324,6 +332,7 @@
     interface_status = values(interface_status),
     db_status = values(db_status),
     app_type = values(app_type),
+    nifi_app_id = values(nifi_app_id),
     sorts = values(sorts),
     org_id = values(org_id),
     sts = values(sts),
@@ -354,6 +363,7 @@ update sys_application  set
   <if test="interfaceStatus != null and interfaceStatus != ''"> interface_status = #{interfaceStatus},</if>
   <if test="dbStatus != null and dbStatus != ''"> db_status = #{dbStatus},</if>
   <if test="appType != null and appType != ''"> app_type = #{appType},</if>
+  <if test="nifiAppId != null and nifiAppId != ''"> nifi_app_id = #{nifiAppId},</if>
   <if test="sorts != null"> sorts = #{sorts},</if>
   <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
     <if test="sts != null and sts != ''"> sts = #{sts},</if>
@@ -393,6 +403,7 @@ update sys_application  set sts= 'N' ,modify_time = #{modify_time},modify_user_i
             <if test="interfaceStatus != null and interfaceStatus != ''"> and interface_status = #{interfaceStatus} </if>
             <if test="dbStatus != null and dbStatus != ''"> and db_status = #{dbStatus} </if>
             <if test="appType != null and appType != ''"> and app_type = #{appType} </if>
+            <if test="nifiAppId != null and nifiAppId != ''"> and nifi_app_id = #{nifiAppId} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
                          <if test="sts != null and sts != ''"> and sts = #{sts} </if>
                                                                 and sts='Y'
@@ -421,6 +432,7 @@ update sys_application  set sts= 'N' ,modify_time = #{modify_time},modify_user_i
         ,a.interface_status  as interfaceStatus
         ,a.db_status  as dbStatus
         ,a.app_type  as appType
+        ,a.nifi_app_id  as nifiAppId
         from sys_application  a
         <trim prefix="where" prefixOverrides="and">
             <if test="affiliationField != null and affiliationField != ''"> and a.affiliation_field  = #{affiliationField}  </if>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginDto.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginDto.java
index 54a3dc3f..8825215f 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginDto.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginDto.java
@@ -20,6 +20,16 @@ public class SysApplicationPluginDto {
     private Integer pageNum;
     private Integer pageSize;
 
+    private String typeId;
+
+    public String getTypeId() {
+        return typeId;
+    }
+
+    public void setTypeId(String typeId) {
+        this.typeId = typeId;
+    }
+
     public String getAppId() {
         return appId;
     }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.java
index 5929e14b..79b8c326 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.java
@@ -22,13 +22,33 @@ public class SysApplicationPluginEntity extends BaseEntity {
    private String pluginVersion;
   /**  描述 */
    private String pluginRemark;
+   /**  插件类型id */
+   private String typeId;
+   /**  插件类型名称 */
+   private String typeName;
   /**  发布日期 */
    private Date releaseDate;
   /**  启用停用(1启用2停用) */
    private String pluginStatus;
-
+   /**  附件id */
    private String attachmentId;
 
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public String getTypeId() {
+        return typeId;
+    }
+
+    public void setTypeId(String typeId) {
+        this.typeId = typeId;
+    }
+
     public String getPluginPackageName() {
         return pluginPackageName;
     }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.xml
index 90b5444d..5ba4c199 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/plugin/entity/SysApplicationPluginEntity.xml
@@ -20,6 +20,8 @@
            <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
            <result property="attachmentId" column="attachment_id" jdbcType="VARCHAR"/>
            <result property="pluginPackageName" column="plugin_package_name" jdbcType="VARCHAR"/>
+           <result property="typeId" column="type_id" jdbcType="VARCHAR"/>
+            <result property="typeName" column="type_name" jdbcType="VARCHAR"/>
         </resultMap>
     <!-- 查询的字段-->
     <sql id = "SysApplicationPluginEntity_Base_Column_List">
@@ -40,6 +42,7 @@
         ,org_id
         ,attachment_id
         ,plugin_package_name
+        ,type_id
      </sql>
     <!--通过ID获取数据 -->
     <select id="entity_get" resultMap="get-SysApplicationPluginEntity-result">
@@ -70,6 +73,7 @@
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="attachmentId != null and attachmentId != ''"> and attachment_id = #{attachmentId} </if>
             <if test="pluginPackageName != null and pluginPackageName != ''"> and plugin_package_name = #{pluginPackageName} </if>
+            <if test="typeId != null and typeId != ''"> and type_id = #{typeId} </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
@@ -105,30 +109,34 @@
 
     <!-- 分页查询列表 采用like格式 -->
 <select id="entity_list_like" resultMap="get-SysApplicationPluginEntity-result" parameterType = "com.hzya.frame.sysnew.application.plugin.entity.SysApplicationPluginEntity">
-    select
-    <include refid="SysApplicationPluginEntity_Base_Column_List" />
-    from sys_application_plugin
+    SELECT
+    p.*,
+    type.NAME AS type_name
+    FROM
+    sys_application_plugin p
+    LEFT JOIN sys_application_plugin_type type ON p.type_id = type.id
     <trim prefix="where" prefixOverrides="and"> 
-        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
-            <if test="appId != null and appId != ''"> and app_id like concat('%',#{appId},'%') </if>
-            <if test="pluginName != null and pluginName != ''"> and plugin_name like concat('%',#{pluginName},'%') </if>
-            <if test="pluginCode != null and pluginCode != ''"> and plugin_code like concat('%',#{pluginCode},'%') </if>
-            <if test="pluginVersion != null and pluginVersion != ''"> and plugin_version like concat('%',#{pluginVersion},'%') </if>
-            <if test="pluginRemark != null and pluginRemark != ''"> and plugin_remark like concat('%',#{pluginRemark},'%') </if>
-            <if test="releaseDate != null"> and release_date like concat('%',#{releaseDate},'%') </if>
-            <if test="pluginStatus != null and pluginStatus != ''"> and plugin_status like concat('%',#{pluginStatus},'%') </if>
-            <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
-            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
-            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
-            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
-            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
-            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
-            <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
-            <if test="attachmentId != null and attachmentId != ''"> and attachment_id like concat('%',#{attachmentId},'%') </if>
-            <if test="pluginPackageName != null and pluginPackageName != ''"> and plugin_package_name like concat('%',#{pluginPackageName},'%') </if>
-            and sts='Y'
+        <if test="id != null and id != ''"> and p.id like concat('%',#{id},'%') </if>
+            <if test="appId != null and appId != ''"> and p.app_id like concat('%',#{appId},'%') </if>
+            <if test="pluginName != null and pluginName != ''"> and p.plugin_name like concat('%',#{pluginName},'%') </if>
+            <if test="pluginCode != null and pluginCode != ''"> and p.plugin_code like concat('%',#{pluginCode},'%') </if>
+            <if test="pluginVersion != null and pluginVersion != ''"> and p.plugin_version like concat('%',#{pluginVersion},'%') </if>
+            <if test="pluginRemark != null and pluginRemark != ''"> and p.plugin_remark like concat('%',#{pluginRemark},'%') </if>
+            <if test="releaseDate != null"> and p.release_date like concat('%',#{releaseDate},'%') </if>
+            <if test="pluginStatus != null and pluginStatus != ''"> and p.plugin_status like concat('%',#{pluginStatus},'%') </if>
+            <if test="sorts != null"> and p.sorts like concat('%',#{sorts},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and p.create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and p.create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and p.modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and p.modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and p.sts like concat('%',#{sts},'%') </if>
+            <if test="org_id != null and org_id != ''"> and p.org_id like concat('%',#{org_id},'%') </if>
+            <if test="attachmentId != null and attachmentId != ''"> and p.attachment_id like concat('%',#{attachmentId},'%') </if>
+            <if test="pluginPackageName != null and pluginPackageName != ''"> and p.plugin_package_name like concat('%',#{pluginPackageName},'%') </if>
+            <if test="typeId != null and typeId != ''"> and p.type_id like concat('%',#{typeId},'%') </if>
+            and p.sts='Y'
     </trim>
-    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort == null or sort == ''.toString() "> order by p.sorts asc</if>
     <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
 </select>
 
@@ -182,6 +190,7 @@
             <if test="org_id != null and org_id != ''"> org_id , </if>
             <if test="attachmentId != null and attachmentId != ''"> attachment_id , </if>
             <if test="pluginPackageName != null and pluginPackageName != ''"> plugin_package_name , </if>
+            <if test="typeId != null and typeId != ''"> type_id , </if>
     <if test="sts == null ">sts,</if>
   </trim>
   )values(
@@ -203,6 +212,7 @@
             <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
             <if test="attachmentId != null and attachmentId != ''"> #{attachmentId} ,</if>
             <if test="pluginPackageName != null and pluginPackageName != ''"> #{pluginPackageName} ,</if>
+            <if test="typeId != null and typeId != ''"> #{typeId} ,</if>
     <if test="sts == null ">'Y',</if>
   </trim>
   )  
@@ -254,9 +264,10 @@ update sys_application_plugin  set
     <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
     <if test="modify_time != null"> modify_time = #{modify_time},</if>
     <if test="sts != null and sts != ''"> sts = #{sts},</if>
-  <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
+    <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
     <if test="attachmentId != null and attachmentId != ''"> attachment_id = #{attachmentId},</if>
     <if test="pluginPackageName != null and pluginPackageName != ''"> plugin_package_name = #{pluginPackageName},</if>
+    <if test="typeId != null and typeId != ''"> type_id = #{typeId},</if>
   </trim>
 where id = #{id}
 </update>
@@ -291,16 +302,20 @@ update sys_application_plugin  set sts= 'N' ,modify_time = #{modify_time},modify
 
     <!-- 分页查询列表 采用like格式 -->
     <select id="queryListlike" resultMap="get-SysApplicationPluginEntity-result" parameterType = "com.hzya.frame.sysnew.application.plugin.entity.SysApplicationPluginDto">
-        select
-        <include refid="SysApplicationPluginEntity_Base_Column_List" />
-        from sys_application_plugin
+        SELECT
+        p.*,
+        type.NAME AS type_name
+        FROM
+        sys_application_plugin p
+        LEFT JOIN sys_application_plugin_type type ON p.type_id = type.id
         <trim prefix="where" prefixOverrides="and">
-            <if test="appId != null and appId != ''"> and app_id = #{appId} </if>
-            <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
-            <if test="name != null and name != ''"> and ( plugin_name like concat('%',#{name},'%')  or plugin_code like concat('%',#{name},'%') or plugin_version like concat('%',#{name},'%') )</if>
-            and sts='Y'
+            <if test="appId != null and appId != ''"> and p.app_id = #{appId} </if>
+            <if test="id != null and id != ''"> and p.id like concat('%',#{id},'%') </if>
+            <if test="name != null and name != ''"> and ( p.plugin_name like concat('%',#{name},'%')  or p.plugin_code like concat('%',#{name},'%') or p.plugin_version like concat('%',#{name},'%') )</if>
+            <if test="typeId != null and typeId != ''"> and p.type_id like concat('%',#{typeId},'%')</if>
+            and p.sts='Y'
         </trim>
-        order by sorts asc
+        order by p.sorts asc
     </select>
 
 </mapper>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/ISysApplicationPluginTypeDao.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/ISysApplicationPluginTypeDao.java
new file mode 100644
index 00000000..2578639c
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/ISysApplicationPluginTypeDao.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.sysnew.application.pluginType.dao;
+
+import com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity;
+import com.hzya.frame.basedao.dao.IBaseDao; 
+
+/**
+ * 插件类型表(sys_application_plugin_type: table)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-09-19 09:56:24
+ */
+public interface ISysApplicationPluginTypeDao extends IBaseDao<SysApplicationPluginTypeEntity, String> {
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/impl/SysApplicationPluginTypeDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/impl/SysApplicationPluginTypeDaoImpl.java
new file mode 100644
index 00000000..78e7ac17
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/dao/impl/SysApplicationPluginTypeDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.sysnew.application.pluginType.dao.impl;
+
+import com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity;
+import com.hzya.frame.sysnew.application.pluginType.dao.ISysApplicationPluginTypeDao;
+import org.springframework.stereotype.Repository;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+/**
+ * 插件类型表(SysApplicationPluginType)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-09-19 09:56:24
+ */
+@Repository(value = "SysApplicationPluginTypeDaoImpl")
+public class SysApplicationPluginTypeDaoImpl extends MybatisGenericDao<SysApplicationPluginTypeEntity, String> implements ISysApplicationPluginTypeDao{
+ 
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.java
new file mode 100644
index 00000000..b8362993
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.java
@@ -0,0 +1,25 @@
+package com.hzya.frame.sysnew.application.pluginType.entity;
+
+import java.util.Date;
+import com.hzya.frame.web.entity.BaseEntity;
+/**
+ * 插件类型表(SysApplicationPluginType)实体类
+ *
+ * @author makejava
+ * @since 2024-09-19 09:56:24
+ */
+public class SysApplicationPluginTypeEntity extends BaseEntity {
+
+  /**  插件类型名称 */
+   private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.xml
new file mode 100644
index 00000000..f48b07c9
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/entity/SysApplicationPluginTypeEntity.xml
@@ -0,0 +1,201 @@
+<?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.sysnew.application.pluginType.dao.impl.SysApplicationPluginTypeDaoImpl">
+
+    <resultMap id="get-SysApplicationPluginTypeEntity-result" type="com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity" >
+       <result property="id" column="id" jdbcType="VARCHAR"/>
+           <result property="name" column="name" jdbcType="VARCHAR"/>
+           <result property="sorts" column="sorts" jdbcType="INTEGER"/>
+           <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
+           <result property="sts" column="sts" jdbcType="VARCHAR"/>
+           <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+           <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
+           <result property="modify_time" column="modify_time" jdbcType="TIMESTAMP"/>
+           <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
+        </resultMap>
+    <!-- 查询的字段-->
+    <sql id = "SysApplicationPluginTypeEntity_Base_Column_List">
+        id
+        ,name
+        ,sorts 
+        ,org_id 
+        ,sts 
+        ,create_time 
+        ,create_user_id 
+        ,modify_time 
+        ,modify_user_id 
+     </sql>
+ <!-- 查询 采用==查询 -->
+ <select id="entity_list_base" resultMap="get-SysApplicationPluginTypeEntity-result" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity">
+    select
+    <include refid="SysApplicationPluginTypeEntity_Base_Column_List" />
+    from sys_application_plugin_type
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="sorts != null"> and sorts = #{sorts} </if>
+            <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+    
+<!-- 查询符合条件的数量 -->
+<select id="entity_count" resultType="Integer" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity">
+        select  count(1)   from sys_application_plugin_type
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="sorts != null"> and sorts = #{sorts} </if>
+            <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
+            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+            <if test="create_time != null"> and create_time = #{create_time} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
+            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
+    </select>
+
+    <!-- 分页查询列表 采用like格式 -->
+<select id="entity_list_like" resultMap="get-SysApplicationPluginTypeEntity-result" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity">
+    select
+    <include refid="SysApplicationPluginTypeEntity_Base_Column_List" />
+    from sys_application_plugin_type
+    <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
+            <if test="name != null and name != ''"> and name like concat('%',#{name},'%') </if>
+            <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
+            <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
+            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
+            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!-- 查询列表 字段采用or格式 -->
+<select id="SysApplicationPluginTypeentity_list_or" resultMap="get-SysApplicationPluginTypeEntity-result" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity">
+    select
+    <include refid="SysApplicationPluginTypeEntity_Base_Column_List" />
+    from sys_application_plugin_type
+    <trim prefix="where" prefixOverrides="and"> 
+         <if test="id != null and id != ''"> or id = #{id} </if>
+             <if test="appId != null and appId != ''"> or app_id = #{appId} </if>
+             <if test="name != null and name != ''"> or name = #{name} </if>
+             <if test="sorts != null"> or sorts = #{sorts} </if>
+             <if test="org_id != null and org_id != ''"> or org_id = #{org_id} </if>
+              <if test="sts != null and sts != ''"> or sts = #{sts} </if>
+             <if test="create_time != null"> or create_time = #{create_time} </if>
+              <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
+              <if test="modify_time != null"> or modify_time = #{modify_time} </if>
+              <if test="modify_user_id != null and modify_user_id != ''"> or modify_user_id = #{modify_user_id} </if>
+             and sts='Y'
+    </trim>
+    <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
+    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+</select>
+
+<!--新增所有列-->
+<insert id="entity_insert" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_application_plugin_type(
+  <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> id , </if>
+            <if test="name != null and name != ''"> name , </if>
+            <if test="sorts != null"> sorts , </if>
+            <if test="org_id != null and org_id != ''"> org_id , </if>
+            <if test="sts != null and sts != ''"> sts , </if>
+            <if test="create_time != null"> create_time , </if>
+            <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
+            <if test="modify_time != null"> modify_time , </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id , </if>
+    <if test="sts == null ">sts,</if>
+  </trim>
+  )values(
+ <trim suffix="" suffixOverrides=",">
+       <if test="id != null and id != ''"> #{id} ,</if>
+            <if test="name != null and name != ''"> #{name} ,</if>
+            <if test="sorts != null"> #{sorts} ,</if>
+            <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
+            <if test="sts != null and sts != ''"> #{sts} ,</if>
+            <if test="create_time != null"> #{create_time} ,</if>
+            <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
+            <if test="modify_time != null"> #{modify_time} ,</if>
+            <if test="modify_user_id != null and modify_user_id != ''"> #{modify_user_id} ,</if>
+    <if test="sts == null ">'Y',</if>
+  </trim>
+  )  
+</insert>
+<!-- 批量新增 -->
+<insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
+  insert into sys_application_plugin_type(app_id, name, org_id, sts, create_time, create_user_id, modify_time, modify_user_id,  sts) 
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.appId},#{entity.name},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id}, 'Y')
+    </foreach>
+</insert>
+<!-- 批量新增或者修改-->
+<insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+    insert into sys_application_plugin_type(app_id, name, org_id, sts, create_time, create_user_id, modify_time, modify_user_id)
+    values
+    <foreach collection="entities" item="entity" separator=",">
+    (#{entity.appId},#{entity.name},#{entity.org_id},#{entity.sts},#{entity.create_time},#{entity.create_user_id},#{entity.modify_time},#{entity.modify_user_id})
+    </foreach>
+    on duplicate key update
+    app_id = values(app_id),
+    name = values(name),
+    org_id = values(org_id),
+    sts = values(sts),
+    create_time = values(create_time),
+    create_user_id = values(create_user_id),
+    modify_time = values(modify_time),
+    modify_user_id = values(modify_user_id)</insert>
+<!--通过主键修改方法-->
+<update id="entity_update" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity" >
+update sys_application_plugin_type  set
+<trim suffix="" suffixOverrides=",">
+  <if test="name != null and name != ''"> name = #{name},</if>
+  <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
+    <if test="sts != null and sts != ''"> sts = #{sts},</if>
+  <if test="create_time != null"> create_time = #{create_time},</if>
+    <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
+    <if test="modify_time != null"> modify_time = #{modify_time},</if>
+    <if test="modify_user_id != null and modify_user_id != ''"> modify_user_id = #{modify_user_id},</if>
+  </trim>
+where id = #{id}
+</update>
+<!-- 逻辑删除 -->
+<update id="entity_logicDelete" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity" >
+update sys_application_plugin_type  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+where id = #{id}
+</update>
+<!-- 多条件逻辑删除 -->
+<update id="entity_logicDelete_Multi_Condition" parameterType = "com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity" >
+update sys_application_plugin_type  set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id}
+ <trim prefix="where" prefixOverrides="and"> 
+        <if test="id != null and id != ''"> and id = #{id} </if>
+            <if test="name != null and name != ''"> and name = #{name} </if>
+            <if test="sorts != null"> and sorts = #{sorts} </if>
+                         <if test="sts != null and sts != ''"> and sts = #{sts} </if>
+                                                                and sts='Y'
+    </trim>
+</update>
+<!--通过主键删除-->
+<delete id="entity_delete">
+    delete from sys_application_plugin_type where id = #{id}
+</delete>
+
+</mapper>
+
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/ISysApplicationPluginTypeService.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/ISysApplicationPluginTypeService.java
new file mode 100644
index 00000000..dfee99d3
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/ISysApplicationPluginTypeService.java
@@ -0,0 +1,22 @@
+package com.hzya.frame.sysnew.application.pluginType.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 插件类型表(SysApplicationPluginType)表服务接口
+ *
+ * @author makejava
+ * @since 2024-09-19 09:56:24
+ */
+public interface ISysApplicationPluginTypeService extends IBaseService<SysApplicationPluginTypeEntity, String>{
+    JsonResultEntity queryPluginType(JSONObject jsonObject);
+
+    JsonResultEntity savePluginType(JSONObject jsonObject);
+
+    JsonResultEntity updatePluginType(JSONObject jsonObject);
+
+    JsonResultEntity deletePluginType(JSONObject jsonObject);
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/impl/SysApplicationPluginTypeServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/impl/SysApplicationPluginTypeServiceImpl.java
new file mode 100644
index 00000000..d6c00bc1
--- /dev/null
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/pluginType/service/impl/SysApplicationPluginTypeServiceImpl.java
@@ -0,0 +1,106 @@
+package com.hzya.frame.sysnew.application.pluginType.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.plugin.dao.ISysApplicationPluginDao;
+import com.hzya.frame.sysnew.application.plugin.entity.SysApplicationPluginEntity;
+import com.hzya.frame.sysnew.application.pluginType.entity.SysApplicationPluginTypeEntity;
+import com.hzya.frame.sysnew.application.pluginType.dao.ISysApplicationPluginTypeDao;
+import com.hzya.frame.sysnew.application.pluginType.service.ISysApplicationPluginTypeService;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import javax.annotation.Resource;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 插件类型表(SysApplicationPluginType)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-09-19 09:56:24
+ */
+@Service(value = "sysApplicationPluginTypeService")
+public class SysApplicationPluginTypeServiceImpl extends BaseService<SysApplicationPluginTypeEntity, String> implements ISysApplicationPluginTypeService {
+     
+    private ISysApplicationPluginTypeDao sysApplicationPluginTypeDao;
+
+	@Resource
+	private ISysApplicationPluginDao sysApplicationPluginDao;
+    
+    @Autowired
+	public void setSysApplicationPluginTypeDao(ISysApplicationPluginTypeDao dao) {
+		this.sysApplicationPluginTypeDao = dao;
+		this.dao = dao;
+	}
+
+	@Override
+	public JsonResultEntity queryPluginType(JSONObject jsonObject){
+		SysApplicationPluginTypeEntity entity = getData("jsonStr", jsonObject, SysApplicationPluginTypeEntity.class);
+		if(entity == null){
+			entity = new SysApplicationPluginTypeEntity();
+		}
+		List<SysApplicationPluginTypeEntity> list = sysApplicationPluginTypeDao.queryByLike(entity);
+		return BaseResult.getSuccessMessageEntity("查询数据成功",list);
+	}
+
+	@Override
+	public JsonResultEntity savePluginType(JSONObject jsonObject) {
+		SysApplicationPluginTypeEntity entity = getData("jsonStr", jsonObject, SysApplicationPluginTypeEntity.class);
+		if(entity == null){
+			return BaseResult.getFailureMessageEntity("参数错误");
+		}
+		if(entity.getName() == null || "".equals(entity.getName())){
+			return BaseResult.getFailureMessageEntity("插件类型名称不能为空");
+		}
+		entity.setCreate();
+		sysApplicationPluginTypeDao.save(entity);
+		return BaseResult.getSuccessMessageEntity("保存数据成功",entity);
+	}
+
+	@Override
+	public JsonResultEntity updatePluginType(JSONObject jsonObject) {
+		SysApplicationPluginTypeEntity entity = getData("jsonStr", jsonObject, SysApplicationPluginTypeEntity.class);
+		if(entity == null){
+			return BaseResult.getFailureMessageEntity("参数错误");
+		}
+		if(entity.getId() == null || "".equals(entity.getId())){
+			return BaseResult.getFailureMessageEntity("ID不能为空");
+		}
+		if(entity.getName() == null || "".equals(entity.getName())){
+			return BaseResult.getFailureMessageEntity("插件类型名称不能为空");
+		}
+		entity.setUpdate();
+		sysApplicationPluginTypeDao.update(entity);
+		return BaseResult.getSuccessMessageEntity("更新数据成功",entity);
+	}
+
+	@Transactional
+	@Override
+	public JsonResultEntity deletePluginType(JSONObject jsonObject) {
+		SysApplicationPluginTypeEntity entity = getData("jsonStr", jsonObject, SysApplicationPluginTypeEntity.class);
+		if(entity == null){
+			return BaseResult.getFailureMessageEntity("参数错误");
+		}
+		if(entity.getId() == null || "".equals(entity.getId())){
+			return BaseResult.getFailureMessageEntity("ID不能为空");
+		}
+		// 同步删除匹配插件中的插件类型,将其赋值为null
+		SysApplicationPluginEntity pluginEntity = new SysApplicationPluginEntity();
+		pluginEntity.setTypeId(entity.getId());
+		List<SysApplicationPluginEntity> pluginList = sysApplicationPluginDao.queryBase(pluginEntity);
+		for(SysApplicationPluginEntity plugin : pluginList){
+			plugin.setTypeId("无");
+			plugin.setUpdate();
+			sysApplicationPluginDao.update(plugin);
+		}
+		entity.setUpdate();
+		sysApplicationPluginTypeDao.logicRemove(entity);
+		return BaseResult.getSuccessMessageEntity("删除数据成功");
+	}
+
+
+}
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java
index 25ec9090..363f69c4 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/ISysApplicationService.java
@@ -3,6 +3,7 @@ package com.hzya.frame.sysnew.application.service;
 import com.alibaba.fastjson.JSONObject;
 import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
 import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
 import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogEntity;
 import com.hzya.frame.web.entity.JsonResultEntity;
 
@@ -308,6 +309,7 @@ public interface ISysApplicationService extends IBaseService<SysApplicationEntit
     JsonResultEntity enableOrDisableAppDatasource(JSONObject jsonObject);
 
     JsonResultEntity externalCallInterface(ServletRequest servletRequest, ServletResponse servletResponse);
+    JsonResultEntity externalCallInterfacefileUpload(ServletRequest servletRequest, ServletResponse servletResponse);
 
     JsonResultEntity externalCallInterfaceResend(SysMessageManageLogEntity resendLogEntity);
 
@@ -432,4 +434,8 @@ public interface ISysApplicationService extends IBaseService<SysApplicationEntit
      * @return com.hzya.frame.web.entity.JsonResultEntity
      **/
     JsonResultEntity externalCallInterfaceToESB(ServletRequest servletRequest, ServletResponse servletResponse);
+
+    SysExtensionApiEntity setDDtoken(SysExtensionApiEntity sysExtensionApiEntity);
+    SysExtensionApiEntity setDDUserId(SysExtensionApiEntity sysExtensionApiEntity);
+
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/impl/SysApplicationServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/impl/SysApplicationServiceImpl.java
index b6ad01cd..5afcadef 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/application/service/impl/SysApplicationServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/application/service/impl/SysApplicationServiceImpl.java
@@ -55,23 +55,36 @@ import com.hzya.frame.web.action.ApplicationContextUtil;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
 import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.TrustAllStrategy;
 import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContextBuilder;
 import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.TaskExecutor;
+import org.springframework.http.client.MultipartBodyBuilder;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.annotation.Resource;
+import javax.net.ssl.SSLContext;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.nio.file.Files;
@@ -125,7 +138,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
     @Resource
     private ApplicationCache applicationCache;
 
-    @Value("${savefile.tomcatpath}")
+    @Value("${savefile.tomcatpath:}")
     public String TOMCATPATH;
     //多线程请求加锁 HttpRequest 构造方法是静态的
     private final Object lock = new Object();
@@ -705,6 +718,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
         sysApplicationEntity.setSts("Y");
         sysApplicationEntity.setModify_user_id(StpUtil.getLoginIdAsString());
         sysApplicationEntity.setModify_time(new Date());
+        sysApplicationEntity.setNifiAppId(entity.getNifiAppId());
         sysApplicationDao.update(sysApplicationEntity);
         applicationCache.reloadData("1");
         return sysApplicationEntity;
@@ -1687,7 +1701,6 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
     @Override
     @DSTransactional()
     public JsonResultEntity externalCallInterface(ServletRequest servletRequest, ServletResponse servletResponse) {
-
         //例如:A应用发送数据到中台,中台转发到B应用
         HttpServletRequest request = (HttpServletRequest) servletRequest;
         String oldbodys = ServletUtil.getBody(servletRequest);
@@ -1881,9 +1894,28 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
 
 
         if ("POST".equals(method)) {
+
             HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
             // HttpClient
-            CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build();
+            //CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build();
+            // 创建一个 CloseableHttpClient 并配置 SSL 上下文和主机名验证器
+            // 创建一个信任所有证书的 SSLContext
+            SSLContext sslContext = null;
+            try {
+                sslContext = new SSLContextBuilder()
+                        .loadTrustMaterial(null, TrustAllStrategy.INSTANCE)
+                        .build();
+            } catch (Exception e) {
+
+            }
+            CloseableHttpClient closeableHttpClient = HttpClients.custom()
+                    .setSSLContext(sslContext)
+                    .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
+                    .build();
+
+            //HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+            // HttpClient
+            //CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build();
             HttpPost post = new HttpPost(url.toString());
             CloseableHttpResponse response = null;
 
@@ -1954,17 +1986,29 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
                     if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
                         return BaseResult.getSuccessMessageEntity("转发成功", jsonObject);
                     }else {
-                        return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), jsonObject);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        }
                     }
                 } else {
                     if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
                         return BaseResult.getSuccessMessageEntity("转发成功", body);
                     }else {
-                        return BaseResult.getFailureMessageEntity("转发失败", body);
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", body);
+                        }
                     }
                 }
             } else {
-                return BaseResult.getFailureMessageEntity("转发失败", body);
+                if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                    return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                }else {
+                    return BaseResult.getFailureMessageEntity("转发失败", body);
+                }
             }
 
         } else {//GET
@@ -1986,6 +2030,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
 
             boolean flag = true;
             try {
+
                 response = closeableHttpClient.execute(get);
                 HttpEntity entity = response.getEntity();
                 synchronized (lock) {
@@ -2035,13 +2080,407 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
                     if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
                         return BaseResult.getSuccessMessageEntity("转发成功", jsonObject);
                     }else {
-                        return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), jsonObject);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        }
                     }
                 } else {
                     if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
                         return BaseResult.getSuccessMessageEntity("转发成功", body);
                     }else {
-                        return BaseResult.getFailureMessageEntity("转发失败", body);
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", body);
+                        }
+                    }
+                }
+            } else {
+                return BaseResult.getFailureMessageEntity("转发失败", body);
+            }
+        }
+    }
+
+    /**
+     * @param servletRequest
+     * @param servletResponse
+     * @return com.hzya.frame.web.entity.JsonResultEntity
+     * @Author lvleigang
+     * @Description 外部系统调用接口
+     * @Date 4:21 下午 2023/10/19
+     **/
+    @Override
+    @DSTransactional()
+    public JsonResultEntity externalCallInterfacefileUpload(ServletRequest servletRequest, ServletResponse servletResponse) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) servletRequest;
+        // 获取普通表单参数
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        Map<String, String> oldheaderMap = ServletUtil.getHeaderMap(request);
+        //应用key
+        String publicKey = request.getHeader("publicKey");
+        //应用密钥
+        String secretKey = request.getHeader("secretKey");
+        //appId
+        String appId = request.getHeader("appId");
+        //apiCode
+        String apiCode = request.getHeader("apiCode");
+
+        Enumeration<String> bodyname = multipartRequest.getParameterNames();
+        JSONObject bodysss = new JSONObject();
+        if (bodyname.hasMoreElements()) {
+            while (bodyname.hasMoreElements()) {
+                String headerName = bodyname.nextElement();
+                String headerValue = multipartRequest.getParameter(headerName);
+                bodysss.put( headerName,headerValue);
+            }
+        }
+        String oldquerys = multipartRequest.getQueryString();
+        String oldbodys = bodysss.toJSONString();
+        Iterator<String> filenemes = multipartRequest.getFileNames();
+        Map<String, List<MultipartFile>> files =  new HashMap<>();
+
+        if (filenemes.hasNext()) {
+            filenemes.forEachRemaining(element -> files.put(element,multipartRequest.getFiles(element)));
+        }
+
+        String ip = IPHelper.getIpAddr(multipartRequest);
+        if (publicKey == null || "".equals(publicKey)) {
+            return BaseResult.getFailureMessageEntity("请先传递公钥");
+        }
+        if (secretKey == null || "".equals(secretKey)) {
+            return BaseResult.getFailureMessageEntity("请先传递密钥");
+        }
+        if (appId == null || "".equals(appId)) {
+            return BaseResult.getFailureMessageEntity("请先传递接收方应用");
+        }
+        if (apiCode == null || "".equals(apiCode)) {
+            return BaseResult.getFailureMessageEntity("请先传递发送接口");
+        }
+
+        logger.info("请求参数:publicKey:【" + publicKey + "】secretKey:【" + secretKey + "】appId:【" + appId + "】apiCode:【" + apiCode);
+        //根据请求a应用的公钥、密钥是否能查找到一条数据
+
+        SysApplicationEntity sendApp = getAppByPublicKeySecretKey(publicKey, secretKey);
+        if (sendApp == null) {
+            return BaseResult.getFailureMessageEntity("公钥、密钥错误,请联系管理员");
+        }
+        //判断应用是否启用
+        if (sendApp.getAppStatus() == null || !"1".equals(sendApp.getAppStatus())) {
+            saveLog(sendApp, new SysApplicationEntity(), new SysApplicationApiEntity(), oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,sendApp.getName() + "应用未启用");
+            return BaseResult.getFailureMessageEntity(sendApp.getName() + "应用未启用,请联系管理员");
+        }
+
+
+        SysApplicationEntity receiveApp = getAppByAppId(appId);
+        if (receiveApp == null) {
+            saveLog(sendApp, new SysApplicationEntity(), new SysApplicationApiEntity(), oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,"根据appId:" + appId + "未匹配到应用");
+            return BaseResult.getFailureMessageEntity("根据appId:" + appId + "未匹配到应用,请联系管理员");
+        }
+        //判断应用是否启用
+        if (receiveApp.getAppStatus() == null || !"1".equals(receiveApp.getAppStatus())) {
+            saveLog(sendApp, receiveApp, new SysApplicationApiEntity(), oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApp.getName() + "应用未启用" );
+            return BaseResult.getFailureMessageEntity(receiveApp.getName() + "应用未启用,请联系管理员");
+        }
+        //判断应用接口是否启用
+        if (receiveApp.getInterfaceStatus() == null || !"1".equals(receiveApp.getInterfaceStatus())) {
+            saveLog(sendApp, receiveApp, new SysApplicationApiEntity(), oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApp.getName() + "应用接口环境未启用" );
+            return BaseResult.getFailureMessageEntity(receiveApp.getName() + "应用接口环境未启用,请联系管理员");
+        }
+
+        SysApplicationApiEntity receiveApi = getApiByAppIdApiCode(receiveApp.getId(), apiCode);
+        if (receiveApi == null) {
+            saveLog(sendApp, receiveApp, new SysApplicationApiEntity(), oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApp.getName() + ":" + apiCode + "未启用或者未创建" );
+            return BaseResult.getFailureMessageEntity(receiveApp.getName() + ":" + apiCode + "未启用或者未创建");
+        }
+
+        SysApplicationApiAuthEntity sysApplicationApiAuthEntity = getApiAuthByNameAppId(sendApp.getId(), receiveApp.getId());
+        if (sysApplicationApiAuthEntity == null) {
+            saveLog(sendApp, receiveApp, receiveApi, oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApp.getName() + "应用权限配置错误" );
+            return BaseResult.getFailureMessageEntity(receiveApp.getName() + "应用权限配置错误");
+        }
+        if (sysApplicationApiAuthEntity.getSystemAddress() != null && !"".equals(sysApplicationApiAuthEntity.getSystemAddress())
+                && !sysApplicationApiAuthEntity.getSystemAddress().contains(ip)) {
+            saveLog(sendApp, receiveApp, receiveApi, oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApp.getName() + "发送应用" + receiveApp.getName() + "的ip白名单配置错误" );
+            return BaseResult.getFailureMessageEntity(receiveApp.getName() + "发送应用" + receiveApp.getName() + "的ip白名单配置错误");
+        }
+
+        SysApplicationApiAuthDetailEntity sysApplicationApiAuthDetailEntity = getApiAuthDetailByAppIdApiIdTripartiteSystemId(receiveApp.getId(), receiveApi.getId(), sysApplicationApiAuthEntity.getId());
+        if (sysApplicationApiAuthDetailEntity == null) {
+            saveLog(sendApp, receiveApp, receiveApi, oldbodys, null, oldheaderMap, null, null, oldquerys, null, null, false,receiveApi.getApiName() + "未授权给" + sendApp.getName() );
+            return BaseResult.getFailureMessageEntity(receiveApi.getApiName() + "未授权给" + sendApp.getName() + ",请联系管理员");
+        }
+        SysExtensionApiEntity sysExtensionApiEntity = new SysExtensionApiEntity();
+
+
+        List<String> a = Arrays.asList(new String[]{"apicode", "appid", "secretkey", "publickey", "x-forwarded-for", "cookie", "x-forwarded-proto", "x-real-ip", "content-length", "accept-language", "host", "content-type", "connection", "cache-control", "accept-encoding", "pragma", "accept", "user-agent"});
+        Map<String, String> headers = new HashMap<>();
+        if (receiveApi.getHeaderIn() != null && !"".equals(receiveApi.getHeaderIn())) {
+            JSONArray jsonArray = JSONArray.parseArray(receiveApi.getHeaderIn());
+            if (jsonArray != null && jsonArray.size() > 0) {
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject object1 = jsonArray.getJSONObject(i);
+                    headers.put(object1.getString("parameterName"), object1.getString("example"));
+                }
+            }
+        }
+        if (oldheaderMap != null && oldheaderMap.size() > 0) {
+            for (Map.Entry<String, String> entry : oldheaderMap.entrySet()) {
+                if (!a.contains(entry.getKey())) {
+                    headers.put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+
+
+
+        sysExtensionApiEntity.setSendApp(sendApp);
+        sysExtensionApiEntity.setReceiveApp(receiveApp);
+        sysExtensionApiEntity.setReceiveApi(receiveApi);
+        sysExtensionApiEntity.setHeaders(headers);
+        sysExtensionApiEntity.setQuerys(oldquerys);
+        sysExtensionApiEntity.setBodys(oldbodys);
+        Method[] methods = null;
+        Object object = null;
+
+
+
+
+        // 判断是否有内部api 是否扩展api 1、启用 2、停用
+        if (receiveApi.getExtensionApi() != null && "1".equals(receiveApi.getExtensionApi())
+                && receiveApi.getBeanName() != null && !"".equals(receiveApi.getBeanName())
+                && receiveApi.getFunName() != null && !"".equals(receiveApi.getFunName())
+        ) {
+            //获取类
+            try {
+                object = ApplicationContextUtil.getBeanByName(receiveApi.getBeanName());
+            } catch (SecurityException e) {
+
+            }
+            //获取类下面的方法
+            methods = object.getClass().getMethods();
+            if (methods == null || methods.length == 0) {
+                return BaseResult.getFailureMessageEntity("未找到内部方法,请联系管理员");
+            }
+            for (Method m : methods) {
+                if (null != m) {
+                    if (m.getName().equals(receiveApi.getFunName().trim())) {
+                        try {
+                            logger.info("invoke开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                            sysExtensionApiEntity = (SysExtensionApiEntity) m.invoke(object, sysExtensionApiEntity);
+                            logger.info("invoke结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                            break;
+                        } catch (Exception e) {
+                            logger.error("invokeException{}", e.getMessage());
+                            return BaseResult.getFailureMessageEntity("内部方法执行错误,请联系管理员");
+                        }
+                    }
+                }
+            }
+
+        }
+        headers = sysExtensionApiEntity.getHeaders();
+        String querys = sysExtensionApiEntity.getQuerys();
+        String bodys = sysExtensionApiEntity.getBodys();
+        //设置参数获取参数
+        StringBuffer url = new StringBuffer();
+        if(!receiveApi.getDestinationAddress().toLowerCase().startsWith("http")){
+            url.append(receiveApp.getInterfaceAddress());
+        }
+        url.append(receiveApi.getDestinationAddress());
+        if (querys != null) {
+            url.append("?");
+            url.append(querys);
+        }
+        Integer outTime = 6000;
+        if (receiveApi.getTimeoutPeriod() != null && !"".equals(receiveApi.getTimeoutPeriod())) {
+            outTime = Integer.valueOf(receiveApi.getTimeoutPeriod());
+        }
+        //1、POST 2、GET
+        String method = "POST";
+        if ("2".equals(receiveApi.getRequestMethod())) {
+            method = "GET";
+        }
+
+        if ("POST".equals(method)) {
+            StringBuilder body = new StringBuilder();
+            boolean flag = true;
+
+            try {
+                HttpPost httpPost = new HttpPost(url.toString());
+                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+                if(!files.isEmpty()){
+                    for (Map.Entry<String, List<MultipartFile>> entry : files.entrySet()) {
+                        String key = entry.getKey();
+                        List<MultipartFile> multipartFile = entry.getValue();
+                        if(multipartFile != null && multipartFile.size() > 0){
+                            for (int i = 0; i < multipartFile.size(); i++) {
+                                File file = new File(multipartFile.get(i).getOriginalFilename());
+                                Files.write(Paths.get(file.getAbsolutePath()), multipartFile.get(i).getBytes());
+                                builder.addBinaryBody(key, file, ContentType.APPLICATION_OCTET_STREAM, file.getName());
+                            }
+                        }
+                    }
+                }
+                if (headers != null && headers.size() > 0) {
+                    for (String key : headers.keySet()) {
+                        httpPost.setHeader(key, headers.get(key));
+                    }
+                }
+                //if (bodys != null && !"".equals(bodys)) {
+                //    builder.addTextBody("fileFlag", "true", ContentType.TEXT_PLAIN);
+                //    builder.addTextBody("businessType", "application", ContentType.TEXT_PLAIN);
+                //}
+                HttpEntity entity = builder.build();
+                httpPost.setEntity(entity);
+
+                HttpResponse response = null;
+                response = HttpClientBuilder.create().build().execute(httpPost);
+
+                HttpEntity entity1 = response.getEntity();
+                synchronized (lock) {
+                    body.append(EntityUtils.toString(entity1,"UTF-8"));
+                }
+                flag = true;
+                logger.info("返回结果:" + body);
+            } catch (Exception e) {
+                logger.error("请求错误:" + e.getMessage());
+                body.append(e.getMessage());
+                flag = false;
+            }
+            logger.info("保存日志开始");
+            SysMessageManageLogEntity sysMessageManageLogEntity = saveLog(sendApp, receiveApp, receiveApi, oldbodys,bodys, oldheaderMap,headers, headers, oldquerys,querys, body.toString(),true,null);
+            if (methods != null && methods.length > 0) {
+                for (Method m : methods) {
+                    if (null != m) {
+                        if (m.getName().equals(receiveApi.getFunName().trim()+"CallBack")) {
+                            try {
+                                logger.info("invoke开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                                m.invoke(object, sysMessageManageLogEntity);
+                                logger.info("invoke结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                            } catch (Exception e) {
+                                logger.error("invokeException{}", e.getMessage());
+                            }
+                        }
+                    }
+                }
+            }
+            logger.info("保存日志结束");
+            if (flag) {
+                if (JSONUtil.isTypeJSON(body.toString())) {
+                    JSONObject jsonObject = JSONObject.parseObject(body.toString());
+                    if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
+                        return BaseResult.getSuccessMessageEntity("转发成功", jsonObject);
+                    }else {
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), jsonObject);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        }
+                    }
+                } else {
+                    if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
+                        return BaseResult.getSuccessMessageEntity("转发成功", body);
+                    }else {
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", body);
+                        }
+                    }
+                }
+            } else {
+                if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                    return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                }else {
+                    return BaseResult.getFailureMessageEntity("转发失败", body);
+                }
+            }
+        } else {//GET
+
+            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
+            // HttpClient
+            CloseableHttpClient closeableHttpClient = httpClientBuilder.disableCookieManagement().build();
+            HttpGet get = new HttpGet(url.toString());
+            CloseableHttpResponse response = null;
+
+            RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(outTime).build();
+            get.setConfig(requestConfig);//设置请求参数【超时时间】
+            if (headers != null && headers.size() > 0) {
+                for (String key : headers.keySet()) {
+                    get.setHeader(key, headers.get(key));
+                }
+            }
+            StringBuilder body = new StringBuilder();
+
+            boolean flag = true;
+            try {
+
+                response = closeableHttpClient.execute(get);
+                HttpEntity entity = response.getEntity();
+                synchronized (lock) {
+                    body.append(EntityUtils.toString(entity,"UTF-8"));
+                }
+                flag = true;
+                logger.info("返回结果:" + body);
+            } catch (Exception e) {
+                logger.error("请求错误:" + e.getMessage());
+                body.append(e.getMessage());
+                flag = false;
+            } finally {
+                try {
+                    // 关闭响应对象
+                    if (response != null) {
+                        response.close();
+                    }
+                    // 关闭响应对象
+                    if (closeableHttpClient != null) {
+                        closeableHttpClient.close();
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            logger.info("保存日志开始");
+            SysMessageManageLogEntity sysMessageManageLogEntity = saveLog(sendApp, receiveApp, receiveApi, oldbodys,bodys, oldheaderMap,headers, headers, oldquerys,querys, body.toString(), true,null);
+            if (methods != null && methods.length > 0) {
+                for (Method m : methods) {
+                    if (null != m) {
+                        if (m.getName().equals(receiveApi.getFunName().trim()+"CallBack")) {
+                            try {
+                                logger.info("invoke开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                                m.invoke(object, sysMessageManageLogEntity);
+                                logger.info("invoke结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+                            } catch (Exception e) {
+                                logger.error("invokeException{}", e.getMessage());
+                            }
+                        }
+                    }
+                }
+            }
+            logger.info("保存日志结束");
+            if (flag) {
+                if (JSONUtil.isTypeJSON(body.toString())) {
+                    JSONObject jsonObject = JSONObject.parseObject(body.toString());
+                    if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
+                        return BaseResult.getSuccessMessageEntity("转发成功", jsonObject);
+                    }else {
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), jsonObject);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", jsonObject);
+                        }
+                    }
+                } else {
+                    if(sysMessageManageLogEntity.getStatus() != null && "3".equals(sysMessageManageLogEntity.getStatus())){
+                        return BaseResult.getSuccessMessageEntity("转发成功", body);
+                    }else {
+                        if(sysMessageManageLogEntity.getReturnMsg()!= null&& !"".equals(sysMessageManageLogEntity.getReturnMsg())){
+                            return BaseResult.getFailureMessageEntity("转发失败:"+sysMessageManageLogEntity.getReturnMsg(), body);
+                        }else {
+                            return BaseResult.getFailureMessageEntity("转发失败", body);
+                        }
                     }
                 }
             } else {
@@ -2598,6 +3037,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
                                 sysMessageManageLogEntity.setStatus("4");//返回信息
                                 if (receiveApi.getReturnMsg() != null && !"".equals(receiveApi.getReturnMsg())) {
                                     String returnMsg = cheackdatas.getString(receiveApi.getReturnMsg());
+                                    sysMessageManageLogEntity.setReturnMsg(returnMsg);//返回信息
                                     sysMessageManageLogEntity.setRemark("接口调用失败,返回值错误,返回信息如下:" + returnMsg);//返回信息
                                 } else {
                                     sysMessageManageLogEntity.setRemark("接口调用失败,返回值错误");//返回信息
@@ -2608,6 +3048,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
                             sysMessageManageLogEntity.setStatus("4");//返回信息
                             if (receiveApi.getReturnMsg() != null && !"".equals(receiveApi.getReturnMsg())) {
                                 String returnMsg = cheackdatas.getString(receiveApi.getReturnMsg());
+                                sysMessageManageLogEntity.setReturnMsg(returnMsg);//返回信息
                                 sysMessageManageLogEntity.setRemark("接口调用失败,返回值错误,返回信息如下:" + returnMsg);//返回信息
                             } else {
                                 sysMessageManageLogEntity.setRemark("接口调用失败,返回值错误");//返回信息
@@ -2624,6 +3065,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
                     if (JSONUtil.isTypeJSON(body)) {
                         JSONObject cheackdatas = JSONObject.parseObject(body);
                         String checkdata = cheackdatas.getString(receiveApi.getReturnMsg());
+                        sysMessageManageLogEntity.setReturnMsg(checkdata);//返回信息
                         sysMessageManageLogEntity.setRemark("接口调用失败,api返回信息字段未配置,返回信息如下:" + checkdata);//返回信息
                     } else {
                         sysMessageManageLogEntity.setRemark("接口调用失败,返回格式错误,不是JSON");//返回信息
@@ -2649,7 +3091,7 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
         sysPushMessageEntity.setReceiveApiCode(receiveApi.getApiCode());
         sysPushMessageEntity.setReturnData(sysMessageManageLogEntity.getReturnData());
         sysPushMessageEntity.setStatus(sysMessageManageLogEntity.getStatus());
-        //taskExecutor.execute(() -> sendMssage(sysPushMessageEntity));
+        taskExecutor.execute(() -> sendMssage(sysPushMessageEntity));
         return sysMessageManageLogEntity;
     }
 
@@ -3478,4 +3920,39 @@ public class SysApplicationServiceImpl extends BaseService<SysApplicationEntity,
             }
         }
     }
+
+    @Override
+    public SysExtensionApiEntity setDDtoken(SysExtensionApiEntity sysExtensionApiEntity) {
+        SysApplicationApiEntity sysApplicationApiEntity = sysExtensionApiEntity.getReceiveApi();
+        StringBuilder stringBuilder = new StringBuilder();
+
+        if (sysApplicationApiEntity.getQueryIn() != null && !"".equals(sysApplicationApiEntity.getQueryIn())) {
+            JSONArray jsonArray = JSONArray.parseArray(sysApplicationApiEntity.getQueryIn());
+            if (jsonArray != null && jsonArray.size() > 0) {
+                for (int i = 0; i < jsonArray.size(); i++) {
+                    JSONObject object1 = jsonArray.getJSONObject(i);
+                    if(i > 0){
+                        stringBuilder.append("&");
+                    }
+                    stringBuilder.append(object1.getString("parameterName")).append("=").append(object1.getString("example"));
+                }
+            }
+        }
+        sysExtensionApiEntity.setQuerys(stringBuilder.toString());
+        return sysExtensionApiEntity;
+    }
+
+    @Override
+    public SysExtensionApiEntity setDDUserId(SysExtensionApiEntity sysExtensionApiEntity) {
+        String bodys = sysExtensionApiEntity.getBodys();
+        StringBuilder stringBuilder = new StringBuilder();
+        JSONObject jsonObject = JSONObject.parseObject(bodys);
+        stringBuilder.append("userid=").append(jsonObject.getString("userid"));
+        stringBuilder.append("&");
+        stringBuilder.append("access_token=").append(jsonObject.getString("access_token"));
+        sysExtensionApiEntity.setQuerys(stringBuilder.toString());
+        return sysExtensionApiEntity;
+    }
+
+
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTask/service/impl/SysIntegratedForegroundTaskServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTask/service/impl/SysIntegratedForegroundTaskServiceImpl.java
index 7ca8544c..5a9fa93e 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTask/service/impl/SysIntegratedForegroundTaskServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTask/service/impl/SysIntegratedForegroundTaskServiceImpl.java
@@ -106,17 +106,24 @@ public class SysIntegratedForegroundTaskServiceImpl extends BaseService<SysInteg
 		sysIntegratedForegroundTaskParameterEntity.setFormmainId(entity.getId());
 		sysIntegratedForegroundTaskParameterEntity.setInParameter(jsonObject.toJSONString());
 		sysIntegratedForegroundTaskParameterEntity.setCreate();
+		sysIntegratedForegroundTaskParameterEntity.setStatus("1");
 		sysIntegratedForegroundTaskParameterDao.save(sysIntegratedForegroundTaskParameterEntity);
 		PluginBaseEntity pluginBaseEntity = PluginUtils.getPluginsById(entity.getPlugId());
 		if(pluginBaseEntity != null ){
 			taskExecutor.execute(() -> {
 				try {
 					pluginBaseEntity.executeBusiness(jsonObject);
+					sysIntegratedForegroundTaskParameterEntity.setStatus("2");
+					sysIntegratedForegroundTaskParameterEntity.setModify_time(new Date());
+					sysIntegratedForegroundTaskParameterDao.update(sysIntegratedForegroundTaskParameterEntity);
 				} catch (Exception e) {
 					logger.error("插件:"+entity.getPlugId()+"执行失败:"+e.getMessage());
 				}
 			});
 		}else {
+			sysIntegratedForegroundTaskParameterEntity.setStatus("2");
+			sysIntegratedForegroundTaskParameterEntity.setModify_time(new Date());
+			sysIntegratedForegroundTaskParameterDao.update(sysIntegratedForegroundTaskParameterEntity);
 			return BaseResult.getSuccessMessageEntity("提交成功,当前任务执行失败,请联系系统管理员");
 		}
 		return BaseResult.getSuccessMessageEntity("提交成功,执行结果请去查看任务日志");
@@ -171,17 +178,25 @@ public class SysIntegratedForegroundTaskServiceImpl extends BaseService<SysInteg
 		sysIntegratedForegroundTaskParameterEntity.setFormmainId(entity.getId());
 		sysIntegratedForegroundTaskParameterEntity.setInParameter(jsonObject.toJSONString());
 		sysIntegratedForegroundTaskParameterEntity.setCreate();
+		sysIntegratedForegroundTaskParameterEntity.setStatus("1");
+
 		sysIntegratedForegroundTaskParameterDao.save(sysIntegratedForegroundTaskParameterEntity);
 		PluginBaseEntity pluginBaseEntity = PluginUtils.getPluginsById(entity.getPlugId());
 		if(pluginBaseEntity != null ){
 			taskExecutor.execute(() -> {
 				try {
 					pluginBaseEntity.executeBusiness(jsonObject);
+					sysIntegratedForegroundTaskParameterEntity.setStatus("2");
+					sysIntegratedForegroundTaskParameterEntity.setModify_time(new Date());
+					sysIntegratedForegroundTaskParameterDao.update(sysIntegratedForegroundTaskParameterEntity);
 				} catch (Exception e) {
 					logger.error("插件:"+entity.getPlugId()+"执行失败:"+e.getMessage());
 				}
 			});
 		}else {
+			sysIntegratedForegroundTaskParameterEntity.setStatus("2");
+			sysIntegratedForegroundTaskParameterEntity.setModify_time(new Date());
+			sysIntegratedForegroundTaskParameterDao.update(sysIntegratedForegroundTaskParameterEntity);
 			return BaseResult.getSuccessMessageEntity("提交成功,当前任务执行失败,请联系系统管理员");
 		}
 		return BaseResult.getSuccessMessageEntity("提交成功,执行结果请去查看任务日志");
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.java
index 3ae60fda..f4907e2b 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.java
@@ -20,7 +20,8 @@ public class SysIntegratedForegroundTaskParameterEntity extends BaseEntity {
    private String inParameter;
   /**  备注 */
    private String remark;
-
+    /**  任务状态 1、执行中 2、执行完成 */
+    private String status;
 
     public String getFormmainId() {
         return formmainId;
@@ -53,5 +54,13 @@ public class SysIntegratedForegroundTaskParameterEntity extends BaseEntity {
         this.setCreate_time(new Date());
         this.setModify_time(new Date());
     }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.xml
index 4421e1d0..fc6a59bf 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/integratedForegroundTaskParameter/entity/SysIntegratedForegroundTaskParameterEntity.xml
@@ -7,7 +7,9 @@
            <result property="formmainId" column="formmain_id" jdbcType="VARCHAR"/>
            <result property="inParameter" column="in_parameter" jdbcType="VARCHAR"/>
            <result property="remark" column="remark" jdbcType="VARCHAR"/>
-           <result property="sorts" column="sorts" jdbcType="INTEGER"/>
+            <result property="status" column="status" jdbcType="VARCHAR"/>
+
+        <result property="sorts" column="sorts" jdbcType="INTEGER"/>
            <result property="create_user_id" column="create_user_id" jdbcType="VARCHAR"/>
            <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="modify_user_id" column="modify_user_id" jdbcType="VARCHAR"/>
@@ -21,7 +23,8 @@
        ,formmain_id 
         ,in_parameter 
         ,remark 
-        ,sorts 
+        ,status
+        ,sorts
         ,create_user_id 
         ,create_time 
         ,modify_user_id 
@@ -39,6 +42,7 @@
             <if test="formmainId != null and formmainId != ''"> and formmain_id = #{formmainId} </if>
             <if test="inParameter != null and inParameter != ''"> and in_parameter = #{inParameter} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
+            <if test="status != null and status != ''"> and status = #{status} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
             <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
             <if test="create_time != null"> and create_time = #{create_time} </if>
@@ -60,6 +64,7 @@
             <if test="formmainId != null and formmainId != ''"> and formmain_id = #{formmainId} </if>
             <if test="inParameter != null and inParameter != ''"> and in_parameter = #{inParameter} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
+            <if test="status != null and status != ''"> and status = #{status} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
             <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
             <if test="create_time != null"> and create_time = #{create_time} </if>
@@ -83,6 +88,7 @@
             <if test="formmainId != null and formmainId != ''"> and formmain_id like concat('%',#{formmainId},'%') </if>
             <if test="inParameter != null and inParameter != ''"> and in_parameter like concat('%',#{inParameter},'%') </if>
             <if test="remark != null and remark != ''"> and remark like concat('%',#{remark},'%') </if>
+            <if test="status != null and status != ''"> and status like concat('%',#{status},'%') </if>
             <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
             <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
             <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
@@ -106,6 +112,7 @@
              <if test="formmainId != null and formmainId != ''"> or formmain_id = #{formmainId} </if>
              <if test="inParameter != null and inParameter != ''"> or in_parameter = #{inParameter} </if>
              <if test="remark != null and remark != ''"> or remark = #{remark} </if>
+             <if test="status != null and status != ''"> or status = #{status} </if>
              <if test="sorts != null"> or sorts = #{sorts} </if>
              <if test="create_user_id != null and create_user_id != ''"> or create_user_id = #{create_user_id} </if>
               <if test="create_time != null"> or create_time = #{create_time} </if>
@@ -127,6 +134,7 @@
             <if test="formmainId != null and formmainId != ''"> formmain_id , </if>
             <if test="inParameter != null and inParameter != ''"> in_parameter , </if>
             <if test="remark != null and remark != ''"> remark , </if>
+            <if test="status != null and status != ''"> status , </if>
             <if test="sorts != null"> sorts , </if>
             <if test="create_user_id != null and create_user_id != ''"> create_user_id , </if>
             <if test="create_time != null"> create_time , </if>
@@ -142,6 +150,7 @@
             <if test="formmainId != null and formmainId != ''"> #{formmainId} ,</if>
             <if test="inParameter != null and inParameter != ''"> #{inParameter} ,</if>
             <if test="remark != null and remark != ''"> #{remark} ,</if>
+            <if test="status != null and status != ''"> #{status} ,</if>
             <if test="sorts != null"> #{sorts} ,</if>
             <if test="create_user_id != null and create_user_id != ''"> #{create_user_id} ,</if>
             <if test="create_time != null"> #{create_time} ,</if>
@@ -155,23 +164,24 @@
 </insert>
 <!-- 批量新增 -->
 <insert id="entityInsertBatch" >
-  insert into sys_integrated_foreground_task_parameter(formmain_id, in_parameter, remark, sorts, create_user_id, create_time, modify_user_id, modify_time, sts, org_id,  sts) 
+  insert into sys_integrated_foreground_task_parameter(formmain_id, in_parameter, remark, status, sorts, create_user_id, create_time, modify_user_id, modify_time, sts, org_id,  sts)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.formmainId},#{entity.inParameter},#{entity.remark},#{entity.sorts},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id}, 'Y')
+    (#{entity.formmainId},#{entity.inParameter},#{entity.remark},#{entity.status},#{entity.sorts},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id}, 'Y')
     </foreach>
 </insert>
 <!-- 批量新增或者修改-->
 <insert id="entityInsertOrUpdateBatch" >
-    insert into sys_integrated_foreground_task_parameter(formmain_id, in_parameter, remark, sorts, create_user_id, create_time, modify_user_id, modify_time, sts, org_id)
+    insert into sys_integrated_foreground_task_parameter(formmain_id, in_parameter, remark,status, sorts, create_user_id, create_time, modify_user_id, modify_time, sts, org_id)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.formmainId},#{entity.inParameter},#{entity.remark},#{entity.sorts},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id})
+    (#{entity.formmainId},#{entity.inParameter},#{entity.remark},#{entity.status},#{entity.sorts},#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id})
     </foreach>
     on duplicate key update
     formmain_id = values(formmain_id),
     in_parameter = values(in_parameter),
     remark = values(remark),
+    status = values(status),
     sorts = values(sorts),
     create_user_id = values(create_user_id),
     create_time = values(create_time),
@@ -186,6 +196,7 @@ update sys_integrated_foreground_task_parameter  set
   <if test="formmainId != null and formmainId != ''"> formmain_id = #{formmainId},</if>
   <if test="inParameter != null and inParameter != ''"> in_parameter = #{inParameter},</if>
   <if test="remark != null and remark != ''"> remark = #{remark},</if>
+  <if test="status != null and status != ''"> status = #{status},</if>
   <if test="sorts != null"> sorts = #{sorts},</if>
   <if test="create_user_id != null and create_user_id != ''"> create_user_id = #{create_user_id},</if>
     <if test="create_time != null"> create_time = #{create_time},</if>
@@ -209,6 +220,7 @@ update sys_integrated_foreground_task_parameter  set sts= 'N' ,modify_time = #{m
             <if test="formmainId != null and formmainId != ''"> and formmain_id = #{formmainId} </if>
             <if test="inParameter != null and inParameter != ''"> and in_parameter = #{inParameter} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
+            <if test="status != null and status != ''"> and status = #{status} </if>
             <if test="sorts != null"> and sorts = #{sorts} </if>
                                                                 <if test="sts != null and sts != ''"> and sts = #{sts} </if>
                          and sts='Y'
@@ -226,6 +238,7 @@ update sys_integrated_foreground_task_parameter  set sts= 'N' ,modify_time = #{m
         ,a.formmain_id
         ,a.in_parameter
         ,a.remark
+        ,a.status
         ,a.sorts
         ,p.person_name as create_user_id
         ,a.create_time
@@ -241,6 +254,7 @@ update sys_integrated_foreground_task_parameter  set sts= 'N' ,modify_time = #{m
             <if test="formmainId != null and formmainId != ''"> and a.formmain_id = #{formmainId} </if>
             <if test="inParameter != null and inParameter != ''"> and a.in_parameter = #{inParameter} </if>
             <if test="remark != null and remark != ''"> and a.remark = #{remark} </if>
+            <if test="status != null and status != ''"> and a.status = #{status} </if>
             <if test="sorts != null"> and a.sorts = #{sorts} </if>
             <if test="create_user_id != null and create_user_id != ''"> and a.create_user_id = #{create_user_id} </if>
             <if test="create_time != null"> and a.create_time = #{create_time} </if>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/login/ILoginService.java b/base-service/src/main/java/com/hzya/frame/sysnew/login/ILoginService.java
index 90f9bfa0..69b63c81 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/login/ILoginService.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/login/ILoginService.java
@@ -15,4 +15,13 @@ public interface ILoginService {
      * @throws Exception
      */
     JsonResultEntity doLogin(JSONObject jsonObject)throws Exception;
+/****
+ * 移动端登录
+ * @content:
+ * @author 👻👻👻👻👻👻👻👻 gjh
+ * @date  2024-09-14 10:51
+ * @param
+ * @return com.hzya.frame.web.entity.JsonResultEntity
+ **/
+    JsonResultEntity appDoLogin(JSONObject jsonObject)  ;
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java
index 3b0bf5be..211a2be2 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/login/impl/LoginServiceImpl.java
@@ -2,7 +2,18 @@ package com.hzya.frame.sysnew.login.impl;
 
 import cn.dev33.satoken.stp.SaTokenInfo;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiGettokenRequest;
+import com.dingtalk.api.request.OapiV2UserGetRequest;
+import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
+import com.dingtalk.api.response.OapiGettokenResponse;
+import com.dingtalk.api.response.OapiV2UserGetResponse;
+import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
 import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
 import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
 import com.hzya.frame.sysnew.login.ILoginService;
@@ -21,11 +32,16 @@ import com.hzya.frame.sysnew.userRoles.entity.SysUserRolesEntity;
 import com.hzya.frame.util.AESUtil;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
 import org.checkerframework.checker.units.qual.C;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -35,6 +51,7 @@ import java.util.List;
  **/
 @Service(value = "loginService")
 public class LoginServiceImpl implements ILoginService {
+    private final Logger logger = LoggerFactory.getLogger(LoginServiceImpl.class);
 
     @Resource
     private ISysUserDao sysUserDao;
@@ -42,7 +59,8 @@ public class LoginServiceImpl implements ILoginService {
     private ISysPersonDao sysPersonDao;
     @Resource
     private ISysOrganDao sysOrganDao;
-
+    @Value("${zt.url}")
+    private String url ;
     @Resource
     private ISysApplicationDao sysApplicationDao;
     @Resource
@@ -67,7 +85,10 @@ public class LoginServiceImpl implements ILoginService {
             return BaseResult.getFailureMessageEntity("请输入用户名或密码");
         }
         entity.setPassword(AESUtil.encrypt(entity.getLoginCode() + "-" + entity.getPassword()));
-        SysUserEntity sysUserEntity = sysUserDao.queryOne(entity);
+        SysUserEntity sysUserEntity = new SysUserEntity();
+        sysUserEntity.setLoginCode(entity.getLoginCode());
+        sysUserEntity.setPassword(entity.getPassword());
+        sysUserEntity = sysUserDao.queryOne(sysUserEntity);
         if (sysUserEntity == null || sysUserEntity.getId() == null || "".equals(sysUserEntity.getId())) {
             return BaseResult.getFailureMessageEntity("用户名或密码错误");
         }
@@ -113,6 +134,14 @@ public class LoginServiceImpl implements ILoginService {
         //}
         //登录
         StpUtil.login(sysUserEntity.getId());
+        //修改ddid或者修改微信id
+        if((entity.getDdUserId() != null && !"".equals(entity.getDdUserId()))
+                || (entity.getWxUserId() != null && !"".equals(entity.getWxUserId())) ){
+            sysUserEntity.setDdUserId(entity.getDdUserId());
+            sysUserEntity.setWxUserId(entity.getWxUserId());
+            sysUserDao.update(sysUserEntity);
+        }
+
         //获取token
         SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
         String token = tokenInfo.getTokenValue();
@@ -122,7 +151,7 @@ public class LoginServiceImpl implements ILoginService {
         List<SysOrganEntity> sysOrganEntities = sysOrganDao.queryUserCompany(sysOrganEntity);
         //返回值
         JSONObject res = new JSONObject();
-        res.put("token", token);
+        res.put("zt-token", token);
         res.put("userInfo", sysUserEntity);
         res.put("company", sysOrganEntities);
 
@@ -131,6 +160,160 @@ public class LoginServiceImpl implements ILoginService {
         return BaseResult.getSuccessMessageEntity("登录成功", res);
     }
 
+    /****
+     * 移动端登录地址
+     * @content:
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date  2024-09-14 11:14
+     * @param
+     * @return com.hzya.frame.web.entity.JsonResultEntity
+     **/
+    @Override
+    public JsonResultEntity appDoLogin(JSONObject jsonObject) {
+        //移动端类型
+        JSONObject entity = getData("jsonStr", jsonObject, JSONObject.class);
+        logger.error(entity.toString());
+        //boolean f = true;
+        //if(f){
+        //    return BaseResult.getFailureMessageEntity("cuowu",entity);
+        //}
+        //DD,weChat
+        String appType = entity.getString("appType");
+        String appId = entity.getString("appId");
+        String apiCode = entity.getString("apiCode");
+        String userApiCode = entity.getString("userApiCode");
+        SysUserEntity userEntity = new SysUserEntity();
+        switch (appType){
+            case "DD":
+                String code = entity.getString("code");//授权码
+                String requestType = entity.getString("UserAgent");// pc端还是移动端
+                JSONObject  bodyParams = new JSONObject();
+                bodyParams.put("code",code);
+                String result = HttpRequest.post(url).
+                        header("appId",appId).
+                        header("apiCode",userApiCode).
+                        header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj").
+                        header("secretKey","fviZnLBsQUAGF8w8FSOdJi7XlIm/XAZclMxRagDLfTyJFlvnIBF3w66Hrpfzs8cYj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
+                        body(bodyParams.toJSONString()).
+                        execute().
+                        body();
+                JSONObject resultJson = JSONObject.parseObject(result);
+                boolean flag  = resultJson.getBoolean("flag");
+                if(!flag){
+                    return BaseResult.getFailureMessageEntity("请求错误:"+resultJson.getString("msg"));
+                }
+                String userid  = resultJson.getJSONObject("attribute").getJSONObject("result").getString("userid");
+                if(StrUtil.isEmpty(userid)){
+                    return BaseResult.getFailureMessageEntity("认证失败!获取钉钉userid错误","1006");
+                }
+                userEntity.setDdUserId( userid);
+                userEntity = sysUserDao.queryOne(userEntity);
+                if(null == userEntity ){
+                    JSONObject object = new JSONObject();
+                    object.put("userid",userid);
+                    return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005",object);
+                }
+                break;
+            case "weChat":
+                String authCode = entity.getString("code");//授权码
+                JSONObject  params = new JSONObject();
+                params.put("code",authCode);
+                params.put("corpid",entity.getString("corpid"));
+                params.put("corpsecret",entity.getString("corpsecret"));
+                params.put("access_token",entity.getString("access_token"));
+                String res = HttpRequest.post(url).
+                        header("appId",appId).
+                        header("apiCode",userApiCode).
+                        header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj").
+                        header("secretKey","fviZnLBsQUAGF8w8FSOdJi7XlIm/XAZclMxRagDLfTyJFlvnIBF3w66Hrpfzs8cYj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
+                        body(params.toJSONString()).
+                        execute().
+                        body();
+                JSONObject resJsonObject =   JSONObject.parseObject(res);
+                JSONObject attribute = resJsonObject.getJSONObject("attribute");
+                String attributeCode = attribute.getString("code");
+                String attributeMsg = attribute.getString("msg");
+                if(!"200".equals(attributeCode)){
+                    return BaseResult.getFailureMessageEntity("请求错误:"+attributeMsg);
+                }
+                String weComUserid  = attribute.getString("data");
+                userEntity.setWxUserId(weComUserid);
+                userEntity = sysUserDao.queryOne(userEntity);
+                if(null == userEntity ){
+                    JSONObject object = new JSONObject();
+                    object.put("userid",weComUserid);
+                    return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定企业微信","1005",object);
+                }
+                break;
+            default:
+                return BaseResult.getFailureMessageEntity("错误的App类型:"+appType+" 支持的app类型有:DD,weChat");
+
+        }
+        //登录
+        StpUtil.login(userEntity.getId());
+        //获取token
+        SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
+        String token = tokenInfo.getTokenValue();
+        //获取公司
+        SysOrganEntity sysOrganEntity = new SysOrganEntity();
+        sysOrganEntity.setUserId(userEntity.getId());
+        List<SysOrganEntity> sysOrganEntities = sysOrganDao.queryUserCompany(sysOrganEntity);
+        //返回值
+        JSONObject res = new JSONObject();
+        res.put("token", token);
+        res.put("userInfo", userEntity);
+        res.put("company", sysOrganEntities);
+        //切换数据源查询
+
+        return BaseResult.getSuccessMessageEntity("登录成功", res);
+
+        //校验当前登陆人是否有权限
+        //boolean flag = false;
+        //SysInterfaceEntity sysInterfaceEntity = (SysInterfaceEntity) interfaceCache.get("6","beanNameloginServiceinterfacNamedoLogin");
+        //if(sysInterfaceEntity == null || sysInterfaceEntity.getId() == null){
+        //    return BaseResult.getFailureMessageEntity("用户无访问权限,请联系管理员");
+        //}
+        ////查询用户权限
+        //if(!flag){
+        //    SysPopedomInterfaceEntity userPopedomInterfaceEntity = (SysPopedomInterfaceEntity) interfaceCache.get("4","userId"+sysUserEntity.getId()+"interfaceId"+sysInterfaceEntity.getId());
+        //    if(userPopedomInterfaceEntity != null && userPopedomInterfaceEntity.getId() != null ){
+        //        flag = true;
+        //    }
+        //}
+        ////查询用户角色的权限
+        //if(!flag){
+        //    List<SysUserRolesEntity> userRoleMap = (List<SysUserRolesEntity>) interfaceCache.get("3",null);
+        //    if(userRoleMap != null && userRoleMap.size() > 0){
+        //        for (SysUserRolesEntity sysUserRolesEntity : userRoleMap) {
+        //            if(sysUserRolesEntity.getUserId().equals(sysUserEntity.getId())){
+        //                SysPopedomInterfaceEntity sysPopedomInterfaceEntity = (SysPopedomInterfaceEntity) interfaceCache.get("5","roleId"+sysUserRolesEntity.getRoleId()+"interfaceId"+sysInterfaceEntity.getId());
+        //                if(sysPopedomInterfaceEntity != null && sysPopedomInterfaceEntity.getId() != null ){
+        //                    flag = true;
+        //                    break;
+        //                }
+        //            }
+        //        }
+        //    }
+        //}
+        //if(!flag){
+        //    return BaseResult.getFailureMessageEntity("用户无访问权限,请联系管理员");
+        //}
+
+    }
+
+    private JSONObject getAccess_token(String appId,String apiCode) {
+        String result = HttpRequest.post(url).
+                header("appId",appId).
+                header("apiCode",apiCode).
+                header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj").
+                header("secretKey","fviZnLBsQUAGF8w8FSOdJi7XlIm/XAZclMxRagDLfTyJFlvnIBF3w66Hrpfzs8cYj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
+                execute().
+                body();
+        JSONObject resultJson = JSONObject.parseObject(result);
+        return resultJson;
+    }
+
+
     protected <T> T getData(String key, JSONObject jsonObject, Class<T> clz) {
         if (checkStr(jsonObject.getString(key))) {
             return jsonObject.getJSONObject(key).toJavaObject(clz);
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java
index c6218dc0..191aa706 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.java
@@ -21,7 +21,9 @@ public class SysMessageManageLogEntity extends BaseEntity {
    private String messageCode;
   /**  发送者应用 */
    private String sendApp;
-  /**  发送者 */
+   private String sendAppName;
+
+    /**  发送者 */
    private String sendApi;
   /**  接收者编码 */
    private String receiveCode;
@@ -39,6 +41,7 @@ public class SysMessageManageLogEntity extends BaseEntity {
    private String status;
   /**  备注 */
    private String remark;
+   private String returnMsg;
     /** 返回解析类型 */
     private String returnType;
     /** 失败状态(1、需要重新发送 2、不需要重新发送) */
@@ -196,5 +199,21 @@ public class SysMessageManageLogEntity extends BaseEntity {
     public void setCreateTimeEnd(Date createTimeEnd) {
         this.createTimeEnd = createTimeEnd;
     }
+
+    public String getSendAppName() {
+        return sendAppName;
+    }
+
+    public void setSendAppName(String sendAppName) {
+        this.sendAppName = sendAppName;
+    }
+
+    public String getReturnMsg() {
+        return returnMsg;
+    }
+
+    public void setReturnMsg(String returnMsg) {
+        this.returnMsg = returnMsg;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.xml
index 5c02e0bb..990d106a 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/entity/SysMessageManageLogEntity.xml
@@ -566,7 +566,8 @@ where id = #{id}
         a.status AS status,
         a.remark AS remark,
         a.create_time AS createTime,
-        a.modify_time AS modifyTime
+        a.modify_time AS modifyTime,
+        receiveApi.api_name AS receiveApiName
         FROM
         <choose>
             <when test=" status != null and status.trim() != '' and status == 3">
@@ -577,6 +578,7 @@ where id = #{id}
             </otherwise>
         </choose>
         LEFT JOIN sys_application sendApp ON a.send_app = sendApp.id AND sendApp.sts = 'Y'
+        LEFT JOIN sys_application_api receiveApi ON a.receive_code = receiveApi.api_code AND receiveApi.sts = 'Y'
         <trim prefix="where" prefixOverrides="and">
             <if test="ids != null and ids.size>0">
                 AND a.id in
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java
index e8fbb850..2813a75e 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageManageLog/service/impl/SysMessageManageLogServiceImpl.java
@@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
 import com.hzya.frame.sysnew.messageManageLogBack.detail.server.ISysMessageManageLogDetailBackService;
 import com.hzya.frame.sysnew.messageManageLogBack.service.ISysMessageManageLogBackService;
 import com.hzya.frame.sysnew.messageManageLogDetail.dao.ISysMessageManageLogDetailDao;
@@ -41,7 +43,8 @@ public class SysMessageManageLogServiceImpl extends BaseService<SysMessageManage
     private ISysMessageManageLogDao sysMessageManageLogDao;
     @Resource
     private IEsbService esbService;
-
+    @Resource
+    private ISysApplicationDao sysApplicationDao;
     @Resource
     private ISysMessageManageLogBackService sysMessageManageLogBackService;
     @Resource
@@ -222,6 +225,14 @@ public class SysMessageManageLogServiceImpl extends BaseService<SysMessageManage
         }
         entity = sysMessageManageLogDao.queryOne(entity);
         if (entity != null && entity.getId() != null) {
+            if(entity.getSendApp()!= null){
+                SysApplicationEntity sysApplicationEntity = new SysApplicationEntity();
+                sysApplicationEntity.setId(entity.getSendApp());
+                sysApplicationEntity = sysApplicationDao.queryOne(sysApplicationEntity);
+                if(sysApplicationEntity!= null && sysApplicationEntity.getName() != null){
+                    entity.setSendAppName(sysApplicationEntity.getName());
+                }
+            }
             return BaseResult.getSuccessMessageEntity("查询数据成功", entity);
         } else {
             return BaseResult.getFailureMessageEntity("未查询到数据");
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.java
index 5cda5ede..5a1ba2a6 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.java
@@ -12,8 +12,6 @@ public class SysMessageTemplateEntity extends BaseEntity {
  
   /**  公司id */
    private String companyId;
-  /**  调用单据类型 */
-   private String billKindId;
   /**  模版类型 */
    private String templateType;
   /**  模版名称 */
@@ -26,14 +24,8 @@ public class SysMessageTemplateEntity extends BaseEntity {
    private String btns;
   /**  数据源 */
    private String dataSource;
-  /**  创建时间 */
-   private Date createDate;
-  /**  创建人 */
-   private String createPersonId;
-  /**  状态 */
+  /**  状态 0:停用 1:启用 */
    private String state;
-  /**  删除标志 */
-   private Integer isdelete;
 
 
     public String getCompanyId() {
@@ -44,14 +36,6 @@ public class SysMessageTemplateEntity extends BaseEntity {
         this.companyId = companyId;
     }
 
-    public String getBillKindId() {
-        return billKindId;
-    }
-
-    public void setBillKindId(String billKindId) {
-        this.billKindId = billKindId;
-    }
-
     public String getTemplateType() {
         return templateType;
     }
@@ -99,23 +83,6 @@ public class SysMessageTemplateEntity extends BaseEntity {
     public void setDataSource(String dataSource) {
         this.dataSource = dataSource;
     }
-
-    public Date getCreateDate() {
-        return createDate;
-    }
-
-    public void setCreateDate(Date createDate) {
-        this.createDate = createDate;
-    }
-
-    public String getCreatePersonId() {
-        return createPersonId;
-    }
-
-    public void setCreatePersonId(String createPersonId) {
-        this.createPersonId = createPersonId;
-    }
-
     public String getState() {
         return state;
     }
@@ -123,14 +90,5 @@ public class SysMessageTemplateEntity extends BaseEntity {
     public void setState(String state) {
         this.state = state;
     }
-
-    public Integer getIsdelete() {
-        return isdelete;
-    }
-
-    public void setIsdelete(Integer isdelete) {
-        this.isdelete = isdelete;
-    }
-
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.xml
index 80002b16..e1cf60d5 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/entity/SysMessageTemplateEntity.xml
@@ -12,17 +12,13 @@
         <result property="sts" column="sts" jdbcType="VARCHAR"/>
         <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
         <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
-           <result property="billKindId" column="bill_kind_id" jdbcType="VARCHAR"/>
            <result property="templateType" column="template_type" jdbcType="VARCHAR"/>
            <result property="templateName" column="template_name" jdbcType="VARCHAR"/>
            <result property="messageTitle" column="message_title" jdbcType="VARCHAR"/>
            <result property="messageContents" column="message_contents" jdbcType="VARCHAR"/>
            <result property="btns" column="btns" jdbcType="VARCHAR"/>
            <result property="dataSource" column="data_source" jdbcType="VARCHAR"/>
-           <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
-           <result property="createPersonId" column="create_person_id" jdbcType="VARCHAR"/>
            <result property="state" column="state" jdbcType="VARCHAR"/>
-           <result property="isdelete" column="isdelete" jdbcType="INTEGER"/>
         </resultMap>
     <!-- 查询的字段-->
     <sql id = "SysMessageTemplateEntity_Base_Column_List">
@@ -34,18 +30,14 @@
         ,modify_time 
         ,sts 
         ,org_id 
-        ,company_id 
-        ,bill_kind_id 
+        ,company_id
         ,template_type 
         ,template_name 
         ,message_title 
         ,message_contents 
         ,btns 
-        ,data_source 
-        ,create_date 
-        ,create_person_id 
-        ,state 
-        ,isdelete 
+        ,data_source
+        ,state
      </sql>
 
     <!--通过ID获取数据 -->
@@ -70,17 +62,13 @@
             <if test="sts != null and sts != ''"> and sts = #{sts} </if>
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
-            <if test="billKindId != null and billKindId != ''"> and bill_kind_id = #{billKindId} </if>
             <if test="templateType != null and templateType != ''"> and template_type = #{templateType} </if>
             <if test="templateName != null and templateName != ''"> and template_name = #{templateName} </if>
             <if test="messageTitle != null and messageTitle != ''"> and message_title = #{messageTitle} </if>
             <if test="messageContents != null and messageContents != ''"> and message_contents = #{messageContents} </if>
             <if test="btns != null and btns != ''"> and btns = #{btns} </if>
             <if test="dataSource != null and dataSource != ''"> and data_source = #{dataSource} </if>
-            <if test="createDate != null"> and create_date = #{createDate} </if>
-            <if test="createPersonId != null and createPersonId != ''"> and create_person_id = #{createPersonId} </if>
             <if test="state != null and state != ''"> and state = #{state} </if>
-            <if test="isdelete != null"> and isdelete = #{isdelete} </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
@@ -100,15 +88,12 @@
             <if test="sts != null and sts != ''"> and sts = #{sts} </if>
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
-            <if test="billKindId != null and billKindId != ''"> and bill_kind_id = #{billKindId} </if>
             <if test="templateType != null and templateType != ''"> and template_type = #{templateType} </if>
             <if test="templateName != null and templateName != ''"> and template_name = #{templateName} </if>
             <if test="messageTitle != null and messageTitle != ''"> and message_title = #{messageTitle} </if>
             <if test="messageContents != null and messageContents != ''"> and message_contents = #{messageContents} </if>
             <if test="btns != null and btns != ''"> and btns = #{btns} </if>
             <if test="dataSource != null and dataSource != ''"> and data_source = #{dataSource} </if>
-            <if test="createDate != null"> and create_date = #{createDate} </if>
-            <if test="createPersonId != null and createPersonId != ''"> and create_person_id = #{createPersonId} </if>
             <if test="state != null and state != ''"> and state = #{state} </if>
             <if test="isdelete != null"> and isdelete = #{isdelete} </if>
             and sts='Y'
@@ -132,17 +117,13 @@
             <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
             <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
             <if test="companyId != null and companyId != ''"> and company_id like concat('%',#{companyId},'%') </if>
-            <if test="billKindId != null and billKindId != ''"> and bill_kind_id like concat('%',#{billKindId},'%') </if>
             <if test="templateType != null and templateType != ''"> and template_type like concat('%',#{templateType},'%') </if>
             <if test="templateName != null and templateName != ''"> and template_name like concat('%',#{templateName},'%') </if>
             <if test="messageTitle != null and messageTitle != ''"> and message_title like concat('%',#{messageTitle},'%') </if>
             <if test="messageContents != null and messageContents != ''"> and message_contents like concat('%',#{messageContents},'%') </if>
             <if test="btns != null and btns != ''"> and btns like concat('%',#{btns},'%') </if>
             <if test="dataSource != null and dataSource != ''"> and data_source like concat('%',#{dataSource},'%') </if>
-            <if test="createDate != null"> and create_date like concat('%',#{createDate},'%') </if>
-            <if test="createPersonId != null and createPersonId != ''"> and create_person_id like concat('%',#{createPersonId},'%') </if>
             <if test="state != null and state != ''"> and state like concat('%',#{state},'%') </if>
-            <if test="isdelete != null"> and isdelete like concat('%',#{isdelete},'%') </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
@@ -164,15 +145,12 @@
               <if test="sts != null and sts != ''"> or sts = #{sts} </if>
              <if test="org_id != null and org_id != ''"> or org_id = #{org_id} </if>
               <if test="companyId != null and companyId != ''"> or company_id = #{companyId} </if>
-             <if test="billKindId != null and billKindId != ''"> or bill_kind_id = #{billKindId} </if>
              <if test="templateType != null and templateType != ''"> or template_type = #{templateType} </if>
              <if test="templateName != null and templateName != ''"> or template_name = #{templateName} </if>
              <if test="messageTitle != null and messageTitle != ''"> or message_title = #{messageTitle} </if>
              <if test="messageContents != null and messageContents != ''"> or message_contents = #{messageContents} </if>
              <if test="btns != null and btns != ''"> or btns = #{btns} </if>
              <if test="dataSource != null and dataSource != ''"> or data_source = #{dataSource} </if>
-             <if test="createDate != null"> or create_date = #{createDate} </if>
-             <if test="createPersonId != null and createPersonId != ''"> or create_person_id = #{createPersonId} </if>
              <if test="state != null and state != ''"> or state = #{state} </if>
              <if test="isdelete != null"> or isdelete = #{isdelete} </if>
             and sts='Y'
@@ -194,17 +172,13 @@
             <if test="sts != null and sts != ''"> sts , </if>
             <if test="org_id != null and org_id != ''"> org_id , </if>
             <if test="companyId != null and companyId != ''"> company_id , </if>
-            <if test="billKindId != null and billKindId != ''"> bill_kind_id , </if>
             <if test="templateType != null and templateType != ''"> template_type , </if>
             <if test="templateName != null and templateName != ''"> template_name , </if>
             <if test="messageTitle != null and messageTitle != ''"> message_title , </if>
             <if test="messageContents != null and messageContents != ''"> message_contents , </if>
             <if test="btns != null and btns != ''"> btns , </if>
             <if test="dataSource != null and dataSource != ''"> data_source , </if>
-            <if test="createDate != null"> create_date , </if>
-            <if test="createPersonId != null and createPersonId != ''"> create_person_id , </if>
             <if test="state != null and state != ''"> state , </if>
-            <if test="isdelete != null"> isdelete , </if>
     <if test="sts == null ">sts,</if>
   </trim>
   )values(
@@ -218,17 +192,13 @@
             <if test="sts != null and sts != ''"> #{sts} ,</if>
             <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
             <if test="companyId != null and companyId != ''"> #{companyId} ,</if>
-            <if test="billKindId != null and billKindId != ''"> #{billKindId} ,</if>
             <if test="templateType != null and templateType != ''"> #{templateType} ,</if>
             <if test="templateName != null and templateName != ''"> #{templateName} ,</if>
             <if test="messageTitle != null and messageTitle != ''"> #{messageTitle} ,</if>
             <if test="messageContents != null and messageContents != ''"> #{messageContents} ,</if>
             <if test="btns != null and btns != ''"> #{btns} ,</if>
             <if test="dataSource != null and dataSource != ''"> #{dataSource} ,</if>
-            <if test="createDate != null"> #{createDate} ,</if>
-            <if test="createPersonId != null and createPersonId != ''"> #{createPersonId} ,</if>
             <if test="state != null and state !=''"> #{state} ,</if>
-            <if test="isdelete != null"> #{isdelete} ,</if>
     <if test="sts == null ">'Y',</if>
   </trim>
   )  
@@ -278,17 +248,13 @@ update sys_message_template  set
     <if test="sts != null and sts != ''"> sts = #{sts},</if>
   <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
     <if test="companyId != null and companyId != ''"> company_id = #{companyId},</if>
-  <if test="billKindId != null and billKindId != ''"> bill_kind_id = #{billKindId},</if>
   <if test="templateType != null and templateType != ''"> template_type = #{templateType},</if>
   <if test="templateName != null and templateName != ''"> template_name = #{templateName},</if>
   <if test="messageTitle != null and messageTitle != ''"> message_title = #{messageTitle},</if>
   <if test="messageContents != null and messageContents != ''"> message_contents = #{messageContents},</if>
   <if test="btns != null and btns != ''"> btns = #{btns},</if>
   <if test="dataSource != null and dataSource != ''"> data_source = #{dataSource},</if>
-  <if test="createDate != null"> create_date = #{createDate},</if>
-  <if test="createPersonId != null and createPersonId != ''"> create_person_id = #{createPersonId},</if>
   <if test="state != null and state !=''"> state = #{state},</if>
-  <if test="isdelete != null"> isdelete = #{isdelete},</if>
 </trim>
 where id = #{id}
 </update>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/service/impl/SysMessageTemplateServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/service/impl/SysMessageTemplateServiceImpl.java
index 7f4db12a..6930fd2c 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/service/impl/SysMessageTemplateServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/messageTemplate/service/impl/SysMessageTemplateServiceImpl.java
@@ -9,11 +9,15 @@ import com.hzya.frame.sysnew.messageTemplate.dao.ISysMessageTemplateDao;
 import com.hzya.frame.sysnew.messageTemplate.service.ISysMessageTemplateService;
 import com.hzya.frame.sysnew.person.dao.ISysPersonDao;
 import com.hzya.frame.sysnew.user.entity.SysUserEntity;
+import com.hzya.frame.sysnew.warningConfig.dao.ISysWarningConfigDao;
+import com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import javax.annotation.Resource;
+
 import com.hzya.frame.basedao.service.impl.BaseService;
 
 import java.sql.*;
@@ -28,178 +32,178 @@ import java.util.List;
  */
 @Service(value = "sysMessageTemplateService")
 public class SysMessageTemplateServiceImpl extends BaseService<SysMessageTemplateEntity, String> implements ISysMessageTemplateService {
-     
+
     private ISysMessageTemplateDao sysMessageTemplateDao;
 
-	@Resource
-	public IExecSqlService execSqlService;
-    
+    @Resource
+    private ISysWarningConfigDao sysWarningConfigDao;
+
+    @Resource
+    public IExecSqlService execSqlService;
+
     @Autowired
-	public void setSysMessageTemplateDao(ISysMessageTemplateDao dao) {
-		this.sysMessageTemplateDao = dao;
-		this.dao = dao;
-	}
+    public void setSysMessageTemplateDao(ISysMessageTemplateDao dao) {
+        this.sysMessageTemplateDao = dao;
+        this.dao = dao;
+    }
 
-	@Override
-	public JsonResultEntity queryEntityPage(JSONObject jsonObject) {
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		//判断分页
-		if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
-			return BaseResult.getFailureMessageEntity("分页查询参数不存在");
-		}
-		PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
-		List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
-		PageInfo<SysMessageTemplateEntity> pageInfo = new PageInfo(list);
-		return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
-	}
+    @Override
+    public JsonResultEntity queryEntityPage(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        //判断分页
+        if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
+            return BaseResult.getFailureMessageEntity("分页查询参数不存在");
+        }
+        PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
+        List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
+        PageInfo<SysMessageTemplateEntity> pageInfo = new PageInfo(list);
+        return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
+    }
 
-	@Override
-	public JsonResultEntity queryEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if(entity == null){
-			entity = new SysMessageTemplateEntity();
-		}
-		List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
-		return BaseResult.getSuccessMessageEntity("查询数据成功", list);
-	}
+    @Override
+    public JsonResultEntity queryEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            entity = new SysMessageTemplateEntity();
+        }
+        List<SysMessageTemplateEntity> list = sysMessageTemplateDao.queryByLike(entity);
+        return BaseResult.getSuccessMessageEntity("查询数据成功", list);
+    }
 
-	@Override
-	public JsonResultEntity getEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("参数不允许为空");
-		}
-		if(entity.getId() == null || "".equals(entity.getId())){
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		entity = sysMessageTemplateDao.get(entity.getId());
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("获取消息模版失败");
-		}
-		return BaseResult.getSuccessMessageEntity("获取消息模版成功", entity);
-	}
+    @Override
+    public JsonResultEntity getEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        entity = sysMessageTemplateDao.get(entity.getId());
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("获取消息模版失败");
+        }
+        return BaseResult.getSuccessMessageEntity("获取消息模版成功", entity);
+    }
 
-	@Override
-	public JsonResultEntity saveEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if (entity == null) {
-			return BaseResult.getFailureMessageEntity("参数不允许为空");
-		}
-		if(entity.getBillKindId() == null || "".equals(entity.getBillKindId())){
-			return BaseResult.getFailureMessageEntity("调用单据类型不允许为空");
-		}
-		if(entity.getTemplateType() == null || "".equals(entity.getTemplateType())){
-			return BaseResult.getFailureMessageEntity("模版类型不允许为空");
-		}
-		if(entity.getTemplateName() == null || "".equals(entity.getTemplateName())){
-			return BaseResult.getFailureMessageEntity("模版名称不允许为空");
-		}
-		if(entity.getMessageContents() == null || "".equals(entity.getMessageContents())){
-			return BaseResult.getFailureMessageEntity("消息内容不允许为空");
-		}
-        if(entity.getDataSource() == null || "".equals(entity.getDataSource())){
-			return BaseResult.getFailureMessageEntity("数据源不允许为空");
-		}
-		if(entity.getCreateDate() == null){
-			return BaseResult.getFailureMessageEntity("创建时间不允许为空");
-		}
-		if(entity.getCreatePersonId() == null || "".equals(entity.getCreatePersonId())){
-			return BaseResult.getFailureMessageEntity("创建人不允许为空");
-		}
-		entity.setCreate();
-		sysMessageTemplateDao.save(entity);
-		return BaseResult.getSuccessMessageEntity("保存消息模版成功",entity);
-	}
+    @Override
+    public JsonResultEntity saveEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getTemplateType() == null || "".equals(entity.getTemplateType())) {
+            return BaseResult.getFailureMessageEntity("模版类型不允许为空");
+        }
+        if (entity.getTemplateName() == null || "".equals(entity.getTemplateName())) {
+            return BaseResult.getFailureMessageEntity("模版名称不允许为空");
+        }
+        if (entity.getMessageContents() == null || "".equals(entity.getMessageContents())) {
+            return BaseResult.getFailureMessageEntity("消息内容不允许为空");
+        }
+        if (entity.getDataSource() == null || "".equals(entity.getDataSource())) {
+            return BaseResult.getFailureMessageEntity("数据源不允许为空");
+        }
+        entity.setCreate();
+        sysMessageTemplateDao.save(entity);
+        return BaseResult.getSuccessMessageEntity("保存消息模版成功", entity);
+    }
 
-	@Override
-	public JsonResultEntity updateEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("参数不允许为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		if(entity.getBillKindId() == null || "".equals(entity.getBillKindId())){
-			return BaseResult.getFailureMessageEntity("调用单据类型不允许为空");
-		}
-		if(entity.getTemplateType() == null || "".equals(entity.getTemplateType())){
-			return BaseResult.getFailureMessageEntity("模版类型不允许为空");
-		}
-		if(entity.getTemplateName() == null || "".equals(entity.getTemplateName())){
-			return BaseResult.getFailureMessageEntity("模版名称不允许为空");
-		}
-		if(entity.getMessageContents() == null || "".equals(entity.getMessageContents())){
-			return BaseResult.getFailureMessageEntity("消息内容不允许为空");
-		}
-		if(entity.getDataSource() == null || "".equals(entity.getDataSource())){
-			return BaseResult.getFailureMessageEntity("数据源不允许为空");
-		}
-		if(entity.getCreateDate() == null){
-			return BaseResult.getFailureMessageEntity("创建时间不允许为空");
-		}
-		if(entity.getCreatePersonId() == null || "".equals(entity.getCreatePersonId())){
-			return BaseResult.getFailureMessageEntity("创建人不允许为空");
-		}
-		entity.setUpdate();
-		sysMessageTemplateDao.update(entity);
-		return BaseResult.getSuccessMessageEntity("修改消息模版成功",entity);
-	}
+    @Override
+    public JsonResultEntity updateEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        if (entity.getTemplateType() == null || "".equals(entity.getTemplateType())) {
+            return BaseResult.getFailureMessageEntity("模版类型不允许为空");
+        }
+        if (entity.getTemplateName() == null || "".equals(entity.getTemplateName())) {
+            return BaseResult.getFailureMessageEntity("模版名称不允许为空");
+        }
+        if (entity.getMessageContents() == null || "".equals(entity.getMessageContents())) {
+            return BaseResult.getFailureMessageEntity("消息内容不允许为空");
+        }
+        if (entity.getDataSource() == null || "".equals(entity.getDataSource())) {
+            return BaseResult.getFailureMessageEntity("数据源不允许为空");
+        }
+        entity.setUpdate();
+        sysMessageTemplateDao.update(entity);
+        return BaseResult.getSuccessMessageEntity("修改消息模版成功", entity);
+    }
 
-	@Override
-	public JsonResultEntity deleteEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("参数不允许为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		entity.setUpdate();
-		//1、判断这个模版有没有被使用过,使用过就不能删除(待完成)
-		//将模版id去,预警配置表里查一下,如果有匹配的数据,代表有人正在使用,不能删除
-		sysMessageTemplateDao.logicRemove(entity);
-		return BaseResult.getSuccessMessageEntity("删除消息模版成功");
-	}
+    @Override
+    public JsonResultEntity deleteEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        //判断这个模版有没有被使用过,使用过就不能删除
+        //将模版id去,预警配置表里查一下,如果有匹配的数据,代表有人正在使用,不能删除
+        SysWarningConfigEntity warningConfigEntity = new SysWarningConfigEntity();
+        warningConfigEntity.setMessageTemplateId(entity.getId());
+        int count = sysWarningConfigDao.getCount(warningConfigEntity);
+        if (count > 0) {
+            return BaseResult.getFailureMessageEntity("该模版已被使用,不能删除");
+        }
+        entity.setUpdate();
+        sysMessageTemplateDao.logicRemove(entity);
+        return BaseResult.getSuccessMessageEntity("删除消息模版成功");
+    }
 
-	@Override
-	public JsonResultEntity enableDisableEntity(JSONObject jsonObject){
-		SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("参数不允许为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		if (entity.getState() == null || "".equals(entity.getState())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		//0启用,1禁用
-		if("0".equals(entity.getState())){
-			entity.setUpdate();
-			sysMessageTemplateDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("启用模版成功");
-		}else{
-			//停用消息模版
-			entity.setUpdate();
-			sysMessageTemplateDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("停用模版成功");
-		}
-	}
+    @Override
+    public JsonResultEntity enableDisableEntity(JSONObject jsonObject) {
+        SysMessageTemplateEntity entity = getData("jsonStr", jsonObject, SysMessageTemplateEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不允许为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        if (entity.getState() == null || "".equals(entity.getState())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        //0停用,1启用
+        if ("0".equals(entity.getState())) {
+            entity.setUpdate();
+            sysMessageTemplateDao.update(entity);
+            //同步停用到预警配置表
+            SysWarningConfigEntity warningConfigEntity = new SysWarningConfigEntity();
+            warningConfigEntity.setMessageTemplateId(entity.getId());
+            warningConfigEntity.setStatus("1");
+            List<SysWarningConfigEntity> warningConfigList = sysWarningConfigDao.queryByLike(warningConfigEntity);
+            for (SysWarningConfigEntity warningConfig : warningConfigList) {
+                warningConfig.setStatus("0");
+                warningConfig.setUpdate();
+                sysWarningConfigDao.update(warningConfig);
+            }
+            return BaseResult.getSuccessMessageEntity("停用模版成功");
+        } else {
+            entity.setUpdate();
+            sysMessageTemplateDao.update(entity);
+            return BaseResult.getSuccessMessageEntity("启用模版成功");
+        }
+    }
 
-	@Override
-	public JsonResultEntity checkSql(JSONObject jsonObject) throws Exception {
-		try {
-			String sql = JSONObject.parseObject(jsonObject.getString("jsonStr")).getString("sql");
-			List<HashMap<String, Object>> result = execSqlService.execSelectSql(sql, "master");
-			return BaseResult.getSuccessMessageEntity("SQL检查成功", result);
-		} catch (Exception e) {
-			return BaseResult.getFailureMessageEntity("SQL检查失败,原因:" + e.getMessage());
-		}
-	}
+    @Override
+    public JsonResultEntity checkSql(JSONObject jsonObject) throws Exception {
+        try {
+            String sql = JSONObject.parseObject(jsonObject.getString("jsonStr")).getString("sql");
+            List<HashMap<String, Object>> result = execSqlService.execSelectSql(sql, "master");
+            return BaseResult.getSuccessMessageEntity("SQL检查成功", result);
+        } catch (Exception e) {
+            return BaseResult.getFailureMessageEntity("SQL检查失败,原因:" + e.getMessage());
+        }
+    }
 
-	@Override
-	public JsonResultEntity spliceMessage(JSONObject jsonObject){
-		return BaseResult.getSuccessMessageEntity("消息拼接成功");
-	}
+    @Override
+    public JsonResultEntity spliceMessage(JSONObject jsonObject) {
+        return BaseResult.getSuccessMessageEntity("消息拼接成功");
+    }
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.java
index 94eeb61f..9f5ba071 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.java
@@ -9,8 +9,6 @@ public class SysPushMessageEntity extends BaseEntity {
     private Long warningAppCode;
     /**  预警接口编码 */
     private Long warningApiCode;
-    /**  接收者ID列表*/
-    private String recipientIdList;
     /**  预警应用类型 */
     private String warningAppType;
     /**  发送应用名称 */
@@ -59,14 +57,6 @@ public class SysPushMessageEntity extends BaseEntity {
         this.receiveApiCode = receiveApiCode;
     }
 
-    public String getRecipientIdList() {
-        return recipientIdList;
-    }
-
-    public void setRecipientIdList(String recipientIdList) {
-        this.recipientIdList = recipientIdList;
-    }
-
     public String getWarningAppType() {
         return warningAppType;
     }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.xml
index 0916a33a..547ed5e9 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/entity/SysPushMessageEntity.xml
@@ -7,7 +7,6 @@
            <result property="warningAppCode" column="warning_app_code" jdbcType="INTEGER"/>
            <result property="warningApiCode" column="warning_api_code" jdbcType="INTEGER"/>
            <result property="warningAppType" column="warning_app_type" jdbcType="VARCHAR"/>
-           <result property="recipientIdList" column="recipient_id_list" jdbcType="VARCHAR"/>
            <result property="sendAppName" column="send_app_name" jdbcType="VARCHAR"/>
            <result property="receiveAppName" column="receive_app_name" jdbcType="VARCHAR"/>
            <result property="receiveApiName" column="receive_api_name" jdbcType="VARCHAR"/>
@@ -23,19 +22,20 @@
                      warning_config.sendAppid AS warning_app_code,
                      warning_config.endApiCode AS warning_api_code,
                      warning_config.app_type AS warning_app_type,
-                     warning_config.recipient_id AS recipient_id_list,
                      log.send_app_name,
                      log.receive_app_name,
                      receive_api_name,
                      log.receive_api_code,
                      log.return_data,
-                     log.STATUS
+                     log.STATUS,
+                     log.create_time
               FROM
                      v_hzya_sys_warning warning_config
-                     LEFT JOIN v_hzya_sys_send_message_log log ON warning_config.api_code = log.receive_api_code
+                            LEFT JOIN v_hzya_sys_send_message_log log ON warning_config.api_code = log.receive_api_code
               WHERE
                      log.STATUS = '4'
-                     AND warning_config.push_method = '定时'
+                AND warning_config.push_method = '定时'
+                AND log.create_time > DATE_SUB( CURDATE( ), INTERVAL 1 WEEK )
        </select>
 
 </mapper>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/service/impl/SysPushMessageServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/service/impl/SysPushMessageServiceImpl.java
index 28a7028d..c3200814 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/service/impl/SysPushMessageServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/pushMessage/service/impl/SysPushMessageServiceImpl.java
@@ -30,4 +30,5 @@ public class SysPushMessageServiceImpl extends BaseService<SysPushMessageEntity,
         List<SysPushMessageEntity> list = sysPushMessageDao.getAll();
         return BaseResult.getSuccessMessageEntity("success");
     }
+
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.java
index 6e88baf2..b425872e 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.java
@@ -9,17 +9,20 @@ import com.hzya.frame.web.entity.BaseEntity;
  * @since 2024-08-30 14:19:30
  */
 public class SysSendMessageLogEntity extends BaseEntity {
- 
+
+
+  //接收人姓名
+  private String recipientsPersonName;
+  //发送人姓名
+    private String sendPersonName;
   /**  公司id */
    private String companyId;
-  /**  来源业务单据 */
-   private String billId;
   /**  消息类型(1、系统消息、2、单据消息、3、钉钉、4微信、5短信、6、邮件) */
    private String type;
   /**  发送给谁(三方系统userID 钉钉微信、邮箱、手机号) */
-   private String sendToUserId;
+   private String recipientsPersonId;
   /**  发送给系统内部人员ID */
-   private String sendToPersonId;
+   private String recipientsInteriorId;
   /**  消息内容 */
    private String sendCount;
   /**  发送时间 */
@@ -32,7 +35,72 @@ public class SysSendMessageLogEntity extends BaseEntity {
    private Integer state;
   /**  三方系统消息结果 */
    private String resultMessage;
+  /**  预警接口表id */
+   private String warningInterfaceId;
+   /**  应用id */
+   private String appId;
+   /**  应用名称 */
+   private String appName;
+   /**  消息标题 */
+   private String messageTitle;
+   /**  按钮 */
+   private String btns;
 
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public String getMessageTitle() {
+        return messageTitle;
+    }
+
+    public void setMessageTitle(String messageTitle) {
+        this.messageTitle = messageTitle;
+    }
+
+    public String getBtns() {
+        return btns;
+    }
+
+    public void setBtns(String btns) {
+        this.btns = btns;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getWarningInterfaceId() {
+        return warningInterfaceId;
+    }
+
+    public void setWarningInterfaceId(String warningInterfaceId) {
+        this.warningInterfaceId = warningInterfaceId;
+    }
+
+    public String getRecipientsPersonName() {
+        return recipientsPersonName;
+    }
+
+    public void setRecipientsPersonName(String recipientsPersonName) {
+        this.recipientsPersonName = recipientsPersonName;
+    }
+
+    public String getSendPersonName() {
+        return sendPersonName;
+    }
+
+    public void setSendPersonName(String sendPersonName) {
+        this.sendPersonName = sendPersonName;
+    }
 
     public String getCompanyId() {
         return companyId;
@@ -42,14 +110,6 @@ public class SysSendMessageLogEntity extends BaseEntity {
         this.companyId = companyId;
     }
 
-    public String getBillId() {
-        return billId;
-    }
-
-    public void setBillId(String billId) {
-        this.billId = billId;
-    }
-
     public String getType() {
         return type;
     }
@@ -58,20 +118,20 @@ public class SysSendMessageLogEntity extends BaseEntity {
         this.type = type;
     }
 
-    public String getSendToUserId() {
-        return sendToUserId;
+    public String getRecipientsPersonId() {
+        return recipientsPersonId;
     }
 
-    public void setSendToUserId(String sendToUserId) {
-        this.sendToUserId = sendToUserId;
+    public void setRecipientsPersonId(String recipientsPersonId) {
+        this.recipientsPersonId = recipientsPersonId;
     }
 
-    public String getSendToPersonId() {
-        return sendToPersonId;
+    public String getRecipientsInteriorId() {
+        return recipientsInteriorId;
     }
 
-    public void setSendToPersonId(String sendToPersonId) {
-        this.sendToPersonId = sendToPersonId;
+    public void setRecipientsInteriorId(String recipientsInteriorId) {
+        this.recipientsInteriorId = recipientsInteriorId;
     }
 
     public String getSendCount() {
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.xml
index 144a67e7..01decd67 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/entity/SysSendMessageLogEntity.xml
@@ -12,31 +12,24 @@
            <result property="sts" column="sts" jdbcType="VARCHAR"/>
            <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
            <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
-           <result property="billId" column="bill_id" jdbcType="VARCHAR"/>
            <result property="type" column="type" jdbcType="VARCHAR"/>
-           <result property="sendToUserId" column="send_to_user_id" jdbcType="VARCHAR"/>
-           <result property="sendToPersonId" column="send_to_person_id" jdbcType="VARCHAR"/>
+           <result property="recipientsPersonId" column="recipients_person_id" jdbcType="VARCHAR"/>
+           <result property="recipientsInteriorId" column="recipients_interior_id" jdbcType="VARCHAR"/>
            <result property="sendCount" column="send_count" jdbcType="VARCHAR"/>
            <result property="sendDatetime" column="send_datetime" jdbcType="TIMESTAMP"/>
            <result property="sendPersonId" column="send_person_id" jdbcType="VARCHAR"/>
            <result property="sourceModelName" column="source_model_name" jdbcType="VARCHAR"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="resultMessage" column="result_message" jdbcType="VARCHAR"/>
+           <result property="recipientsPersonName" column="recipients_person_name" jdbcType="VARCHAR"/>
+           <result property="sendPersonName" column="send_person_name" jdbcType="VARCHAR"/>
+           <result property="warningInterfaceId" column="warning_interface_id" jdbcType="VARCHAR"/>
+           <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+           <result property="messageTitle" column="message_title" jdbcType="VARCHAR"/>
+           <result property="appName" column="app_name" jdbcType="VARCHAR"/>
+           <result property="btns" column="btns" jdbcType="VARCHAR"/>
         </resultMap>
 
-    <resultMap id="get-PushMessageEntity-result" type="com.hzya.frame.plugin.pushMessage.entity.PushMessageEntity" >
-        <result property="pushMessage" column="push_message" jdbcType="VARCHAR"/>
-        <result property="warningAppCode" column="warning_app_code" jdbcType="VARCHAR"/>
-        <result property="warningApiCode" column="warning_api_code" jdbcType="VARCHAR"/>
-        <result property="appType" column="app_type" jdbcType="VARCHAR"/>
-        <result property="recipientIdList" column="recipient_id_list" jdbcType="VARCHAR"/>
-        <result property="sendAppName" column="send_app_name" jdbcType="VARCHAR"/>
-        <result property="receiveAppName" column="receive_app_name" jdbcType="VARCHAR"/>
-        <result property="receiveApiName" column="receive_api_name" jdbcType="VARCHAR"/>
-        <result property="receiveApiCode" column="receive_api_code" jdbcType="VARCHAR"/>
-        <result property="returnData" column="return_data" jdbcType="VARCHAR"/>
-        <result property="status" column="status" jdbcType="VARCHAR"/>
-    </resultMap>
     <!-- 查询的字段-->
     <sql id = "SysSendMessageLogEntity_Base_Column_List">
         id
@@ -47,54 +40,69 @@
         ,modify_time 
         ,sts 
         ,org_id 
-        ,company_id 
-        ,bill_id 
+        ,company_id
         ,type 
-        ,send_to_user_id 
-        ,send_to_person_id 
+        ,recipients_person_id 
+        ,recipients_interior_id 
         ,send_count 
         ,send_datetime 
         ,send_person_id 
         ,source_model_name 
         ,state 
-        ,result_message 
+        ,result_message
+        ,warning_interface_id
      </sql>
 
     <!--通过ID获取数据 -->
     <select id="entity_get" resultMap="get-SysSendMessageLogEntity-result">
         select
-        <include refid="SysSendMessageLogEntity_Base_Column_List" />
-        from sys_send_message_log where id = #{ id } and sts='Y'
+            log.*
+             ,p1.person_name as recipients_person_name
+             ,p2.person_Name as send_person_name
+        from sys_send_message_log log
+                 LEFT JOIN sys_person p1 ON p1.id = log.recipients_person_id
+                 LEFT JOIN sys_person p2 ON p2.id = log.send_person_id
+        where log.id = #{ id } and log.sts='Y' and p1.sts='Y' and p2.sts='Y'
     </select>
     <!-- 查询 采用==查询 -->
  <select id="entity_list_base" resultMap="get-SysSendMessageLogEntity-result" parameterType = "com.hzya.frame.sysnew.sendMessageLog.entity.SysSendMessageLogEntity">
     select
-    <include refid="SysSendMessageLogEntity_Base_Column_List" />
-    from sys_send_message_log
+     log.*
+     ,p1.person_name as recipients_person_name
+     ,p2.person_Name as send_person_name
+     ,i.app_id AS app_id
+     from sys_send_message_log log
+     LEFT JOIN sys_person p1 ON p1.id = log.recipients_person_id
+     LEFT JOIN sys_person p2 ON p2.id = log.send_person_id
+     LEFT JOIN sys_warning_interface i ON i.id = log.warning_interface_id
     <trim prefix="where" prefixOverrides="and"> 
-        <if test="id != null and id != ''"> and id = #{id} </if>
-            <if test="sorts != null"> and sorts = #{sorts} </if>
-            <if test="create_user_id != null and create_user_id != ''"> and create_user_id = #{create_user_id} </if>
-            <if test="create_time != null"> and create_time = #{create_time} </if>
-            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id = #{modify_user_id} </if>
-            <if test="modify_time != null"> and modify_time = #{modify_time} </if>
-            <if test="sts != null and sts != ''"> and sts = #{sts} </if>
-            <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
-            <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
-            <if test="billId != null and billId != ''"> and bill_id = #{billId} </if>
-            <if test="type != null and type != ''"> and type = #{type} </if>
-            <if test="sendToUserId != null and sendToUserId != ''"> and send_to_user_id = #{sendToUserId} </if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> and send_to_person_id = #{sendToPersonId} </if>
-            <if test="sendCount != null and sendCount != ''"> and send_count = #{sendCount} </if>
-            <if test="sendDatetime != null"> and send_datetime = #{sendDatetime} </if>
-            <if test="sendPersonId != null and sendPersonId != ''"> and send_person_id = #{sendPersonId} </if>
-            <if test="sourceModelName != null and sourceModelName != ''"> and source_model_name = #{sourceModelName} </if>
-            <if test="state != null"> and state = #{state} </if>
-            <if test="resultMessage != null and resultMessage != ''"> and result_message = #{resultMessage} </if>
-            and sts='Y'
+        <if test="id != null and id != ''"> and log.id = #{id} </if>
+            <if test="sorts != null"> and log.sorts = #{sorts} </if>
+            <if test="create_user_id != null and create_user_id != ''"> and log.create_user_id = #{create_user_id} </if>
+            <if test="create_time != null"> and log.create_time = #{create_time} </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and log.modify_user_id = #{modify_user_id} </if>
+            <if test="modify_time != null"> and log.modify_time = #{modify_time} </if>
+            <if test="sts != null and sts != ''"> and log.sts = #{sts} </if>
+            <if test="org_id != null and org_id != ''"> and log.org_id = #{org_id} </if>
+            <if test="companyId != null and companyId != ''"> and log.company_id = #{companyId} </if>
+            <if test="type != null and type != ''"> and log.type = #{type} </if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> and log.recipients_person_id = #{recipientsPersonId} </if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> and log.recipients_interior_id = #{recipientsInteriorId} </if>
+            <if test="sendCount != null and sendCount != ''"> and log.send_count = #{sendCount} </if>
+            <if test="sendDatetime != null"> and log.send_datetime = #{sendDatetime} </if>
+            <if test="sendPersonId != null and sendPersonId != ''"> and log.send_person_id = #{sendPersonId} </if>
+            <if test="sourceModelName != null and sourceModelName != ''"> and log.source_model_name = #{sourceModelName} </if>
+            <if test="state != null"> and log.state = #{state} </if>
+            <if test="resultMessage != null and resultMessage != ''"> and log.result_message = #{resultMessage} </if>
+            <if test="appId != null and appId != ''" > and i.app_id = #{appId} </if>
+            and log.sts='Y'
+            and p1.sts='Y'
+            and p2.sts='Y'
+            and i.sts='Y'
     </trim>
-    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
-    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+<!--    <if test=" sort == null or sort == ''.toString() "> order by log.sorts asc</if>-->
+<!--    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>-->
+        order by log.send_datetime desc
 </select>
     
 <!-- 查询符合条件的数量 -->
@@ -110,10 +118,9 @@
             <if test="sts != null and sts != ''"> and sts = #{sts} </if>
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
-            <if test="billId != null and billId != ''"> and bill_id = #{billId} </if>
             <if test="type != null and type != ''"> and type = #{type} </if>
-            <if test="sendToUserId != null and sendToUserId != ''"> and send_to_user_id = #{sendToUserId} </if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> and send_to_person_id = #{sendToPersonId} </if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> and recipients_person_id = #{recipientsPersonId} </if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> and recipients_interior_id = #{recipientsInteriorId} </if>
             <if test="sendCount != null and sendCount != ''"> and send_count = #{sendCount} </if>
             <if test="sendDatetime != null"> and send_datetime = #{sendDatetime} </if>
             <if test="sendPersonId != null and sendPersonId != ''"> and send_person_id = #{sendPersonId} </if>
@@ -128,33 +135,53 @@
 
     <!-- 分页查询列表 采用like格式 -->
 <select id="entity_list_like" resultMap="get-SysSendMessageLogEntity-result" parameterType = "com.hzya.frame.sysnew.sendMessageLog.entity.SysSendMessageLogEntity">
-    select
-    <include refid="SysSendMessageLogEntity_Base_Column_List" />
-    from sys_send_message_log
+    SELECT
+    log.*,
+    p1.person_name AS recipients_person_name,
+    p2.person_Name AS send_person_name,
+    i.app_id AS app_id,
+    app.NAME AS app_name,
+    template.btns,
+    template.message_title
+    FROM
+    sys_send_message_log log
+    LEFT JOIN sys_person p1 ON p1.id = log.recipients_person_id
+    LEFT JOIN sys_person p2 ON p2.id = log.send_person_id
+    LEFT JOIN sys_warning_interface i ON i.id = log.warning_interface_id
+    LEFT JOIN sys_application app ON app.id = i.app_id
+    LEFT JOIN sys_warning_config config ON i.warning_config_id = config.id
+    LEFT JOIN sys_message_template template ON template.id = config.message_template_id
     <trim prefix="where" prefixOverrides="and"> 
-        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
-            <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
-            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
-            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
-            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
-            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
-            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
-            <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
-            <if test="companyId != null and companyId != ''"> and company_id like concat('%',#{companyId},'%') </if>
-            <if test="billId != null and billId != ''"> and bill_id like concat('%',#{billId},'%') </if>
-            <if test="type != null and type != ''"> and type like concat('%',#{type},'%') </if>
-            <if test="sendToUserId != null and sendToUserId != ''"> and send_to_user_id like concat('%',#{sendToUserId},'%') </if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> and send_to_person_id like concat('%',#{sendToPersonId},'%') </if>
-            <if test="sendCount != null and sendCount != ''"> and send_count like concat('%',#{sendCount},'%') </if>
-            <if test="sendDatetime != null"> and send_datetime like concat('%',#{sendDatetime},'%') </if>
-            <if test="sendPersonId != null and sendPersonId != ''"> and send_person_id like concat('%',#{sendPersonId},'%') </if>
-            <if test="sourceModelName != null and sourceModelName != ''"> and source_model_name like concat('%',#{sourceModelName},'%') </if>
-            <if test="state != null"> and state like concat('%',#{state},'%') </if>
-            <if test="resultMessage != null and resultMessage != ''"> and result_message like concat('%',#{resultMessage},'%') </if>
-            and sts='Y'
+        <if test="id != null and id != ''"> and log.id like concat('%',#{id},'%') </if>
+            <if test="sorts != null"> and log.sorts like concat('%',#{sorts},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and log.create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and log.create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and log.modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and log.modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and log.sts like concat('%',#{sts},'%') </if>
+            <if test="org_id != null and org_id != ''"> and log.org_id like concat('%',#{org_id},'%') </if>
+            <if test="companyId != null and companyId != ''"> and log.company_id like concat('%',#{companyId},'%') </if>
+            <if test="type != null and type != ''"> and log.type like concat('%',#{type},'%') </if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> and log.recipients_person_id like concat('%',#{recipientsPersonId},'%') </if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> and log.recipients_interior_id like concat('%',#{recipientsInteriorId},'%') </if>
+            <if test="sendCount != null and sendCount != ''"> and log.send_count like concat('%',#{sendCount},'%') </if>
+            <if test="sendDatetime != null"> and log.send_datetime like concat('%',DATE (#{sendDatetime}),'%') </if>
+            <if test="sendPersonId != null and sendPersonId != ''"> and log.send_person_id like concat('%',#{sendPersonId},'%') </if>
+            <if test="sourceModelName != null and sourceModelName != ''"> and log.source_model_name like concat('%',#{sourceModelName},'%') </if>
+            <if test="state != null"> and log.state like concat('%',#{state},'%') </if>
+            <if test="resultMessage != null and resultMessage != ''"> and log.result_message like concat('%',#{resultMessage},'%') </if>
+            <if test="appId != null and appId != ''">and i.app_id like concat('%',#{appId},'%') </if>
+            and log.sts='Y'
+            and i.sts='Y'
+            and config.sts='Y'
+            and template.sts='Y'
+            and p1.sts='Y'
+            and p2.sts='Y'
+            and app.sts='Y'
     </trim>
-    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
-    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
+<!--    <if test=" sort == null or sort == ''.toString() "> order by log.sorts asc</if>-->
+<!--    <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>-->
+            order by log.send_datetime desc
 </select>
 
 <!-- 查询列表 字段采用or格式 -->
@@ -172,10 +199,9 @@
               <if test="sts != null and sts != ''"> or sts = #{sts} </if>
              <if test="org_id != null and org_id != ''"> or org_id = #{org_id} </if>
               <if test="companyId != null and companyId != ''"> or company_id = #{companyId} </if>
-             <if test="billId != null and billId != ''"> or bill_id = #{billId} </if>
              <if test="type != null and type != ''"> or type = #{type} </if>
-             <if test="sendToUserId != null and sendToUserId != ''"> or send_to_user_id = #{sendToUserId} </if>
-             <if test="sendToPersonId != null and sendToPersonId != ''"> or send_to_person_id = #{sendToPersonId} </if>
+             <if test="recipientsPersonId != null and recipientsPersonId != ''"> or recipients_person_id = #{recipientsPersonId} </if>
+             <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> or recipients_interior_id = #{recipientsInteriorId} </if>
              <if test="sendCount != null and sendCount != ''"> or send_count = #{sendCount} </if>
              <if test="sendDatetime != null"> or send_datetime = #{sendDatetime} </if>
              <if test="sendPersonId != null and sendPersonId != ''"> or send_person_id = #{sendPersonId} </if>
@@ -201,16 +227,16 @@
             <if test="sts != null and sts != ''"> sts , </if>
             <if test="org_id != null and org_id != ''"> org_id , </if>
             <if test="companyId != null and companyId != ''"> company_id , </if>
-            <if test="billId != null and billId != ''"> bill_id , </if>
             <if test="type != null and type != ''"> type , </if>
-            <if test="sendToUserId != null and sendToUserId != ''"> send_to_user_id , </if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> send_to_person_id , </if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> recipients_person_id , </if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> recipients_interior_id , </if>
             <if test="sendCount != null and sendCount != ''"> send_count , </if>
             <if test="sendDatetime != null"> send_datetime , </if>
             <if test="sendPersonId != null and sendPersonId != ''"> send_person_id , </if>
             <if test="sourceModelName != null and sourceModelName != ''"> source_model_name , </if>
             <if test="state != null"> state , </if>
             <if test="resultMessage != null and resultMessage != ''"> result_message , </if>
+            <if test="warningInterfaceId != null and warningInterfaceId != ''"> warning_interface_id , </if>
     <if test="sts == null ">sts,</if>
   </trim>
   )values(
@@ -224,34 +250,34 @@
             <if test="sts != null and sts != ''"> #{sts} ,</if>
             <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
             <if test="companyId != null and companyId != ''"> #{companyId} ,</if>
-            <if test="billId != null and billId != ''"> #{billId} ,</if>
             <if test="type != null and type != ''"> #{type} ,</if>
-            <if test="sendToUserId != null and sendToUserId != ''"> #{sendToUserId} ,</if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> #{sendToPersonId} ,</if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> #{recipientsPersonId} ,</if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> #{recipientsInteriorId} ,</if>
             <if test="sendCount != null and sendCount != ''"> #{sendCount} ,</if>
             <if test="sendDatetime != null"> #{sendDatetime} ,</if>
             <if test="sendPersonId != null and sendPersonId != ''"> #{sendPersonId} ,</if>
             <if test="sourceModelName != null and sourceModelName != ''"> #{sourceModelName} ,</if>
             <if test="state != null"> #{state} ,</if>
             <if test="resultMessage != null and resultMessage != ''"> #{resultMessage} ,</if>
+            <if test="warningInterfaceId != null and warningInterfaceId != ''"> #{warningInterfaceId} ,</if>
     <if test="sts == null ">'Y',</if>
   </trim>
   )  
 </insert>
 <!-- 批量新增 -->
 <insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
-  insert into sys_send_message_log(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, bill_id, type, send_to_user_id, send_to_person_id, send_count, send_datetime, send_person_id, source_model_name, state, result_message,  sts) 
+  insert into sys_send_message_log(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, bill_id, type, recipients_person_id, recipients_interior_id, send_count, send_datetime, send_person_id, source_model_name, state, result_message,  sts) 
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.billId},#{entity.type},#{entity.sendToUserId},#{entity.sendToPersonId},#{entity.sendCount},#{entity.sendDatetime},#{entity.sendPersonId},#{entity.sourceModelName},#{entity.state},#{entity.resultMessage}, 'Y')
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.billId},#{entity.type},#{entity.recipientsPersonId},#{entity.recipientsInteriorId},#{entity.sendCount},#{entity.sendDatetime},#{entity.sendPersonId},#{entity.sourceModelName},#{entity.state},#{entity.resultMessage}, 'Y')
     </foreach>
 </insert>
 <!-- 批量新增或者修改-->
 <insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
-    insert into sys_send_message_log(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, bill_id, type, send_to_user_id, send_to_person_id, send_count, send_datetime, send_person_id, source_model_name, state, result_message)
+    insert into sys_send_message_log(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, bill_id, type, recipients_person_id, recipients_interior_id, send_count, send_datetime, send_person_id, source_model_name, state, result_message)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.billId},#{entity.type},#{entity.sendToUserId},#{entity.sendToPersonId},#{entity.sendCount},#{entity.sendDatetime},#{entity.sendPersonId},#{entity.sourceModelName},#{entity.state},#{entity.resultMessage})
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.billId},#{entity.type},#{entity.recipientsPersonId},#{entity.recipientsInteriorId},#{entity.sendCount},#{entity.sendDatetime},#{entity.sendPersonId},#{entity.sourceModelName},#{entity.state},#{entity.resultMessage})
     </foreach>
     on duplicate key update
     create_user_id = values(create_user_id),
@@ -263,8 +289,8 @@
     company_id = values(company_id),
     bill_id = values(bill_id),
     type = values(type),
-    send_to_user_id = values(send_to_user_id),
-    send_to_person_id = values(send_to_person_id),
+    recipients_person_id = values(recipients_person_id),
+    recipients_interior_id = values(recipients_interior_id),
     send_count = values(send_count),
     send_datetime = values(send_datetime),
     send_person_id = values(send_person_id),
@@ -282,10 +308,9 @@ update sys_send_message_log  set
     <if test="sts != null and sts != ''"> sts = #{sts},</if>
   <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
     <if test="companyId != null and companyId != ''"> company_id = #{companyId},</if>
-  <if test="billId != null and billId != ''"> bill_id = #{billId},</if>
   <if test="type != null and type != ''"> type = #{type},</if>
-  <if test="sendToUserId != null and sendToUserId != ''"> send_to_user_id = #{sendToUserId},</if>
-  <if test="sendToPersonId != null and sendToPersonId != ''"> send_to_person_id = #{sendToPersonId},</if>
+  <if test="recipientsPersonId != null and recipientsPersonId != ''"> recipients_person_id = #{recipientsPersonId},</if>
+  <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> recipients_interior_id = #{recipientsInteriorId},</if>
   <if test="sendCount != null and sendCount != ''"> send_count = #{sendCount},</if>
   <if test="sendDatetime != null"> send_datetime = #{sendDatetime},</if>
   <if test="sendPersonId != null and sendPersonId != ''"> send_person_id = #{sendPersonId},</if>
@@ -308,10 +333,9 @@ update sys_send_message_log  set sts= 'N' ,modify_time = #{modify_time},modify_u
             <if test="sorts != null"> and sorts = #{sorts} </if>
                                                                 <if test="sts != null and sts != ''"> and sts = #{sts} </if>
                          <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
-            <if test="billId != null and billId != ''"> and bill_id = #{billId} </if>
             <if test="type != null and type != ''"> and type = #{type} </if>
-            <if test="sendToUserId != null and sendToUserId != ''"> and send_to_user_id = #{sendToUserId} </if>
-            <if test="sendToPersonId != null and sendToPersonId != ''"> and send_to_person_id = #{sendToPersonId} </if>
+            <if test="recipientsPersonId != null and recipientsPersonId != ''"> and recipients_person_id = #{recipientsPersonId} </if>
+            <if test="recipientsInteriorId != null and recipientsInteriorId != ''"> and recipients_interior_id = #{recipientsInteriorId} </if>
             <if test="sendCount != null and sendCount != ''"> and send_count = #{sendCount} </if>
             <if test="sendDatetime != null"> and send_datetime = #{sendDatetime} </if>
             <if test="sendPersonId != null and sendPersonId != ''"> and send_person_id = #{sendPersonId} </if>
@@ -326,28 +350,5 @@ update sys_send_message_log  set sts= 'N' ,modify_time = #{modify_time},modify_u
     delete from sys_send_message_log where id = #{id}
 </delete>
 
-    <!-- 查询 采用==查询 -->
-    <select id="entity_list_base" resultMap="get-PushMessageEntity-result" parameterType = "com.hzya.frame.plugin.pushMessage.entity.PushMessageEntity">
-        SELECT
-            warning_config.push_method,
-            warning_config.sendAppid AS warning_app_code,
-            warning_config.endApiCode AS warning_api_code,
-            warning_config.app_type,
-            warning_config.recipient_id AS recipient_id_list,
-            log.send_app_name,
-            log.receive_app_name,
-            receive_api_name,
-            log.receive_api_code,
-            log.return_data,
-            log.STATUS
-        FROM
-            v_hzya_sys_warning warning_config
-                LEFT JOIN v_hzya_sys_send_message_log log ON warning_config.api_code = log.receive_api_code
-        WHERE
-            log.STATUS = '4'
-          AND warning_config.push_method = '定时'
-    </select>
-
-
 </mapper>
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/ISysSendMessageLogService.java b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/ISysSendMessageLogService.java
index 929a22b3..0472f9ac 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/ISysSendMessageLogService.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/ISysSendMessageLogService.java
@@ -23,6 +23,8 @@ public interface ISysSendMessageLogService extends IBaseService<SysSendMessageLo
 
     JsonResultEntity saveEntity(JSONObject jsonObject);
 
+    JsonResultEntity markRead(JSONObject jsonObject);
+
     JsonResultEntity updateEntity(JSONObject jsonObject);
 
     JsonResultEntity deleteEntity(JSONObject jsonObject);
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/impl/SysSendMessageLogServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/impl/SysSendMessageLogServiceImpl.java
index 2ff4f682..0b03ee45 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/impl/SysSendMessageLogServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/sendMessageLog/service/impl/SysSendMessageLogServiceImpl.java
@@ -10,8 +10,12 @@ import com.hzya.frame.sysnew.application.api.dao.ISysApplicationApiDao;
 import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity;
 import com.hzya.frame.sysnew.application.apiPara.dao.ISysApplicationApiParaDao;
 import com.hzya.frame.sysnew.application.apiPara.entity.SysApplicationApiParaEntity;
+import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.service.impl.ApplicationCache;
 import com.hzya.frame.sysnew.messageTemplate.dao.ISysMessageTemplateDao;
 import com.hzya.frame.sysnew.messageTemplate.entity.SysMessageTemplateEntity;
+import com.hzya.frame.sysnew.person.dao.ISysPersonDao;
 import com.hzya.frame.sysnew.pushMessage.entity.SysPushMessageEntity;
 import com.hzya.frame.sysnew.sendMessageLog.entity.SysSendMessageLogEntity;
 import com.hzya.frame.sysnew.sendMessageLog.dao.ISysSendMessageLogDao;
@@ -25,9 +29,12 @@ import com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity;
 import com.hzya.frame.uuid.UUIDUtils;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
+
 import javax.annotation.Resource;
+
 import com.hzya.frame.basedao.service.impl.BaseService;
 
 import java.util.ArrayList;
@@ -43,368 +50,442 @@ import java.util.List;
 @Service(value = "sysSendMessageLogService")
 public class SysSendMessageLogServiceImpl extends BaseService<SysSendMessageLogEntity, String> implements ISysSendMessageLogService {
 
-	@Resource
-	private ISysWarningInterfaceDao sysWarningInterfaceDao;
-	@Resource
-	private ISysWarningConfigDao sysWarningConfigDao;
-	@Resource
-	private ISysMessageTemplateDao sysMessageTemplateDao;
-	@Resource
-	private ISysUserDao sysUserDao;
-	@Resource
-	private ISysApplicationApiDao sysApplicationApiDao;
-	@Resource
-	private ISysApplicationApiParaDao sysApplicationApiParaDao;
+    @Resource
+    private ApplicationCache applicationCache;
+    @Resource
+    private ISysWarningInterfaceDao sysWarningInterfaceDao;
+    @Resource
+    private ISysWarningConfigDao sysWarningConfigDao;
+    @Resource
+    private ISysMessageTemplateDao sysMessageTemplateDao;
+    @Resource
+    private ISysUserDao sysUserDao;
+    @Resource
+    private ISysPersonDao sysPersonsDao;
 
-	private ISysSendMessageLogDao sysSendMessageLogDao;
+    @Resource
+    private ISysApplicationApiDao sysApplicationApiDao;
+    @Resource
+    private ISysApplicationApiParaDao sysApplicationApiParaDao;
 
-	@Autowired
-	public void setSysSendMessageLogDao(ISysSendMessageLogDao dao) {
-		this.sysSendMessageLogDao = dao;
-		this.dao = dao;
-	}
+    @Value("${zt.url}")
+    private String url ;
 
-	@Override
-	public JsonResultEntity queryEntityPage(JSONObject jsonObject) {
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
-			return BaseResult.getFailureMessageEntity("分页查询参数不存在");
-		}
-		PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
-		List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryByLike(entity);
-		PageInfo pageInfo = new PageInfo(list);
-		return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
-	}
+    private ISysSendMessageLogDao sysSendMessageLogDao;
 
-	@Override
-	public JsonResultEntity queryEntity(JSONObject jsonObject) {
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if (entity == null) {
-			entity = new SysSendMessageLogEntity();
-		}
-		List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryByLike(entity);
-		return BaseResult.getSuccessMessageEntity("查询数据成功", list);
-	}
+    @Autowired
+    public void setSysSendMessageLogDao(ISysSendMessageLogDao dao) {
+        this.sysSendMessageLogDao = dao;
+        this.dao = dao;
+    }
 
-	@Override
-	public JsonResultEntity getEntity(JSONObject jsonObject) {
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if (entity == null) {
-			return BaseResult.getFailureMessageEntity("参数不能为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		entity = sysSendMessageLogDao.get(entity.getId());
-		if (entity == null) {
-			return BaseResult.getFailureMessageEntity("获取发送消息日志失败");
-		}
-		return BaseResult.getSuccessMessageEntity("获取发送消息日志成功", entity);
-	}
+    @Override
+    public JsonResultEntity queryEntityPage(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null || entity.getPageNum() == null || entity.getPageSize() == null) {
+            return BaseResult.getFailureMessageEntity("分页查询参数不存在");
+        }
+        PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
+        List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryByLike(entity);
+        PageInfo pageInfo = new PageInfo(list);
+        return BaseResult.getSuccessMessageEntity("查询数据成功", pageInfo);
+    }
 
-	@Override
-	public JsonResultEntity saveEntity(JSONObject jsonObject) {
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if (entity == null) {
-			return BaseResult.getFailureMessageEntity("参数不能为空");
-		}
-		if (entity.getBillId() == null || "".equals(entity.getBillId())) {
-			return BaseResult.getFailureMessageEntity("来源业务单据不能为空");
-		}
-		entity.setCreate();
-		sysSendMessageLogDao.save(entity);
-		return BaseResult.getSuccessMessageEntity("保存发送消息日志成功", entity);
-	}
+    @Override
+    public JsonResultEntity queryEntity(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null) {
+            entity = new SysSendMessageLogEntity();
+        }
+        List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryByLike(entity);
+        return BaseResult.getSuccessMessageEntity("查询数据成功", list);
+    }
 
-	@Override
-	public JsonResultEntity updateEntity(JSONObject jsonObject){
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if (entity == null) {
-			return BaseResult.getFailureMessageEntity("参数不能为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		if (entity.getBillId() == null || "".equals(entity.getBillId())) {
-			return BaseResult.getFailureMessageEntity("来源业务单据不能为空");
-		}
-		entity.setUpdate();
-		sysSendMessageLogDao.update(entity);
-		return BaseResult.getSuccessMessageEntity("修改发送消息日志成功", entity);
-	}
+    @Override
+    public JsonResultEntity getEntity(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不能为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        entity = sysSendMessageLogDao.get(entity.getId());
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("获取发送消息日志失败");
+        }
+        return BaseResult.getSuccessMessageEntity("获取发送消息日志成功", entity);
+    }
 
-	@Override
-	public JsonResultEntity deleteEntity(JSONObject jsonObject){
-		SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
-		if(entity == null){
-			return BaseResult.getFailureMessageEntity("参数不能为空");
-		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
-		}
-		entity.setUpdate();;
-		sysSendMessageLogDao.logicRemove(entity);
-		return BaseResult.getSuccessMessageEntity("删除发送消息日志成功", entity);
-	}
+    @Override
+    public JsonResultEntity markRead(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity.getAppId() == null || "".equals(entity.getAppId())) {
+            return BaseResult.getFailureMessageEntity("传入appId不能为空");
+        }
+        List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryBase(entity);
+        if (list == null || list.size() == 0) {
+            return BaseResult.getSuccessMessageEntity("未找到需要标记已读的消息日志", list);
+        }
+        for (SysSendMessageLogEntity log : list) {
+            log.setState(1);
+            log.setUpdate();
+            sysSendMessageLogDao.update(log);
+        }
+        return BaseResult.getSuccessMessageEntity("标记已读成功", list);
+    }
+
+    @Override
+    public JsonResultEntity saveEntity(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不能为空");
+        }
+        entity.setCreate();
+        sysSendMessageLogDao.save(entity);
+        return BaseResult.getSuccessMessageEntity("保存发送消息日志成功", entity);
+    }
+
+    @Override
+    public JsonResultEntity updateEntity(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不能为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        entity.setUpdate();
+        sysSendMessageLogDao.update(entity);
+        return BaseResult.getSuccessMessageEntity("修改发送消息日志成功", entity);
+    }
+
+    @Override
+    public JsonResultEntity deleteEntity(JSONObject jsonObject) {
+        SysSendMessageLogEntity entity = getData("jsonStr", jsonObject, SysSendMessageLogEntity.class);
+        if (entity == null) {
+            return BaseResult.getFailureMessageEntity("参数不能为空");
+        }
+        if (entity.getId() == null || "".equals(entity.getId())) {
+            return BaseResult.getFailureMessageEntity("系统错误");
+        }
+        entity.setUpdate();
+        ;
+        sysSendMessageLogDao.logicRemove(entity);
+        return BaseResult.getSuccessMessageEntity("删除发送消息日志成功", entity);
+    }
 
 
-	/**
-	 * sendMessage方法:根据请求错误消息,组装成消息模版,推送到三方业务系统
-	 * 1、先获取接口调用的日志数据
-	 * 2、如果日志状态为失败,且该接口预警状态为启用,则进行消息推送
-	 * 3、根据预警配置,找到消息模版,并生成消息内容
-	 * 4、根据预警配置,找到预警应用,并推送消息
-	 * 5、保存消息推送日志
-	 * */
-	@Override
-	public boolean sendMessage(SysPushMessageEntity entity){
-		String status = entity.getStatus();
-		Long receiveApiCode = entity.getReceiveApiCode();
-		String sendAppName = entity.getSendAppName();
-		String receiveApiName = entity.getReceiveApiName();
-		String recieveAppName = entity.getReceiveAppName();
-		String returnData = entity.getReturnData();
-		String warningAppType = entity.getWarningAppType();
-		Long warningAppCode = entity.getWarningAppCode();
-		Long warningApiCode = entity.getWarningApiCode();
-		String sendMsgContent = "";
+    /**
+     * sendMessage方法:根据请求错误消息,组装成消息模版,推送到三方业务系统
+     * 1、先获取接口调用的日志数据
+     * 2、如果日志状态为失败,且该接口预警状态为启用,则进行消息推送
+     * 3、根据预警配置,找到消息模版,并生成消息内容
+     * 4、根据预警配置,找到预警应用,并推送消息
+     * 5、保存消息推送日志
+     */
+    @Override
+    public boolean sendMessage(SysPushMessageEntity entity) {
+        String status = entity.getStatus();
+        Long receiveApiCode = entity.getReceiveApiCode();
+        String sendAppName = entity.getSendAppName();
+        String receiveApiName = entity.getReceiveApiName();
+        String recieveAppName = entity.getReceiveAppName();
+        String returnData = entity.getReturnData();
+        String sendMsgContent = "";
 
-		SysWarningInterfaceEntity interfaceEntity = new SysWarningInterfaceEntity();
-		SysWarningConfigEntity configEntity = new SysWarningConfigEntity();
-		SysMessageTemplateEntity templateEntity = new SysMessageTemplateEntity();
-		SysApplicationApiParaEntity sysApplicationApiParaEntity = new SysApplicationApiParaEntity();
+        //SysWarningInterfaceEntity interfaceEntityApi = new SysWarningInterfaceEntity();
+        SysWarningInterfaceEntity interfaceEntity = new SysWarningInterfaceEntity();
+        SysWarningConfigEntity configEntity = new SysWarningConfigEntity();
+        SysMessageTemplateEntity templateEntity = new SysMessageTemplateEntity();
+        SysApplicationApiParaEntity sysApplicationApiParaEntity = new SysApplicationApiParaEntity();
 
-		interfaceEntity.setApiCode(receiveApiCode);
+        //interfaceEntityApi.setApiCode(receiveApiCode);
+        interfaceEntity.setApiCode(receiveApiCode);
+        if (status == null) {
+            logger.error("日志状态为空");
+            return false;
+        }
+        //只有发送失败的日志才会推送消息,成功的日志不推送消息
+        if ("4".equals(status)) {
+            try {
+                interfaceEntity = sysWarningInterfaceDao.queryOne(interfaceEntity);
+            } catch (Exception e) {
+                logger.error("API接口预警信息可能配置了多个");
+                return false;
+            }
+            //List<SysWarningInterfaceEntity> interfaceEntityList =sysWarningInterfaceDao.queryByLike(interfaceEntityApi);
+            //for(SysWarningInterfaceEntity interfaceEntity : interfaceEntityList){
+                if (interfaceEntity == null) {
+                    logger.error("未找到API接口预警信息");
+                    return false;
+                }
+                //只有预警接口状态为启用,才会进行消息推送
+                if (interfaceEntity.getStatus() == null || interfaceEntity.getStatus().equals("1") == false) {
+                    logger.error("API接口未启用推送");
+                    return false;
+                }
+                //根据主表id,找到主表记录中的消息模版id
+                String warningConfigId = interfaceEntity.getWarningConfigId();
+                SysWarningConfigEntity statusEntity = new SysWarningConfigEntity();
+                statusEntity.setStatus("1");
+                statusEntity.setId(warningConfigId);
+                if (warningConfigId == null || "".equals(warningConfigId)) {
+                    logger.error("未找到该接口预警配置信息的主表id");
+                    return false;
+                }
+                configEntity = sysWarningConfigDao.queryOne(statusEntity);
+                if (configEntity == null) {
+                    logger.error("未找到该接口预警配置信息");
+                    return false;
+                }
+                String messageTemplateId = configEntity.getMessageTemplateId();
+                if (messageTemplateId == null || "".equals(messageTemplateId)) {
+                    logger.error("未找到该接口预警配置信息的消息模版id");
+                    return false;
+                }
+                templateEntity = sysMessageTemplateDao.get(messageTemplateId);
+                if (templateEntity == null) {
+                    logger.error("未找到该接口预警配置信息的消息模版信息");
+                    return false;
+                }
+                if(templateEntity.getState() == null || !"1".equals(templateEntity.getState())){
+                    logger.error("当前预警配置中消息模版状态为禁用");
+                    return false;
+                }
 
-		if(status == null){
-			logger.error("日志状态为空");
-			return false;
-		}
-		//只有发送失败的日志才会推送消息,成功的日志不推送消息
-		if ("4".equals(status)) {
-			interfaceEntity = sysWarningInterfaceDao.queryOne(interfaceEntity);
-			if(interfaceEntity == null){
-				logger.error("未找到API接口预警信息");
-				return false;
-			}
-			//只有预警接口状态为启用,才会进行消息推送
-			if(interfaceEntity.getStatus() == null || interfaceEntity.getStatus().equals("1") == false){
-				logger.error("API接口未启用推送");
-				return false;
-			}
-			//根据主表id,找到主表记录中的消息模版id
-			String warningConfigId = interfaceEntity.getWarningConfigId();
-			if(warningConfigId == null || "".equals(warningConfigId)){
-				logger.error("未找到该接口预警配置信息的主表id");
-				return false;
-			}
-			configEntity = sysWarningConfigDao.get(warningConfigId);
-			if(configEntity == null){
-				logger.error("未找到该接口预警配置信息");
-				return false;
-			}
-			String messageTemplateId = configEntity.getMessageTemplateId();
-			if(messageTemplateId == null || "".equals(messageTemplateId)){
-				logger.error("未找到该接口预警配置信息的消息模版id");
-				return false;
-			}
-			templateEntity = sysMessageTemplateDao.get(messageTemplateId);
-			if(templateEntity == null){
-				logger.error("未找到该接口预警配置信息的消息模版信息");
-				return false;
-			}
+                String messageContent = templateEntity.getMessageContents();
+                if (messageContent == null || "".equals(messageContent)) {
+                    logger.error("未找到该接口预警配置信息的消息模版内容");
+                    return false;
+                }
+                //推送消息内容拼接
+                sendMsgContent = messageContent.replace("${receive_app_name}", recieveAppName);
+                sendMsgContent = sendMsgContent.replace("${send_app_name}", sendAppName);
+                sendMsgContent = sendMsgContent.replace("${receive_api_name}", receiveApiName);
+                sendMsgContent = sendMsgContent.replace("${return_data}", returnData);
+                //消息模版名称
+                String templateName = templateEntity.getTemplateName();
+                String type = "";
+                String bodyParams = "";
+                String warningAppId = configEntity.getWarningAppId();
 
-			String messageContent = templateEntity.getMessageContents();
-			if(messageContent == null || "".equals(messageContent)){
-				logger.error("未找到该接口预警配置信息的消息模版内容");
-				return false;
-			}
-            //推送消息内容拼接
-			sendMsgContent = messageContent.replace("${reciecveAppName}",recieveAppName);
-			sendMsgContent = sendMsgContent.replace("${sendAppName}",sendAppName);
-			sendMsgContent = sendMsgContent.replace("${receiveApiName}",receiveApiName);
-			sendMsgContent = sendMsgContent.replace("${returnData}",returnData);
-            //消息模版名称
-			String templateName = templateEntity.getTemplateName();
-			String type = "";
-			String bodyParams = "";
-			String warningAppId = configEntity.getWarningAppId();
+                Long warningApiCode = configEntity.getAcceptMessageApiCode();
+                String appCode = String.valueOf(warningApiCode).substring(0, 6);
+                SysApplicationEntity warningApp = getAppByAppId(appCode);
+                String warningAppType = warningApp.getAppType();
+                Integer warningAppCode = warningApp.getAppId();
 
-			//查询预警人员id列表
-			String recipientIdList = configEntity.getRecipientId();
-			//根据预警人员id列表,获取预警应用人员id列表
-			String warningAppReceiverIdList = getWarningAppReceiverIdList(warningAppType,recipientIdList);
+                //查询预警人员id列表
+                String recipientIdList = configEntity.getRecipientIdList();
+                //根据预警人员id列表,获取预警应用人员id列表
+                String warningAppReceiverIdList = getWarningAppReceiverIdList(warningAppType, recipientIdList);
 
-			switch (warningAppType){
-				case "6WX":
-					//调用微信推送消息
-					break;
-				case "5DD":
-					//消息类型:3表示钉钉
-					type = "3";
-					//获取钉钉发送消息时使用的微应用的AgentID
-					sysApplicationApiParaEntity.setAppId(warningAppId);
-					sysApplicationApiParaEntity.setInterfaceKey("agentId");
-					String agentId = sysApplicationApiParaDao.queryOne(sysApplicationApiParaEntity).getInterfaceValue();
-					//拼接调用钉钉接口的body参数
-					bodyParams = splicingDDBody(sendMsgContent,agentId,warningAppReceiverIdList).toString();
-					break;
-				default:
-					logger.error("未找到该应用类型");
-					break;
-			}
-			String result = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface").
-					header("appId",warningAppCode.toString()).
-					header("apiCode",warningApiCode.toString()).
-					header("publicKey","ZJYA7v6DubGMm8EdBPGo+Jj9wCpUeCGJEpfBRLiInq4dvDlCe7eDIk+3zDUT+v578prj").
-					header("secretKey","bsAMm6tvJs/BV1SO/9ZzjlW+OQaK0mwyv6rLvktyNy/OdltLuG2zze9bT7ttfAA9j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
-					body(bodyParams).
-					execute().
-					body();
-			JSONObject resultJson = JSONObject.parseObject(result);
-			String body = resultJson.getString("attribute");
+                switch (warningAppType) {
+                    case "6WX":
+                        //调用微信推送消息
+                        break;
+                    case "5DD":
+                        //消息类型:3表示钉钉
+                        type = "3";
+                        //获取钉钉发送消息时使用的微应用的AgentID
+                        sysApplicationApiParaEntity.setAppId(warningAppId);
+                        sysApplicationApiParaEntity.setInterfaceKey("agentId");
+                        String agentId = sysApplicationApiParaDao.queryOne(sysApplicationApiParaEntity).getInterfaceValue();
+                        //拼接调用钉钉接口的body参数
+                        bodyParams = splicingDDBody(sendMsgContent, agentId, warningAppReceiverIdList).toString();
+                        break;
+                    default:
+                        logger.error("未找到该应用类型");
+                        break;
+                }
+                String result = HttpRequest.post(url).
+                        header("appId", warningAppCode.toString()).
+                        header("apiCode", warningApiCode.toString()).
+                        header("publicKey", "ZJYA7v6DubGMm8EdBPGo+Jj9wCpUeCGJEpfBRLiInq4dvDlCe7eDIk+3zDUT+v578prj").
+                        header("secretKey", "bsAMm6tvJs/BV1SO/9ZzjlW+OQaK0mwyv6rLvktyNy/OdltLuG2zze9bT7ttfAA9j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
+                        body(bodyParams).
+                        execute().
+                        body();
+                JSONObject resultJson = JSONObject.parseObject(result);
+                String body = resultJson.getString("attribute");
+                SysApplicationApiEntity warningApiEntity = getApiByAppIdApiCode(warningAppId, warningApiCode.toString());
 
-			SysApplicationApiEntity sysApplicationApiEntity = new SysApplicationApiEntity();
-			sysApplicationApiEntity.setApiCode(warningApiCode);
-			SysApplicationApiEntity warningApiEntity = sysApplicationApiDao.queryOne(sysApplicationApiEntity);
+                //根据预警接口编码,以及返回数据,判断消息推送是否成功
+                if (warningApiEntity.getReturnSuccessField() != null && !"".equals(warningApiEntity.getReturnSuccessField())
+                        && warningApiEntity.getReturnSuccessValue() != null && !"".equals(warningApiEntity.getReturnSuccessValue())) {
+                    //先判断返回值是否为JSON格式
+                    if (JSONUtil.isTypeJSON(body)) {
+                        JSONObject cheackdatas = JSONObject.parseObject(body);
+                        JSONObject datas = JSONObject.parseObject(body);
+                        String checkdata = cheackdatas.getString(warningApiEntity.getReturnSuccessField());
+                        //判断返回值是否为预警接口预期的返回值(1、返回值匹配2、返回值配置的就是not null3、返回值带.)
+                        if (checkdata != null && warningApiEntity.getReturnSuccessValue().equals(checkdata)) {
+                            logger.info("推送消息成功,开始保存日志");
+                        } else if (warningApiEntity.getReturnSuccessValue().equals("not null") && checkdata != null) {
+                            logger.info("推送消息成功,开始保存日志");
+                        } else {
+                            String fieldname = warningApiEntity.getReturnSuccessField();
+                            if (fieldname.contains(".")) {
+                                String[] fileds = fieldname.split("\\.");
+                                boolean flags = false;
+                                for (int i = 0; i < fileds.length; i++) {
+                                    if (JSONUtil.isTypeJSON(datas.getString(fileds[i]))) {
+                                        datas = datas.getJSONObject(fileds[i]);
+                                        if (fileds.length - 2 == i) {
+                                            String a = datas.getString(fileds[i + 1]);
+                                            if (a != null && warningApiEntity.getReturnSuccessValue().equals(a)) {
+                                                flags = true;
+                                                break;
+                                            } else if (warningApiEntity.getReturnSuccessValue().equals("not null") && a != null) {
+                                                flags = true;
+                                                break;
+                                            } else {
+                                                break;
+                                            }
+                                        }
+                                    }
+                                }
+                                if (flags) {
+                                    logger.info("推送消息成功,开始保存日志");
+                                } else {
+                                    logger.error("推送消息失败,返回值错误");
+                                }
 
-			//根据预警接口编码,以及返回数据,判断消息推送是否成功
-            if(warningApiEntity.getReturnSuccessField() != null && !"".equals(warningApiEntity.getReturnSuccessField())
-			&& warningApiEntity.getReturnSuccessValue() != null && !"".equals(warningApiEntity.getReturnSuccessValue())){
-				//先判断返回值是否为JSON格式
-				if (JSONUtil.isTypeJSON(body)){
-					JSONObject cheackdatas = JSONObject.parseObject(body);
-					JSONObject datas = JSONObject.parseObject(body);
-					String checkdata = cheackdatas.getString(warningApiEntity.getReturnSuccessField());
-					//判断返回值是否为预警接口预期的返回值(1、返回值匹配2、返回值配置的就是not null3、返回值带.)
-					if (checkdata != null && warningApiEntity.getReturnSuccessValue().equals(checkdata)) {
-						logger.info("推送消息成功,开始保存日志");
-					}else if(warningApiEntity.getReturnSuccessValue().equals("not null") && checkdata != null){
-						logger.info("推送消息成功,开始保存日志");
-					}else {
-						String fieldname = warningApiEntity.getReturnSuccessField();
-						if(fieldname.contains(".")){
-							String[] fileds = fieldname.split("\\.");
-							boolean flags = false;
-							for (int i = 0; i < fileds.length; i++) {
-								if (JSONUtil.isTypeJSON(datas.getString(fileds[i]))) {
-									datas = datas.getJSONObject(fileds[i]);
-									if(fileds.length-2 == i ){
-										String a = datas.getString(fileds[i+1]);
-										if (a != null && warningApiEntity.getReturnSuccessValue().equals(a)) {
-											flags = true;
-											break;
-										}else if(warningApiEntity.getReturnSuccessValue().equals("not null") && a != null){
-											flags = true;
-											break;
-										}else {
-											break;
-										}
-									}
-								}
-							}
-							if(flags){
-								logger.info("推送消息成功,开始保存日志");
-							}else {
-								logger.error("推送消息失败,返回值错误");
-							}
+                            } else {
+                                logger.error("推送消息失败,返回值错误");
+                            }
+                        }
+                    } else {
+                        logger.error("接口调用失败,返回格式错误,不是JSON");
+                    }
+                } else {
+                    logger.error("api返回信息字段未配置,开始保存日志");
+                }
+                saveLog(sendMsgContent, type, resultJson.toString(), templateName, recipientIdList, warningAppReceiverIdList, interfaceEntity.getId());
+                logger.info("保存日志成功");
+            //}
 
-						}else {
-							logger.error("推送消息失败,返回值错误");
-						}
-					}
-				}else{
-					logger.error("接口调用失败,返回格式错误,不是JSON");
-				}
-			}else{
-				logger.error("api返回信息字段未配置,开始保存日志");
-			}
-			saveLog(sendMsgContent,type,resultJson.toString(),templateName,recipientIdList,warningAppReceiverIdList);
-			logger.info("保存日志成功");
-		}else{
-			logger.error("日志状态为成功,不需要推送消息");
-			return false;
-		}
-		return true;
-	}
+        } else {
+            logger.error("日志状态为成功,不需要推送消息");
+            return false;
+        }
+        return true;
+    }
 
+    /**
+     * 根据appCode查询缓存中的应用信息
+     */
+    private SysApplicationEntity getAppByAppId(String appId) {
+        String str = "appId" + appId;
+        Object o = applicationCache.get("1", str);
+        if (o != null) {
+            return (SysApplicationEntity) o;
+        }
+        return null;
+    }
 
-	/**保存推送消息日志时,需要循环预警应用人员id列表*/
-	public void saveLog(String sendMsgContent,String type,String resultMessage,String templateName,String recipientIdList,String warningAppReceiverIdList){
-		SysSendMessageLogEntity logEntity = new SysSendMessageLogEntity();
-		logEntity.setSendCount(sendMsgContent);
-		logEntity.setType(type);
-		logEntity.setBillId("test1411");
-		logEntity.setSendDatetime(new Date());
+    /**
+     * 根据appId和apiCode查询缓存中的api信息
+     */
+    private SysApplicationApiEntity getApiByAppIdApiCode(String appId, String apiCode) {
 
-		logEntity.setSts("Y");
-		logEntity.setCreate_user_id("1");
-		logEntity.setModify_user_id("1");
-		logEntity.setCreate_time(new Date());
-		logEntity.setModify_time(new Date());
-		logEntity.setOrg_id("0");
-		logEntity.setCompanyId("0");
+        String str = "appId" + appId + "apiCode" + apiCode;
+        Object o = applicationCache.get("2", str);
+        if (o != null) {
+            return (SysApplicationApiEntity) o;
+        }
+        return null;
+    }
+
+    /**
+     * 保存推送消息日志时,需要循环预警应用人员id列表
+     */
+    public void saveLog(String sendMsgContent, String type, String resultMessage, String templateName, String recipientIdList, String warningAppReceiverIdList,String warningInterfaceId) {
+        SysSendMessageLogEntity logEntity = new SysSendMessageLogEntity();
+        logEntity.setSendCount(sendMsgContent);
+        logEntity.setType(type);
+        logEntity.setSendDatetime(new Date());
+
+        logEntity.setSts("Y");
+        logEntity.setCreate_user_id("1");
+        logEntity.setModify_user_id("1");
+        logEntity.setCreate_time(new Date());
+        logEntity.setModify_time(new Date());
+        logEntity.setOrg_id("0");
+        logEntity.setCompanyId("0");
 
         logEntity.setSendPersonId("1");
-		logEntity.setResultMessage(resultMessage);
-		logEntity.setSourceModelName(templateName);
+        logEntity.setResultMessage(resultMessage);
+        logEntity.setSourceModelName(templateName);
+        logEntity.setState(0);
+        logEntity.setWarningInterfaceId(warningInterfaceId);
+        String[] recipientsInteriorIdList = warningAppReceiverIdList.split(",");
+        String[] recipientsPersonIdList = recipientIdList.split(",");
 
-		String[] personIdList = warningAppReceiverIdList.split(",");
-		String[] userIdList = recipientIdList.split(",");
+        for (int i = 0; i < recipientsInteriorIdList.length; i++) {
+            logEntity.setRecipientsInteriorId(recipientsInteriorIdList[i]);
+            logEntity.setRecipientsPersonId(recipientsPersonIdList[i]);
+            logEntity.setId(UUIDUtils.getUUID());
+            sysSendMessageLogDao.save(logEntity);
+        }
+    }
 
-		for(int i=0;i<personIdList.length;i++){
-			logEntity.setSendToPersonId(personIdList[i]);
-			logEntity.setSendToUserId(userIdList[i]);
-			logEntity.setId(UUIDUtils.getUUID());
-			sysSendMessageLogDao.save(logEntity);
-		}
-	}
-    /**拼接调用钉钉接口的body参数*/
-	public JSONObject splicingDDBody(String sendMsgContent,String agentId,String userid_list){
-		JSONObject bodyJson = new JSONObject();
-		JSONObject msg = new JSONObject();
-		JSONObject text = new JSONObject();
+    /**
+     * 拼接调用钉钉接口的body参数
+     */
+    public JSONObject splicingDDBody(String sendMsgContent, String agentId, String userid_list) {
+        JSONObject bodyJson = new JSONObject();
+        JSONObject msg = new JSONObject();
+        JSONObject text = new JSONObject();
 
-		text.put("content",sendMsgContent);
-		msg.put("msgtype","text");
-		msg.put("text",text);
-		bodyJson.put("msg",msg);
-		bodyJson.put("to_all_user","false");
-		bodyJson.put("agent_id",agentId);
-		bodyJson.put("userid_list",userid_list);
+        text.put("content", sendMsgContent);
+        msg.put("msgtype", "text");
+        msg.put("text", text);
+        bodyJson.put("msg", msg);
+        bodyJson.put("to_all_user", "false");
+        bodyJson.put("agent_id", agentId);
+        bodyJson.put("userid_list", userid_list);
 
-		return bodyJson;
-	}
+        return bodyJson;
+    }
 
-    /**根据预警应用类型和预警人员id列表,获取预警应用人员id列表*/
-	public String getWarningAppReceiverIdList(String warningAppType,String userIdList){
+    /**
+     * 根据预警应用类型和预警人员id列表,获取预警应用人员id列表
+     */
+    public String getWarningAppReceiverIdList(String warningAppType, String personIdList) {
 
-		String[] userIdArray = userIdList.split(",");
-		String warningAppReceiverIdList = "";
-		//根据预警人员id列表,查表sys_user中匹配的数据记录
-		List<SysUserEntity> sysUserList = new ArrayList<>();
-		for(String userId : userIdArray){
-			sysUserList.add(sysUserDao.get(userId));
-		}
-		switch (warningAppType){
-			case "6WX":
-				//获取微信预警人员id列表
-				break;
-			case "5DD":
-				//获取钉钉预警人员id列表
-				for(SysUserEntity sysUser : sysUserList){
-					if(sysUser.getDdUserId()!= null && !"".equals(sysUser.getDdUserId())){
-						if(!warningAppReceiverIdList.isEmpty()){
-							warningAppReceiverIdList += ",";
-						}
-						warningAppReceiverIdList += sysUser.getDdUserId();
-					}
-				}
-				break;
-			default:
-				logger.error("未找到该应用类型");
-				break;
-		}
+        String[] personIdArray = personIdList.split(",");
+        List<SysUserEntity> sysUserList = new ArrayList<>();
+        SysUserEntity sysUserEntity = new SysUserEntity();
+        for (String personId : personIdArray) {
+            sysUserEntity.setPersonId(personId);
+            sysUserList.add(sysUserDao.queryOne(sysUserEntity));
+        }
+        String warningAppReceiverIdList = "";
+        switch (warningAppType) {
+            case "6WX":
+                //获取微信预警人员id列表
+                break;
+            case "5DD":
+                //获取钉钉预警人员id列表
+                for (SysUserEntity sysUser : sysUserList) {
+                    if (sysUser.getDdUserId() == null || "".equals(sysUser.getDdUserId())) {
+                        String personName = sysPersonsDao.get(sysUser.getPersonId()).getPersonName();
+                        logger.error("接收人:" +personName + "未配置钉钉用户id");
+                    }
+                    if (sysUser.getDdUserId() != null && !"".equals(sysUser.getDdUserId())) {
+                        if (!warningAppReceiverIdList.isEmpty()) {
+                            warningAppReceiverIdList += ",";
+                        }
+                        warningAppReceiverIdList += sysUser.getDdUserId();
+                    }
+                }
+                break;
+            default:
+                logger.error("未找到该应用类型");
+                break;
+        }
         return warningAppReceiverIdList;
-	}
+    }
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.java
index 8358eb94..7280a09d 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.java
@@ -69,6 +69,8 @@ public class SysUserEntity extends BaseEntity {
      * 人员姓名
      */
     private String personName;
+    //编码
+    private String personCode;
     /**
      * 关联组织机构名称
      */
@@ -86,6 +88,9 @@ public class SysUserEntity extends BaseEntity {
 
     private String wxUserId;
 
+    //sys_flow模块用
+    private String flowClassId;
+
     public String getDdUserId() {
         return ddUserId;
     }
@@ -237,5 +242,21 @@ public class SysUserEntity extends BaseEntity {
     public void setOldPassword(String oldPassword) {
         OldPassword = oldPassword;
     }
+
+    public String getPersonCode() {
+        return personCode;
+    }
+
+    public void setPersonCode(String personCode) {
+        this.personCode = personCode;
+    }
+
+    public String getFlowClassId() {
+        return flowClassId;
+    }
+
+    public void setFlowClassId(String flowClassId) {
+        this.flowClassId = flowClassId;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.xml
index 82c6d1ed..3642ff41 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/user/entity/SysUserEntity.xml
@@ -22,6 +22,7 @@
         <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
         <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
         <result property="personName" column="person_Name" jdbcType="VARCHAR"/>
+        <result property="personCode" column="person_code" jdbcType="VARCHAR"/>
         <result property="organName" column="organ_name" jdbcType="VARCHAR"/>
         <result property="mobilePhone" column="mobile_phone" jdbcType="VARCHAR"/>
         <result property="ddUserId" column="dd_user_id" jdbcType="VARCHAR"/>
@@ -72,6 +73,7 @@
         ,a.org_id
         ,a.company_id
         ,p.person_Name
+        ,p.person_code
         ,a.wx_user_id
         ,a.dd_user_id
         from
@@ -104,6 +106,8 @@
             <if test="sts != null and sts != ''">and sts = #{sts}</if>
             <if test="org_id != null and org_id != ''">and org_id = #{org_id}</if>
             <if test="companyId != null and companyId != ''">and company_id = #{companyId}</if>
+            <if test="ddUserId != null and ddUserId != ''">and dd_user_id = #{ddUserId}</if>
+            <if test="wxUserId != null and wxUserId != ''">and wx_user_id = #{wxUserId}</if>
             and sts='Y'
         </trim>
         <if test=" sort == null or sort == ''.toString() ">order by sorts asc</if>
@@ -264,6 +268,69 @@
         <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
     </select>
 
+    <!-- 查询未分配过权限的用户 (sys_flow模块用) -->
+    <select id="entity_list_notin_sys_flowClass" resultMap="get-SysUserEntity-result"
+            parameterType="com.hzya.frame.sysnew.user.entity.SysUserEntity">
+        select
+        a.id
+        ,a.person_id
+        ,a.login_code
+        ,a.password
+        ,a.salt
+        ,a.last_login_time
+        ,a.last_connection_time
+        ,a.last_login_ip
+        ,a.state
+        ,a.remark
+        ,a.sorts
+        ,a.create_user_id
+        ,a.create_time
+        ,a.modify_user_id
+        ,a.modify_time
+        ,a.sts
+        ,a.org_id
+        ,a.company_id
+        ,p.person_Name
+        ,p.person_code
+        ,p.mobile_phone
+        ,o.organ_name
+        from
+        sys_user a
+        LEFT JOIN sys_person p on p.id =  a.person_id and p.sts = 'Y'
+        LEFT JOIN sys_organ o on o.id =  p.organ_id and o.sts = 'Y'
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id != ''">and a.id like concat('%',#{id},'%')</if>
+            <if test="personId != null and personId != ''">and a.person_id like concat('%',#{personId},'%')</if>
+            <if test="loginCode != null and loginCode != ''">and a.login_code like concat('%',#{loginCode},'%')</if>
+            <if test="password != null and password != ''">and a.password like concat('%',#{password},'%')</if>
+            <if test="salt != null and salt != ''">and a.salt like concat('%',#{salt},'%')</if>
+            <if test="lastLoginTime != null">and a.last_login_time like concat('%',#{lastLoginTime},'%')</if>
+            <if test="lastConnectionTime != null">and a.last_connection_time like concat('%',#{lastConnectionTime},'%')
+            </if>
+            <if test="lastLoginIp != null and lastLoginIp != ''">and a.last_login_ip like concat('%',#{lastLoginIp},'%')
+            </if>
+            <if test="state != null and state != ''">and a.state like concat('%',#{state},'%')</if>
+            <if test="remark != null and remark != ''">and a.remark like concat('%',#{remark},'%')</if>
+            <if test="sorts != null">and a.sorts like concat('%',#{sorts},'%')</if>
+            <if test="create_user_id != null and create_user_id != ''">and a.create_user_id like
+                concat('%',#{create_user_id},'%')
+            </if>
+            <if test="create_time != null">and a.create_time like concat('%',#{create_time},'%')</if>
+            <if test="modify_user_id != null and modify_user_id != ''">and a.modify_user_id like
+                concat('%',#{modify_user_id},'%')
+            </if>
+            <if test="modify_time != null">and a.modify_time like concat('%',#{modify_time},'%')</if>
+            <if test="sts != null and sts != ''">and a.sts like concat('%',#{sts},'%')</if>
+            <if test="org_id != null and org_id != ''">and a.org_id like concat('%',#{org_id},'%')</if>
+            <if test="companyId != null and companyId != ''">and a.company_id like concat('%',#{companyId},'%')</if>
+            <if test="organId != null and organId != ''">and p.organ_id  = #{organId}</if>
+            <if test="mobilePhone != null and mobilePhone != ''">and p.mobile_phone like concat('%',#{mobilePhone},'%')</if>
+            <if test="personName != null and personName != ''">and p.person_Name like concat('%',#{personName},'%')</if>
+            and a.sts='Y'
+            and a.id not in (select user_id from sys_flow_class_rule where sts = 'Y' and flow_class_id = #{flowClassId})
+        </trim>
+    </select>
+
     <!--新增所有列-->
     <insert id="entity_insert" parameterType="com.hzya.frame.sysnew.user.entity.SysUserEntity"
             >
@@ -373,6 +440,8 @@
             <if test="sts != null and sts != ''">sts = #{sts},</if>
             <if test="org_id != null and org_id != ''">org_id = #{org_id},</if>
             <if test="companyId != null and companyId != ''">company_id = #{companyId},</if>
+            <if test="ddUserId != null and ddUserId != ''">dd_user_id = #{ddUserId},</if>
+            <if test="wxUserId != null and wxUserId != ''">wx_user_id = #{wxUserId},</if>
         </trim>
         where id = #{id}
     </update>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.java
index 11be0abe..61d21a2e 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.java
@@ -14,8 +14,8 @@ public class SysWarningConfigEntity extends BaseEntity {
    private String companyId;
   /**  消息模版id */
    private String messageTemplateId;
-  /**  应用id */
-   private String appId;
+  /**  应用id列表 */
+   private String appIdList;
   /**  预警应用id */
    private String warningAppId;
   /**  接收推送消息的api编码 */
@@ -25,8 +25,63 @@ public class SysWarningConfigEntity extends BaseEntity {
   /**  是否启用(0:停用、1:启用) */
    private String status;
   /**  接收人id(存表sys_user的id) */
-   private String recipientId;
+   private String recipientIdList;
+   /**  模版名称 */
+   private String templateName;
+   /**  应用名称 */
+   private String appNameList;
+   /**  预警应用名称 */
+   private String warningAppNameList;
+   /**  接收人名称列表 */
+   private String recipientNameList;
 
+    public String getWarningAppNameList() {
+        return warningAppNameList;
+    }
+
+    public void setWarningAppNameList(String warningAppNameList) {
+        this.warningAppNameList = warningAppNameList;
+    }
+
+    public String getTemplateName() {
+        return templateName;
+    }
+
+    public void setTemplateName(String templateName) {
+        this.templateName = templateName;
+    }
+
+    public String getAppNameList() {
+        return appNameList;
+    }
+
+    public void setAppNameList(String appNameList) {
+        this.appNameList = appNameList;
+    }
+
+    public String getRecipientNameList() {
+        return recipientNameList;
+    }
+
+    public void setRecipientNameList(String recipientNameList) {
+        this.recipientNameList = recipientNameList;
+    }
+
+    public String getAppIdList() {
+        return appIdList;
+    }
+
+    public void setAppIdList(String appIdList) {
+        this.appIdList = appIdList;
+    }
+
+    public String getRecipientIdList() {
+        return recipientIdList;
+    }
+
+    public void setRecipientIdList(String recipientIdList) {
+        this.recipientIdList = recipientIdList;
+    }
 
     public String getCompanyId() {
         return companyId;
@@ -44,13 +99,6 @@ public class SysWarningConfigEntity extends BaseEntity {
         this.messageTemplateId = messageTemplateId;
     }
 
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
 
     public String getWarningAppId() {
         return warningAppId;
@@ -84,13 +132,5 @@ public class SysWarningConfigEntity extends BaseEntity {
         this.status = status;
     }
 
-    public String getRecipientId() {
-        return recipientId;
-    }
-
-    public void setRecipientId(String recipientId) {
-        this.recipientId = recipientId;
-    }
-
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.xml
index c7ff7a11..ac4fcc10 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/entity/SysWarningConfigEntity.xml
@@ -13,12 +13,13 @@
            <result property="org_id" column="org_id" jdbcType="VARCHAR"/>
            <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
            <result property="messageTemplateId" column="message_template_id" jdbcType="VARCHAR"/>
-           <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+           <result property="appIdList" column="app_id_list" jdbcType="VARCHAR"/>
            <result property="warningAppId" column="warning_app_id" jdbcType="VARCHAR"/>
            <result property="acceptMessageApiCode" column="accept_message_api_code" jdbcType="INTEGER"/>
            <result property="remark" column="remark" jdbcType="VARCHAR"/>
            <result property="status" column="status" jdbcType="VARCHAR"/>
-           <result property="recipientId" column="recipient_id" jdbcType="VARCHAR"/>
+           <result property="recipientIdList" column="recipient_id_list" jdbcType="VARCHAR"/>
+           <result property="templateName" column="template_name" jdbcType="VARCHAR"/>
         </resultMap>
     <!-- 查询的字段-->
     <sql id = "SysWarningConfigEntity_Base_Column_List">
@@ -32,19 +33,22 @@
         ,org_id 
         ,company_id 
         ,message_template_id 
-        ,app_id 
+        ,app_id_list 
         ,warning_app_id 
         ,accept_message_api_code 
         ,remark 
         ,status 
-        ,recipient_id 
+        ,recipient_id_list 
      </sql>
 
     <!--通过ID获取数据 -->
     <select id="entity_get" resultMap="get-SysWarningConfigEntity-result">
         select
-        <include refid="SysWarningConfigEntity_Base_Column_List" />
-        from sys_warning_config where id = #{ id } and sts='Y'
+             config.*
+             ,template.template_name
+        from sys_warning_config config
+        LEFT JOIN sys_message_template template ON template.id = config.message_template_id
+        where config.id = #{ id } AND config.sts='Y' AND template.sts='Y'
     </select>
  <!-- 查询 采用==查询 -->
  <select id="entity_list_base" resultMap="get-SysWarningConfigEntity-result" parameterType = "com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity">
@@ -62,12 +66,12 @@
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
             <if test="messageTemplateId != null and messageTemplateId != ''"> and message_template_id = #{messageTemplateId} </if>
-            <if test="appId != null and appId != ''"> and app_id = #{appId} </if>
+            <if test="appIdList != null and appIdList != ''"> and app_id_list = #{appIdList} </if>
             <if test="warningAppId != null and warningAppId != ''"> and warning_app_id = #{warningAppId} </if>
             <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> and accept_message_api_code = #{acceptMessageApiCode} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
             <if test="status != null and status != ''"> and status = #{status} </if>
-            <if test="recipientId != null and recipientId != ''"> and recipient_id = #{recipientId} </if>
+            <if test="recipientIdList != null and recipientIdList != ''"> and recipient_id_list = #{recipientIdList} </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
@@ -88,12 +92,12 @@
             <if test="org_id != null and org_id != ''"> and org_id = #{org_id} </if>
             <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
             <if test="messageTemplateId != null and messageTemplateId != ''"> and message_template_id = #{messageTemplateId} </if>
-            <if test="appId != null and appId != ''"> and app_id = #{appId} </if>
+            <if test="appIdList != null and appIdList != ''"> and app_id_list = #{appIdList} </if>
             <if test="warningAppId != null and warningAppId != ''"> and warning_app_id = #{warningAppId} </if>
             <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> and accept_message_api_code = #{acceptMessageApiCode} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
             <if test="status != null and status != ''"> and status = #{status} </if>
-            <if test="recipientId != null and recipientId != ''"> and recipient_id = #{recipientId} </if>
+            <if test="recipientIdList != null and recipientIdList != ''"> and recipient_id_list = #{recipientIdList} </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
@@ -103,28 +107,31 @@
     <!-- 分页查询列表 采用like格式 -->
 <select id="entity_list_like" resultMap="get-SysWarningConfigEntity-result" parameterType = "com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity">
     select
-    <include refid="SysWarningConfigEntity_Base_Column_List" />
-    from sys_warning_config
+    config.*
+    ,template.template_name
+    from sys_warning_config config
+    LEFT JOIN sys_message_template template ON template.id = config.message_template_id
     <trim prefix="where" prefixOverrides="and"> 
-        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
-            <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
-            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
-            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
-            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
-            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
-            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
-            <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
-            <if test="companyId != null and companyId != ''"> and company_id like concat('%',#{companyId},'%') </if>
-            <if test="messageTemplateId != null and messageTemplateId != ''"> and message_template_id like concat('%',#{messageTemplateId},'%') </if>
-            <if test="appId != null and appId != ''"> and app_id like concat('%',#{appId},'%') </if>
-            <if test="warningAppId != null and warningAppId != ''"> and warning_app_id like concat('%',#{warningAppId},'%') </if>
-            <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> and accept_message_api_code like concat('%',#{acceptMessageApiCode},'%') </if>
-            <if test="remark != null and remark != ''"> and remark like concat('%',#{remark},'%') </if>
-            <if test="status != null and status != ''"> and status like concat('%',#{status},'%') </if>
-            <if test="recipientId != null and recipientId != ''"> and recipient_id like concat('%',#{recipientId},'%') </if>
-            and sts='Y'
+        <if test="id != null and id != ''"> and config.id like concat('%',#{id},'%') </if>
+            <if test="sorts != null"> and config.sorts like concat('%',#{sorts},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and config.create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and config.create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and config.modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and config.modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and config.sts like concat('%',#{sts},'%') </if>
+            <if test="org_id != null and org_id != ''"> and config.org_id like concat('%',#{org_id},'%') </if>
+            <if test="companyId != null and companyId != ''"> and config.company_id like concat('%',#{companyId},'%') </if>
+            <if test="messageTemplateId != null and messageTemplateId != ''"> and config.message_template_id like concat('%',#{messageTemplateId},'%') </if>
+            <if test="appIdList != null and appIdList != ''"> and config.app_id_list like concat('%',#{appIdList},'%') </if>
+            <if test="warningAppId != null and warningAppId != ''"> and config.warning_app_id like concat('%',#{warningAppId},'%') </if>
+            <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> and config.accept_message_api_code like concat('%',#{acceptMessageApiCode},'%') </if>
+            <if test="remark != null and remark != ''"> and config.remark like concat('%',#{remark},'%') </if>
+            <if test="status != null and status != ''"> and config.status like concat('%',#{status},'%') </if>
+            <if test="recipientIdList != null and recipientIdList != ''"> and config.recipient_id_list like concat('%',#{recipientIdList},'%') </if>
+            and config.sts='Y'
+            and template.sts='Y'
     </trim>
-    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort == null or sort == ''.toString() "> order by config.sorts asc</if>
     <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
 </select>
 
@@ -144,12 +151,12 @@
              <if test="org_id != null and org_id != ''"> or org_id = #{org_id} </if>
               <if test="companyId != null and companyId != ''"> or company_id = #{companyId} </if>
              <if test="messageTemplateId != null and messageTemplateId != ''"> or message_template_id = #{messageTemplateId} </if>
-             <if test="appId != null and appId != ''"> or app_id = #{appId} </if>
+             <if test="appIdList != null and appIdList != ''"> or app_id_list = #{appIdList} </if>
              <if test="warningAppId != null and warningAppId != ''"> or warning_app_id = #{warningAppId} </if>
              <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> or accept_message_api_code = #{acceptMessageApiCode} </if>
              <if test="remark != null and remark != ''"> or remark = #{remark} </if>
              <if test="status != null and status != ''"> or status = #{status} </if>
-             <if test="recipientId != null and recipientId != ''"> or recipient_id = #{recipientId} </if>
+             <if test="recipientIdList != null and recipientIdList != ''"> or recipient_id_list = #{recipientIdList} </if>
             and sts='Y'
     </trim>
     <if test=" sort == null or sort == ''.toString()  "> order by sorts asc</if>
@@ -170,12 +177,12 @@
             <if test="org_id != null and org_id != ''"> org_id , </if>
             <if test="companyId != null and companyId != ''"> company_id , </if>
             <if test="messageTemplateId != null and messageTemplateId != ''"> message_template_id , </if>
-            <if test="appId != null and appId != ''"> app_id , </if>
+            <if test="appIdList != null and appIdList != ''"> app_id_list , </if>
             <if test="warningAppId != null and warningAppId != ''"> warning_app_id , </if>
             <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> accept_message_api_code , </if>
             <if test="remark != null and remark != ''"> remark , </if>
             <if test="status != null and status != ''"> status , </if>
-            <if test="recipientId != null and recipientId != ''"> recipient_id , </if>
+            <if test="recipientIdList != null and recipientIdList != ''"> recipient_id_list , </if>
     <if test="sts == null ">sts,</if>
   </trim>
   )values(
@@ -190,30 +197,30 @@
             <if test="org_id != null and org_id != ''"> #{org_id} ,</if>
             <if test="companyId != null and companyId != ''"> #{companyId} ,</if>
             <if test="messageTemplateId != null and messageTemplateId != ''"> #{messageTemplateId} ,</if>
-            <if test="appId != null and appId != ''"> #{appId} ,</if>
+            <if test="appIdList != null and appIdList != ''"> #{appIdList} ,</if>
             <if test="warningAppId != null and warningAppId != ''"> #{warningAppId} ,</if>
             <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> #{acceptMessageApiCode} ,</if>
             <if test="remark != null and remark != ''"> #{remark} ,</if>
             <if test="status != null and status != ''"> #{status} ,</if>
-            <if test="recipientId != null and recipientId != ''"> #{recipientId} ,</if>
+            <if test="recipientIdList != null and recipientIdList != ''"> #{recipientIdList} ,</if>
     <if test="sts == null ">'Y',</if>
   </trim>
   )  
 </insert>
 <!-- 批量新增 -->
 <insert id="entityInsertBatch" keyProperty="id" useGeneratedKeys="true">
-  insert into sys_warning_config(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, message_template_id, app_id, warning_app_id, accept_message_api_code, remark, status, recipient_id,  sts) 
+  insert into sys_warning_config(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, message_template_id, app_id_list, warning_app_id, accept_message_api_code, remark, status, recipient_id_list,  sts) 
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.messageTemplateId},#{entity.appId},#{entity.warningAppId},#{entity.acceptMessageApiCode},#{entity.remark},#{entity.status},#{entity.recipientId}, 'Y')
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.messageTemplateId},#{entity.appIdList},#{entity.warningAppId},#{entity.acceptMessageApiCode},#{entity.remark},#{entity.status},#{entity.recipientIdList}, 'Y')
     </foreach>
 </insert>
 <!-- 批量新增或者修改-->
 <insert id="entityInsertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
-    insert into sys_warning_config(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, message_template_id, app_id, warning_app_id, accept_message_api_code, remark, status, recipient_id)
+    insert into sys_warning_config(create_user_id, create_time, modify_user_id, modify_time, sts, org_id, company_id, message_template_id, app_id_list, warning_app_id, accept_message_api_code, remark, status, recipient_id_list)
     values
     <foreach collection="entities" item="entity" separator=",">
-    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.messageTemplateId},#{entity.appId},#{entity.warningAppId},#{entity.acceptMessageApiCode},#{entity.remark},#{entity.status},#{entity.recipientId})
+    (#{entity.create_user_id},#{entity.create_time},#{entity.modify_user_id},#{entity.modify_time},#{entity.sts},#{entity.org_id},#{entity.companyId},#{entity.messageTemplateId},#{entity.appIdList},#{entity.warningAppId},#{entity.acceptMessageApiCode},#{entity.remark},#{entity.status},#{entity.recipientIdList})
     </foreach>
     on duplicate key update
     create_user_id = values(create_user_id),
@@ -224,12 +231,12 @@
     org_id = values(org_id),
     company_id = values(company_id),
     message_template_id = values(message_template_id),
-    app_id = values(app_id),
+    app_id_list = values(app_id_list),
     warning_app_id = values(warning_app_id),
     accept_message_api_code = values(accept_message_api_code),
     remark = values(remark),
     status = values(status),
-    recipient_id = values(recipient_id)</insert>
+    recipient_id_list = values(recipient_id_list)</insert>
 <!--通过主键修改方法-->
 <update id="entity_update" parameterType = "com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity" >
 update sys_warning_config  set
@@ -242,12 +249,12 @@ update sys_warning_config  set
   <if test="org_id != null and org_id != ''"> org_id = #{org_id},</if>
     <if test="companyId != null and companyId != ''"> company_id = #{companyId},</if>
   <if test="messageTemplateId != null and messageTemplateId != ''"> message_template_id = #{messageTemplateId},</if>
-  <if test="appId != null and appId != ''"> app_id = #{appId},</if>
+  <if test="appIdList != null and appIdList != ''"> app_id_list = #{appIdList},</if>
   <if test="warningAppId != null and warningAppId != ''"> warning_app_id = #{warningAppId},</if>
   <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> accept_message_api_code = #{acceptMessageApiCode},</if>
   <if test="remark != null and remark != ''"> remark = #{remark},</if>
   <if test="status != null and status != ''"> status = #{status},</if>
-  <if test="recipientId != null and recipientId != ''"> recipient_id = #{recipientId},</if>
+  <if test="recipientIdList != null and recipientIdList != ''"> recipient_id_list = #{recipientIdList},</if>
 </trim>
 where id = #{id}
 </update>
@@ -265,12 +272,12 @@ update sys_warning_config  set sts= 'N' ,modify_time = #{modify_time},modify_use
                                                                 <if test="sts != null and sts != ''"> and sts = #{sts} </if>
                          <if test="companyId != null and companyId != ''"> and company_id = #{companyId} </if>
             <if test="messageTemplateId != null and messageTemplateId != ''"> and message_template_id = #{messageTemplateId} </if>
-            <if test="appId != null and appId != ''"> and app_id = #{appId} </if>
+            <if test="appIdList != null and appIdList != ''"> and app_id_list = #{appIdList} </if>
             <if test="warningAppId != null and warningAppId != ''"> and warning_app_id = #{warningAppId} </if>
             <if test="acceptMessageApiCode != null and acceptMessageApiCode != ''"> and accept_message_api_code = #{acceptMessageApiCode} </if>
             <if test="remark != null and remark != ''"> and remark = #{remark} </if>
             <if test="status != null and status != ''"> and status = #{status} </if>
-            <if test="recipientId != null and recipientId != ''"> and recipient_id = #{recipientId} </if>
+            <if test="recipientIdList != null and recipientIdList != ''"> and recipient_id_list = #{recipientIdList} </if>
             and sts='Y'
     </trim>
 </update>
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/service/impl/SysWarningConfigServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/service/impl/SysWarningConfigServiceImpl.java
index 7634e93f..541d44f1 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/service/impl/SysWarningConfigServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningConfig/service/impl/SysWarningConfigServiceImpl.java
@@ -1,11 +1,22 @@
 package com.hzya.frame.sysnew.warningConfig.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.messageTemplate.dao.ISysMessageTemplateDao;
+import com.hzya.frame.sysnew.messageTemplate.entity.SysMessageTemplateEntity;
+import com.hzya.frame.sysnew.person.dao.ISysPersonDao;
+import com.hzya.frame.sysnew.person.entity.SysPersonEntity;
+import com.hzya.frame.sysnew.user.dao.ISysUserDao;
+import com.hzya.frame.sysnew.user.entity.SysUserEntity;
 import com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity;
 import com.hzya.frame.sysnew.warningConfig.dao.ISysWarningConfigDao;
 import com.hzya.frame.sysnew.warningConfig.service.ISysWarningConfigService;
+import com.hzya.frame.sysnew.warningInterface.dao.ISysWarningInterfaceDao;
+import com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity;
 import com.hzya.frame.web.entity.BaseResult;
 import com.hzya.frame.web.entity.JsonResultEntity;
 import org.springframework.stereotype.Service;
@@ -13,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import javax.annotation.Resource;
 import com.hzya.frame.basedao.service.impl.BaseService;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -23,7 +35,20 @@ import java.util.List;
  */
 @Service(value = "sysWarningConfigService")
 public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEntity, String> implements ISysWarningConfigService {
-     
+
+	@Resource
+	private ISysWarningInterfaceDao sysWarningInterfaceDao;
+	@Resource
+	private ISysUserDao sysUserDao;
+	@Resource
+	private ISysPersonDao sysPersonDao;
+
+	@Resource
+	private ISysApplicationDao sysApplicationDao;
+
+	@Resource
+	private ISysMessageTemplateDao sysMessageTemplateDao;
+
     private ISysWarningConfigDao sysWarningConfigDao;
     
     @Autowired
@@ -40,7 +65,9 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 		}
 		PageHelper.startPage(entity.getPageNum(), entity.getPageSize());
 		List<SysWarningConfigEntity> list = sysWarningConfigDao.queryByLike(entity);
-		PageInfo pageInfo = new PageInfo(list);
+		//查询并记录应用名称、预警应用名称、接收者名称列表
+		List<SysWarningConfigEntity> resultList = queryNameList(list);
+		PageInfo pageInfo = new PageInfo(resultList);
 		return BaseResult.getSuccessMessageEntity("查询数据成功",pageInfo);
 	}
 
@@ -51,8 +78,11 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 			entity = new SysWarningConfigEntity();
 		}
 		List<SysWarningConfigEntity> list = sysWarningConfigDao.queryByLike(entity);
-		return BaseResult.getSuccessMessageEntity("查询数据成功",list);
+		//查询并记录应用名称、预警应用名称、接收者名称列表
+		List<SysWarningConfigEntity> resultList = queryNameList(list);
+		return BaseResult.getSuccessMessageEntity("查询数据成功",resultList);
 	}
+	/**查询应用名称、预警应用名称、接收者名称列表*/
 
 	@Override
 	public JsonResultEntity getEntity(JSONObject jsonObject){
@@ -63,23 +93,51 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 		if(entity.getId() == null || "".equals(entity.getId())){
 			return BaseResult.getFailureMessageEntity("系统错误");
 		}
+		//查询主表信息
 		 entity = sysWarningConfigDao.get(entity.getId());
 		if(entity == null){
 			return BaseResult.getFailureMessageEntity("获取预警配置失败");
 		}
-		return BaseResult.getSuccessMessageEntity("获取预警配置成功",entity);
+		List<SysWarningConfigEntity> list = new ArrayList<>();
+		list.add(entity);
+		//查询并记录应用名称、预警应用名称、接收者名称列表
+		List<SysWarningConfigEntity> resultList = queryNameList(list);
+		String warningConfigId = resultList.get(0).getId();
+		//查询子表信息
+		SysWarningInterfaceEntity interfaceEntity = new SysWarningInterfaceEntity();
+		interfaceEntity.setWarningConfigId(warningConfigId);
+		List<SysWarningInterfaceEntity> interfaceList = sysWarningInterfaceDao.queryByLike(interfaceEntity);
+		//拼接主子表信息并返回
+		JSONObject father = (JSONObject) JSONObject.toJSON(resultList.get(0));
+		JSONArray sonArray = new JSONArray();
+        for(SysWarningInterfaceEntity interfaceOne : interfaceList){
+			JSONObject interfaceJson = (JSONObject) JSONObject.toJSON(interfaceOne);
+			sonArray.add(interfaceJson);
+		}
+		JSONObject resultJson = new JSONObject();
+		resultJson.put("father", father);
+		resultJson.put("son", sonArray);
+		return BaseResult.getSuccessMessageEntity("获取预警配置成功",resultJson);
 	}
 
 	@Override
 	public JsonResultEntity saveEntity(JSONObject jsonObject){
-		SysWarningConfigEntity entity = getData("jsonStr", jsonObject, SysWarningConfigEntity.class);
+		JSONObject jsonStr = jsonObject.getJSONObject("jsonStr");
+		JSONArray sonArray = jsonStr.getJSONArray("son");
+		List<SysWarningInterfaceEntity> interfaceEntities = new ArrayList<>();
+		for(int i=0;i<sonArray.size();i++){
+			String  sonString = sonArray.getJSONObject(i).toString();
+			SysWarningInterfaceEntity interfaceEntity = getData(sonString,SysWarningInterfaceEntity.class);
+			interfaceEntities.add(interfaceEntity);
+		}
+		SysWarningConfigEntity entity = getData("father", jsonStr, SysWarningConfigEntity.class);
 		if(entity == null){
 			return BaseResult.getFailureMessageEntity("参数不允许为空");
 		}
 		if(entity.getMessageTemplateId() == null || "".equals(entity.getMessageTemplateId())){
-			return BaseResult.getFailureMessageEntity("消息模版不允许为空");
+			return BaseResult.getFailureMessageEntity("消息模版id不允许为空");
 		}
-		if(entity.getAppId() == null || "".equals(entity.getAppId())){
+		if(entity.getAppIdList() == null || "".equals(entity.getAppIdList())){
 			return BaseResult.getFailureMessageEntity("应用ID不允许为空");
 		}
 		if(entity.getWarningAppId() == null || "".equals(entity.getWarningAppId())){
@@ -88,27 +146,59 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 		if(entity.getStatus() == null || "".equals(entity.getStatus())){
 			return BaseResult.getFailureMessageEntity("状态不允许为空");
 		}
-		if(entity.getRecipientId() == null || "".equals(entity.getRecipientId())){
+		if(entity.getRecipientIdList() == null || "".equals(entity.getRecipientIdList())){
 			return BaseResult.getFailureMessageEntity("接收者ID不允许为空");
 		}
+		//检查接收者是否合规
+		String checkResult = checkRecipients(entity);
+		if(!"success".equals(checkResult)){
+			return BaseResult.getFailureMessageEntity(checkResult);
+		}
+
 		entity.setCreate();
+		String warningConfigId = entity.getId();
 		sysWarningConfigDao.save(entity);
+		for(SysWarningInterfaceEntity interfaceEntity : interfaceEntities){
+			interfaceEntity.setWarningConfigId(warningConfigId);
+			if(interfaceEntity.getApiCode() == null || "".equals(interfaceEntity.getApiCode())){
+				return BaseResult.getFailureMessageEntity("接口编码不能为空");
+			}
+			if(interfaceEntity.getPushMethod() == null || "".equals(interfaceEntity.getPushMethod())){
+				return BaseResult.getFailureMessageEntity("推送方式不能为空");
+			}
+			if(interfaceEntity.getStatus() == null || "".equals(interfaceEntity.getStatus())){
+				return BaseResult.getFailureMessageEntity("状态不能为空");
+			}
+			if(interfaceEntity.getWarningConfigId() == null || "".equals(interfaceEntity.getWarningConfigId())){
+				return BaseResult.getFailureMessageEntity("预警配置id不能为空");
+			}
+			interfaceEntity.setCreate();
+			sysWarningInterfaceDao.save(interfaceEntity);
+		}
 		return BaseResult.getSuccessMessageEntity("保存预警配置成功",entity);
 	}
 
 	@Override
 	public JsonResultEntity updateEntity(JSONObject jsonObject){
-		SysWarningConfigEntity entity = getData("jsonStr", jsonObject, SysWarningConfigEntity.class);
-		if (entity == null) {
+		JSONObject jsonStr = jsonObject.getJSONObject("jsonStr");
+		JSONArray sonArray = jsonStr.getJSONArray("son");
+		List<SysWarningInterfaceEntity> interfaceEntities = new ArrayList<>();
+		for(int i=0;i<sonArray.size();i++){
+			String  sonString = sonArray.getJSONObject(i).toString();
+			SysWarningInterfaceEntity interfaceEntity = getData(sonString,SysWarningInterfaceEntity.class);
+			interfaceEntities.add(interfaceEntity);
+		}
+		SysWarningConfigEntity entity = getData("father", jsonStr, SysWarningConfigEntity.class);
+		if(entity == null){
 			return BaseResult.getFailureMessageEntity("参数不允许为空");
 		}
-		if (entity.getId() == null || "".equals(entity.getId())) {
+		if(entity.getId() == null || "".equals(entity.getId())){
 			return BaseResult.getFailureMessageEntity("系统错误");
 		}
 		if(entity.getMessageTemplateId() == null || "".equals(entity.getMessageTemplateId())){
-			return BaseResult.getFailureMessageEntity("消息模版不允许为空");
+			return BaseResult.getFailureMessageEntity("消息模版id不允许为空");
 		}
-		if(entity.getAppId() == null || "".equals(entity.getAppId())){
+		if(entity.getAppIdList() == null || "".equals(entity.getAppIdList())){
 			return BaseResult.getFailureMessageEntity("应用ID不允许为空");
 		}
 		if(entity.getWarningAppId() == null || "".equals(entity.getWarningAppId())){
@@ -117,14 +207,68 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 		if(entity.getStatus() == null || "".equals(entity.getStatus())){
 			return BaseResult.getFailureMessageEntity("状态不允许为空");
 		}
-		if(entity.getRecipientId() == null || "".equals(entity.getRecipientId())){
+		if(entity.getRecipientIdList() == null || "".equals(entity.getRecipientIdList())){
 			return BaseResult.getFailureMessageEntity("接收者ID不允许为空");
 		}
+		//检查接收者是否合规
+		String checkResult = checkRecipients(entity);
+		if(!"success".equals(checkResult)){
+			return BaseResult.getFailureMessageEntity(checkResult);
+		}
 		entity.setUpdate();
+		String warningConfigId = entity.getId();
 		sysWarningConfigDao.update(entity);
+		//先查询现有的子表数据并记录
+		SysWarningInterfaceEntity oldInterfaceEntity = new SysWarningInterfaceEntity();
+		oldInterfaceEntity.setWarningConfigId(warningConfigId);
+		List<SysWarningInterfaceEntity> oldInterfaceList = sysWarningInterfaceDao.queryBase(oldInterfaceEntity);
+		//更新子表数据
+		for(SysWarningInterfaceEntity interfaceEntity : interfaceEntities){
+			interfaceEntity.setWarningConfigId(warningConfigId);
+			if(interfaceEntity.getApiCode() == null || "".equals(interfaceEntity.getApiCode())){
+				return BaseResult.getFailureMessageEntity("接口编码不能为空");
+			}
+			if(interfaceEntity.getPushMethod() == null || "".equals(interfaceEntity.getPushMethod())){
+				return BaseResult.getFailureMessageEntity("推送方式不能为空");
+			}
+			if(interfaceEntity.getStatus() == null || "".equals(interfaceEntity.getStatus())){
+				return BaseResult.getFailureMessageEntity("状态不能为空");
+			}
+			if(interfaceEntity.getWarningConfigId() == null || "".equals(interfaceEntity.getWarningConfigId())){
+				return BaseResult.getFailureMessageEntity("预警配置id不能为空");
+			}
+			if(interfaceEntity.getId() == null || "".equals(interfaceEntity.getId())){
+				//新增
+				interfaceEntity.setCreate();
+				sysWarningInterfaceDao.save(interfaceEntity);
+			}else{
+				//修改
+				interfaceEntity.setUpdate();
+				interfaceEntity.setSts("Y");
+				sysWarningInterfaceDao.update(interfaceEntity);
+			}
+		}
+		//删除多余的子表数据
+		boolean isDelete = true;
+		for(SysWarningInterfaceEntity oldInterface : oldInterfaceList){
+			isDelete = true;
+			for(SysWarningInterfaceEntity interfaceEntity : interfaceEntities){
+				if(oldInterface.getId().equals(interfaceEntity.getId())){
+					isDelete = false;
+					break;
+				}
+			}
+			if(isDelete){
+				sysWarningInterfaceDao.logicRemove(oldInterface);
+			}
+
+		}
+
 		return BaseResult.getSuccessMessageEntity("修改预警配置成功",entity);
 	}
 
+	/**
+	 * 删除主表时,同时删除子表数据*/
 	@Override
 	public JsonResultEntity deleteEntity(JSONObject jsonObject) {
 		SysWarningConfigEntity entity = getData("jsonStr", jsonObject, SysWarningConfigEntity.class);
@@ -134,8 +278,14 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 		if (entity.getId() == null || "".equals(entity.getId())) {
 			return BaseResult.getFailureMessageEntity("系统错误");
 		}
+		//先删除子表中对应数据,在删除主表数据
+		SysWarningInterfaceEntity interfaceEntity = new SysWarningInterfaceEntity();
+		interfaceEntity.setWarningConfigId(entity.getId());
+		sysWarningInterfaceDao.logicRemoveMultiCondition(interfaceEntity);
+
 		entity.setUpdate();
 		sysWarningConfigDao.logicRemove(entity);
+
 		return BaseResult.getSuccessMessageEntity("删除预警配置成功");
 	}
 
@@ -146,22 +296,108 @@ public class SysWarningConfigServiceImpl extends BaseService<SysWarningConfigEnt
 			return BaseResult.getFailureMessageEntity("参数不允许为空");
 		}
 		if (entity.getId() == null || "".equals(entity.getId())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
+			return BaseResult.getFailureMessageEntity("id不能为空");
 		}
 		if (entity.getStatus() == null || "".equals(entity.getStatus())) {
-			return BaseResult.getFailureMessageEntity("系统错误");
+			return BaseResult.getFailureMessageEntity("状态不能为空");
 		}
-		//0启用,1禁用
+		if(entity.getMessageTemplateId() == null || "".equals(entity.getMessageTemplateId())){
+			return BaseResult.getFailureMessageEntity("消息模版id不允许为空");
+		}
+		//0停用,1启用
 		if("0".equals(entity.getStatus())){
 			entity.setUpdate();
 			sysWarningConfigDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("启用模版成功");
+			return BaseResult.getSuccessMessageEntity("停用模版成功");
 		}else{
-			//停用消息模版
+			//校验该预警设置的消息模版是否为启用状态
+			SysMessageTemplateEntity templateEntity = sysMessageTemplateDao.get(entity.getMessageTemplateId());
+			if(templateEntity == null){
+				return BaseResult.getFailureMessageEntity("消息模版不存在");
+			}
+			if(!"1".equals(templateEntity.getState())){
+				return BaseResult.getFailureMessageEntity("该预警设置的消息模版未启用,请先启用");
+			}
 			entity.setUpdate();
 			sysWarningConfigDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("停用模版成功");
+			return BaseResult.getSuccessMessageEntity("启用模版成功");
 		}
 	}
 
+	public String checkRecipients(SysWarningConfigEntity entity){
+		String recipientIds = entity.getRecipientIdList();
+		String[] recipientIdList = recipientIds.split(",");
+		SysUserEntity userEntity = new SysUserEntity();
+
+		for(String recipientId : recipientIdList){
+			String personName = sysPersonDao.get(recipientId).getPersonName();
+
+			userEntity.setPersonId(recipientId);
+			SysUserEntity usefulEntity = sysUserDao.queryOne(userEntity);
+			if(usefulEntity == null){
+				return "接收人"+personName+"不存在账号";
+			}
+			//预警应用只有一个的情况下
+			switch (entity.getWarningAppId()){
+				case "7ebc1702511f463d9cf50162973bf935":
+					String ddUserId = usefulEntity.getDdUserId();
+					if(ddUserId == null || "".equals(ddUserId)){
+						return "接收人"+personName+"未配置钉钉用户id";
+					}
+					break;
+				default:
+					return "预警应用类型错误";
+			}
+		}
+		return "success";
+	}
+
+	public List<SysWarningConfigEntity> queryNameList(List<SysWarningConfigEntity> list){
+		for(SysWarningConfigEntity configEntity : list){
+			//拼接应用名称列表
+			String appIds = configEntity.getAppIdList();
+			String[] appIdList = appIds.split(",");
+			String appNameList = "";
+			for(String appId : appIdList){
+				SysApplicationEntity appEntity = sysApplicationDao.get(appId);
+				String appName = appEntity.getName();
+				if(!"".equals(appNameList)){
+					appNameList += ",";
+				}
+				appNameList += appName;
+			}
+			configEntity.setAppNameList(appNameList);
+			//拼接预警应用名称列表
+			String warningAppIds = configEntity.getWarningAppId();
+			String[] warningAppIdList = warningAppIds.split(",");
+			String warningAppNameList = "";
+			for(String warningAppId : warningAppIdList){
+				SysApplicationEntity warningAppEntity = sysApplicationDao.get(warningAppId);
+				String warningAppName = warningAppEntity.getName();
+				if(!"".equals(warningAppNameList)){
+					warningAppNameList += ",";
+				}
+				warningAppNameList += warningAppName;
+			}
+			configEntity.setWarningAppNameList(warningAppNameList);
+			//拼接接收者名称列表
+			String recipientIds = configEntity.getRecipientIdList();
+			String[] recipientIdList = recipientIds.split(",");
+			String recipientNameList = "";
+			for(String recipientId : recipientIdList){
+//				SysUserEntity userEntity = sysUserDao.get(recipientId);
+//				String personId = userEntity.getPersonId();
+				SysPersonEntity personEntity = sysPersonDao.get(recipientId);
+				String recipientName = personEntity.getPersonName();
+				if(!"".equals(recipientNameList)){
+					recipientNameList += ",";
+				}
+				recipientNameList += recipientName;
+			}
+			configEntity.setRecipientNameList(recipientNameList);
+
+		}
+		return list;
+	}
+
 }
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/ISysWarningInterfaceDao.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/ISysWarningInterfaceDao.java
index 544241f6..61a64efa 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/ISysWarningInterfaceDao.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/ISysWarningInterfaceDao.java
@@ -1,7 +1,9 @@
 package com.hzya.frame.sysnew.warningInterface.dao;
 
 import com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity;
-import com.hzya.frame.basedao.dao.IBaseDao; 
+import com.hzya.frame.basedao.dao.IBaseDao;
+
+import java.util.List;
 
 /**
  * 预警接口表(sys_warning_interface: table)表数据库访问层
@@ -11,5 +13,6 @@ import com.hzya.frame.basedao.dao.IBaseDao;
  */
 public interface ISysWarningInterfaceDao extends IBaseDao<SysWarningInterfaceEntity, String> {
 
+    List<SysWarningInterfaceEntity> getWarningAppList();
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/impl/SysWarningInterfaceDaoImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/impl/SysWarningInterfaceDaoImpl.java
index 655eb183..fdcbb1f2 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/impl/SysWarningInterfaceDaoImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/dao/impl/SysWarningInterfaceDaoImpl.java
@@ -4,6 +4,9 @@ import com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity;
 import com.hzya.frame.sysnew.warningInterface.dao.ISysWarningInterfaceDao;
 import org.springframework.stereotype.Repository;
 import com.hzya.frame.basedao.dao.MybatisGenericDao;
+
+import java.util.List;
+
 /**
  * 预警接口表(SysWarningInterface)表数据库访问层
  *
@@ -12,6 +15,10 @@ import com.hzya.frame.basedao.dao.MybatisGenericDao;
  */
 @Repository(value = "SysWarningInterfaceDaoImpl")
 public class SysWarningInterfaceDaoImpl extends MybatisGenericDao<SysWarningInterfaceEntity, String> implements ISysWarningInterfaceDao{
- 
+    @Override
+    public List<SysWarningInterfaceEntity> getWarningAppList(){
+        List tempList = (List<SysWarningInterfaceEntity>)super.selectList(getSqlIdPrifx() + "warning_app_list", null);
+        return tempList;
+    }
 }
 
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.java
index fa2181c9..c9abb5c7 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.java
@@ -9,7 +9,11 @@ import com.hzya.frame.web.entity.BaseEntity;
  * @since 2024-09-03 10:06:19
  */
 public class SysWarningInterfaceEntity extends BaseEntity {
- 
+
+    /**  应用id */
+    private String appId;
+    /**  应用名称 */
+    private String appName;
   /**  公司id */
    private String companyId;
   /**  api名称 */
@@ -23,6 +27,21 @@ public class SysWarningInterfaceEntity extends BaseEntity {
   /**  主表id(预警配置表id) */
    private String warningConfigId;
 
+    public String getAppName() {
+        return appName;
+    }
+
+    public void setAppName(String appName) {
+        this.appName = appName;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
 
     public String getCompanyId() {
         return companyId;
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.xml b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.xml
index 663e7cd1..f43f9f82 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.xml
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/entity/SysWarningInterfaceEntity.xml
@@ -17,7 +17,10 @@
            <result property="pushMethod" column="push_method" jdbcType="VARCHAR"/>
            <result property="status" column="status" jdbcType="VARCHAR"/>
            <result property="warningConfigId" column="warning_config_id" jdbcType="VARCHAR"/>
+           <result property="appId" column="app_id" jdbcType="VARCHAR"/>
+           <result property="appName" column="app_name" jdbcType="VARCHAR"/>
         </resultMap>
+
     <!-- 查询的字段-->
     <sql id = "SysWarningInterfaceEntity_Base_Column_List">
         id
@@ -33,7 +36,8 @@
         ,api_code 
         ,push_method 
         ,status 
-        ,warning_config_id 
+        ,warning_config_id
+        ,app_id
      </sql>
  <!-- 查询 采用==查询 -->
  <select id="entity_list_base" resultMap="get-SysWarningInterfaceEntity-result" parameterType = "com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity">
@@ -85,29 +89,50 @@
     <if test=" sort !='' and sort!=null and order !='' and order!=null "> order by ${sort} ${order}</if>
     </select>
 
+    <select id = "warning_app_list" resultMap="get-SysWarningInterfaceEntity-result" >
+        select distinct app_id from sys_warning_interface where sts='Y'
+    </select>
+
     <!-- 分页查询列表 采用like格式 -->
 <select id="entity_list_like" resultMap="get-SysWarningInterfaceEntity-result" parameterType = "com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity">
     select
-    <include refid="SysWarningInterfaceEntity_Base_Column_List" />
-    from sys_warning_interface
+    i.id
+    ,i.sorts
+    ,i.create_user_id
+    ,i.create_time
+    ,i.modify_user_id
+    ,i.modify_time
+    ,i.sts
+    ,i.org_id
+    ,i.company_id
+    ,i.api_name
+    ,i.api_code
+    ,i.push_method
+    ,i.status
+    ,i.warning_config_id
+    ,i.app_id
+    ,app.name as app_name
+    from sys_warning_interface i
+    left join sys_application app on app.id = i.app_id
     <trim prefix="where" prefixOverrides="and"> 
-        <if test="id != null and id != ''"> and id like concat('%',#{id},'%') </if>
-            <if test="sorts != null"> and sorts like concat('%',#{sorts},'%') </if>
-            <if test="create_user_id != null and create_user_id != ''"> and create_user_id like concat('%',#{create_user_id},'%') </if>
-            <if test="create_time != null"> and create_time like concat('%',#{create_time},'%') </if>
-            <if test="modify_user_id != null and modify_user_id != ''"> and modify_user_id like concat('%',#{modify_user_id},'%') </if>
-            <if test="modify_time != null"> and modify_time like concat('%',#{modify_time},'%') </if>
-            <if test="sts != null and sts != ''"> and sts like concat('%',#{sts},'%') </if>
-            <if test="org_id != null and org_id != ''"> and org_id like concat('%',#{org_id},'%') </if>
-            <if test="companyId != null and companyId != ''"> and company_id like concat('%',#{companyId},'%') </if>
-            <if test="apiName != null and apiName != ''"> and api_name like concat('%',#{apiName},'%') </if>
-            <if test="apiCode != null and apiCode != ''"> and api_code like concat('%',#{apiCode},'%') </if>
-            <if test="pushMethod != null and pushMethod != ''"> and push_method like concat('%',#{pushMethod},'%') </if>
-            <if test="status != null and status != ''"> and status like concat('%',#{status},'%') </if>
-            <if test="warningConfigId != null and warningConfigId != ''"> and warning_config_id like concat('%',#{warningConfigId},'%') </if>
-            and sts='Y'
+        <if test="id != null and id != ''"> and i.id like concat('%',#{id},'%') </if>
+            <if test="sorts != null"> and i.sorts like concat('%',#{sorts},'%') </if>
+            <if test="create_user_id != null and create_user_id != ''"> and i.create_user_id like concat('%',#{create_user_id},'%') </if>
+            <if test="create_time != null"> and i.create_time like concat('%',#{create_time},'%') </if>
+            <if test="modify_user_id != null and modify_user_id != ''"> and i.modify_user_id like concat('%',#{modify_user_id},'%') </if>
+            <if test="modify_time != null"> and i.modify_time like concat('%',#{modify_time},'%') </if>
+            <if test="sts != null and sts != ''"> and i.sts like concat('%',#{sts},'%') </if>
+            <if test="org_id != null and org_id != ''"> and i.org_id like concat('%',#{org_id},'%') </if>
+            <if test="companyId != null and companyId != ''"> and i.company_id like concat('%',#{companyId},'%') </if>
+            <if test="apiName != null and apiName != ''"> and i.api_name like concat('%',#{apiName},'%') </if>
+            <if test="apiCode != null and apiCode != ''"> and i.api_code like concat('%',#{apiCode},'%') </if>
+            <if test="pushMethod != null and pushMethod != ''"> and i.push_method like concat('%',#{pushMethod},'%') </if>
+            <if test="status != null and status != ''"> and i.status like concat('%',#{status},'%') </if>
+            <if test="warningConfigId != null and warningConfigId != ''"> and i.warning_config_id like concat('%',#{warningConfigId},'%') </if>
+            and i.sts='Y'
+            and app.sts='Y'
     </trim>
-    <if test=" sort == null or sort == ''.toString() "> order by sorts asc</if>
+    <if test=" sort == null or sort == ''.toString() "> order by i.sorts asc</if>
     <if test=" sort !='' and sort!=null and order !='' and order!=null ">order by ${sort} ${order}</if>
 </select>
 
@@ -155,6 +180,7 @@
             <if test="pushMethod != null and pushMethod != ''"> push_method , </if>
             <if test="status != null and status != ''"> status , </if>
             <if test="warningConfigId != null and warningConfigId != ''"> warning_config_id , </if>
+            <if test="appId != null and appId != ''" > app_id ,</if>
     <if test="sts == null ">sts,</if>
   </trim>
   )values(
@@ -173,6 +199,7 @@
             <if test="pushMethod != null and pushMethod != ''"> #{pushMethod} ,</if>
             <if test="status != null and status != ''"> #{status} ,</if>
             <if test="warningConfigId != null and warningConfigId != ''"> #{warningConfigId} ,</if>
+            <if test="appId != null and appId != ''" > #{appId} ,</if>
     <if test="sts == null ">'Y',</if>
   </trim>
   )  
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/ISysWarningInterfaceService.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/ISysWarningInterfaceService.java
index 09f2ff30..b8514bc7 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/ISysWarningInterfaceService.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/ISysWarningInterfaceService.java
@@ -17,6 +17,8 @@ public interface ISysWarningInterfaceService extends IBaseService<SysWarningInte
 
     JsonResultEntity queryEntity(JSONObject jsonObject);
 
+    JsonResultEntity queryWarningAppList(JSONObject jsonObject);
+
     JsonResultEntity saveEntity(JSONObject jsonObject);
 
     JsonResultEntity getEntity(JSONObject jsonObject);
diff --git a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/impl/SysWarningInterfaceServiceImpl.java b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/impl/SysWarningInterfaceServiceImpl.java
index 70c2e1eb..60f37230 100644
--- a/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/impl/SysWarningInterfaceServiceImpl.java
+++ b/base-service/src/main/java/com/hzya/frame/sysnew/warningInterface/service/impl/SysWarningInterfaceServiceImpl.java
@@ -3,6 +3,12 @@ package com.hzya.frame.sysnew.warningInterface.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
+import com.hzya.frame.sysnew.application.entity.SysApplicationDto;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.service.impl.ApplicationCache;
+import com.hzya.frame.sysnew.sendMessageLog.dao.ISysSendMessageLogDao;
+import com.hzya.frame.sysnew.sendMessageLog.entity.SysSendMessageLogEntity;
 import com.hzya.frame.sysnew.warningConfig.entity.SysWarningConfigEntity;
 import com.hzya.frame.sysnew.warningInterface.entity.SysWarningInterfaceEntity;
 import com.hzya.frame.sysnew.warningInterface.dao.ISysWarningInterfaceDao;
@@ -14,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import javax.annotation.Resource;
 import com.hzya.frame.basedao.service.impl.BaseService;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -26,7 +33,14 @@ import java.util.List;
 public class SysWarningInterfaceServiceImpl extends BaseService<SysWarningInterfaceEntity, String> implements ISysWarningInterfaceService {
      
     private ISysWarningInterfaceDao sysWarningInterfaceDao;
-    
+
+	@Resource
+	private ISysApplicationDao sysApplicationDao;
+
+	@Resource
+	private ISysSendMessageLogDao sysSendMessageLogDao;
+
+
     @Autowired
 	public void setSysWarningInterfaceDao(ISysWarningInterfaceDao dao) {
 		this.sysWarningInterfaceDao = dao;
@@ -75,10 +89,7 @@ public class SysWarningInterfaceServiceImpl extends BaseService<SysWarningInterf
 	public JsonResultEntity saveEntity(JSONObject jsonObject){
 		SysWarningInterfaceEntity entity = getData("jsonStr", jsonObject, SysWarningInterfaceEntity.class);
 		if(entity == null){
-			return BaseResult.getFailureMessageEntity("查询参数不存在");
-		}
-		if(entity.getId() == null || "".equals(entity.getId())){
-			return BaseResult.getFailureMessageEntity("系统错误");
+			return BaseResult.getFailureMessageEntity("未传入保存参数");
 		}
 		if(entity.getApiCode() == null || "".equals(entity.getApiCode())){
 			return BaseResult.getFailureMessageEntity("接口编码不能为空");
@@ -150,18 +161,44 @@ public class SysWarningInterfaceServiceImpl extends BaseService<SysWarningInterf
 		if (entity.getStatus() == null || "".equals(entity.getStatus())) {
 			return BaseResult.getFailureMessageEntity("系统错误");
 		}
-		//0启用,1禁用
+		//0停用,1启用
 		if("0".equals(entity.getStatus())){
 			entity.setUpdate();
 			sysWarningInterfaceDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("启用模版成功");
+			return BaseResult.getSuccessMessageEntity("停用预警接口成功");
 		}else{
 			//停用消息模版
 			entity.setUpdate();
 			sysWarningInterfaceDao.update(entity);
-			return BaseResult.getSuccessMessageEntity("停用模版成功");
+			return BaseResult.getSuccessMessageEntity("启用预警接口成功");
 		}
 
 	}
 
+	/**查询已经配置了预警的应用列表,并返回应用列表及其未读消息数*/
+	@Override
+	public JsonResultEntity queryWarningAppList(JSONObject jsonObject){
+		List<SysWarningInterfaceEntity> appIdList = sysWarningInterfaceDao.getWarningAppList();
+        List<SysApplicationEntity> appList = new ArrayList<>();
+		for (SysWarningInterfaceEntity entity : appIdList) {
+			if (entity == null) {
+				continue;
+			}
+			String appId = entity.getAppId();
+			SysApplicationEntity app = sysApplicationDao.get(appId);
+			if (app == null) {
+				continue;
+			}
+			SysSendMessageLogEntity logEntity = new SysSendMessageLogEntity();
+			logEntity.setAppId(appId);
+			logEntity.setState(0);
+			List<SysSendMessageLogEntity> list = sysSendMessageLogDao.queryByLike(logEntity);
+			app.setNewMessageCount(list.size());
+			if (app != null) {
+				appList.add(app);
+			}
+		}
+		return BaseResult.getSuccessMessageEntity("查询预警应用列表成功",appList);
+	}
+
 }
diff --git a/base-service/src/main/java/com/hzya/frame/web/aop/BindUserIdAop.java b/base-service/src/main/java/com/hzya/frame/web/aop/BindUserIdAop.java
index ba79308d..ae6c0199 100644
--- a/base-service/src/main/java/com/hzya/frame/web/aop/BindUserIdAop.java
+++ b/base-service/src/main/java/com/hzya/frame/web/aop/BindUserIdAop.java
@@ -10,6 +10,7 @@ import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -38,6 +39,9 @@ public class BindUserIdAop {
                 if (StpUtil.isLogin()) {
                     Object loginId = StpUtil.getLoginId();
                     Object obj = objs[0];
+                    // 获取方法签名
+                    MethodSignature signature = (MethodSignature) point.getSignature();
+                    String methodName = signature.getName();
                     if (obj instanceof HashMap) {
                         ((HashMap<String,Object>) obj).put("create_user_id",loginId);
                         ((HashMap<String,Object>) obj).put("modify_user_id",loginId);
@@ -51,20 +55,24 @@ public class BindUserIdAop {
                             jsonStrObj = JSON.parseObject(jsonStr);
                         }
                         if(null != jsonStrObj){
-                            if (jsonStrObj.getString("create_user_id") == null) {
-                                jsonStrObj.put("create_user_id",loginId);
-                            }
+                            //如果是update的方法,则不处理create_user_id 和 create_time
                             if (jsonStrObj.getString("modify_user_id") == null) {
                                 jsonStrObj.put("modify_user_id",loginId);
                             }
-                            if (jsonStrObj.getString("create_time") == null) {
-                                jsonStrObj.put("create_time",DateUtil.now());
-                            }
                             if (jsonStrObj.getString("modify_time") == null) {
                                 jsonStrObj.put("modify_time",DateUtil.now());
                             }
-                            if (jsonStrObj.getString("id") == null) {
-                                jsonStrObj.put("id",UUIDLong.longUUID());
+                            //save方法才要赋值create_user_id 和 creat_time  id
+                            if (methodName.startsWith("save")){
+                                if (jsonStrObj.getString("create_user_id") == null) {
+                                    jsonStrObj.put("create_user_id",loginId);
+                                }
+                                if (jsonStrObj.getString("create_time") == null) {
+                                    jsonStrObj.put("create_time",DateUtil.now());
+                                }
+                                if (jsonStrObj.getString("id") == null) {
+                                    jsonStrObj.put("id",UUIDLong.longUUID());
+                                }
                             }
                         }else{
                             jsonStrObj = new JSONObject();
diff --git a/base-webapp/pom.xml b/base-webapp/pom.xml
index 6b3e13b4..7aafbde5 100644
--- a/base-webapp/pom.xml
+++ b/base-webapp/pom.xml
@@ -23,11 +23,11 @@
 <!--            <artifactId>fw-bip</artifactId>-->
 <!--            <version>${revision}</version>-->
 <!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.hzya.frame</groupId>-->
-<!--            <artifactId>fw-cbs</artifactId>-->
-<!--            <version>${revision}</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>com.hzya.frame</groupId>
+            <artifactId>fw-cbs</artifactId>
+            <version>${revision}</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.hzya.frame</groupId>-->
 <!--            <artifactId>fw-dd</artifactId>-->
@@ -54,11 +54,11 @@
 <!--            <artifactId>fw-ningbobank</artifactId>-->
 <!--            <version>${revision}</version>-->
 <!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.hzya.frame</groupId>-->
-<!--            <artifactId>fw-oa</artifactId>-->
-<!--            <version>${revision}</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>com.hzya.frame</groupId>
+            <artifactId>fw-oa</artifactId>
+            <version>${revision}</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>com.hzya.frame</groupId>-->
 <!--            <artifactId>fw-u8</artifactId>-->
@@ -76,7 +76,11 @@
 <!--            <artifactId>fw-u9c</artifactId>-->
 <!--            <version>${revision}</version>-->
 <!--        </dependency>-->
-
+<!--                <dependency>-->
+<!--                    <groupId>com.hzya.frame</groupId>-->
+<!--                    <artifactId>fw-weixin</artifactId>-->
+<!--                    <version>${revision}</version>-->
+<!--                </dependency>-->
 
     </dependencies>
     <build>
diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java
index a48c72bf..253ef940 100644
--- a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java
+++ b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/controler/EntranceController.java
@@ -21,11 +21,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -106,7 +102,17 @@ public class EntranceController {
         logger.info("-------------------结束调用上传文件upload接口-------------------");
         return jsonResultEntity;
     }
-
+    /***
+     * 文件上传接口
+     * @param
+     * @return@@
+     */
+    @RequestMapping(value = "/fileUploadlist", method = RequestMethod.POST)
+    @ResponseBody
+    public JsonResultEntity fileUploadlist(MultipartFile[] file, FileUploadDto entity, ServletRequest servletRequest, ServletResponse servletResponse) {
+        entity.getBusinessType();
+        return BaseResult.getSuccessMessageEntity("gc");
+    }
     @RequestMapping(value = "/pluginfileUpload", method = RequestMethod.POST)
     @ResponseBody
     public JsonResultEntity pluginfileUpload(MultipartFile file, FileUploadDto entity,String pluginPackageName, ServletRequest servletRequest, ServletResponse servletResponse) {
@@ -199,6 +205,12 @@ public class EntranceController {
         return  sysApplicationService.externalCallInterface(servletRequest,servletResponse);
     }
 
+    @RequestMapping(value = "/externalCallInterfacefileUpload")
+    @ResponseBody
+    public JsonResultEntity externalCallInterfacefileUpload(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception  {
+        return  sysApplicationService.externalCallInterfacefileUpload(servletRequest,servletResponse);
+    }
+
     @RequestMapping(value = "/externalCallInterfaceResend")
     @ResponseBody
     public JsonResultEntity externalCallInterfaceResend(SysMessageManageLogEntity resendLogEntity) throws Exception  {
diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/service/impl/EntranceServiceImpl.java b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/service/impl/EntranceServiceImpl.java
index 9dec83c7..3370c059 100644
--- a/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/service/impl/EntranceServiceImpl.java
+++ b/base-webapp/src/main/java/com/hzya/frame/webapp/entrance/service/impl/EntranceServiceImpl.java
@@ -78,7 +78,7 @@ public class EntranceServiceImpl implements IEntranceService {
                 if (m.getName().equals(serviceMethod.trim())) {
                     if (m.getName().startsWith("thirdInterface")) {//TODO 后续可能要加强校验规则
                         logger.info("第三方接口,不校验是否登陆");
-                    }else if (!"doLogin".equals(m.getName())) {
+                    }else if (!"doLogin".equals(m.getName())&& !"appDoLogin".equals(m.getName())  ) {
                         try {
                             StpUtil.checkLogin();
                             //校验当前登陆人是否有权限
@@ -117,8 +117,8 @@ public class EntranceServiceImpl implements IEntranceService {
                             //}
                             // 接口权限验证  结束
                         } catch (NotLoginException e) {
-                            logger.error("token无效");
-                            return BaseResult.getFailureMessageEntity("token无效");
+                            logger.error("zt-token无效");
+                            return BaseResult.getFailureMessageEntity("zt-token无效");
                         }
                     }
                     JSONObject jsonObject = new JSONObject();
diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/web/corsconfig/CorsConfig.java b/base-webapp/src/main/java/com/hzya/frame/webapp/web/corsconfig/CorsConfig.java
new file mode 100644
index 00000000..45ea4e9f
--- /dev/null
+++ b/base-webapp/src/main/java/com/hzya/frame/webapp/web/corsconfig/CorsConfig.java
@@ -0,0 +1,24 @@
+package com.hzya.frame.webapp.web.corsconfig;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2024-09-14 17:10
+ */
+@Configuration
+public class CorsConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("*")
+                .allowedMethods("GET", "POST", "PUT", "DELETE")
+                .allowedHeaders("*")
+                .allowCredentials(false);
+    }
+}
\ No newline at end of file
diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/web/exception/ExceptionController.java b/base-webapp/src/main/java/com/hzya/frame/webapp/web/exception/ExceptionController.java
index 3e966cf1..6488d4fd 100644
--- a/base-webapp/src/main/java/com/hzya/frame/webapp/web/exception/ExceptionController.java
+++ b/base-webapp/src/main/java/com/hzya/frame/webapp/web/exception/ExceptionController.java
@@ -63,13 +63,13 @@ public class ExceptionController {
         if (notLoginException.getType().equals(NotLoginException.NOT_TOKEN)) {
             message = "未提供token";
         } else if (notLoginException.getType().equals(NotLoginException.INVALID_TOKEN)) {
-            message = "token无效";
+            message = "zt-token无效";
         } else if (notLoginException.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
-            message = "token已过期";
+            message = "zt-token已过期";
         } else if (notLoginException.getType().equals(NotLoginException.BE_REPLACED)) {
-            message = "token已被顶下线";
+            message = "zt-token已被顶下线";
         } else if (notLoginException.getType().equals(NotLoginException.KICK_OUT)) {
-            message = "token已被踢下线";
+            message = "zt-token已被踢下线";
         } else {
             message = "当前会话未登录";
         }
diff --git a/base-webapp/src/main/java/com/hzya/frame/webapp/web/filter/SaTokenConfigure.java b/base-webapp/src/main/java/com/hzya/frame/webapp/web/filter/SaTokenConfigure.java
index b325e29f..3411d439 100644
--- a/base-webapp/src/main/java/com/hzya/frame/webapp/web/filter/SaTokenConfigure.java
+++ b/base-webapp/src/main/java/com/hzya/frame/webapp/web/filter/SaTokenConfigure.java
@@ -18,7 +18,7 @@ public class SaTokenConfigure {
     @Primary
     public SaTokenConfig getSaTokenConfigPrimary() {
         SaTokenConfig config = new SaTokenConfig();
-        config.setTokenName("token");             // token名称 (同时也是cookie名称)
+        config.setTokenName("zt-token");             // token名称 (同时也是cookie名称)
         config.setTimeout(30 * 24 * 60 * 60);       // token有效期,单位s 默认30天
         config.setActivityTimeout(-1);              // token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
         config.setIsConcurrent(true);               // 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
diff --git a/fw-cbs/pom.xml b/fw-cbs/pom.xml
new file mode 100644
index 00000000..4bdeaccc
--- /dev/null
+++ b/fw-cbs/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>kangarooDataCenterV3</artifactId>
+        <groupId>com.hzya.frame</groupId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>fw-cbs</artifactId>
+    <packaging>jar</packaging>
+    <version>${revision}</version>
+
+    <dependencies>
+            <dependency>
+                <groupId>com.hzya.frame</groupId>
+                <artifactId>base-service</artifactId>
+                <version>${revision}</version>
+            </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-connector-java}</version>
+        </dependency>
+
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 -->
+                    <classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 -->
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java
new file mode 100644
index 00000000..1a906cba
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayRequestDTO.java
@@ -0,0 +1,32 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 代发代扣请求参数
+ * @Author xiangerlin
+ * @Date 2024/6/18 16:20
+ **/
+public class AgentPayRequestDTO {
+
+    //代发表头
+    private PaymentApplySubmitReqDTO paymentApplySubmitReqDTO;
+    //代发明细
+    private List<PaymentApplyAgentDTO> paymentApplyAgentDTO;
+
+    public PaymentApplySubmitReqDTO getPaymentApplySubmitReqDTO() {
+        return paymentApplySubmitReqDTO;
+    }
+
+    public void setPaymentApplySubmitReqDTO(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO) {
+        this.paymentApplySubmitReqDTO = paymentApplySubmitReqDTO;
+    }
+
+    public List<PaymentApplyAgentDTO> getPaymentApplyAgentDTO() {
+        return paymentApplyAgentDTO;
+    }
+
+    public void setPaymentApplyAgentDTO(List<PaymentApplyAgentDTO> paymentApplyAgentDTO) {
+        this.paymentApplyAgentDTO = paymentApplyAgentDTO;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java
new file mode 100644
index 00000000..a4ef80c8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/AgentPayResultRequestDTO.java
@@ -0,0 +1,20 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 代发代扣详情查询请求参数
+ * @Author xiangerlin
+ * @Date 2024/6/18 17:40
+ **/
+public class AgentPayResultRequestDTO {
+
+    //申请单编号。 代发代扣支付接口会返回这个单号的
+    private String busNum;
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java
new file mode 100644
index 00000000..f318d279
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/ElecRequestDTO.java
@@ -0,0 +1,134 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 电子回单查询请求参数
+ * @Author xiangerlin
+ * @Date 2024/1/4 17:08
+ **/
+public class ElecRequestDTO {
+    // 开始日期
+    private String startDate;
+
+    // 结束日期
+    private String endDate;
+
+    // 账号
+    private String accountNo;
+
+    // 币种列表
+    private List<String> currencyList;
+
+    // 银行类型列表
+    private List<String> bankTypeList;
+
+    // 回单文件状态 1-已取回 0-未取回
+    private String billStatus;
+
+    // 借贷 1-借 2-贷
+    private String loanType;
+
+    // 单位编码列表
+    private List<String> unitCodeList;
+
+    // 对账码列表
+    private List<String> checkCodeList;
+
+    // ERP业务参考号
+    private String settleBusinessReferenceCode;
+
+    public ElecRequestDTO(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+
+    public ElecRequestDTO(String startDate, String endDate, String settleBusinessReferenceCode) {
+        this.startDate = startDate;
+        this.endDate = endDate;
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+
+    public ElecRequestDTO() {
+
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public List<String> getCurrencyList() {
+        return currencyList;
+    }
+
+    public void setCurrencyList(List<String> currencyList) {
+        this.currencyList = currencyList;
+    }
+
+    public List<String> getBankTypeList() {
+        return bankTypeList;
+    }
+
+    public void setBankTypeList(List<String> bankTypeList) {
+        this.bankTypeList = bankTypeList;
+    }
+
+    public String getBillStatus() {
+        return billStatus;
+    }
+
+    public void setBillStatus(String billStatus) {
+        this.billStatus = billStatus;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public List<String> getUnitCodeList() {
+        return unitCodeList;
+    }
+
+    public void setUnitCodeList(List<String> unitCodeList) {
+        this.unitCodeList = unitCodeList;
+    }
+
+    public List<String> getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(List<String> checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getSettleBusinessReferenceCode() {
+        return settleBusinessReferenceCode;
+    }
+
+    public void setSettleBusinessReferenceCode(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java
new file mode 100644
index 00000000..957d18ad
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayRequestDTO.java
@@ -0,0 +1,272 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 经办支付请求DTO
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:02
+ **/
+public class PayRequestDTO {
+    private String referenceNum;//业务参考号,必填
+    private String busType;//业务类型 必填
+    private String amount;//金额 必填
+    private String currency;//币种编码,必填
+    private String payAccount;//付款账号,非集中支付模式必填
+    private String revAccount;//收款账号 必填
+    private String revAccountName;//收款方户名 必填
+    private String revBankType;//收款银行类型编码,必填
+    private String revBankName;//收款开户行名称
+    private String cnapsCode;//联行号 必填
+    private String purpose;//支付用途 必填
+
+    private String innerAccount;//内部账号
+    private String revBankArea;//收款银行地区名称
+    private String revProvince;//收款人省
+    private String revCity;//收款人市
+    private String bankNum;//收款地区码|银行号
+    private String summary;//该笔支付备注
+    private String expectTime;//期望支付时间
+    private String personalFlag;//公私标记 1对私 0对公
+    private String urgentTag;//加急,1加急0不加2特急
+    private String realTimeTag;//是否实时 1实时0落地
+    private String cityFlag;//同城标志 0同城1异地
+    private String payChannel;//支付渠道
+    private String busiStep;//业务步数 集中支付需要传1,其他不用传
+    private String applyUnitCode;//申请人单位号,集中支付必传
+    private String displayApplyUnitCode;//申请人单位号(前端显示),集中支付如果传了,会将其转化为applyUnitCode
+
+    private String erpExtend1;//客户备用字段1
+    private String erpExtend2;//客户备用字段2
+    private String erpExtend3;//客户备用字段3
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getInnerAccount() {
+        return innerAccount;
+    }
+
+    public void setInnerAccount(String innerAccount) {
+        this.innerAccount = innerAccount;
+    }
+
+    public String getRevBankArea() {
+        return revBankArea;
+    }
+
+    public void setRevBankArea(String revBankArea) {
+        this.revBankArea = revBankArea;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getBankNum() {
+        return bankNum;
+    }
+
+    public void setBankNum(String bankNum) {
+        this.bankNum = bankNum;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getBusiStep() {
+        return busiStep;
+    }
+
+    public void setBusiStep(String busiStep) {
+        this.busiStep = busiStep;
+    }
+
+    public String getApplyUnitCode() {
+        return applyUnitCode;
+    }
+
+    public void setApplyUnitCode(String applyUnitCode) {
+        this.applyUnitCode = applyUnitCode;
+    }
+
+    public String getDisplayApplyUnitCode() {
+        return displayApplyUnitCode;
+    }
+
+    public void setDisplayApplyUnitCode(String displayApplyUnitCode) {
+        this.displayApplyUnitCode = displayApplyUnitCode;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java
new file mode 100644
index 00000000..8180c6f0
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PayResultRequestDTO.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 查询交易结果请求参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:46
+ **/
+public class PayResultRequestDTO {
+    public PayResultRequestDTO() {
+    }
+    public PayResultRequestDTO(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    private String referenceNum;//业务参考号,必填
+    private List<String> statusList;//状态
+    private List<String> payStatusList;//支付状态
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public List<String> getStatusList() {
+        return statusList;
+    }
+
+    public void setStatusList(List<String> statusList) {
+        this.statusList = statusList;
+    }
+
+    public List<String> getPayStatusList() {
+        return payStatusList;
+    }
+
+    public void setPayStatusList(List<String> payStatusList) {
+        this.payStatusList = payStatusList;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java
new file mode 100644
index 00000000..509165a3
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplyAgentDTO.java
@@ -0,0 +1,132 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 代发代扣明细
+ * @Author xiangerlin
+ * @Date 2024/6/18 13:45
+ **/
+public class PaymentApplyAgentDTO {
+    //每笔明细金额
+    private String dtlAmount;
+    //收款账号
+    private String dtlRevAccount;
+    //联行号 同行可不传,跨行必传
+    private String dtlCnapsCode;
+    //收款账户名称
+    private String dtlRevName;
+    //收款开户行 ,如果传的联行号能匹配到对应到开户行,cbs8会自动带出
+    private String dtlRevBankName;
+
+
+
+    //是否跨行 Y跨行 N同行
+    private String dtlBankFlag;
+    //明细用途
+    private String dtlPurpose;
+    //明细摘要
+    private String dtlRemark;
+    //收款账号银行号|地区码
+    private String dtlRevBankArea;
+    //收款开户地
+    private String dtlRevBankCity;
+    //明细序号,从1开始递增
+    private int dtlSeqNum;
+    //备用字段 一共6个
+    private String dtlExtend1;
+
+    public String getDtlAmount() {
+        return dtlAmount;
+    }
+
+    public void setDtlAmount(String dtlAmount) {
+        this.dtlAmount = dtlAmount;
+    }
+
+    public String getDtlRevAccount() {
+        return dtlRevAccount;
+    }
+
+    public void setDtlRevAccount(String dtlRevAccount) {
+        this.dtlRevAccount = dtlRevAccount;
+    }
+
+    public String getDtlCnapsCode() {
+        return dtlCnapsCode;
+    }
+
+    public void setDtlCnapsCode(String dtlCnapsCode) {
+        this.dtlCnapsCode = dtlCnapsCode;
+    }
+
+    public String getDtlRevName() {
+        return dtlRevName;
+    }
+
+    public void setDtlRevName(String dtlRevName) {
+        this.dtlRevName = dtlRevName;
+    }
+
+    public String getDtlRevBankName() {
+        return dtlRevBankName;
+    }
+
+    public void setDtlRevBankName(String dtlRevBankName) {
+        this.dtlRevBankName = dtlRevBankName;
+    }
+
+    public String getDtlBankFlag() {
+        return dtlBankFlag;
+    }
+
+    public void setDtlBankFlag(String dtlBankFlag) {
+        this.dtlBankFlag = dtlBankFlag;
+    }
+
+    public String getDtlPurpose() {
+        return dtlPurpose;
+    }
+
+    public void setDtlPurpose(String dtlPurpose) {
+        this.dtlPurpose = dtlPurpose;
+    }
+
+    public String getDtlRemark() {
+        return dtlRemark;
+    }
+
+    public void setDtlRemark(String dtlRemark) {
+        this.dtlRemark = dtlRemark;
+    }
+
+    public String getDtlRevBankArea() {
+        return dtlRevBankArea;
+    }
+
+    public void setDtlRevBankArea(String dtlRevBankArea) {
+        this.dtlRevBankArea = dtlRevBankArea;
+    }
+
+    public String getDtlRevBankCity() {
+        return dtlRevBankCity;
+    }
+
+    public void setDtlRevBankCity(String dtlRevBankCity) {
+        this.dtlRevBankCity = dtlRevBankCity;
+    }
+
+    public int getDtlSeqNum() {
+        return dtlSeqNum;
+    }
+
+    public void setDtlSeqNum(int dtlSeqNum) {
+        this.dtlSeqNum = dtlSeqNum;
+    }
+
+    public String getDtlExtend1() {
+        return dtlExtend1;
+    }
+
+    public void setDtlExtend1(String dtlExtend1) {
+        this.dtlExtend1 = dtlExtend1;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java
new file mode 100644
index 00000000..863ecb63
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/PaymentApplySubmitReqDTO.java
@@ -0,0 +1,245 @@
+package com.hzya.frame.cbs8.dto.req;
+
+/**
+ * @Description 批量代发代扣 203代发 201代扣
+ * @Author xiangerlin
+ * @Date 2024/6/18 11:58
+ **/
+public class PaymentApplySubmitReqDTO {
+    //业务参考号
+    private String referenceNum;
+    /**
+     * 业务类型
+     * 201-代扣
+     * 203-代发
+     * 代发工资传203
+     */
+    private String busType;
+    //总金额 小数位2位
+    private String amount;
+    //币种
+    private String currency;
+    //付款账号
+    private String payAccount;
+    //用途
+    private String purpose;
+    // 以上是必填字段
+
+
+
+    //备注
+    private String summary;
+    //期望支付时间
+    private String expectTime;
+    //公私标识 1对私 0对公
+    private String personalFlag;
+    //加急标志 1加急 0不加急
+    private String urgentTag;
+    //是否实时 1实时 0落地
+    private String realTimeTag;
+    /**
+     * 同城标志 0同城 1异地
+     * 收/付账号所属同一个城市为同城,否则为异地
+     */
+    private String cityFlag;
+    //银行备用字段 一共8个
+    private String bankExtend1;
+    private String bankExtend2;
+    private String bankExtend3;
+    private String bankExtend4;
+    private String bankExtend5;
+    private String bankExtend6;
+    private String bankExtend7;
+    private String bankExtend8;
+
+    //客户备用字段1
+    private String erpExtend1;
+    //客户备用字段1
+    private String erpExtend2;
+    //客户备用字段1
+    private String erpExtend3;
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getBankExtend1() {
+        return bankExtend1;
+    }
+
+    public void setBankExtend1(String bankExtend1) {
+        this.bankExtend1 = bankExtend1;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getBankExtend2() {
+        return bankExtend2;
+    }
+
+    public void setBankExtend2(String bankExtend2) {
+        this.bankExtend2 = bankExtend2;
+    }
+
+    public String getBankExtend3() {
+        return bankExtend3;
+    }
+
+    public void setBankExtend3(String bankExtend3) {
+        this.bankExtend3 = bankExtend3;
+    }
+
+    public String getBankExtend4() {
+        return bankExtend4;
+    }
+
+    public void setBankExtend4(String bankExtend4) {
+        this.bankExtend4 = bankExtend4;
+    }
+
+    public String getBankExtend5() {
+        return bankExtend5;
+    }
+
+    public void setBankExtend5(String bankExtend5) {
+        this.bankExtend5 = bankExtend5;
+    }
+
+    public String getBankExtend6() {
+        return bankExtend6;
+    }
+
+    public void setBankExtend6(String bankExtend6) {
+        this.bankExtend6 = bankExtend6;
+    }
+
+    public String getBankExtend7() {
+        return bankExtend7;
+    }
+
+    public void setBankExtend7(String bankExtend7) {
+        this.bankExtend7 = bankExtend7;
+    }
+
+    public String getBankExtend8() {
+        return bankExtend8;
+    }
+
+    public void setBankExtend8(String bankExtend8) {
+        this.bankExtend8 = bankExtend8;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java
new file mode 100644
index 00000000..26f5f4bf
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/req/TransactionDetailReqDTO.java
@@ -0,0 +1,164 @@
+package com.hzya.frame.cbs8.dto.req;
+
+import java.util.List;
+
+/**
+ * @Description 查询境内交易明细参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 09:55
+ **/
+public class TransactionDetailReqDTO {
+    private int currentPage;//当前页码 从1开始
+    private int pageSize;//本次查询的记录数,最大1000条
+    private String startDate;//开始日期
+    private String endDate;//结束日期
+    private String dateType;//日期类型0:交易日期,1:起息日期
+    private List<String> accountNoList;//账户列表
+    private List<String> bankTypeList;//银行类型列表
+    private List<String> currencyList;//币种列表
+    private String detailedSources;//明细来源
+    private String currentFlag;//明细类型
+    private String loanType;//借贷类型 1:借 2:贷
+    private List<String> accountNatureList;//账户性质列表
+    private String bankSerialNumber;//银行流水号
+    private String transactionSerialNumber;//交易流水号
+    private List<String> unitCodeList ;//单位编码列表
+    private String erpSerialNumber ;//erp业务参考号
+
+    public TransactionDetailReqDTO() {
+
+    }
+
+    public TransactionDetailReqDTO(String startDate, String endDate) {
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getDateType() {
+        return dateType;
+    }
+
+    public void setDateType(String dateType) {
+        this.dateType = dateType;
+    }
+
+    public List<String> getAccountNoList() {
+        return accountNoList;
+    }
+
+    public void setAccountNoList(List<String> accountNoList) {
+        this.accountNoList = accountNoList;
+    }
+
+    public List<String> getBankTypeList() {
+        return bankTypeList;
+    }
+
+    public void setBankTypeList(List<String> bankTypeList) {
+        this.bankTypeList = bankTypeList;
+    }
+
+    public List<String> getCurrencyList() {
+        return currencyList;
+    }
+
+    public void setCurrencyList(List<String> currencyList) {
+        this.currencyList = currencyList;
+    }
+
+    public String getDetailedSources() {
+        return detailedSources;
+    }
+
+    public void setDetailedSources(String detailedSources) {
+        this.detailedSources = detailedSources;
+    }
+
+    public String getCurrentFlag() {
+        return currentFlag;
+    }
+
+    public void setCurrentFlag(String currentFlag) {
+        this.currentFlag = currentFlag;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public List<String> getAccountNatureList() {
+        return accountNatureList;
+    }
+
+    public void setAccountNatureList(List<String> accountNatureList) {
+        this.accountNatureList = accountNatureList;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getTransactionSerialNumber() {
+        return transactionSerialNumber;
+    }
+
+    public void setTransactionSerialNumber(String transactionSerialNumber) {
+        this.transactionSerialNumber = transactionSerialNumber;
+    }
+
+    public List<String> getUnitCodeList() {
+        return unitCodeList;
+    }
+
+    public void setUnitCodeList(List<String> unitCodeList) {
+        this.unitCodeList = unitCodeList;
+    }
+
+    public String getErpSerialNumber() {
+        return erpSerialNumber;
+    }
+
+    public void setErpSerialNumber(String erpSerialNumber) {
+        this.erpSerialNumber = erpSerialNumber;
+    }
+
+    public int getCurrentPage() {
+        return currentPage;
+    }
+
+    public void setCurrentPage(int currentPage) {
+        this.currentPage = currentPage;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java
new file mode 100644
index 00000000..402e7895
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayQueryDTO.java
@@ -0,0 +1,280 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 代发代扣查询详情
+ * @Author xiangerlin
+ * @Date 2024/6/19 09:02
+ **/
+public class AgentPayQueryDTO {
+    // 申请单编号
+    private String busNum;
+
+    // 代发/代扣明细序号
+    private String dtlSeqNum;
+
+    // 金额
+    private String dtlAmount; // 考虑到金额计算精度,建议使用BigDecimal
+
+    // 收款人名称
+    private String dtlRevName;
+
+    // 收款人账号
+    private String dtlRevAccount;
+
+    // 收款人开户行
+    private String dtlRevBankName;
+
+    // 银行号
+    private String dtlBankNum;
+
+    // 联行号
+    private String dtlCnapsCode;
+
+    // 是否跨行(Y:开户行是招商银行。N:开户行是他行。为空默认为招行)
+    private String dtlBankFlag;
+
+    // 地区名称
+    private String dtlRevBankArea;
+
+    // 注释
+    private String dtlRemark;
+
+    // 状态
+    private String dtlStatus;
+
+    // 错误信息
+    private String dtlErrorMessage;
+
+    // 他行开户地
+    private String dtlRevBankCity;
+
+    // 备用字段1-6
+    private String dtlExtend1;
+    private String dtlExtend2;
+    private String dtlExtend3;
+    private String dtlExtend4;
+    private String dtlExtend5;
+    private String dtlExtend6;
+
+    // ERP备注1-3
+    private String dtlErpComment1;
+    private String dtlErpComment2;
+    private String dtlErpComment3;
+
+    // 用途
+    private String dtlPurpose;
+
+    // 银行支付时间
+    private String dtlPayTime;
+
+    // 实际扣款金额
+    private String dtlActualAmount;
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getDtlSeqNum() {
+        return dtlSeqNum;
+    }
+
+    public void setDtlSeqNum(String dtlSeqNum) {
+        this.dtlSeqNum = dtlSeqNum;
+    }
+
+    public String getDtlAmount() {
+        return dtlAmount;
+    }
+
+    public void setDtlAmount(String dtlAmount) {
+        this.dtlAmount = dtlAmount;
+    }
+
+    public String getDtlRevName() {
+        return dtlRevName;
+    }
+
+    public void setDtlRevName(String dtlRevName) {
+        this.dtlRevName = dtlRevName;
+    }
+
+    public String getDtlRevAccount() {
+        return dtlRevAccount;
+    }
+
+    public void setDtlRevAccount(String dtlRevAccount) {
+        this.dtlRevAccount = dtlRevAccount;
+    }
+
+    public String getDtlRevBankName() {
+        return dtlRevBankName;
+    }
+
+    public void setDtlRevBankName(String dtlRevBankName) {
+        this.dtlRevBankName = dtlRevBankName;
+    }
+
+    public String getDtlBankNum() {
+        return dtlBankNum;
+    }
+
+    public void setDtlBankNum(String dtlBankNum) {
+        this.dtlBankNum = dtlBankNum;
+    }
+
+    public String getDtlCnapsCode() {
+        return dtlCnapsCode;
+    }
+
+    public void setDtlCnapsCode(String dtlCnapsCode) {
+        this.dtlCnapsCode = dtlCnapsCode;
+    }
+
+    public String getDtlBankFlag() {
+        return dtlBankFlag;
+    }
+
+    public void setDtlBankFlag(String dtlBankFlag) {
+        this.dtlBankFlag = dtlBankFlag;
+    }
+
+    public String getDtlRevBankArea() {
+        return dtlRevBankArea;
+    }
+
+    public void setDtlRevBankArea(String dtlRevBankArea) {
+        this.dtlRevBankArea = dtlRevBankArea;
+    }
+
+    public String getDtlRemark() {
+        return dtlRemark;
+    }
+
+    public void setDtlRemark(String dtlRemark) {
+        this.dtlRemark = dtlRemark;
+    }
+
+    public String getDtlStatus() {
+        return dtlStatus;
+    }
+
+    public void setDtlStatus(String dtlStatus) {
+        this.dtlStatus = dtlStatus;
+    }
+
+    public String getDtlErrorMessage() {
+        return dtlErrorMessage;
+    }
+
+    public void setDtlErrorMessage(String dtlErrorMessage) {
+        this.dtlErrorMessage = dtlErrorMessage;
+    }
+
+    public String getDtlRevBankCity() {
+        return dtlRevBankCity;
+    }
+
+    public void setDtlRevBankCity(String dtlRevBankCity) {
+        this.dtlRevBankCity = dtlRevBankCity;
+    }
+
+    public String getDtlExtend1() {
+        return dtlExtend1;
+    }
+
+    public void setDtlExtend1(String dtlExtend1) {
+        this.dtlExtend1 = dtlExtend1;
+    }
+
+    public String getDtlExtend2() {
+        return dtlExtend2;
+    }
+
+    public void setDtlExtend2(String dtlExtend2) {
+        this.dtlExtend2 = dtlExtend2;
+    }
+
+    public String getDtlExtend3() {
+        return dtlExtend3;
+    }
+
+    public void setDtlExtend3(String dtlExtend3) {
+        this.dtlExtend3 = dtlExtend3;
+    }
+
+    public String getDtlExtend4() {
+        return dtlExtend4;
+    }
+
+    public void setDtlExtend4(String dtlExtend4) {
+        this.dtlExtend4 = dtlExtend4;
+    }
+
+    public String getDtlExtend5() {
+        return dtlExtend5;
+    }
+
+    public void setDtlExtend5(String dtlExtend5) {
+        this.dtlExtend5 = dtlExtend5;
+    }
+
+    public String getDtlExtend6() {
+        return dtlExtend6;
+    }
+
+    public void setDtlExtend6(String dtlExtend6) {
+        this.dtlExtend6 = dtlExtend6;
+    }
+
+    public String getDtlErpComment1() {
+        return dtlErpComment1;
+    }
+
+    public void setDtlErpComment1(String dtlErpComment1) {
+        this.dtlErpComment1 = dtlErpComment1;
+    }
+
+    public String getDtlErpComment2() {
+        return dtlErpComment2;
+    }
+
+    public void setDtlErpComment2(String dtlErpComment2) {
+        this.dtlErpComment2 = dtlErpComment2;
+    }
+
+    public String getDtlErpComment3() {
+        return dtlErpComment3;
+    }
+
+    public void setDtlErpComment3(String dtlErpComment3) {
+        this.dtlErpComment3 = dtlErpComment3;
+    }
+
+    public String getDtlPurpose() {
+        return dtlPurpose;
+    }
+
+    public void setDtlPurpose(String dtlPurpose) {
+        this.dtlPurpose = dtlPurpose;
+    }
+
+    public String getDtlPayTime() {
+        return dtlPayTime;
+    }
+
+    public void setDtlPayTime(String dtlPayTime) {
+        this.dtlPayTime = dtlPayTime;
+    }
+
+    public String getDtlActualAmount() {
+        return dtlActualAmount;
+    }
+
+    public void setDtlActualAmount(String dtlActualAmount) {
+        this.dtlActualAmount = dtlActualAmount;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java
new file mode 100644
index 00000000..5ea5d5ae
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/AgentPayResultResDTO.java
@@ -0,0 +1,450 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import java.util.List;
+
+/**
+ * @Description 代发代扣 返回参数对象
+ * @Author xiangerlin
+ * @Date 2024/6/19 08:53
+ **/
+public class AgentPayResultResDTO {
+    // 支付的业务类型
+    private String busType;
+
+    // 申请单编号
+    private String busNum;
+
+    // 付款账户
+    private String payAccount;
+
+    // 付款账户名称
+    private String payAccountName;
+
+    // 付款账户开户行
+    private String payBankName;
+
+    // 付款银行类型
+    private String payBankType;
+
+    // 币种
+    private String currency;
+
+    // 金额
+    private String amount;
+
+    // 收款账户
+    private String revAccount;
+
+    // 收款账户名称
+    private String revAccountName;
+
+    // 收款开户行
+    private String revBankName;
+
+    // 收款银行类型
+    private String revBankType;
+
+    // 收款人省
+    private String revProvince;
+
+    // 对账码集合(假设为String列表)
+    private List<String> checkCodeList;
+
+    // 收款人市
+    private String revCity;
+
+    // 支付渠道
+    private String payChannel;
+
+    // 付款单提示信息/银行返回信息
+    private String errorMsg;
+
+    // 支付申请状态
+    private String status;
+
+    // 经办人ID
+    private String createBy;
+
+    // 经办人名称
+    private String createByName;
+
+    // 用途
+    private String purpose;
+
+    // 摘要/备注
+    private String summary;
+
+    // 期望支付时间
+    private String expectTime;
+
+    // 支付时间
+    private String payDate;
+
+    // 支付状态
+    private String payStatus;
+
+    // 客户备用字段1
+    private String erpExtend1;
+
+    // 客户备用字段2
+    private String erpExtend2;
+
+    // 客户备用字段3
+    private String erpExtend3;
+
+    // 计划流水号
+    private String planNumber;
+
+    // 资金预算编号
+    private String planItemCode;
+
+    // 预算项名称
+    private String planItemName;
+
+    // 预算所属单位编码
+    private String planUnitCode;
+
+    // 预算所属单位名称
+    private String planUnitName;
+
+    // 单位编码(前端展示)
+    private String displayUnitCode;
+
+    // 预算单位编码(前端展示)
+    private String displayPlanUnitCode;
+
+    // 经办用户单位编码(前端展示)
+    private String displayOperaterOrgCode;
+
+    // 付方单位编码(前端展示)
+    private String displayPayOrgCode;
+
+    // 客商编号
+    private String revCustomerCode;
+
+    // 结算方式
+    private String payType;
+
+    //代发代扣详情
+    private List<AgentPayQueryDTO> agentDetails;
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public List<String> getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(List<String> checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getCreateByName() {
+        return createByName;
+    }
+
+    public void setCreateByName(String createByName) {
+        this.createByName = createByName;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getPlanNumber() {
+        return planNumber;
+    }
+
+    public void setPlanNumber(String planNumber) {
+        this.planNumber = planNumber;
+    }
+
+    public String getPlanItemCode() {
+        return planItemCode;
+    }
+
+    public void setPlanItemCode(String planItemCode) {
+        this.planItemCode = planItemCode;
+    }
+
+    public String getPlanItemName() {
+        return planItemName;
+    }
+
+    public void setPlanItemName(String planItemName) {
+        this.planItemName = planItemName;
+    }
+
+    public String getPlanUnitCode() {
+        return planUnitCode;
+    }
+
+    public void setPlanUnitCode(String planUnitCode) {
+        this.planUnitCode = planUnitCode;
+    }
+
+    public String getPlanUnitName() {
+        return planUnitName;
+    }
+
+    public void setPlanUnitName(String planUnitName) {
+        this.planUnitName = planUnitName;
+    }
+
+    public String getDisplayUnitCode() {
+        return displayUnitCode;
+    }
+
+    public void setDisplayUnitCode(String displayUnitCode) {
+        this.displayUnitCode = displayUnitCode;
+    }
+
+    public String getDisplayPlanUnitCode() {
+        return displayPlanUnitCode;
+    }
+
+    public void setDisplayPlanUnitCode(String displayPlanUnitCode) {
+        this.displayPlanUnitCode = displayPlanUnitCode;
+    }
+
+    public String getDisplayOperaterOrgCode() {
+        return displayOperaterOrgCode;
+    }
+
+    public void setDisplayOperaterOrgCode(String displayOperaterOrgCode) {
+        this.displayOperaterOrgCode = displayOperaterOrgCode;
+    }
+
+    public String getDisplayPayOrgCode() {
+        return displayPayOrgCode;
+    }
+
+    public void setDisplayPayOrgCode(String displayPayOrgCode) {
+        this.displayPayOrgCode = displayPayOrgCode;
+    }
+
+    public String getRevCustomerCode() {
+        return revCustomerCode;
+    }
+
+    public void setRevCustomerCode(String revCustomerCode) {
+        this.revCustomerCode = revCustomerCode;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public List<AgentPayQueryDTO> getAgentDetails() {
+        return agentDetails;
+    }
+
+    public void setAgentDetails(List<AgentPayQueryDTO> agentDetails) {
+        this.agentDetails = agentDetails;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java
new file mode 100644
index 00000000..0bb30dc8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResDataDTO.java
@@ -0,0 +1,458 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+
+/**
+ * @Description data节点
+ * @Author xiangerlin
+ * @Date 2024/1/2 09:26
+ **/
+public class CbsResDataDTO {
+
+
+    private List<JSONObject> list;//明细数据
+    //------- 交易明细字段-----
+    private int endRow;
+    private Boolean hasNextPage;//是否有下一页
+    private Boolean hasPreviousPage;//是否有前一页
+    @JSONField(name = "isFirstPage")
+    private Boolean hasFirstPage;
+    @JSONField(name = "isLastPage")
+    private Boolean hasLastPage;
+    private int navigateFirstPage;
+    private int navigateLastPage;
+    private int navigatePages;
+    private int nextPage;
+    private int pageNum;
+    private int pageSize;
+    private int pages;
+    private int prePage;
+    private int size;
+    private int startRow;
+    private int total;
+    //------- 交易明细字段-----
+
+    //------经办支付返回参数------
+    private String busNum;//申请单编号
+    private String errorCode;//错误编码
+    private String errorMsg;//错误信息
+    private String freezeFlowNum;//内部户冻结流水号
+    private String recordNum;//批量经办序号
+    private String referenceNum;//业务参考号
+    private Boolean successed;//是否成功
+    //------经办支付返回参数------
+
+
+    //------查询交易结果返回参数-------
+
+    private String busType;//支付业务类型
+    private String payAccount;//付款账号
+    private String payAccountName;//付款户名
+    private String payBankName;//付款开户行名称
+    private String payBankType;//付款银行类型
+    private String currency;//币种
+    private String amount;//金额
+    private String revAccount;//收款账户
+    private String revAccountName;//收款账户名
+    private String revBankName;//收款开户行
+    private String revBankType;//收款银行类型
+    private String payChannel;//支付渠道
+
+    private String status;//支付申请单状态
+    private String payStatus;//支付状态
+    private String payDate;//支付时间
+    private String planNumber;//计划流水号
+    private String planItemCode;//资金预算编号
+    private String planItemName;//预算名称
+    private String erpExtend1;//客户备用字段1
+    private String erpExtend2;//客户备用字段1
+    private String erpExtend3;//客户备用字段1
+
+    //------查询交易结果返回参数-------
+
+
+    public List<JSONObject> getList() {
+        return list;
+    }
+
+    public void setList(List<JSONObject> list) {
+        this.list = list;
+    }
+
+    public int getEndRow() {
+        return endRow;
+    }
+
+    public void setEndRow(int endRow) {
+        this.endRow = endRow;
+    }
+
+    public Boolean getHasNextPage() {
+        return hasNextPage;
+    }
+
+    public void setHasNextPage(Boolean hasNextPage) {
+        this.hasNextPage = hasNextPage;
+    }
+
+    public Boolean getHasPreviousPage() {
+        return hasPreviousPage;
+    }
+
+    public void setHasPreviousPage(Boolean hasPreviousPage) {
+        this.hasPreviousPage = hasPreviousPage;
+    }
+
+    public Boolean getHasFirstPage() {
+        return hasFirstPage;
+    }
+
+    public void setHasFirstPage(Boolean hasFirstPage) {
+        this.hasFirstPage = hasFirstPage;
+    }
+
+    public Boolean getHasLastPage() {
+        return hasLastPage;
+    }
+
+    public void setHasLastPage(Boolean hasLastPage) {
+        this.hasLastPage = hasLastPage;
+    }
+
+    public int getNavigateFirstPage() {
+        return navigateFirstPage;
+    }
+
+    public void setNavigateFirstPage(int navigateFirstPage) {
+        this.navigateFirstPage = navigateFirstPage;
+    }
+
+    public int getNavigateLastPage() {
+        return navigateLastPage;
+    }
+
+    public void setNavigateLastPage(int navigateLastPage) {
+        this.navigateLastPage = navigateLastPage;
+    }
+
+    public int getNavigatePages() {
+        return navigatePages;
+    }
+
+    public void setNavigatePages(int navigatePages) {
+        this.navigatePages = navigatePages;
+    }
+
+    public int getNextPage() {
+        return nextPage;
+    }
+
+    public void setNextPage(int nextPage) {
+        this.nextPage = nextPage;
+    }
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public int getPrePage() {
+        return prePage;
+    }
+
+    public void setPrePage(int prePage) {
+        this.prePage = prePage;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public int getStartRow() {
+        return startRow;
+    }
+
+    public void setStartRow(int startRow) {
+        this.startRow = startRow;
+    }
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getRecordNum() {
+        return recordNum;
+    }
+
+    public void setRecordNum(String recordNum) {
+        this.recordNum = recordNum;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public Boolean getSuccessed() {
+        return successed;
+    }
+
+    public void setSuccessed(Boolean successed) {
+        this.successed = successed;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPlanNumber() {
+        return planNumber;
+    }
+
+    public void setPlanNumber(String planNumber) {
+        this.planNumber = planNumber;
+    }
+
+    public String getPlanItemCode() {
+        return planItemCode;
+    }
+
+    public void setPlanItemCode(String planItemCode) {
+        this.planItemCode = planItemCode;
+    }
+
+    public String getPlanItemName() {
+        return planItemName;
+    }
+
+    public void setPlanItemName(String planItemName) {
+        this.planItemName = planItemName;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    /**
+     * 把json字符串转换成指定范型的list
+     * @param json
+     * @param list
+     * @param clazz
+     * @param <T>
+     */
+    private static <T> void adaptAndAddToList(String json, List<Object> list, Class<T> clazz) {
+        JSONObject jsonObject = JSON.parseObject(json);
+
+        if (jsonObject.containsKey("list")) {
+            JSONArray listArray = jsonObject.getJSONArray("list");
+            for (Object item : listArray) {
+                JSONObject itemObject = (JSONObject) item;
+                // 适配不同类型的节点
+                list.add(JSON.toJavaObject(itemObject, clazz));
+            }
+        }
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java
new file mode 100644
index 00000000..1abae5b9
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/CbsResponseDTO.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.cbs8.dto.res;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+
+/**
+ * @Description cbs响应DTO
+ * @Author xiangerlin
+ * @Date 2024/1/2 09:25
+ **/
+public class CbsResponseDTO {
+    //private List<CbsResDataDTO> data;//数据
+    private List<JSONObject> data;//数据
+    private String code;//0表示成功
+    private String msg;//消息
+
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public List<JSONObject> getData() {
+        return data;
+    }
+
+    public void setData(List<JSONObject> data) {
+        this.data = data;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java
new file mode 100644
index 00000000..6e77d30a
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/ElecResponseDTO.java
@@ -0,0 +1,305 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 电子回单查询返回参数
+ * @Author xiangerlin
+ * @Date 2024/1/4 17:13
+ **/
+public class ElecResponseDTO {
+
+    // 账号
+    private String accountNo;
+
+    // 账号名称
+    private String accountName;
+
+    // 银行类型
+    private String bankType;
+
+    // 银行类型名称
+    private String bankTypeName;
+
+    // 开户行
+    private String openingBank;
+
+    // 交易日期
+    private String transactionDate;
+
+    // 电子回单文件状态
+    private String electronicBillStatus;
+
+    // 电子回单文件名称
+    private String billFileName;
+
+    // 回单文件下载地址
+    private String bucketFileUrl;
+
+    // 回单文件名称
+    private String bucketFileName;
+
+    // 回单类型
+    private String electronicBillType;
+
+    // 银行流水号
+    private String bankSerialNumber;
+
+    // 回单编号
+    private String printInstanceNumber;
+
+    // 币种
+    private String currency;
+
+    // 币种名称
+    private String currencyName;
+
+    // 借贷类型
+    private String loanType;
+
+    // 交易金额
+    private String transactionAmount;
+
+    // 对方账号
+    private String oppositeAccount;
+
+    // 对方账户名
+    private String oppositeAccountName;
+
+    // 对方开户地
+    private String oppositeOpeningPlace;
+
+    // 对方开户行
+    private String oppositeOpeningBank;
+
+    // 摘要
+    private String digest;
+
+    // 用途
+    private String purpose;
+
+    // 账户性质
+    private String accountNatureCode;
+
+    // 对账码
+    private String checkCode;
+
+    // 单位编码
+    private String unitCode;
+
+    // ERP业务参考号
+    private String settleBusinessReferenceCode;
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(String bankType) {
+        this.bankType = bankType;
+    }
+
+    public String getBankTypeName() {
+        return bankTypeName;
+    }
+
+    public void setBankTypeName(String bankTypeName) {
+        this.bankTypeName = bankTypeName;
+    }
+
+    public String getOpeningBank() {
+        return openingBank;
+    }
+
+    public void setOpeningBank(String openingBank) {
+        this.openingBank = openingBank;
+    }
+
+    public String getTransactionDate() {
+        return transactionDate;
+    }
+
+    public void setTransactionDate(String transactionDate) {
+        this.transactionDate = transactionDate;
+    }
+
+    public String getElectronicBillStatus() {
+        return electronicBillStatus;
+    }
+
+    public void setElectronicBillStatus(String electronicBillStatus) {
+        this.electronicBillStatus = electronicBillStatus;
+    }
+
+    public String getBillFileName() {
+        return billFileName;
+    }
+
+    public void setBillFileName(String billFileName) {
+        this.billFileName = billFileName;
+    }
+
+    public String getBucketFileUrl() {
+        return bucketFileUrl;
+    }
+
+    public void setBucketFileUrl(String bucketFileUrl) {
+        this.bucketFileUrl = bucketFileUrl;
+    }
+
+    public String getBucketFileName() {
+        return bucketFileName;
+    }
+
+    public void setBucketFileName(String bucketFileName) {
+        this.bucketFileName = bucketFileName;
+    }
+
+    public String getElectronicBillType() {
+        return electronicBillType;
+    }
+
+    public void setElectronicBillType(String electronicBillType) {
+        this.electronicBillType = electronicBillType;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getPrintInstanceNumber() {
+        return printInstanceNumber;
+    }
+
+    public void setPrintInstanceNumber(String printInstanceNumber) {
+        this.printInstanceNumber = printInstanceNumber;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getCurrencyName() {
+        return currencyName;
+    }
+
+    public void setCurrencyName(String currencyName) {
+        this.currencyName = currencyName;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public String getTransactionAmount() {
+        return transactionAmount;
+    }
+
+    public void setTransactionAmount(String transactionAmount) {
+        this.transactionAmount = transactionAmount;
+    }
+
+    public String getOppositeAccount() {
+        return oppositeAccount;
+    }
+
+    public void setOppositeAccount(String oppositeAccount) {
+        this.oppositeAccount = oppositeAccount;
+    }
+
+    public String getOppositeAccountName() {
+        return oppositeAccountName;
+    }
+
+    public void setOppositeAccountName(String oppositeAccountName) {
+        this.oppositeAccountName = oppositeAccountName;
+    }
+
+    public String getOppositeOpeningPlace() {
+        return oppositeOpeningPlace;
+    }
+
+    public void setOppositeOpeningPlace(String oppositeOpeningPlace) {
+        this.oppositeOpeningPlace = oppositeOpeningPlace;
+    }
+
+    public String getOppositeOpeningBank() {
+        return oppositeOpeningBank;
+    }
+
+    public void setOppositeOpeningBank(String oppositeOpeningBank) {
+        this.oppositeOpeningBank = oppositeOpeningBank;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getAccountNatureCode() {
+        return accountNatureCode;
+    }
+
+    public void setAccountNatureCode(String accountNatureCode) {
+        this.accountNatureCode = accountNatureCode;
+    }
+
+    public String getCheckCode() {
+        return checkCode;
+    }
+
+    public void setCheckCode(String checkCode) {
+        this.checkCode = checkCode;
+    }
+
+    public String getUnitCode() {
+        return unitCode;
+    }
+
+    public void setUnitCode(String unitCode) {
+        this.unitCode = unitCode;
+    }
+
+    public String getSettleBusinessReferenceCode() {
+        return settleBusinessReferenceCode;
+    }
+
+    public void setSettleBusinessReferenceCode(String settleBusinessReferenceCode) {
+        this.settleBusinessReferenceCode = settleBusinessReferenceCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java
new file mode 100644
index 00000000..2534d4f8
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResponseDTO.java
@@ -0,0 +1,73 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 经办支付接口返回参数中的data节点
+ * @Author xiangerlin
+ * @Date 2024/1/3 14:35
+ **/
+public class PayResponseDTO {
+
+    private String busNum;//申请单编号
+    private String errorCode;//错误编码
+    private String errorMsg;//错误信息
+    private String freezeFlowNum;//内部户冻结流水号
+    private String recordNum;//批量经办序号
+    private String referenceNum;//业务参考号
+    private Boolean successed;//是否成功
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getRecordNum() {
+        return recordNum;
+    }
+
+    public void setRecordNum(String recordNum) {
+        this.recordNum = recordNum;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public Boolean getSuccessed() {
+        return successed;
+    }
+
+    public void setSuccessed(Boolean successed) {
+        this.successed = successed;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java
new file mode 100644
index 00000000..4ab82489
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/PayResultResDTO.java
@@ -0,0 +1,890 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 交易结果查询data节点响应的参数
+ * @Author xiangerlin
+ * @Date 2024/1/3 15:45
+ **/
+public class PayResultResDTO {
+
+    private String payDate;//支付日期
+    private String accountFlag;
+
+    private String agentDetails;
+
+    private String amount;
+
+    private String bankExtend1;
+
+    private String bankExtend10;
+
+    private String bankExtend11;
+
+    private String bankExtend2;
+
+    private String bankExtend3;
+
+    private String bankExtend4;
+
+    private String bankExtend5;
+
+    private String bankExtend6;
+
+    private String bankExtend7;
+
+    private String bankExtend8;
+
+    private String bankExtend9;
+
+    private String bankInterfaceType;
+
+    private String bankNum;
+
+    private String bankVersion;
+
+    private String batchNum;
+
+    private String busNum;
+
+    private String busType;
+
+    private String checkCodeList;
+
+    private String cityFlag;
+
+    private String cnapsCode;
+
+    private String createBy;
+
+    private String createByName;
+
+    private String createTime;
+
+    private String currency;
+
+    private String dealPeopleList;
+
+    private String detailNum;
+
+    private String erpExtend1;
+
+    private String erpExtend2;
+
+    private String erpExtend3;
+
+    private String errorMsg;
+
+    private String expectTime;
+
+
+
+    private String extend1;
+
+    private String extend2;
+
+    private String extend3;
+
+    private String extend4;
+
+    private String extend5;
+
+    private String freezeFlowNum;
+
+    private String freezeStatus;
+
+    private String id;
+
+    private String innerAccount;
+
+    private String innerAccountName;
+
+    private String inputType;
+
+    private String isDeleted;
+
+    private String isSaveRev;
+
+    private String lastPrintTime;
+
+    private String lastPrintUser;
+
+    private String operaterOrgCode;
+
+    private String operaterOrgCodeList;
+
+    private String operaterOrgName;
+
+    private String payAccount;
+
+    private String payAccountName;
+
+    private String payAccountSeq;
+
+    private String payBankName;
+
+    private String payBankType;
+
+    private String payChannel;
+
+    private String payOrgCode;
+
+    private String payOrgName;
+
+    private String payStatus;// 支付状态
+
+    private String paymentApplyUnionDTO;
+
+    private String personalFlag;
+
+    private String printTimes;
+
+    private String procInstId;
+
+    private String procStatus;
+
+    private String projectCode;
+
+    private String purpose;
+
+    private String realName;
+
+    private String realRevAccount;
+
+    private String realTimeTag;
+
+    private String referenceNum;
+
+    private String revAccount;
+
+    private String revAccountName;
+
+    private String revAccountSeq;
+
+    private String revBankArea;
+
+    private String revBankName;
+
+    private String revBankType;
+
+    private String revCity;
+
+    private String revProvince;
+
+    private String status;//支付申请状态
+
+    private String summary;
+
+    private String unitCode;
+
+    private String unitName;
+
+    private String updateBy;
+
+    private String updateTime;
+
+    private String urgentTag;
+
+    public String getAccountFlag() {
+        return accountFlag;
+    }
+
+    public void setAccountFlag(String accountFlag) {
+        this.accountFlag = accountFlag;
+    }
+
+    public String getAgentDetails() {
+        return agentDetails;
+    }
+
+    public void setAgentDetails(String agentDetails) {
+        this.agentDetails = agentDetails;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getBankExtend1() {
+        return bankExtend1;
+    }
+
+    public void setBankExtend1(String bankExtend1) {
+        this.bankExtend1 = bankExtend1;
+    }
+
+    public String getBankExtend10() {
+        return bankExtend10;
+    }
+
+    public void setBankExtend10(String bankExtend10) {
+        this.bankExtend10 = bankExtend10;
+    }
+
+    public String getBankExtend11() {
+        return bankExtend11;
+    }
+
+    public void setBankExtend11(String bankExtend11) {
+        this.bankExtend11 = bankExtend11;
+    }
+
+    public String getBankExtend2() {
+        return bankExtend2;
+    }
+
+    public void setBankExtend2(String bankExtend2) {
+        this.bankExtend2 = bankExtend2;
+    }
+
+    public String getBankExtend3() {
+        return bankExtend3;
+    }
+
+    public void setBankExtend3(String bankExtend3) {
+        this.bankExtend3 = bankExtend3;
+    }
+
+    public String getBankExtend4() {
+        return bankExtend4;
+    }
+
+    public void setBankExtend4(String bankExtend4) {
+        this.bankExtend4 = bankExtend4;
+    }
+
+    public String getBankExtend5() {
+        return bankExtend5;
+    }
+
+    public void setBankExtend5(String bankExtend5) {
+        this.bankExtend5 = bankExtend5;
+    }
+
+    public String getBankExtend6() {
+        return bankExtend6;
+    }
+
+    public void setBankExtend6(String bankExtend6) {
+        this.bankExtend6 = bankExtend6;
+    }
+
+    public String getBankExtend7() {
+        return bankExtend7;
+    }
+
+    public void setBankExtend7(String bankExtend7) {
+        this.bankExtend7 = bankExtend7;
+    }
+
+    public String getBankExtend8() {
+        return bankExtend8;
+    }
+
+    public void setBankExtend8(String bankExtend8) {
+        this.bankExtend8 = bankExtend8;
+    }
+
+    public String getBankExtend9() {
+        return bankExtend9;
+    }
+
+    public void setBankExtend9(String bankExtend9) {
+        this.bankExtend9 = bankExtend9;
+    }
+
+    public String getBankInterfaceType() {
+        return bankInterfaceType;
+    }
+
+    public void setBankInterfaceType(String bankInterfaceType) {
+        this.bankInterfaceType = bankInterfaceType;
+    }
+
+    public String getBankNum() {
+        return bankNum;
+    }
+
+    public void setBankNum(String bankNum) {
+        this.bankNum = bankNum;
+    }
+
+    public String getBankVersion() {
+        return bankVersion;
+    }
+
+    public void setBankVersion(String bankVersion) {
+        this.bankVersion = bankVersion;
+    }
+
+    public String getBatchNum() {
+        return batchNum;
+    }
+
+    public void setBatchNum(String batchNum) {
+        this.batchNum = batchNum;
+    }
+
+    public String getBusNum() {
+        return busNum;
+    }
+
+    public void setBusNum(String busNum) {
+        this.busNum = busNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getCheckCodeList() {
+        return checkCodeList;
+    }
+
+    public void setCheckCodeList(String checkCodeList) {
+        this.checkCodeList = checkCodeList;
+    }
+
+    public String getCityFlag() {
+        return cityFlag;
+    }
+
+    public void setCityFlag(String cityFlag) {
+        this.cityFlag = cityFlag;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getCreateByName() {
+        return createByName;
+    }
+
+    public void setCreateByName(String createByName) {
+        this.createByName = createByName;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getDealPeopleList() {
+        return dealPeopleList;
+    }
+
+    public void setDealPeopleList(String dealPeopleList) {
+        this.dealPeopleList = dealPeopleList;
+    }
+
+    public String getDetailNum() {
+        return detailNum;
+    }
+
+    public void setDetailNum(String detailNum) {
+        this.detailNum = detailNum;
+    }
+
+    public String getErpExtend1() {
+        return erpExtend1;
+    }
+
+    public void setErpExtend1(String erpExtend1) {
+        this.erpExtend1 = erpExtend1;
+    }
+
+    public String getErpExtend2() {
+        return erpExtend2;
+    }
+
+    public void setErpExtend2(String erpExtend2) {
+        this.erpExtend2 = erpExtend2;
+    }
+
+    public String getErpExtend3() {
+        return erpExtend3;
+    }
+
+    public void setErpExtend3(String erpExtend3) {
+        this.erpExtend3 = erpExtend3;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getExpectTime() {
+        return expectTime;
+    }
+
+    public void setExpectTime(String expectTime) {
+        this.expectTime = expectTime;
+    }
+
+    public String getExtend1() {
+        return extend1;
+    }
+
+    public void setExtend1(String extend1) {
+        this.extend1 = extend1;
+    }
+
+    public String getExtend2() {
+        return extend2;
+    }
+
+    public void setExtend2(String extend2) {
+        this.extend2 = extend2;
+    }
+
+    public String getExtend3() {
+        return extend3;
+    }
+
+    public void setExtend3(String extend3) {
+        this.extend3 = extend3;
+    }
+
+    public String getExtend4() {
+        return extend4;
+    }
+
+    public void setExtend4(String extend4) {
+        this.extend4 = extend4;
+    }
+
+    public String getExtend5() {
+        return extend5;
+    }
+
+    public void setExtend5(String extend5) {
+        this.extend5 = extend5;
+    }
+
+    public String getFreezeFlowNum() {
+        return freezeFlowNum;
+    }
+
+    public void setFreezeFlowNum(String freezeFlowNum) {
+        this.freezeFlowNum = freezeFlowNum;
+    }
+
+    public String getFreezeStatus() {
+        return freezeStatus;
+    }
+
+    public void setFreezeStatus(String freezeStatus) {
+        this.freezeStatus = freezeStatus;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getInnerAccount() {
+        return innerAccount;
+    }
+
+    public void setInnerAccount(String innerAccount) {
+        this.innerAccount = innerAccount;
+    }
+
+    public String getInnerAccountName() {
+        return innerAccountName;
+    }
+
+    public void setInnerAccountName(String innerAccountName) {
+        this.innerAccountName = innerAccountName;
+    }
+
+    public String getInputType() {
+        return inputType;
+    }
+
+    public void setInputType(String inputType) {
+        this.inputType = inputType;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public String getIsSaveRev() {
+        return isSaveRev;
+    }
+
+    public void setIsSaveRev(String isSaveRev) {
+        this.isSaveRev = isSaveRev;
+    }
+
+    public String getLastPrintTime() {
+        return lastPrintTime;
+    }
+
+    public void setLastPrintTime(String lastPrintTime) {
+        this.lastPrintTime = lastPrintTime;
+    }
+
+    public String getLastPrintUser() {
+        return lastPrintUser;
+    }
+
+    public void setLastPrintUser(String lastPrintUser) {
+        this.lastPrintUser = lastPrintUser;
+    }
+
+    public String getOperaterOrgCode() {
+        return operaterOrgCode;
+    }
+
+    public void setOperaterOrgCode(String operaterOrgCode) {
+        this.operaterOrgCode = operaterOrgCode;
+    }
+
+    public String getOperaterOrgCodeList() {
+        return operaterOrgCodeList;
+    }
+
+    public void setOperaterOrgCodeList(String operaterOrgCodeList) {
+        this.operaterOrgCodeList = operaterOrgCodeList;
+    }
+
+    public String getOperaterOrgName() {
+        return operaterOrgName;
+    }
+
+    public void setOperaterOrgName(String operaterOrgName) {
+        this.operaterOrgName = operaterOrgName;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayAccountName() {
+        return payAccountName;
+    }
+
+    public void setPayAccountName(String payAccountName) {
+        this.payAccountName = payAccountName;
+    }
+
+    public String getPayAccountSeq() {
+        return payAccountSeq;
+    }
+
+    public void setPayAccountSeq(String payAccountSeq) {
+        this.payAccountSeq = payAccountSeq;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getPayBankType() {
+        return payBankType;
+    }
+
+    public void setPayBankType(String payBankType) {
+        this.payBankType = payBankType;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getPayOrgCode() {
+        return payOrgCode;
+    }
+
+    public void setPayOrgCode(String payOrgCode) {
+        this.payOrgCode = payOrgCode;
+    }
+
+    public String getPayOrgName() {
+        return payOrgName;
+    }
+
+    public void setPayOrgName(String payOrgName) {
+        this.payOrgName = payOrgName;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public String getPaymentApplyUnionDTO() {
+        return paymentApplyUnionDTO;
+    }
+
+    public void setPaymentApplyUnionDTO(String paymentApplyUnionDTO) {
+        this.paymentApplyUnionDTO = paymentApplyUnionDTO;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getPrintTimes() {
+        return printTimes;
+    }
+
+    public void setPrintTimes(String printTimes) {
+        this.printTimes = printTimes;
+    }
+
+    public String getProcInstId() {
+        return procInstId;
+    }
+
+    public void setProcInstId(String procInstId) {
+        this.procInstId = procInstId;
+    }
+
+    public String getProcStatus() {
+        return procStatus;
+    }
+
+    public void setProcStatus(String procStatus) {
+        this.procStatus = procStatus;
+    }
+
+    public String getProjectCode() {
+        return projectCode;
+    }
+
+    public void setProjectCode(String projectCode) {
+        this.projectCode = projectCode;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getRealRevAccount() {
+        return realRevAccount;
+    }
+
+    public void setRealRevAccount(String realRevAccount) {
+        this.realRevAccount = realRevAccount;
+    }
+
+    public String getRealTimeTag() {
+        return realTimeTag;
+    }
+
+    public void setRealTimeTag(String realTimeTag) {
+        this.realTimeTag = realTimeTag;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getRevAccountSeq() {
+        return revAccountSeq;
+    }
+
+    public void setRevAccountSeq(String revAccountSeq) {
+        this.revAccountSeq = revAccountSeq;
+    }
+
+    public String getRevBankArea() {
+        return revBankArea;
+    }
+
+    public void setRevBankArea(String revBankArea) {
+        this.revBankArea = revBankArea;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevCity() {
+        return revCity;
+    }
+
+    public void setRevCity(String revCity) {
+        this.revCity = revCity;
+    }
+
+    public String getRevProvince() {
+        return revProvince;
+    }
+
+    public void setRevProvince(String revProvince) {
+        this.revProvince = revProvince;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getUnitCode() {
+        return unitCode;
+    }
+
+    public void setUnitCode(String unitCode) {
+        this.unitCode = unitCode;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUrgentTag() {
+        return urgentTag;
+    }
+
+    public void setUrgentTag(String urgentTag) {
+        this.urgentTag = urgentTag;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java
new file mode 100644
index 00000000..9cd4e3cd
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/dto/res/TransactionDetailDTO.java
@@ -0,0 +1,207 @@
+package com.hzya.frame.cbs8.dto.res;
+
+/**
+ * @Description 境内账户交易明细
+ * @Author xiangerlin
+ * @Date 2023/12/29 16:40
+ **/
+public class TransactionDetailDTO{
+    private String accountNo;//银行账号
+    private String accountName;//银行名称
+    private String bankType;//银行类型
+    private String openBank;//开户行名称
+    private String bankTransactionDate;//交易日期
+    private String bankSerialNumber;//银行流水号
+    private String transactionSerialNumber;//交易流水号
+    private String currency;//币种
+    private String loanType;//借贷类型
+    private String incurredAmount;//发生额
+    private String accountBalance;//交易后余额
+    private String purpose;//用途
+    private String digest;//摘要
+    private String oppositeAccount;//对方账号
+    private String oppositeName;//对方户名
+    private String oppositeOpeningBank;//对方开户行
+    private String associatedCustomerNumber;//关联客户号
+    private String merchantNumber;//客商编号
+    private String merchantName;//客商名称
+    private String transactionCode;//交易代码
+    private String remark;//备注
+    private String erpSerialNumber;//erp业务参考号
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(String bankType) {
+        this.bankType = bankType;
+    }
+
+    public String getOpenBank() {
+        return openBank;
+    }
+
+    public void setOpenBank(String openBank) {
+        this.openBank = openBank;
+    }
+
+    public String getBankTransactionDate() {
+        return bankTransactionDate;
+    }
+
+    public void setBankTransactionDate(String bankTransactionDate) {
+        this.bankTransactionDate = bankTransactionDate;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getTransactionSerialNumber() {
+        return transactionSerialNumber;
+    }
+
+    public void setTransactionSerialNumber(String transactionSerialNumber) {
+        this.transactionSerialNumber = transactionSerialNumber;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getLoanType() {
+        return loanType;
+    }
+
+    public void setLoanType(String loanType) {
+        this.loanType = loanType;
+    }
+
+    public String getIncurredAmount() {
+        return incurredAmount;
+    }
+
+    public void setIncurredAmount(String incurredAmount) {
+        this.incurredAmount = incurredAmount;
+    }
+
+    public String getAccountBalance() {
+        return accountBalance;
+    }
+
+    public void setAccountBalance(String accountBalance) {
+        this.accountBalance = accountBalance;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    public String getOppositeAccount() {
+        return oppositeAccount;
+    }
+
+    public void setOppositeAccount(String oppositeAccount) {
+        this.oppositeAccount = oppositeAccount;
+    }
+
+    public String getOppositeName() {
+        return oppositeName;
+    }
+
+    public void setOppositeName(String oppositeName) {
+        this.oppositeName = oppositeName;
+    }
+
+    public String getOppositeOpeningBank() {
+        return oppositeOpeningBank;
+    }
+
+    public void setOppositeOpeningBank(String oppositeOpeningBank) {
+        this.oppositeOpeningBank = oppositeOpeningBank;
+    }
+
+    public String getAssociatedCustomerNumber() {
+        return associatedCustomerNumber;
+    }
+
+    public void setAssociatedCustomerNumber(String associatedCustomerNumber) {
+        this.associatedCustomerNumber = associatedCustomerNumber;
+    }
+
+    public String getMerchantNumber() {
+        return merchantNumber;
+    }
+
+    public void setMerchantNumber(String merchantNumber) {
+        this.merchantNumber = merchantNumber;
+    }
+
+    public String getMerchantName() {
+        return merchantName;
+    }
+
+    public void setMerchantName(String merchantName) {
+        this.merchantName = merchantName;
+    }
+
+    public String getTransactionCode() {
+        return transactionCode;
+    }
+
+    public void setTransactionCode(String transactionCode) {
+        this.transactionCode = transactionCode;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getErpSerialNumber() {
+        return erpSerialNumber;
+    }
+
+    public void setErpSerialNumber(String erpSerialNumber) {
+        this.erpSerialNumber = erpSerialNumber;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java
new file mode 100644
index 00000000..c98cfb5f
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/entity/PaymentEntity.java
@@ -0,0 +1,327 @@
+package com.hzya.frame.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:17
+ **/
+public class PaymentEntity extends BaseEntity {
+
+    private String oaId;//主表id
+    private String formsonId;//明细表id
+    private String payCompany;//付款公司
+    private String title;//流程标题
+    private String tableName;//表名称
+    private String billName;//单据名称
+    private String referenceNum;//业务参考号 唯一id
+    private String referenceNumNew;//重试的时候生成新的业务参考号
+    private String busType;//业务类型
+    private String payResultField;//支付结果字段
+    private String payDateField;//打款日期字段
+    private String applyCodeField;//支付申请单号字段
+    private String receiptFiled;//电子回单字段
+    private String summaryId;//summaryid
+    private String startDate;//单据日期
+    private String finishedflag;//流程状态
+    private String payDate;//打款日期
+    private String payResult;//支付结果
+    private String applyCode;//支付申请单号
+    private String payAccount;//付款账号
+    private String payBankName;//付款开户银行
+    private String amount;//金额
+    private String purpose;//支付用途
+    private String revAccount;//收款账号
+    private String revBankName;//收款开户行名称
+    private String revBankType;//收款银行类型
+    private String revAccountName;//收款账户名称
+    private String cnapsCode;//联行号
+    private String receipt;//电子回单
+    private String currency;//币种 数字
+    private String currencyName;//币种 中文
+    private String currencyCode;//币种编码
+    private String personalFlag;//公私标记
+    private String payType;//付款类别
+    private String payCompanyCode;//付款公司编码
+
+    public String getOaId() {
+        return oaId;
+    }
+
+    public void setOaId(String oaId) {
+        this.oaId = oaId;
+    }
+
+    public String getPayCompany() {
+        return payCompany;
+    }
+
+    public void setPayCompany(String payCompany) {
+        this.payCompany = payCompany;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getBillName() {
+        return billName;
+    }
+
+    public void setBillName(String billName) {
+        this.billName = billName;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getReferenceNumNew() {
+        return referenceNumNew;
+    }
+
+    public void setReferenceNumNew(String referenceNumNew) {
+        this.referenceNumNew = referenceNumNew;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getPayResultField() {
+        return payResultField;
+    }
+
+    public void setPayResultField(String payResultField) {
+        this.payResultField = payResultField;
+    }
+
+    public String getPayDateField() {
+        return payDateField;
+    }
+
+    public void setPayDateField(String payDateField) {
+        this.payDateField = payDateField;
+    }
+
+    public String getReceiptFiled() {
+        return receiptFiled;
+    }
+
+    public void setReceiptFiled(String receiptFiled) {
+        this.receiptFiled = receiptFiled;
+    }
+
+    public String getSummaryId() {
+        return summaryId;
+    }
+
+    public void setSummaryId(String summaryId) {
+        this.summaryId = summaryId;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getFinishedflag() {
+        return finishedflag;
+    }
+
+    public void setFinishedflag(String finishedflag) {
+        this.finishedflag = finishedflag;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPayResult() {
+        return payResult;
+    }
+
+    public void setPayResult(String payResult) {
+        this.payResult = payResult;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getReceipt() {
+        return receipt;
+    }
+
+    public void setReceipt(String receipt) {
+        this.receipt = receipt;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getCurrencyName() {
+        return currencyName;
+    }
+
+    public void setCurrencyName(String currencyName) {
+        this.currencyName = currencyName;
+    }
+
+    public String getCurrencyCode() {
+        return currencyCode;
+    }
+
+    public void setCurrencyCode(String currencyCode) {
+        this.currencyCode = currencyCode;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getPayCompanyCode() {
+        return payCompanyCode;
+    }
+
+    public void setPayCompanyCode(String payCompanyCode) {
+        this.payCompanyCode = payCompanyCode;
+    }
+
+    public String getFormsonId() {
+        return formsonId;
+    }
+
+    public void setFormsonId(String formsonId) {
+        this.formsonId = formsonId;
+    }
+
+    public String getApplyCodeField() {
+        return applyCodeField;
+    }
+
+    public void setApplyCodeField(String applyCodeField) {
+        this.applyCodeField = applyCodeField;
+    }
+
+    public String getApplyCode() {
+        return applyCode;
+    }
+
+    public void setApplyCode(String applyCode) {
+        this.applyCode = applyCode;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java
new file mode 100644
index 00000000..5f47a625
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8ExtService.java
@@ -0,0 +1,60 @@
+package com.hzya.frame.cbs8.service;
+
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:20
+ **/
+public interface ICbs8ExtService {
+
+    /**
+     * 支付经办
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApply(SysExtensionApiEntity entity);
+
+    /**
+     * 代发代扣 支付申请
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity agentPayApply(SysExtensionApiEntity entity);
+
+    /**
+     * 交易结果查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payResult(SysExtensionApiEntity entity);
+
+    /**
+     * 交易明细查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity transactionDetailQuery(SysExtensionApiEntity entity);
+    /**
+     * 代发代扣
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApplyAgent(SysExtensionApiEntity entity);
+
+    /**
+     * 代发代扣结果查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity payApplyAgentResult(SysExtensionApiEntity entity);
+
+    /**
+     * 电子回单查询
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity elecQuery(SysExtensionApiEntity entity);
+
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java
new file mode 100644
index 00000000..670cd66f
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/ICbs8Service.java
@@ -0,0 +1,66 @@
+package com.hzya.frame.cbs8.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.dto.res.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+
+import java.util.List;
+
+/**
+ * @Description cbs8接口
+ * @Author xiangerlin
+ * @Date 2024/6/6 15:30
+ **/
+public interface ICbs8Service {
+
+    /**
+     * 支付申请
+     * @param payJsonStr
+     */
+    PayResponseDTO payApply(String payJsonStr);
+
+    /**
+     * 通过业务参考号查询交易结果 3.2.6
+     * @param resultRequestDTO
+     * @return
+     * @throws Exception
+     */
+    List<PayResultResDTO> queryPayResult(PayResultRequestDTO resultRequestDTO);
+
+    /**
+     * 查询电子回单
+     * @param elecRequestDTO
+     *  startDate 开始日期 - 必填
+     *  endDate 结束日期 -必填
+     *  billStatus 回单状态 1-已取回 0-未取回 ,只有已取回的才能下载
+     *  settleBusinessReferenceCode 业务参考号
+     * @return List<ElecResponseDTO>
+     *     bucketFileUrl 回单下载地址
+     *     billFileName 回单文件名称
+     *     settleBusinessReferenceCode 业务参考号
+     */
+    List<ElecResponseDTO> queryElecBill(ElecRequestDTO elecRequestDTO);
+
+    /**
+     * 查询交易明细
+     * @param transactionDetailReqDTO
+     * @return
+     */
+    CbsResDataDTO  queryTransactionDetail(TransactionDetailReqDTO transactionDetailReqDTO);
+
+    /**
+     * 代发代扣 支付申请
+     * @param paymentApplySubmitReqDTO
+     * @param paymentApplyAgentList
+     */
+    PayResponseDTO agentPayApply(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO, List<PaymentApplyAgentDTO> paymentApplyAgentList);
+
+    /**
+     * 代发代扣 详情查询
+     * @param agentPayResultRequestDTO
+     * @return
+     */
+    AgentPayResultResDTO agentPayResult(AgentPayResultRequestDTO agentPayResultRequestDTO);
+
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java
new file mode 100644
index 00000000..68527318
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ExtServiceImpl.java
@@ -0,0 +1,216 @@
+package com.hzya.frame.cbs8.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+import com.hzya.frame.cbs8.service.ICbs8ExtService;
+import com.hzya.frame.cbs8.util.CBSUtil;
+import com.hzya.frame.cbs8.util.CbsAccessToken;
+import com.hzya.frame.stringutil.StringUtil;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.http.protocol.HTTP;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import java.util.*;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:20
+ **/
+
+@Service(value = "cbs8Ext")
+public class Cbs8ExtServiceImpl implements ICbs8ExtService {
+
+    Logger logger = LoggerFactory.getLogger(getClass());
+    /**
+     * 支付经办
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApply(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            PaymentEntity paymentEntity = JSONObject.parseObject(bodys,PaymentEntity.class);
+            if (null != paymentEntity){
+                PayRequestDTO payRequestDTO = new PayRequestDTO();
+                String ferenceNum = Convert.toStr(paymentEntity.getReferenceNumNew(),paymentEntity.getReferenceNum());
+                payRequestDTO.setReferenceNum(ferenceNum);
+                payRequestDTO.setBusType(paymentEntity.getBusType());
+                payRequestDTO.setAmount(paymentEntity.getAmount());
+                payRequestDTO.setCurrency(paymentEntity.getCurrency());
+                payRequestDTO.setPayAccount(StringUtil.replaceBlank(paymentEntity.getPayAccount()));
+                payRequestDTO.setRevAccount(StringUtil.replaceBlank(paymentEntity.getRevAccount()));
+                payRequestDTO.setRevAccountName(StringUtil.replaceBlank(paymentEntity.getRevAccountName()));
+                payRequestDTO.setRevBankType(StringUtil.replaceBlank((paymentEntity.getRevBankType())));
+                payRequestDTO.setRevBankName(StringUtil.replaceBlank(paymentEntity.getRevBankName()));
+                payRequestDTO.setCnapsCode(StringUtil.replaceBlank((paymentEntity.getCnapsCode())));
+                payRequestDTO.setPurpose(paymentEntity.getPurpose());
+                payRequestDTO.setErpExtend1(paymentEntity.getPayType());
+                //集中支付模式
+                if (CBSUtil.CENTRALIZED_PAYMENT_TYPE.equals(payRequestDTO.getBusType())){
+                    payRequestDTO.setBusiStep("1");
+                    payRequestDTO.setApplyUnitCode(paymentEntity.getPayCompanyCode());
+                    payRequestDTO.setPayAccount(null);
+                }
+                List<PayRequestDTO> list = Arrays.asList(payRequestDTO);
+                String requestData = JSONObject.toJSONString(list);
+                //加密 签名
+                encrypAndsign(entity,requestData);
+            }
+        }
+        return entity;
+    }
+
+    /**
+     * 代发代扣 支付申请
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity agentPayApply(SysExtensionApiEntity entity) {
+        String boyds = entity.getBodys();
+        if (StrUtil.isNotEmpty(boyds)){
+            AgentPayRequestDTO agentPayRequest = JSONObject.parseObject(boyds,AgentPayRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayRequest);
+            //加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 交易结果查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payResult(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            PayResultRequestDTO payResultRequest = JSONObject.parseObject(bodys,PayResultRequestDTO.class);
+            if (null != payResultRequest && StrUtil.isNotEmpty(payResultRequest.getReferenceNum())){
+                String requestData = JSONObject.toJSONString(payResultRequest);
+                //加密 签名
+               encrypAndsign(entity,requestData);
+            }else {
+                throw new BaseSystemException("业务参考号不能为空!!!!");
+            }
+        }
+        return entity;
+    }
+
+    /**
+     * 交易明细查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity transactionDetailQuery(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            TransactionDetailReqDTO transactionDetailReqDTO = JSONObject.parseObject(bodys,TransactionDetailReqDTO.class);
+            String requestData = JSONObject.toJSONString(transactionDetailReqDTO);
+            ////加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 代发代扣
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApplyAgent(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            AgentPayRequestDTO agentPayRequest = JSONObject.parseObject(bodys,AgentPayRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayRequest);
+            ////加密签名
+            encrypAndsign(entity, requestData);
+        }
+        return entity;
+    }
+
+
+
+    /**
+     * 代发代扣结果查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity payApplyAgentResult(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            AgentPayResultRequestDTO agentPayResultRequestDTO = JSONObject.parseObject(bodys,AgentPayResultRequestDTO.class);
+            String requestData = JSONObject.toJSONString(agentPayResultRequestDTO);
+            encrypAndsign(entity,requestData);
+        }
+        return entity;
+    }
+
+    /**
+     * 电子回单查询
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity elecQuery(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            ElecRequestDTO elecRequestDTO = JSONObject.parseObject(bodys,ElecRequestDTO.class);
+            String requestData = JSONObject.toJSONString(elecRequestDTO);
+            //加密 签名
+            encrypAndsign(entity,requestData);
+        }
+        return entity;
+    }
+
+
+    /**
+     * 请求头
+     * @param sign
+     * @param timestamp
+     * @return
+     */
+    private Map<String,String> headersValueOf(String sign, long timestamp){
+        Map<String,String> header = new HashMap();
+        header.put(CBSUtil.SIGN_HEADER_NAME,sign);
+        header.put(CBSUtil.TIMESTAMP_HEADER,Long.toString(timestamp));
+        header.put(HTTP.CONTENT_TYPE,CBSUtil.TARGET_CONTENT_TYPE);
+        header.put(CBSUtil.AUTHORIZATION,CBSUtil.BEARER+ CbsAccessToken.getToken());
+        return header;
+    }
+
+    /**
+     * 加密 签名
+     * @param entity 接口转发参数对象
+     * @param requestData 请求参数json字符串
+     */
+    private void encrypAndsign(SysExtensionApiEntity entity, String requestData) {
+        //签名
+        long timestamp = System.currentTimeMillis();
+        logger.info("CBS请求参数明文:{}",requestData);
+        String sign = CBSUtil.sign(requestData,timestamp);
+        //加密
+        byte[] encryptedData = CBSUtil.encrypt(requestData);
+        Map<String,String> header = headersValueOf(sign,timestamp);
+        entity.setByteBodys(encryptedData);
+        entity.setHeaders(header);
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java
new file mode 100644
index 00000000..f70359cc
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/service/impl/Cbs8ServiceImpl.java
@@ -0,0 +1,271 @@
+package com.hzya.frame.cbs8.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.map.MapBuilder;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.hzya.frame.cbs8.dto.req.*;
+import com.hzya.frame.cbs8.dto.res.*;
+import com.hzya.frame.cbs8.entity.PaymentEntity;
+import com.hzya.frame.cbs8.service.ICbs8Service;
+import com.hzya.frame.cbs8.util.CBSUtil;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description cbs8接口
+ * @Author xiangerlin
+ * @Date 2024/6/7 14:44
+ **/
+@Service
+public class Cbs8ServiceImpl implements ICbs8Service {
+    Logger logger = LoggerFactory.getLogger(getClass());
+    @Value("${zt.url}")
+    private String zt_url;
+    @Override
+    public PayResponseDTO payApply(String payJsonStr) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260001")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(payJsonStr).timeout(60000).execute().body();
+        //解密响应报文
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+                PayResponseDTO payResponseDTO = JSON.toJavaObject(o, PayResponseDTO.class);
+                return payResponseDTO;
+            }
+        }
+        return new PayResponseDTO();
+    }
+
+    /**
+     * 通过业务参考号查询交易结果 3.2.6
+     *
+     * @param resultRequestDTO
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<PayResultResDTO> queryPayResult(PayResultRequestDTO resultRequestDTO) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260002")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(JSONObject.toJSONString(resultRequestDTO)).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+        if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            List<PayResultResDTO> payResultList = CBSUtil.convertJsonArrayToList(dataList, PayResultResDTO.class);
+            return payResultList;
+        }
+        return new ArrayList<PayResultResDTO>();
+    }
+
+    /**
+     * 查询电子回单
+     *
+     * @param elecRequestDTO startDate 开始日期 - 必填
+     *                       endDate 结束日期 -必填
+     *                       billStatus 回单状态 1-已取回 0-未取回 ,只有已取回的才能下载
+     *                       settleBusinessReferenceCode 业务参考号
+     * @return List<ElecResponseDTO>
+     * bucketFileUrl 回单下载地址
+     * billFileName 回单文件名称
+     * settleBusinessReferenceCode 业务参考号
+     */
+    @Override
+    public List<ElecResponseDTO> queryElecBill(ElecRequestDTO elecRequestDTO) {
+        if (null == elecRequestDTO){
+            elecRequestDTO = new ElecRequestDTO();
+        }
+        if (StrUtil.isEmpty(elecRequestDTO.getStartDate())){
+            elecRequestDTO.setStartDate(DateUtil.today());
+        }
+        if (StrUtil.isEmpty(elecRequestDTO.getEndDate())){
+            elecRequestDTO.setEndDate(DateUtil.today());
+        }
+        String params = JSON.toJSONString(elecRequestDTO, SerializerFeature.WRITE_MAP_NULL_FEATURES, SerializerFeature.QuoteFieldNames);
+        logger.info("电子回单查询请求参数为:{}", params);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260005")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            if (null != cbsResponseDTO){
+                if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+                    List<JSONObject> dataList = cbsResponseDTO.getData();
+                    if (CollectionUtils.isNotEmpty(dataList)){
+                        JSONObject jsonObject = dataList.get(0);
+                        CbsResDataDTO dataDTO = JSON.toJavaObject(jsonObject, CbsResDataDTO.class);
+                        List<ElecResponseDTO> elecResponseDTOList = CBSUtil.convertJsonArrayToList(dataDTO.getList(), ElecResponseDTO.class);
+                        return elecResponseDTOList;
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 查询交易明细
+     *
+     * @param transactionDetailReqDTO
+     * @return
+     */
+    @Override
+    public CbsResDataDTO  queryTransactionDetail(TransactionDetailReqDTO transactionDetailReqDTO) {
+        //页码
+        int currentPage = transactionDetailReqDTO.getCurrentPage();
+        //每页条数
+        int pageSize = transactionDetailReqDTO.getPageSize();
+        if (currentPage == 0){
+            currentPage = CBSUtil.DEFAULT_CURRENT_PAGE;
+            transactionDetailReqDTO.setCurrentPage(currentPage);//页码
+        }
+        if (pageSize == 0){
+            pageSize = CBSUtil.DEFAULT_PAGE_SIZE;
+            transactionDetailReqDTO.setPageSize(pageSize);
+        }
+        if (StrUtil.isNotEmpty(transactionDetailReqDTO.getStartDate())){
+            transactionDetailReqDTO.setStartDate(DateUtil.today());
+        }
+        if (StrUtil.isNotEmpty(transactionDetailReqDTO.getEndDate())){
+            transactionDetailReqDTO.setEndDate(DateUtil.today());
+        }
+        String params = JSON.toJSONString(transactionDetailReqDTO);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260006")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            if (null != cbsResponseDTO){
+                if (CollectionUtils.isNotEmpty(cbsResponseDTO.getData())){
+                    List<JSONObject> list = cbsResponseDTO.getData();
+                    if (CollectionUtils.isNotEmpty(list)){
+                        JSONObject jsonObject = list.get(0);
+                        CbsResDataDTO dataDTO = JSON.toJavaObject(jsonObject, CbsResDataDTO.class);
+                        return dataDTO;
+                    }
+                }
+            }
+        }
+        return new CbsResDataDTO();
+    }
+
+    /**
+     * 代发代扣 支付申请
+     * @param paymentApplySubmitReqDTO
+     * @param paymentApplyAgentList
+     */
+    @Override
+    public PayResponseDTO agentPayApply(PaymentApplySubmitReqDTO paymentApplySubmitReqDTO, List<PaymentApplyAgentDTO> paymentApplyAgentList) {
+        AgentPayRequestDTO param = new AgentPayRequestDTO();
+        param.setPaymentApplySubmitReqDTO(paymentApplySubmitReqDTO);
+        param.setPaymentApplyAgentDTO(paymentApplyAgentList);
+        String params = JSON.toJSONString(param);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260003")
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+               PayResponseDTO payResponseDTO = JSON.toJavaObject(o, PayResponseDTO.class);
+                return payResponseDTO;
+            }
+        }
+        return new PayResponseDTO();
+    }
+
+    /**
+     * 代发代扣 详情查询
+     *
+     * @param agentPayResultRequestDTO
+     * @return
+     */
+    @Override
+    public AgentPayResultResDTO agentPayResult(AgentPayResultRequestDTO agentPayResultRequestDTO) {
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000260004")//数智办公
+                .put("publicKey","ZJYA1vBeY1ai53iNmbAEsw6DImjkXGBkdMailxcBdliFC85Ce7eDIk+3zDUT+v578prj")//数智财资
+                .put("secretKey","7Gp6OjHrIaQ6R3tXGPrI4morjQyWL+qu4JJschQnkBRtv26VDgGFVYKOy5kMZfd/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800026")
+                .build();
+        String params = JSON.toJSONString(agentPayResultRequestDTO);
+        String body = HttpRequest.post(zt_url).addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        //解密报文
+        String result = decryptResBody(body);
+        if (StrUtil.isNotEmpty(result)){
+            CbsResponseDTO cbsResponseDTO = JSONObject.parseObject(result, CbsResponseDTO.class);
+            List<JSONObject> dataList = cbsResponseDTO.getData();
+            if (CollectionUtils.isNotEmpty(dataList)){
+                JSONObject o = dataList.get(0);
+                AgentPayResultResDTO agentPayResultResDTO = JSON.toJavaObject(o, AgentPayResultResDTO.class);
+                return agentPayResultResDTO;
+            }
+        }
+        return new AgentPayResultResDTO();
+    }
+
+    /**
+     * 解密响应报文
+     * @param body
+     * @return
+     */
+    private String decryptResBody(String body){
+        if (StrUtil.isNotEmpty(body)){
+            JsonResultEntity resultEntity = JSONObject.parseObject(body,JsonResultEntity.class);
+            String bodyBase64 = String.valueOf(resultEntity.getAttribute());
+            byte[] bodyBytes = Base64.getDecoder().decode(bodyBase64);
+            //这里验证一下,如果系统异常 返回的报文没加密
+            String test = new String(bodyBytes);
+            if (JSONUtil.isTypeJSON(test)){
+                return test;
+            }
+            //解密报文
+            String result = CBSUtil.decrypt(bodyBytes);
+            logger.info("银行响应参数:{}",result);
+            return result;
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java
new file mode 100644
index 00000000..602a9124
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CBSUtil.java
@@ -0,0 +1,187 @@
+package com.hzya.frame.cbs8.util;
+
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/7 15:38
+ **/
+@Component
+public class CBSUtil {
+    /**
+     * 集中支付模式
+     */
+    public static final String CENTRALIZED_PAYMENT_TYPE = "401";
+    /**
+     * 分页查询 最大条数
+     */
+    public static final int MAX_PAGE_SIZE = 1000;
+    /**
+     * 默认分页查询条数
+     */
+    public static final int DEFAULT_PAGE_SIZE = 100;
+    /**
+     * 默认页码
+     */
+    public static final int DEFAULT_CURRENT_PAGE = 1;
+    static Logger logger = LogManager.getLogger(CBSUtil.class);
+
+    /**
+     * 请求参数格式
+     */
+    public static String TARGET_CONTENT_TYPE = "application/json";
+
+    /**
+     * 签名请求头参数名
+     */
+   public static String SIGN_HEADER_NAME = "X-MBCLOUD-API-SIGN";
+    /**
+     * 时间戳请求头参数名
+     */
+    public static String TIMESTAMP_HEADER = "X-MBCLOUD-TIMESTAMP";
+
+    public static String ENCRYPTION_ENABLED_HEADER_NAME = "X-MBCLOUD-ENCRYPTION-ENABLED";
+
+    public static String X_MBCLOUD_COMPRESS = "X-Mbcloud-Compress";
+
+    /**
+     * 请求头token参数名
+     */
+    public static String AUTHORIZATION = "Authorization";
+
+    /**
+     *token前缀
+     */
+    public static String BEARER = "Bearer ";
+
+    /**
+     * 财资管理云公钥(平台公钥)
+     */
+    public static String bodyEncryptionKey;
+
+    /**
+     * 企业私钥(加密)
+     */
+    public static String signEncryptionPrivateKey;
+
+    /**
+     * 企业私钥(解密)
+     */
+    public static String bodyDecryptionKey;
+
+    /**
+     * 财资管理云公钥(平台公钥)
+     */
+    @Value("${cbs8.cbs_public_key:}")
+    public  void setBodyEncryptionKey(String bodyEncryptionKey) {
+        CBSUtil.bodyEncryptionKey = bodyEncryptionKey;
+    }
+    /**
+     * 企业私钥(解密)
+     */
+    @Value("${cbs8.ya_private_key:}")
+    public  void setSignEncryptionPrivateKey(String signEncryptionPrivateKey) {
+        CBSUtil.signEncryptionPrivateKey = signEncryptionPrivateKey;
+    }
+    /**
+     * 企业私钥(解密)
+     */
+    @Value("${cbs8.ya_private_key:}")
+    public  void setBodyDecryptionKey(String bodyDecryptionKey) {
+        CBSUtil.bodyDecryptionKey = bodyDecryptionKey;
+    }
+
+    //将json数组转为list
+    public static <T> List<T> convertJsonArrayToList(List<JSONObject> list, Class<T> clazz) {
+        String jsonArray = JSON.toJSONString(list);
+        List<T> result = JSON.parseObject(jsonArray, new TypeReference<List<T>>(clazz) {});
+        return result;
+    }
+
+    /**
+     * 将时间戳转换成日期字符串
+     * @param timestamp
+     * @return
+     */
+    public static String convertTimestampToString(String timestamp) {
+        if (StrUtil.isNotEmpty(timestamp) && NumberUtil.isNumber(timestamp)){
+            // 创建SimpleDateFormat对象,指定日期时间格式
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            // 将时间戳转换为Date对象
+            Date date = new Date(Long.valueOf(timestamp));
+
+            // 使用SimpleDateFormat格式化Date对象,得到字符串表示
+            return sdf.format(date);
+        }
+        return null;
+    }
+
+    /**
+     * 签名
+     * @param requestData
+     * @return
+     */
+    public static String sign(String requestData){
+        long timestamp = System.currentTimeMillis();
+        return sign(requestData,timestamp);
+    }
+
+    /**
+     * 签名
+     * @param requestData
+     * @param timestamp
+     * @return
+     */
+    public static String sign(String requestData,long timestamp){
+
+        // 请求数据拼接:  报文体+时间戳
+        byte[] requestDataBytes = requestData.getBytes(StandardCharsets.UTF_8);
+        byte[] timestampBytes = ("&timestamp=" + timestamp).getBytes(StandardCharsets.UTF_8);
+        byte[] newBytes = new byte[requestDataBytes.length + timestampBytes.length];
+        System.arraycopy(requestDataBytes, 0, newBytes, 0, requestDataBytes.length);
+        System.arraycopy(timestampBytes, 0, newBytes, requestDataBytes.length, timestampBytes.length);
+
+        // 生成签名
+        byte[] signature = SM2Util.sign(signEncryptionPrivateKey, newBytes);
+        String sign = Base64.encodeBase64String(SM2Util.encodeDERSignature(signature));
+        logger.info("签名:{}", sign);
+        return sign;
+    }
+
+    /**
+     * 加密
+     * @param requestData
+     * @return
+     */
+    public static byte[] encrypt(String requestData){
+        byte[] encrypt = SM2Util.encrypt(bodyEncryptionKey, requestData.getBytes(StandardCharsets.UTF_8));
+        return encrypt;
+    }
+
+    public static String decrypt(byte[] cipherData){
+        try {
+            byte[] decrypt = SM2Util.decrypt(bodyDecryptionKey, cipherData);
+            String text = new String(decrypt);
+            return text;
+        }catch (Exception e){
+            logger.error("解密失败",e);
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java
new file mode 100644
index 00000000..341af450
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CbsAccessToken.java
@@ -0,0 +1,140 @@
+package com.hzya.frame.cbs8.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.web.action.ApplicationContextUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.relational.core.sql.In;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description cbs token
+ * @Author xiangerlin
+ * @Date 2024/6/7 15:56
+ **/
+@Component
+public class CbsAccessToken {
+
+    private static final Logger logger = LoggerFactory.getLogger(CbsAccessToken.class);
+    @Value("${cbs8.appId:}")
+    private  String app_id;
+    @Value("${cbs8.appSecret:}")
+    private  String app_secret;
+    @Value("${cbs8.url:}")
+    private  String app_url;
+
+    private static String appId;
+    private static String appSecret;
+    private static String url;
+    @PostConstruct
+    public void init() {
+        appId = app_id;
+        appSecret = app_secret;
+        url = app_url;
+    }
+    //刷新token用
+    private static final String BEARER = "Bearer ";
+    /**
+     * 过期时间
+     */
+    private Long expiryTime ;
+    private String token;
+
+    private CbsAccessToken(){
+
+    }
+    private static CbsAccessToken cbsAccessToken = new CbsAccessToken();
+
+
+    public static CbsAccessToken getInstance() {
+        if (null == cbsAccessToken.token){
+            initToken();
+        }else {
+            //判断token有没有过期
+            if (System.currentTimeMillis() >= cbsAccessToken.expiryTime){
+                initToken();
+            }else {
+                refreshToken();
+            }
+        }
+        return cbsAccessToken;
+    }
+
+    public static String getToken(){
+        return getInstance().token;
+    }
+    /**
+     * 获取token
+     */
+    private static void initToken(){
+        CbsAccessToken ct = (CbsAccessToken) ApplicationContextUtil.getBeanByName("cbsAccessToken");
+        logger.info("开始获取cbstoken");
+        Map<String,String> param = new HashMap<>();
+        param.put("app_id",ct.appId);
+        param.put("app_secret",ct.appSecret);
+        param.put("grant_type","client_credentials");
+        String res = HttpRequest.post(ct.url+"/openapi/app/v1/app/token").body(JSONObject.toJSONString(param)).execute().body();
+        logger.info("获取cbstoken结果",res);
+        if (StrUtil.isNotEmpty(res) && JSONUtil.isTypeJSON(res)){
+            JSONObject tokenObject =  JSONObject.parseObject(res);
+            String code = tokenObject.getString("code");//0表示成功
+            if ("0".equals(code)){
+                JSONObject dataObj = tokenObject.getJSONObject("data");
+                if (null != dataObj){
+                    String token = dataObj.getString("token");
+                    //过期时间 单位是秒 30分钟有效
+                    Integer expires = dataObj.getInteger("expires");
+                    cbsAccessToken.token = token;
+                    //提前5分钟让token失效 所以这里设置成过期时间为当前时间+25分钟
+                    cbsAccessToken.expiryTime = System.currentTimeMillis()+1000*60*25L;
+                }
+            }
+        }
+    }
+
+    /**
+     * 刷新token
+     */
+    private static void refreshToken(){
+        CbsAccessToken ct = (CbsAccessToken) ApplicationContextUtil.getBeanByName("cbsAccessToken");
+        //token不为空,并且没过期 刷新token
+        if (null != cbsAccessToken.token && System.currentTimeMillis() < cbsAccessToken.expiryTime ){
+            String res = HttpRequest.get(ct.url + "/openapi/app/v1/app/refresh-token").header("Authorization", BEARER + cbsAccessToken.token).execute().body();
+            logger.info("刷新cbstoken结果",res);
+            if (StrUtil.isNotEmpty(res) && JSONUtil.isTypeJSON(res)){
+                JSONObject tokenObject =  JSONObject.parseObject(res);
+                String code = tokenObject.getString("code");//0表示成功
+                if ("0".equals(code)){
+                    JSONObject dataObj = tokenObject.getJSONObject("data");
+                    if (null != dataObj){
+                        //续期的token
+                        String token = dataObj.getString("token");
+                        //新token过期时间 单位是秒 30分钟有效
+                        Integer expires = dataObj.getInteger("expires");
+                        cbsAccessToken.token = token;
+                        //提前5分钟让token失效 所以这里设置成过期时间为当前时间+25分钟
+                        cbsAccessToken.expiryTime = System.currentTimeMillis()+1000*60*25L;
+                    }
+                }else {
+                    initToken();
+                }
+            }
+        }else {
+            initToken();
+        }
+    }
+
+    public static void main(String[] args) {
+        System.out.println("第1次取token:"+getToken());
+        System.out.println("第2次取token:"+getToken());
+        System.out.println("第3次取token:"+getToken());
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java
new file mode 100644
index 00000000..abde767c
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/CurrencyEnum.java
@@ -0,0 +1,137 @@
+package com.hzya.frame.cbs8.util;
+
+/**
+ * @Description 币种枚举表
+ * @Author xiangerlin
+ * @Date 2024/6/25 10:20
+ **/
+public enum CurrencyEnum {
+
+    CNY("10", "人民币", "CNY", "¥"),
+    ASF("11", "记帐瑞士法朗", "ASF", "ASF"),
+    BRL("12", "巴西里亚尔", "BRL", "BRL"),
+    IDR("13", "印度尼西亚卢比", "IDR", "rps"),
+    INR("14", "印度卢比", "INR", "rs"),
+    IRR("15", "伊朗里亚尔", "IRR", "ri"),
+    JOD("16", "约旦第纳尔", "JOD", "jdr"),
+    KRW("17", "韩国圆", "KRW", "$"),
+    KWD("18", "科威特第纳尔", "KWD", "kd"),
+    MOP("19", "澳门元", "MOP", "pat"),
+    MXN("20", "墨西哥比索", "MXN", "mex$"),
+    HKD("21", "港币", "HKD", "HK$"),
+    MYR("22", "马来西亚林吉特", "MYR", "m$"),
+    NPR("23", "尼泊尔卢比", "NPR", "nrs"),
+    NZD("24", "新西兰元", "NZD", "$nz"),
+    PHP("25", "菲律宾比索", "PHP", "phil"),
+    PKR("26", "巴基斯坦卢比", "PKR", "prs"),
+    RUB("27", "俄罗斯卢布", "RUB", "RUB"),
+    AUD("29", "澳元", "AUD", "A$"),
+    THB("30", "泰国铢", "THB", "bt"),
+    TWD("31", "台湾元", "TWD", "$"),
+    USD("32", "美元", "USD", "US$"),
+    TZS("33", "坦桑尼亚先令", "TZS", "tsh"),
+    EUR("35", "欧元", "EUR", "EUR"),
+    CAD("39", "加拿大元", "CAD", "CAN$"),
+    GBP("43", "英镑", "GBP", "£"),
+    JPY("65", "日元", "JPY", "J"),
+    SGD("69", "新加坡元", "SGD", "S$"),
+    NOK("83", "挪威克朗", "NOK", "nkr"),
+    DKK("85", "丹麦克朗", "DKK", "DKr"),
+    AED("86", "阿联酋迪拉姆", "AED", "AED"),
+    CHF("87", "瑞士法朗", "CHF", "SF"),
+    SEK("88", "瑞典克朗", "SEK", "SKR"),
+    ZAR("89", "南非兰特", "ZAR", "ZAR"),
+    AOA("71", "安哥拉宽扎", "AOA", "kz"),
+    DZD("72", "阿尔及利亚第纳尔", "DZD", "AD."),
+    GHS("73", "塞地", "GHS", "¢"),
+    KES("74", "肯尼亚先令", "KES", "K.Sh"),
+    NGN("75", "奈拉", "NGN", "N"),
+    QAR("76", "卡塔尔里亚尔", "QAR", "QR."),
+    VND("77", "越南盾", "VND", "D."),
+    PES("78", "新索尔", "PES", "S/."),
+    PLZ("79", "兹罗提", "PLZ", "ZL."),
+    TRY("80", "土耳其镑", "TRY", "£T."),
+    SAR("81", "亚尔", "SAR", "SAR."),
+    KZT("82", "哈萨克斯坦腾格", "KZT", "〒"),
+    CDF("90", "刚果法郎", "CDF", "FC"),
+    LYD("91", "利比亚第纳尔", "LYD", "LD."),
+    EGP("92", "埃及镑", "EGP", "£E."),
+    VEF("93", "委内瑞拉玻利瓦尔", "VEF", "B"),
+    OMR("94", "阿曼里尔", "OMR", "RO."),
+    PLN("95", "波兰兹罗提", "PLN", "Zl"),
+    HUF("96", "匈牙利福林", "HUF", "Ft"),
+    BDT("97", "孟加拉塔卡", "BDT", "TK"),
+    LAK("98", "老挝基普", "LAK", "K"),
+    ZMW("37", "赞比亚克瓦查", "ZMW", "ZM"),
+    ETB("28", "埃塞俄比亚比尔", "ETB", "Br"),
+    PRK("34", "巴基斯坦卢比", "PRK", "Rs."),
+    BND("36", "文莱元", "BND", "B$"),
+    XOF("38", "西非法郎", "XOF", "XOF"),
+    PGK("41", "巴布亚新几内亚基纳", "PGK", "PGK"),
+    LKR("40", "斯里兰卡卢比", "LKR", "LK"),
+    GNF("46", "几内亚法郎", "GNF", "GNF"),
+    TND("42", "突尼斯第纳尔", "TND", "TN"),
+    UZS("44", "乌兹别克斯坦苏姆", "UZS", "UZ"),
+    XAF("45", "中非法郎", "XAF", "XA"),
+    SDG("49", "苏丹磅", "SDG", "£S"),
+    GE("47", "格鲁吉亚拉里", "GEL", "GE"),
+    MN("48", "蒙图", "MNT", "MN"),
+    TJS("50", "塔吉克索莫尼", "TJS", "TJS"),
+    UGX("51", "乌干达先令", "UGX", "UGX"),
+    CLP("52", "智利比索", "CLP", "CLP"),
+    MMK("53", "缅元", "MMK", "MMK"),
+    KHR("54", "柬埔寨瑞尔", "KHR", "KHR"),
+    BHD("55", "巴林第纳尔", "BHD", "BHD"),
+    RSD("56", "塞尔维亚第纳尔", "RSD", "RSD"),
+    KGS("57", "吉尔吉斯斯坦索姆", "KGS", "KGS"),
+    COP("58", "哥伦比亚比索", "COP", "COP"),
+    GYD("59", "圭亚那元", "GYD", "GYD"),
+    ARS("60", "阿根廷比索", "ARS", "ARS"),
+    CZK("61", "捷克克朗", "CZK", "CZK"),
+    PEN("62", "秘鲁索尔", "PEN", "PEN"),
+    RON("63", "罗马尼亚列伊", "RON", "RON"),
+    UAH("64", "乌克兰格里夫纳", "UAH", "UAH"),
+    ILS("66", "以色列新谢克尔", "ILS", "ILS"),
+    IQD("67", "伊拉克第纳尔", "IQD", "IQD"),
+    ERN("68", "厄立特里亚纳克法", "ERN", "ERN"),
+    CNH("84", "离岸人民币", "CNH", "CNH"),
+    MKD("99", "马其顿第纳尔", "MKD", "MKD");
+
+    private final String code;
+    private final String chineseName;
+    private final String internationalCode;
+    private final String symbol;
+
+    CurrencyEnum(String code, String chineseName, String internationalCode, String symbol) {
+        this.code = code;
+        this.chineseName = chineseName;
+        this.internationalCode = internationalCode;
+        this.symbol = symbol;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getChineseName() {
+        return chineseName;
+    }
+
+    public String getInternationalCode() {
+        return internationalCode;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    //根据币种code获取币种中文名
+    public static String getChineseNameByCode(String code) {
+        for (CurrencyEnum currency : values()) {
+            if (currency.code.equals(code)) {
+                return currency.chineseName;
+            }
+        }
+        return null; // 或者抛出异常,表示找不到对应的币种
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java
new file mode 100644
index 00000000..0ab494c7
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/PayState.java
@@ -0,0 +1,73 @@
+package com.hzya.frame.cbs8.util;
+
+/**
+ * @Author:hecan
+ * @Description:支付类型(支付状态)
+ * @params:
+ * @return:
+ * @Date: 2023/3/14 15:05
+ */
+public enum PayState {
+    a("a","待提交直联"),
+    b("b","已提交直联"),
+    c("c","银行已受理"),
+    d("d","银行未受理"),
+    e("e","可疑"),
+    f("f","待人工确认"),
+    g("g","支付成功"),
+    h("h","支付失败"),
+    i("i","部分成功"),
+    j("j","退票"),
+    k("k","取消支付"),
+    n("n","其他"),
+    p("p","支付中"),
+    q("q","待支付"),
+    one("1","待处理"),
+    two("2","审批中"),
+    three("3","处理失败"),
+    four("4","审批完成"),
+    five("5","审批撤销"),
+    six("6","审批拒绝"),
+    seven("7","待发送审批"),
+    eight("8","集中受理中"),
+    nine("9","审批退回"),
+    ten("10","预处理中"),
+    eleven("11","预处理拒绝"),
+    twelve("12","资金监控审批中");
+
+
+    //类型
+    private String type;
+    //值
+    private String value;
+
+    PayState(String type, String value){
+        this.type=type;
+        this.value=value;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public static String payStateGetValue(String type){
+        for (PayState payState : PayState.values()){
+            if(payState.getType()==type||payState.getType().equals(type)){
+                return payState.getValue().toString();
+            }
+        }
+        return null;
+    }
+}
diff --git a/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java
new file mode 100644
index 00000000..46b20936
--- /dev/null
+++ b/fw-cbs/src/main/java/com/hzya/frame/cbs8/util/SM2Util.java
@@ -0,0 +1,237 @@
+package com.hzya.frame.cbs8.util;
+
+import org.bouncycastle.asn1.*;
+import org.bouncycastle.crypto.engines.SM2Engine;
+import org.bouncycastle.crypto.params.*;
+import org.bouncycastle.crypto.signers.SM2Signer;
+import org.bouncycastle.jce.ECNamedCurveTable;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.math.ec.ECCurve;
+import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.util.encoders.Hex;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.ByteArrayInputStream;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
+import java.util.Base64;
+import java.util.Enumeration;
+
+/**
+ * @author: xiang2lin
+ * @time: 2024/6/14
+ * @description: SM2加解密工具类
+ */
+
+public class SM2Util {
+   static Logger logger = LoggerFactory.getLogger(SM2Util.class);
+    private SM2Util() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    private static final String STD_NAME = "sm2p256v1";
+
+    /**
+     * SM2加密算法
+     *
+     * @param publicKey 公钥
+     * @param data      明文数据
+     * @return
+     */
+    public static byte[] encrypt(String publicKey, byte[] data) {
+        ECPublicKeyParameters ecPublicKeyParameters = encodePublicKey(Hex.decode(publicKey));
+        SM2Engine engine = new SM2Engine();
+        engine.init(true, new ParametersWithRandom(ecPublicKeyParameters, new SecureRandom()));
+
+        byte[] bytes = null;
+        try {
+            byte[] cipherText = engine.processBlock(data, 0, data.length);
+            bytes = C1C2C3ToC1C3C2(cipherText);
+        } catch (Exception e) {
+            logger.warn("SM2加密时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    /**
+     * SM2解密算法
+     *
+     * @param privateKey 私钥
+     * @param cipherData 密文数据
+     * @return
+     */
+    public static byte[] decrypt(String privateKey, byte[] cipherData) {
+        ECPrivateKeyParameters ecPrivateKeyParameters = encodePrivateKey(Hex.decode(privateKey));
+        SM2Engine engine = new SM2Engine();
+        engine.init(false, ecPrivateKeyParameters);
+
+        byte[] bytes = null;
+        try {
+            cipherData = C1C3C2ToC1C2C3(cipherData);
+            bytes = engine.processBlock(cipherData, 0, cipherData.length);
+        } catch (Exception e) {
+            logger.warn("SM2解密时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    /**
+     * 签名算法
+     *
+     * @param privateKey 私钥
+     * @param data       明文数据
+     * @return
+     */
+    public static byte[] sign(String privateKey, byte[] data) {
+        ECPrivateKeyParameters ecPrivateKeyParameters = encodePrivateKey(hexToByte(privateKey));
+        SM2Signer signer = new SM2Signer();
+        ParametersWithID parameters = new ParametersWithID(ecPrivateKeyParameters, "1234567812345678".getBytes());
+        signer.init(true, parameters);
+        signer.update(data, 0, data.length);
+
+        byte[] signature = null;
+        try {
+            signature = decodeDERSignature(signer.generateSignature());
+        } catch (Exception e) {
+            logger.warn("SM2签名时出现异常:" + e.getMessage());
+        }
+        return signature;
+    }
+
+    private static byte[] hexToByte(String hex)
+            throws IllegalArgumentException {
+        if (hex.length() % 2 != 0) {
+            throw new IllegalArgumentException();
+        }
+        char[] arr = hex.toCharArray();
+        byte[] b = new byte[hex.length() / 2];
+        for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
+            String swap = "" + arr[i++] + arr[i];
+            int byteInt = Integer.parseInt(swap, 16) & 0xFF;
+            b[j] = BigInteger.valueOf(byteInt).byteValue();
+        }
+        return b;
+    }
+
+    private static byte[] C1C2C3ToC1C3C2(byte[] cipherText) throws Exception {
+        if (cipherText != null && cipherText.length >= 97) {
+            byte[] bytes = new byte[cipherText.length];
+            System.arraycopy(cipherText, 0, bytes, 0, 65);
+            System.arraycopy(cipherText, cipherText.length - 32, bytes, 65, 32);
+            System.arraycopy(cipherText, 65, bytes, 97, cipherText.length - 97);
+            return bytes;
+        } else {
+            throw new Exception("SM2 cipher text error, must be more than 96 bytes and in the format C1||C3||C2.");
+        }
+    }
+
+    private static byte[] C1C3C2ToC1C2C3(byte[] cipherText) throws Exception {
+        if (cipherText != null && cipherText.length >= 97) {
+            byte[] bytes = new byte[cipherText.length];
+            System.arraycopy(cipherText, 0, bytes, 0, 65);
+            System.arraycopy(cipherText, 97, bytes, 65, cipherText.length - 97);
+            System.arraycopy(cipherText, 65, bytes, cipherText.length - 32, 32);
+            return bytes;
+        } else {
+            throw new Exception("SM2 cipher text error, must be more than 96 bytes and in the format C1||C3||C2.");
+        }
+    }
+
+    private static ECPublicKeyParameters encodePublicKey(byte[] value) {
+        byte[] x = new byte[32];
+        byte[] y = new byte[32];
+        System.arraycopy(value, 1, x, 0, 32);
+        System.arraycopy(value, 33, y, 0, 32);
+        BigInteger X = new BigInteger(1, x);
+        BigInteger Y = new BigInteger(1, y);
+        ECPoint Q = getSM2Curve().createPoint(X, Y);
+        return new ECPublicKeyParameters(Q, getECDomainParameters());
+    }
+
+    private static ECCurve getSM2Curve() {
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec(STD_NAME);
+        return spec.getCurve();
+    }
+
+    private static ECPrivateKeyParameters encodePrivateKey(byte[] value) {
+        BigInteger d = new BigInteger(1, value);
+        return new ECPrivateKeyParameters(d, getECDomainParameters());
+    }
+
+    private static ECDomainParameters getECDomainParameters() {
+        ECParameterSpec spec = ECNamedCurveTable.getParameterSpec(STD_NAME);
+        return new ECDomainParameters(spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
+    }
+
+    private static byte[] decodeDERSignature(byte[] signature) {
+        ASN1InputStream stream = new ASN1InputStream(new ByteArrayInputStream(signature));
+
+        byte[] bytes = new byte[64];
+        try {
+            ASN1Sequence primitive = (ASN1Sequence) stream.readObject();
+            Enumeration enumeration = primitive.getObjects();
+            BigInteger R = ((ASN1Integer) enumeration.nextElement()).getValue();
+            BigInteger S = ((ASN1Integer) enumeration.nextElement()).getValue();
+            byte[] r = format(R.toByteArray());
+            byte[] s = format(S.toByteArray());
+            System.arraycopy(r, 0, bytes, 0, 32);
+            System.arraycopy(s, 0, bytes, 32, 32);
+        } catch (Exception e) {
+            logger.warn("decodeDERSignature时出现异常:" + e.getMessage());
+        }
+        return bytes;
+    }
+
+    public static byte[] encodeDERSignature(byte[] signature) {
+        byte[] r = new byte[32];
+        byte[] s = new byte[32];
+        System.arraycopy(signature, 0, r, 0, 32);
+        System.arraycopy(signature, 32, s, 0, 32);
+        ASN1EncodableVector vector = new ASN1EncodableVector();
+        vector.add(new ASN1Integer(new BigInteger(1, r)));
+        vector.add(new ASN1Integer(new BigInteger(1, s)));
+
+        byte[] encoded = null;
+        try {
+            encoded = (new DERSequence(vector)).getEncoded();
+        } catch (Exception e) {
+            logger.warn("encodeDERSignature时出现异常:" + e.getMessage());
+        }
+        return encoded;
+    }
+
+    private static byte[] format(byte[] value) {
+        if (value.length == 32) {
+            return value;
+        } else {
+            byte[] bytes = new byte[32];
+            if (value.length > 32) {
+                System.arraycopy(value, value.length - 32, bytes, 0, 32);
+            } else {
+                System.arraycopy(value, 0, bytes, 32 - value.length, value.length);
+            }
+            return bytes;
+        }
+    }
+
+
+    public static void main(String[] args) {
+        String requestData = "hello啊";
+        byte[] encrypt = encrypt("0452d60e72f6a3050d2f8e8f4505f874ef345e15da38fda8dd64b9e756b7231c056dff1674c4826ada424cc78ea36fd58afc50bcefb5d721bf25b179efac2ebb17", requestData.getBytes(StandardCharsets.UTF_8));
+        String temp = new String(encrypt);
+        byte[] decrypt = decrypt("c3509b6df8bdaf84c464daa1b6fa11a8fca77b0e4a6f076ee68487f288278a85", encrypt);
+        System.out.println("解密完成"+new String(decrypt));
+
+        String encodeToString = Base64.getEncoder().encodeToString(encrypt);
+        byte[] decode = Base64.getDecoder().decode(encodeToString);
+        byte[] decrypt1 = decrypt("c3509b6df8bdaf84c464daa1b6fa11a8fca77b0e4a6f076ee68487f288278a85", decode);
+        System.out.println("解密完成1"+new String(decrypt1));
+
+        String base64 = "eyJtc2ciOiLns7vnu5/lvILluLjvvIzor7fnqI3lkI7lho3or5UiLCJkYXRhIjpudWxsLCJjb2RlIjoiNTAwIn0=";
+        byte[] decode1 = Base64.getDecoder().decode(base64);
+        String decode2 = new String(decode1);
+        byte[] decryptbyte = decrypt("83BA7EC821D35F4CB31FF9A51C1EFA520FC52AF828C2337F88E91CF119B07F44", decode1);
+        System.out.println("解密完成"+new String(decryptbyte));
+    }
+}
diff --git a/fw-cbs/src/main/webapp/WEB-INF/web.xml b/fw-cbs/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000..d80081d1
--- /dev/null
+++ b/fw-cbs/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+         version="4.0">
+</web-app>
\ No newline at end of file
diff --git a/fw-oa/pom.xml b/fw-oa/pom.xml
new file mode 100644
index 00000000..04552396
--- /dev/null
+++ b/fw-oa/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>kangarooDataCenterV3</artifactId>
+        <groupId>com.hzya.frame</groupId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>fw-oa</artifactId>
+    <packaging>jar</packaging>
+    <version>${revision}</version>
+
+    <dependencies>
+            <dependency>
+                <groupId>com.hzya.frame</groupId>
+                <artifactId>base-service</artifactId>
+                <version>${revision}</version>
+            </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-connector-java}</version>
+        </dependency>
+
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 -->
+                    <classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 -->
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDTO.java
new file mode 100644
index 00000000..e9fe54b8
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDTO.java
@@ -0,0 +1,74 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.List;
+
+/**
+ * @Description 无流程表单批量保存请求参数
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:18
+ **/
+public class FormDTO {
+    @JSONField(ordinal = 4)
+    private String formCode;//模版编号
+    @JSONField(ordinal = 5)
+    private String loginName;//模版编号
+    @JSONField(ordinal = 2)
+    private String rightId;//权限id,找到无流程表单,点新增,弹出的窗口上会有这个参数
+    @JSONField(ordinal = 3)
+    private List<FormDataDTO> dataList;//导入的数据
+    @JSONField(ordinal = 1)
+    private String[] uniqueFiled;//更新用的唯一标识
+    @JSONField(ordinal = 6)
+    private Boolean doTrigger;//是否执行触发(Since V8.0sp2),测试中发现传了这个参数会报错
+
+    public String getFormCode() {
+        return formCode;
+    }
+
+    public void setFormCode(String formCode) {
+        this.formCode = formCode;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getRightId() {
+        return rightId;
+    }
+
+    public void setRightId(String rightId) {
+        this.rightId = rightId;
+    }
+
+    public List<FormDataDTO> getDataList() {
+        return dataList;
+    }
+
+    public void setDataList(List<FormDataDTO> dataList) {
+        this.dataList = dataList;
+    }
+
+    public String[] getUniqueFiled() {
+        return uniqueFiled;
+    }
+
+    public void setUniqueFiled(String[] uniqueFiled) {
+        this.uniqueFiled = uniqueFiled;
+    }
+
+    public Boolean getDoTrigger() {
+        return doTrigger;
+    }
+
+    public void setDoTrigger(Boolean doTrigger) {
+        this.doTrigger = doTrigger;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDataDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDataDTO.java
new file mode 100644
index 00000000..b69031d6
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/FormDataDTO.java
@@ -0,0 +1,36 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.List;
+
+/**
+ * @Description dataList节点
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:26
+ **/
+public class FormDataDTO {
+    @JSONField(ordinal = 1)
+    private MasterTableDTO masterTable;//主表数据
+    @JSONField(ordinal = 2)
+    private List<SubTableDTO> subTables;//子表数据
+
+    //private List<> attachmentInfos;//附件列表
+
+    public MasterTableDTO getMasterTable() {
+        return masterTable;
+    }
+
+    public void setMasterTable(MasterTableDTO masterTable) {
+        this.masterTable = masterTable;
+    }
+
+    public List<SubTableDTO> getSubTables() {
+        return subTables;
+    }
+
+    public void setSubTables(List<SubTableDTO> subTables) {
+        this.subTables = subTables;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/MasterTableDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/MasterTableDTO.java
new file mode 100644
index 00000000..56f5f9fb
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/MasterTableDTO.java
@@ -0,0 +1,45 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.List;
+
+/**
+ * @Description 主表数据
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:29
+ **/
+
+public class MasterTableDTO {
+    @JSONField(ordinal = 1)
+    private String name;//表名
+    @JSONField(ordinal = 2)
+    private RecordDTO record;//数据
+    @JSONField(ordinal = 3)
+    private List<String> changedFields;//需要计算的字段
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public RecordDTO getRecord() {
+        return record;
+    }
+
+    public void setRecord(RecordDTO record) {
+        this.record = record;
+    }
+
+    public List<String> getChangedFields() {
+        return changedFields;
+    }
+
+    public void setChangedFields(List<String> changedFields) {
+        this.changedFields = changedFields;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordDTO.java
new file mode 100644
index 00000000..cc3857e0
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordDTO.java
@@ -0,0 +1,34 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+import java.util.List;
+
+/**
+ * @Description record节点
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:31
+ **/
+public class RecordDTO {
+    @JSONField(ordinal = 1)
+    private long id;//数据id,测试中发现新增时这个参数随便填写 不影响导入
+    @JSONField(ordinal = 2)
+    private List<RecordFieldDTO> fields;//字段列表
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public List<RecordFieldDTO> getFields() {
+        return fields;
+    }
+
+    public void setFields(List<RecordFieldDTO> fields) {
+        this.fields = fields;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordFieldDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordFieldDTO.java
new file mode 100644
index 00000000..a2bfa15b
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/RecordFieldDTO.java
@@ -0,0 +1,52 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+
+/**
+ * @Description masterTable—record—fields的结构
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:32
+ **/
+public class RecordFieldDTO {
+    @JSONField(ordinal = 1)
+    private String name;//数据域名称 ,fieldxxxx
+    @JSONField(ordinal = 2)
+    private String value;//数据值(优先)
+    @JSONField(ordinal = 3)
+    private String showValue;//显示值
+
+    public RecordFieldDTO() {
+
+    }
+
+    public RecordFieldDTO(String name, String value, String showValue) {
+        this.name = name;
+        this.value = value;
+        this.showValue = showValue;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getShowValue() {
+        return showValue;
+    }
+
+    public void setShowValue(String showValue) {
+        this.showValue = showValue;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/SubTableDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/SubTableDTO.java
new file mode 100644
index 00000000..8d5e5226
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cap4/form/dto/SubTableDTO.java
@@ -0,0 +1,9 @@
+package com.hzya.frame.seeyon.cap4.form.dto;
+
+/**
+ * @Description 子表数据
+ * @Author xiangerlin
+ * @Date 2024/1/8 11:29
+ **/
+public class SubTableDTO {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDao.java
new file mode 100644
index 00000000..5336cd91
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.cbs8.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+
+/**
+ * @Description 代发代扣
+ * @Author xiangerlin
+ * @Date 2024/6/26 10:50
+ **/
+public interface IAgentPaymentDao extends IBaseDao<AgentPaymentEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDetailDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDetailDao.java
new file mode 100644
index 00000000..96895bb4
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IAgentPaymentDetailDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.cbs8.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+
+/**
+ * @Description 代发代扣明细
+ * @Author xiangerlin
+ * @Date 2024/6/26 10:54
+ **/
+public interface IAgentPaymentDetailDao extends IBaseDao<AgentPaymentDetailEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ICbsLogDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ICbsLogDao.java
new file mode 100644
index 00000000..032d1a3e
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ICbsLogDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.cbs8.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity;
+
+/**
+ * @Description cbs8支付日志
+ * @Author xiangerlin
+ * @Date 2024/6/14 17:30
+ **/
+public interface ICbsLogDao extends IBaseDao<CbsLogEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IPaymentDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IPaymentDao.java
new file mode 100644
index 00000000..c8a18848
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/IPaymentDao.java
@@ -0,0 +1,10 @@
+package com.hzya.frame.seeyon.cbs8.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+
+/**
+ * oa集成cbs
+ */
+public interface IPaymentDao extends IBaseDao<PaymentEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ITransactionDetailDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ITransactionDetailDao.java
new file mode 100644
index 00000000..37cf015a
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/ITransactionDetailDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.cbs8.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity;
+
+/**
+ * @Description cbs交易明细 oa底表
+ * @Author xiangerlin
+ * @Date 2024/6/24 11:10
+ **/
+public interface ITransactionDetailDao extends IBaseDao<TransactionDetailEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDaoImpl.java
new file mode 100644
index 00000000..5b2e3852
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.seeyon.cbs8.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.cbs8.dao.IAgentPaymentDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/26 10:51
+ **/
+@Repository("OAAgentPaymentDaoImpl")
+public class AgentPaymentDaoImpl extends MybatisGenericDao<AgentPaymentEntity,String> implements IAgentPaymentDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDetailDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDetailDaoImpl.java
new file mode 100644
index 00000000..2b873067
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/AgentPaymentDetailDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.seeyon.cbs8.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.cbs8.dao.IAgentPaymentDetailDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/26 10:55
+ **/
+@Repository("OAAgentPaymentDetailDaoImpl")
+public class AgentPaymentDetailDaoImpl extends MybatisGenericDao<AgentPaymentDetailEntity,String> implements IAgentPaymentDetailDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/CbsLogDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/CbsLogDaoImpl.java
new file mode 100644
index 00000000..a42437b0
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/CbsLogDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.seeyon.cbs8.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.cbs8.dao.ICbsLogDao;
+import com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/14 17:31
+ **/
+@Repository()
+public class CbsLogDaoImpl extends MybatisGenericDao<CbsLogEntity,String> implements ICbsLogDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/PaymentDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/PaymentDaoImpl.java
new file mode 100644
index 00000000..f2744983
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/PaymentDaoImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.seeyon.cbs8.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.cbs8.dao.IPaymentDao;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description oa集成cbs
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:28
+ **/
+@Repository("OAPaymentDaoImpl")
+public class PaymentDaoImpl extends MybatisGenericDao<PaymentEntity,String> implements IPaymentDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/TransactionDetailDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/TransactionDetailDaoImpl.java
new file mode 100644
index 00000000..e4fb1bac
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/dao/impl/TransactionDetailDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.seeyon.cbs8.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.cbs8.dao.IPaymentDao;
+import com.hzya.frame.seeyon.cbs8.dao.ITransactionDetailDao;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/24 11:10
+ **/
+@Repository("OATransactionDetailDaoImpl")
+public class TransactionDetailDaoImpl extends MybatisGenericDao<TransactionDetailEntity,String> implements ITransactionDetailDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.java
new file mode 100644
index 00000000..4776058c
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.java
@@ -0,0 +1,113 @@
+package com.hzya.frame.seeyon.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description 代发代扣明细表
+ * @Author xiangerlin
+ * @Date 2024/6/18 14:58
+ **/
+public class AgentPaymentDetailEntity extends BaseEntity {
+    //每笔明细金额
+    private String dtlAmount;
+    //收款账号
+    private String dtlRevAccount;
+    //联行号 同行可不传,跨行必传
+    private String dtlCnapsCode;
+    //收款账户名称
+    private String dtlRevName;
+    //收款开户行 ,如果传的联行号能匹配到对应到开户行,cbs8会自动带出
+    private String dtlRevBankName;
+    //主表id
+    private String formmainId;
+    //表名
+    private String tabName;
+
+    //明细序号,从1开始递增
+    private int dtlSeqNum;
+
+    //支付结果
+    private String payResult;
+    //支付日期
+    private String payDate;
+
+    public String getDtlAmount() {
+        return dtlAmount;
+    }
+
+    public void setDtlAmount(String dtlAmount) {
+        this.dtlAmount = dtlAmount;
+    }
+
+    public String getDtlRevAccount() {
+        return dtlRevAccount;
+    }
+
+    public void setDtlRevAccount(String dtlRevAccount) {
+        this.dtlRevAccount = dtlRevAccount;
+    }
+
+    public String getDtlCnapsCode() {
+        return dtlCnapsCode;
+    }
+
+    public void setDtlCnapsCode(String dtlCnapsCode) {
+        this.dtlCnapsCode = dtlCnapsCode;
+    }
+
+    public String getDtlRevName() {
+        return dtlRevName;
+    }
+
+    public void setDtlRevName(String dtlRevName) {
+        this.dtlRevName = dtlRevName;
+    }
+
+    public String getDtlRevBankName() {
+        return dtlRevBankName;
+    }
+
+    public void setDtlRevBankName(String dtlRevBankName) {
+        this.dtlRevBankName = dtlRevBankName;
+    }
+
+    public String getFormmainId() {
+        return formmainId;
+    }
+
+    public void setFormmainId(String formmainId) {
+        this.formmainId = formmainId;
+    }
+
+    public String getTabName() {
+        return tabName;
+    }
+
+    public void setTabName(String tabName) {
+        this.tabName = tabName;
+    }
+
+    public int getDtlSeqNum() {
+        return dtlSeqNum;
+    }
+
+    public void setDtlSeqNum(int dtlSeqNum) {
+        this.dtlSeqNum = dtlSeqNum;
+    }
+
+    public String getPayResult() {
+        return payResult;
+    }
+
+    public void setPayResult(String payResult) {
+        this.payResult = payResult;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.xml
new file mode 100644
index 00000000..43869fc1
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentDetailEntity.xml
@@ -0,0 +1,84 @@
+<?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.cbs8.dao.impl.AgentPaymentDetailDaoImpl">
+    <resultMap id="get-AgentPaymentDetailEntity-result" type="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity">
+        <result property="id" column="id" />
+        <result property="formmainId" column="formmainId" />
+        <result property="tabName" column="tabName" />
+        <result property="dtlSeqNum" column="dtlSeqNum" />
+        <result property="dtlAmount" column="dtlAmount" />
+        <result property="dtlRevAccount" column="dtlRevAccount" />
+        <result property="dtlCnapsCode" column="dtlCnapsCode" />
+        <result property="dtlRevName" column="dtlRevName" />
+        <result property="dtlRevBankName" column="dtlRevBankName" />
+        <result property="payResult" column="payResult" />
+        <result property="payDate" column="payDate" />
+    </resultMap>
+
+    <sql id="AgentPaymentDetailEntity_Base_Column_List">
+        id,
+        formmainId,
+        tabName,
+        dtlSeqNum,
+        dtlAmount,
+        dtlRevAccount,
+        dtlCnapsCode,
+        dtlRevName,
+        dtlRevBankName,
+        payResult,
+        payDate
+    </sql>
+
+
+    <!-- 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-AgentPaymentDetailEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity">
+        select
+        <include refid="AgentPaymentDetailEntity_Base_Column_List"/>
+        from (
+        SELECT
+        formson_0225.id,
+        formson_0225.formmain_id AS formmainId,
+        'formson_0225' AS tabName,
+        formson_0225.field0001 AS dtlSeqNum,
+        formson_0225.field0019 AS dtlAmount,
+        formson_0225.field0036 AS dtlRevAccount,
+        formson_0225.field0035 AS dtlCnapsCode,
+        formson_0225.field0037 AS dtlRevName,
+        formson_0225.field0034 AS dtlRevBankName,
+        formson_0225.field0044 AS payResult,
+        formson_0225.field0045 AS payDate
+        FROM
+        formson_0225
+        )formson_0225
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id !='' "> formson_0225.id = #{id} </if>
+            <if test="formmainId != null and formmainId !='' "> and formson_0225.formmainId = #{formmainId} </if>
+            <if test="tabName != null and tabName !='' "> and formson_0225.tabName = #{tabName} </if>
+            <if test="dtlSeqNum != null and dtlSeqNum !='' "> and formson_0225.dtlSeqNum = #{dtlSeqNum} </if>
+            <if test="dtlAmount != null and dtlAmount !='' "> and formson_0225.dtlAmount = #{dtlAmount} </if>
+            <if test="dtlRevAccount != null and dtlRevAccount !='' "> and formson_0225.dtlRevAccount = #{dtlRevAccount} </if>
+            <if test="dtlCnapsCode != null and dtlCnapsCode !='' "> and formson_0225.dtlCnapsCode = #{dtlCnapsCode} </if>
+            <if test="dtlRevName != null and dtlRevName !='' "> and formson_0225.dtlRevName = #{dtlRevName} </if>
+            <if test="dtlRevBankName != null and dtlRevBankName !='' "> and formson_0225.dtlRevBankName = #{dtlRevBankName} </if>
+        </trim>
+    </select>
+
+    <update id="entity_update" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity">
+        update formson_0225 set
+        <trim suffix="" suffixOverrides=",">
+            <if test="payDate != null and payDate !='' ">field0045 =#{payDate},</if>
+            <if test="payResult != null and payResult !='' ">field0044 =#{payResult}</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <!-- 更新支付结果 -->
+    <update id="entity_update_result" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity">
+        update formson_0225 set
+        <trim suffix="" suffixOverrides=",">
+            <if test="payDate != null and payDate !='' ">field0045 =#{payDate},</if>
+            <if test="payResult != null and payResult !='' ">field0044 =#{payResult}</if>
+        </trim>
+        where field0001=#{dtlSeqNum} and field0019=#{dtlAmount} and field0035=#{dtlCnapsCode} and field0037=#{dtlRevName}
+    </update>
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.java
new file mode 100644
index 00000000..b4b2748a
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.java
@@ -0,0 +1,145 @@
+package com.hzya.frame.seeyon.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description 代发代扣 主表
+ * @Author xiangerlin
+ * @Date 2024/6/18 14:44
+ **/
+public class AgentPaymentEntity extends BaseEntity {
+
+    //oa id
+    private String oaId;
+    private String finishedflag;
+    //流程标题
+    private String title;
+    //业务参考号
+    private String referenceNum;
+    /**
+     * 业务类型
+     * 201-代扣
+     * 203-代发
+     * 代发工资传203
+     */
+    private String busType;
+    //总金额 小数位2位
+    private String amount;
+    //币种
+    private String currency;
+    //付款账号
+    private String payAccount;
+    //用途
+    private String purpose;
+    //申请单号
+    private String applyCode;
+    //支付结果
+    private String payResult;
+
+    private String tableName;//表名称
+    private String billName;//单据名称
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getBillName() {
+        return billName;
+    }
+
+    public void setBillName(String billName) {
+        this.billName = billName;
+    }
+
+    public String getOaId() {
+        return oaId;
+    }
+
+    public void setOaId(String oaId) {
+        this.oaId = oaId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getFinishedflag() {
+        return finishedflag;
+    }
+
+    public void setFinishedflag(String finishedflag) {
+        this.finishedflag = finishedflag;
+    }
+
+    public String getApplyCode() {
+        return applyCode;
+    }
+
+    public void setApplyCode(String applyCode) {
+        this.applyCode = applyCode;
+    }
+
+    public String getPayResult() {
+        return payResult;
+    }
+
+    public void setPayResult(String payResult) {
+        this.payResult = payResult;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.xml
new file mode 100644
index 00000000..c0b0f6f0
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/AgentPaymentEntity.xml
@@ -0,0 +1,126 @@
+<?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.cbs8.dao.impl.AgentPaymentDaoImpl">
+    <resultMap id="get-AgentPaymentEntity-result" type="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity">
+        <result property="oaId" column="oaId" />
+        <result property="title" column="title" />
+        <result property="finishedflag" column="finishedflag" />
+        <result property="referenceNum" column="referenceNum" />
+        <result property="busType" column="busType" />
+        <result property="amount" column="amount" />
+        <result property="currency" column="currency" />
+        <result property="payAccount" column="payAccount" />
+        <result property="purpose" column="purpose" />
+        <result property="tableName" column="tableName" />
+        <result property="billName" column="billName" />
+        <result property="applyCode" column="applyCode" />
+        <result property="payResult" column="payResult" />
+    </resultMap>
+
+    <sql id="AgentPaymentEntity_Base_Column_List">
+        oaId,
+        tableName,
+        finishedflag,
+        title,
+        billName,
+        referenceNum,
+        busType,
+        amount,
+        currency,
+        payAccount,
+        applyCode,
+        payResult,
+        purpose
+    </sql>
+
+
+    <!-- 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-AgentPaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity">
+        select
+        <include refid="AgentPaymentEntity_Base_Column_List"/>
+       from (
+        SELECT
+        formmain_0224.id AS oaId,
+        'formmain_0224' as tableName,
+        formmain_0224.finishedflag,
+        COL_SUMMARY.SUBJECT AS title,
+        '工资表' AS billName,
+        formmain_0224.field0002 AS referenceNum,
+        '203' AS busType,
+        formmain_0224.field0020 AS amount,
+        '10' AS currency,
+        '755915707610112' AS payAccount,
+        formmain_0224.field0043 AS applyCode,
+        formmain_0224.field0046 AS payResult,
+        '工资' AS purpose
+        FROM
+        formmain_0224
+        LEFT JOIN COL_SUMMARY ON COL_SUMMARY.FORM_RECORDID = formmain_0224.id
+        )formmain_0224
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> formmain_0224.referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and formmain_0224.busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and formmain_0224.amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and formmain_0224.currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and formmain_0224.payAccount = #{payAccount} </if>
+            <if test="applyCode != null and applyCode !='' ">and formmain_0224.applyCode = #{applyCode} </if>
+            <if test="payResult != null and payResult !='' ">and formmain_0224.payResult = #{payResult} </if>
+            <if test="purpose != null and purpose !='' "> and formmain_0224.purpose = #{purpose}  </if>
+            <if test="tableName != null and tableName !='' "> and formmain_0224.tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and formmain_0224.oaId = #{oaId} </if>
+            <if test="title != null and title !='' "> and  formmain_0224.title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and formmain_0224.billName = #{billName} </if>
+            <if test="finishedflag != null and finishedflag !='' "> and formmain_0224.finishedflag = #{finishedflag}  </if>
+        </trim>
+    </select>
+
+    <select id="entity_list_base_unpaid" resultMap="get-AgentPaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity">
+        select
+        <include refid="AgentPaymentEntity_Base_Column_List"/>
+        from (
+        SELECT
+        formmain_0224.id AS oaId,
+        'formmain_0224' as tableName,
+        formmain_0224.finishedflag,
+        COL_SUMMARY.SUBJECT AS title,
+        '工资表' AS billName,
+        formmain_0224.field0002 AS referenceNum,
+        '203' AS busType,
+        formmain_0224.field0020 AS amount,
+        '10' AS currency,
+        '755915707610112' AS payAccount,
+        formmain_0224.field0043 AS applyCode,
+        formmain_0224.field0046 AS payResult,
+        '工资' AS purpose
+        FROM
+        formmain_0224
+        LEFT JOIN COL_SUMMARY ON COL_SUMMARY.FORM_RECORDID = formmain_0224.id
+        )formmain_0224
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> formmain_0224.referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and formmain_0224.busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and formmain_0224.amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and formmain_0224.currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and formmain_0224.payAccount = #{payAccount} </if>
+            <if test="applyCode != null and applyCode !='' ">and formmain_0224.applyCode = #{applyCode} </if>
+            <if test="purpose != null and purpose !='' "> and formmain_0224.purpose = #{purpose}  </if>
+            <if test="tableName != null and tableName !='' "> and formmain_0224.tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and formmain_0224.oaId = #{oaId} </if>
+            <if test="title != null and title !='' "> and  formmain_0224.title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and formmain_0224.billName = #{billName} </if>
+            <if test="finishedflag != null and finishedflag !='' "> and formmain_0224.finishedflag = #{finishedflag}  </if>
+        </trim>
+        and formmain_0224.applyCode is null
+        and formmain_0224.payResult is null
+    </select>
+
+
+    <update id="entity_update" parameterType="com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity">
+        update formmain_0224 set
+        <trim suffix="" suffixOverrides=",">
+            <if test="applyCode != null and applyCode !='' ">field0043 =#{applyCode},</if>
+            <if test="payResult != null and payResult !='' ">field0046 =#{payResult}</if>
+        </trim>
+        where id = #{oaId}
+    </update>
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.java
new file mode 100644
index 00000000..21cc1a4f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.java
@@ -0,0 +1,151 @@
+package com.hzya.frame.seeyon.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description cbs支付日志
+ * @Author xiangerlin
+ * @Date 2024/6/14 17:16
+ **/
+public class CbsLogEntity extends BaseEntity {
+    //流程标题
+    private String title;
+    //请款主体
+    private String pay_company;
+    //收款人
+    private String payee;
+    //金额
+    private String amount;
+    //cbs申请单号
+    private String cbs_apply_code;
+    //日志表id
+    private String id;
+    //oa单据id
+    private String oa_id;
+    //oa单据号
+    private String bill_code;
+    //英文表名
+    private String tab_name_en;
+    //中文表名
+    private String tab_name_ch;
+    //支付状态
+    private String pay_state;
+    //支付信息
+    private String message;
+    //支付申请状态
+    private String apply_state;
+    //成功标记
+    private String successed;
+
+    public String getOa_id() {
+        return oa_id;
+    }
+
+    public void setOa_id(String oa_id) {
+        this.oa_id = oa_id;
+    }
+
+    public String getBill_code() {
+        return bill_code;
+    }
+
+    public void setBill_code(String bill_code) {
+        this.bill_code = bill_code;
+    }
+
+    public String getTab_name_en() {
+        return tab_name_en;
+    }
+
+    public void setTab_name_en(String tab_name_en) {
+        this.tab_name_en = tab_name_en;
+    }
+
+    public String getTab_name_ch() {
+        return tab_name_ch;
+    }
+
+    public void setTab_name_ch(String tab_name_ch) {
+        this.tab_name_ch = tab_name_ch;
+    }
+
+    public String getPay_state() {
+        return pay_state;
+    }
+
+    public void setPay_state(String pay_state) {
+        this.pay_state = pay_state;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getApply_state() {
+        return apply_state;
+    }
+
+    public void setApply_state(String apply_state) {
+        this.apply_state = apply_state;
+    }
+
+    public String getSuccessed() {
+        return successed;
+    }
+
+    public void setSuccessed(String successed) {
+        this.successed = successed;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getPay_company() {
+        return pay_company;
+    }
+
+    public void setPay_company(String pay_company) {
+        this.pay_company = pay_company;
+    }
+
+    public String getPayee() {
+        return payee;
+    }
+
+    public void setPayee(String payee) {
+        this.payee = payee;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getCbs_apply_code() {
+        return cbs_apply_code;
+    }
+
+    public void setCbs_apply_code(String cbs_apply_code) {
+        this.cbs_apply_code = cbs_apply_code;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.xml
new file mode 100644
index 00000000..3e03a88a
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/CbsLogEntity.xml
@@ -0,0 +1,116 @@
+<?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.cbs8.dao.impl.CbsLogDaoImpl">
+    <resultMap id="get-CbsLogEntity-result" type="com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity">
+        <result property="id" column="id" />
+        <result property="oa_id" column="oa_id" />
+        <result property="bill_code" column="bill_code" />
+        <result property="tab_name_en" column="tab_name_en" />
+        <result property="tab_name_ch" column="tab_name_ch" />
+        <result property="pay_state" column="pay_state" />
+        <result property="message" column="message" />
+        <result property="apply_state" column="apply_state" />
+        <result property="successed" column="successed" />
+        <result property="title" column="title" />
+        <result property="pay_company" column="pay_company" />
+        <result property="payee" column="payee" />
+        <result property="amount" column="amount" />
+        <result property="cbs_apply_code" column="cbs_apply_code" />
+    </resultMap>
+
+    <sql id="CbsLogEntity_Base_Column_List">
+        id,
+        field0002 as title,
+        field0003 as pay_company,
+        field0004 as payee,
+        field0005 as cbs_apply_code,
+        field0006 as bill_code,
+        field0007 as oa_id,
+        field0008 as tab_name_ch,
+        field0009 as tab_name_en,
+        field0010 as pay_state,
+        field0011 as message,
+        field0012 as apply_state,
+        field0014 as successed
+    </sql>
+
+    <!-- 查询推送失败,用户手动发起请求 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-CbsLogEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity">
+        select
+        <include refid="CbsLogEntity_Base_Column_List"/>
+        from
+        formmain_0232
+        <trim prefix="where" prefixOverrides="and">
+            <if test="title != null and title !='' "> field0002 = #{title} </if>
+            <if test="pay_company != null and pay_company !='' "> and field0003 = #{pay_company} </if>
+            <if test="payee != null and payee !='' "> and field0004 = #{payee} </if>
+            <if test="cbs_apply_code != null and cbs_apply_code !='' "> and field0005 = #{cbs_apply_code} </if>
+            <if test="bill_code != null and bill_code !='' "> and field0006 = #{bill_code} </if>
+            <if test="oa_id != null and oa_id !='' "> and field0007 = #{oa_id} </if>
+            <if test="tab_name_ch != null and tab_name_ch !='' "> and field0008 = #{tab_name_ch} </if>
+            <if test="tab_name_en != null and tab_name_en !='' "> and field0009 = #{tab_name_en} </if>
+            <if test="pay_state != null and pay_state !='' "> and field0010 = #{pay_state} </if>
+            <if test="message != null and message !='' "> and field0011 = #{message} </if>
+            <if test="apply_state != null and apply_state !='' "> and field0012 = #{apply_state} </if>
+            <if test="successed != null and successed !='' "> and field0014 = #{successed} </if>
+        </trim>
+    </select>
+
+    <select id="entity_list_like" resultMap="get-CbsLogEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity">
+        select
+        <include refid="CbsLogEntity_Base_Column_List"/>
+        from
+        formmain_0232
+        <trim prefix="where" prefixOverrides="and">
+            <if test="title != null and title !='' "> field0002 = #{title} </if>
+            <if test="id != null and id !='' "> and id = #{id} </if>
+            <if test="pay_company != null and pay_company !='' "> and field0003 like '${pay_company}%' </if>
+            <if test="payee != null and payee !='' "> and field0004 like '${payee}%' </if>
+            <if test="cbs_apply_code != null and cbs_apply_code !='' "> and field0005 like '${cbs_apply_code}%' </if>
+            <if test="bill_code != null and bill_code !='' "> and field0006 like '${bill_code}%' </if>
+            <if test="oa_id != null and oa_id !='' "> and field0007 = #{oa_id} </if>
+            <if test="tab_name_ch != null and tab_name_ch !='' "> and field0008 like '${tab_name_ch}%' </if>
+            <if test="tab_name_en != null and tab_name_en !='' "> and field0009 like '${tab_name_en}%' </if>
+            <if test="pay_state != null and pay_state !='' "> and field0010 like '${pay_state}%' </if>
+            <if test="message != null and message !='' "> and field0011 like '${message}%' </if>
+            <if test="apply_state != null and apply_state !='' "> and field0012 like '${apply_state}%' </if>
+            <if test="successed != null and successed !='' "> and field0014 like '${successed}%' </if>
+        </trim>
+    </select>
+
+    <select id="CbsLogEntity_list_base_in_payment" resultMap="get-CbsLogEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity">
+        select
+        <include refid="CbsLogEntity_Base_Column_List"/>
+        from
+        formmain_0232
+        <trim prefix="where" prefixOverrides="and">
+            <if test="oa_id != null and oa_id !='' "> field0007 = #{oa_id} </if>
+            <if test="id != null and id !='' "> and id = #{id} </if>
+            <if test="bill_code != null and bill_code !='' "> and field0006 = #{bill_code} </if>
+            <if test="tab_name_en != null and tab_name_en !='' "> and field0008 = #{tab_name_en} </if>
+            <if test="tab_name_ch != null and tab_name_ch !='' "> and field0009 = #{tab_name_ch} </if>
+            <if test="pay_state != null and pay_state !='' "> and field0010 = #{pay_state} </if>
+            <if test="message != null and message !='' "> and field0011 = #{message} </if>
+            <if test="apply_state != null and apply_state !='' "> and field0012 = #{apply_state} </if>
+            <if test="successed != null and successed !='' "> and field0014 = #{successed} </if>
+            and (field0010='支付中'
+            or field0010 not in ('审批撤销','审批拒绝','处理失败','退票','支付成功','取消支付','修改支付','支付失败','推送失败'))
+        </trim>
+    </select>
+
+
+    <!--修改视图支付状态-->
+    <update id="entity_update" parameterType="com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity">
+        update formmain_0232 set
+        <trim suffix="" suffixOverrides=",">
+            <if test="pay_state != null and pay_state !='' ">field0010 =#{pay_state},</if>
+            field0011 =#{message},
+            <if test="apply_state != null and apply_state !='' ">field0012 =#{apply_state},</if>
+            <if test="successed != null and successed !='' ">field0014 =#{successed}</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+
+
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.java
new file mode 100644
index 00000000..9f68e3ff
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.java
@@ -0,0 +1,327 @@
+package com.hzya.frame.seeyon.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:17
+ **/
+public class PaymentEntity extends BaseEntity {
+
+    private String oaId;//主表id
+    private String formsonId;//明细表id
+    private String payCompany;//付款公司
+    private String title;//流程标题
+    private String tableName;//表名称
+    private String billName;//单据名称
+    private String referenceNum;//业务参考号 唯一id
+    private String referenceNumNew;//重试的时候生成新的业务参考号
+    private String busType;//业务类型
+    private String payResultField;//支付结果字段
+    private String payDateField;//打款日期字段
+    private String applyCodeField;//支付申请单号字段
+    private String receiptFiled;//电子回单字段
+    private String summaryId;//summaryid
+    private String startDate;//单据日期
+    private String finishedflag;//流程状态
+    private String payDate;//打款日期
+    private String payResult;//支付结果
+    private String applyCode;//支付申请单号
+    private String payAccount;//付款账号
+    private String payBankName;//付款开户银行
+    private String amount;//金额
+    private String purpose;//支付用途
+    private String revAccount;//收款账号
+    private String revBankName;//收款开户行名称
+    private String revBankType;//收款银行类型
+    private String revAccountName;//收款账户名称
+    private String cnapsCode;//联行号
+    private String receipt;//电子回单
+    private String currency;//币种 数字
+    private String currencyName;//币种 中文
+    private String currencyCode;//币种编码
+    private String personalFlag;//公私标记
+    private String payType;//付款类别
+    private String payCompanyCode;//付款公司编码
+
+    public String getOaId() {
+        return oaId;
+    }
+
+    public void setOaId(String oaId) {
+        this.oaId = oaId;
+    }
+
+    public String getPayCompany() {
+        return payCompany;
+    }
+
+    public void setPayCompany(String payCompany) {
+        this.payCompany = payCompany;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getBillName() {
+        return billName;
+    }
+
+    public void setBillName(String billName) {
+        this.billName = billName;
+    }
+
+    public String getReferenceNum() {
+        return referenceNum;
+    }
+
+    public void setReferenceNum(String referenceNum) {
+        this.referenceNum = referenceNum;
+    }
+
+    public String getReferenceNumNew() {
+        return referenceNumNew;
+    }
+
+    public void setReferenceNumNew(String referenceNumNew) {
+        this.referenceNumNew = referenceNumNew;
+    }
+
+    public String getBusType() {
+        return busType;
+    }
+
+    public void setBusType(String busType) {
+        this.busType = busType;
+    }
+
+    public String getPayResultField() {
+        return payResultField;
+    }
+
+    public void setPayResultField(String payResultField) {
+        this.payResultField = payResultField;
+    }
+
+    public String getPayDateField() {
+        return payDateField;
+    }
+
+    public void setPayDateField(String payDateField) {
+        this.payDateField = payDateField;
+    }
+
+    public String getReceiptFiled() {
+        return receiptFiled;
+    }
+
+    public void setReceiptFiled(String receiptFiled) {
+        this.receiptFiled = receiptFiled;
+    }
+
+    public String getSummaryId() {
+        return summaryId;
+    }
+
+    public void setSummaryId(String summaryId) {
+        this.summaryId = summaryId;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(String startDate) {
+        this.startDate = startDate;
+    }
+
+    public String getFinishedflag() {
+        return finishedflag;
+    }
+
+    public void setFinishedflag(String finishedflag) {
+        this.finishedflag = finishedflag;
+    }
+
+    public String getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(String payDate) {
+        this.payDate = payDate;
+    }
+
+    public String getPayResult() {
+        return payResult;
+    }
+
+    public void setPayResult(String payResult) {
+        this.payResult = payResult;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayBankName() {
+        return payBankName;
+    }
+
+    public void setPayBankName(String payBankName) {
+        this.payBankName = payBankName;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getRevAccount() {
+        return revAccount;
+    }
+
+    public void setRevAccount(String revAccount) {
+        this.revAccount = revAccount;
+    }
+
+    public String getRevBankName() {
+        return revBankName;
+    }
+
+    public void setRevBankName(String revBankName) {
+        this.revBankName = revBankName;
+    }
+
+    public String getRevBankType() {
+        return revBankType;
+    }
+
+    public void setRevBankType(String revBankType) {
+        this.revBankType = revBankType;
+    }
+
+    public String getRevAccountName() {
+        return revAccountName;
+    }
+
+    public void setRevAccountName(String revAccountName) {
+        this.revAccountName = revAccountName;
+    }
+
+    public String getCnapsCode() {
+        return cnapsCode;
+    }
+
+    public void setCnapsCode(String cnapsCode) {
+        this.cnapsCode = cnapsCode;
+    }
+
+    public String getReceipt() {
+        return receipt;
+    }
+
+    public void setReceipt(String receipt) {
+        this.receipt = receipt;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getCurrencyName() {
+        return currencyName;
+    }
+
+    public void setCurrencyName(String currencyName) {
+        this.currencyName = currencyName;
+    }
+
+    public String getCurrencyCode() {
+        return currencyCode;
+    }
+
+    public void setCurrencyCode(String currencyCode) {
+        this.currencyCode = currencyCode;
+    }
+
+    public String getPersonalFlag() {
+        return personalFlag;
+    }
+
+    public void setPersonalFlag(String personalFlag) {
+        this.personalFlag = personalFlag;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getPayCompanyCode() {
+        return payCompanyCode;
+    }
+
+    public void setPayCompanyCode(String payCompanyCode) {
+        this.payCompanyCode = payCompanyCode;
+    }
+
+    public String getFormsonId() {
+        return formsonId;
+    }
+
+    public void setFormsonId(String formsonId) {
+        this.formsonId = formsonId;
+    }
+
+    public String getApplyCodeField() {
+        return applyCodeField;
+    }
+
+    public void setApplyCodeField(String applyCodeField) {
+        this.applyCodeField = applyCodeField;
+    }
+
+    public String getApplyCode() {
+        return applyCode;
+    }
+
+    public void setApplyCode(String applyCode) {
+        this.applyCode = applyCode;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.xml
new file mode 100644
index 00000000..b8d3deee
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/PaymentEntity.xml
@@ -0,0 +1,339 @@
+<?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.cbs8.entity.PaymentEntity">
+    <resultMap id="get-PaymentEntity-result" type="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+        <result property="referenceNum" column="referenceNum" />
+        <result property="busType" column="busType" />
+        <result property="title" column="title" />
+        <result property="amount" column="amount" />
+        <result property="currency" column="currency" />
+        <result property="payAccount" column="payAccount" jdbcType="VARCHAR" />
+        <result property="revAccount" column="revAccount" />
+        <result property="revAccountName" column="revAccountName" />
+        <result property="revBankType" column="revBankType" />
+        <result property="revBankName" column="revBankName" />
+        <result property="cnapsCode" column="cnapsCode" />
+        <result property="purpose" column="purpose" />
+        <result property="personalFlag" column="personalFlag" />
+        <result property="tableName" column="tableName" />
+        <result property="oaId" column="oaId" />
+        <result property="formsonId" column="formsonId" />
+        <result property="payCompany" column="payCompany" />
+        <result property="billName" column="billName" />
+        <result property="payResultField" column="payResultField" />
+        <result property="payDateField" column="payDateField" />
+        <result property="applyCodeField" column="applyCodeField" />
+        <result property="applyCode" column="applyCode" />
+        <result property="receiptFiled" column="receiptFiled" />
+        <result property="summaryId" column="summaryId" />
+        <result property="startDate" column="startDate" />
+        <result property="finishedflag" column="finishedflag" />
+        <result property="payDate" column="payDate" />
+        <result property="payResult" column="payResult" />
+        <result property="payBankName" column="payBankName" />
+        <result property="receipt" column="receipt" />
+        <result property="payType" column="payType" />
+        <result property="payCompanyCode" column="payCompanyCode" />
+    </resultMap>
+
+    <sql id="PaymentEntity_Base_Column_List">
+     oaId,
+    formsonId,
+     payCompany,
+     payCompanyCode,
+     title,
+     tableName,
+     billName,
+     referenceNum,
+     busType,
+     payResultField,
+     payDateField,
+     applyCodeField,
+     receiptFiled,
+     summaryId,
+     startDate,
+     finishedflag,
+     payDate,
+     payResult,
+     applyCode,
+     payAccount,
+     payBankName,
+     amount,
+     purpose,
+     revAccount,
+     revBankName,
+     revBankType,
+     revAccountName,
+     cnapsCode,
+     receipt,
+     currency,
+     personalFlag,
+     payType
+    </sql>
+
+    <!-- 基础查询语句  -->
+    <sql id="base_sql">
+        SELECT
+            formmain_0209.id as oaId, -- 主表id
+            formson_0210.formsonId,
+            'formson_0210' as tableName, -- 表名
+            COL_SUMMARY.SUBJECT as title, -- 单据标题
+            unit.name as payCompany, -- 付款公司
+            '差旅费报销单' as billName,
+            'field0072' as payResultField, -- 支付结果字段
+            'field0073' as payDateField, -- 打款日期字段
+            'field0080' AS applyCodeField,-- CBS支付申请单号
+            '' as receiptFiled,-- 电子回单字段
+            COL_SUMMARY.id as summaryId,
+            formmain_0209.field0017||'-'||formson_0210.sort as referenceNum, -- 单据编号
+            formmain_0209.START_DATE as startDate, -- 单据日期
+            formmain_0209.FINISHEDFLAG as finishedflag, -- 流程状态
+            formson_0210.field0073 as payDate, -- 打款日期
+            formson_0210.field0072 as payResult, -- 支付结果
+            formson_0210.field0080 AS applyCode,-- 支付申请单号
+            REGEXP_REPLACE(formmain_0209.field0042, '[[:space:]]', '') as payAccount, -- 付款账户
+            REGEXP_REPLACE(formmain_0209.field0041, '[[:space:]]', '') as payBankName, -- 付款开户行
+            formson_0210.field0031 as amount, -- 金额
+            formmain_0209.field0038 as purpose,  -- 用途
+            formmain_0209.field0038 as cbsAbstract, -- 摘要
+            REGEXP_REPLACE(formson_0210.field0069, '[[:space:]]', '') as revAccount, -- 收款账户
+            formson_0210.field0068 as revBankName, -- 收款开户行
+            formson_0210.field0075 as revAccountName, -- 收款人
+            REGEXP_REPLACE(formson_0210.field0071, '[[:space:]]', '') as cnapsCode, -- 收款联行号
+            item.ENUMVALUE  as personalFlag,-- 公私标记
+            formson_0210.field0079 as revBankType,
+            '10' as currency,
+            '202' as busType,
+            '' as receipt -- 电子回单
+        FROM
+            (
+                SELECT
+                    WM_CONCAT(id) AS formsonId,
+                    formmain_id,
+                    SUM(field0031) AS field0031,
+                    MIN(sort) AS sort,
+                    field0068,
+                    field0069,
+                    field0071,
+                    field0079,
+                    field0075,
+                    field0070,
+                    field0072,
+                    field0073,
+                    field0080
+                FROM
+                    formson_0210
+                WHERE
+                    field0067 = '-5486592002512828355'
+                GROUP BY
+                    formmain_id,
+                    field0068,
+                    field0069,
+                    field0071,
+                    field0079,
+                    field0075,
+                    field0070,
+                    field0072,
+                    field0073,
+                    field0080
+            )formson_0210
+                LEFT JOIN formmain_0209 ON formson_0210.FORMMAIN_ID = formmain_0209.id
+                LEFT JOIN COL_SUMMARY ON COL_SUMMARY.FORM_RECORDID = formmain_0209.id
+                left join CTP_ENUM_ITEM item on item.id =formson_0210.field0070
+                left join ORG_UNIT unit on unit.id =formmain_0209.field0002
+    </sql>
+    <!-- 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-PaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+        select v.* from (
+        <include refid="base_sql"/>
+        ) v
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> v.referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and v.busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and v.amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and v.currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and v.payAccount = #{payAccount} </if>
+            <if test="revAccount != null and revAccount !='' "> and v.revAccount = #{revAccount}  </if>
+            <if test="revAccountName != null and revAccountName !='' "> and  v.revAccountName = #{revAccountName}  </if>
+            <if test="revBankType != null and revBankType !='' "> and v.revBankType = #{revBankType} </if>
+            <if test="revBankName != null and revBankName !='' ">and v.revBankName = #{revBankName}  </if>
+            <if test="cnapsCode != null and cnapsCode !='' ">and v.cnapsCode = #{cnapsCode}  </if>
+            <if test="purpose != null and purpose !='' "> and v.purpose = #{purpose}  </if>
+            <if test="personalFlag != null and personalFlag !='' ">and v.personalFlag = #{personalFlag}  </if>
+            <if test="tableName != null and tableName !='' "> and v.tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and v.oaId = #{oaId} </if>
+            <if test="payCompany != null and payCompany !='' "> and v.payCompany = #{payCompany}  </if>
+            <if test="payCompanyCode != null and payCompanyCode !='' "> and v.payCompanyCode = #{payCompanyCode}  </if>
+            <if test="title != null and title !='' "> and  v.title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and v.billName = #{billName} </if>
+            <if test="payResult != null and payResult !='' ">and v.payResult = #{payResult}  </if>
+            <if test="applyCode != null and applyCode !='' ">and v.applyCode = #{applyCode}  </if>
+            <if test="payBankName != null and payBankName !='' ">and v.payBankName = #{payBankName}  </if>
+            <if test="payType != null and payType !='' "> and v.payType = #{payType}  </if>
+            <if test="finishedflag != null and finishedflag !='' "> and v.finishedflag = #{finishedflag}  </if>
+
+        </trim>
+    </select>
+
+    <!-- 查询交易成功,且电子回单为空的,上传电子回单用 -->
+    <select id="PaymentEntity_list_base_elec_isnull" resultMap="get-PaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+       <!-- select
+        <include refid="PaymentEntity_Base_Column_List"/>
+        from
+        v_hzya_oa_cbs_all-->
+        -- 差旅费报销单
+        SELECT
+        formson_0210.id as oaId, -- 主表id
+        'formson_0210' as tableName, -- 表名
+        COL_SUMMARY.SUBJECT as title, -- 单据标题
+        unit.name as payCompany, -- 付款公司
+        '差旅费报销单' as billName,
+        'field0072' as payResultField, -- 支付结果字段
+        'field0073' as payDateField, -- 打款日期字段
+        '' as receiptFiled,-- 电子回单字段
+        COL_SUMMARY.id as summaryId,
+        formmain_0209.field0017||'-'||formson_0210.sort as referenceNum, -- 单据编号
+        formmain_0209.START_DATE as startDate, -- 单据日期
+        formmain_0209.FINISHEDFLAG as finishedflag, -- 流程状态
+        formson_0210.field0073 as payDate, -- 打款日期
+        formson_0210.field0072 as payResult, -- 支付结果
+        REGEXP_REPLACE(formmain_0209.field0042, '[[:space:]]', '') as payAccount, -- 付款账户
+        REGEXP_REPLACE(formmain_0209.field0041, '[[:space:]]', '') as payBankName, -- 付款开户行
+        formson_0210.field0031 as amount, -- 金额
+        formmain_0209.field0038 as purpose,  -- 用途
+        formmain_0209.field0038 as cbsAbstract, -- 摘要
+        REGEXP_REPLACE(formson_0210.field0069, '[[:space:]]', '') as revAccount, -- 收款账户
+        formson_0210.field0068 as revBankName, -- 收款开户行
+        '' as revAccountName, -- 收款人
+        REGEXP_REPLACE(formson_0210.field0071, '[[:space:]]', '') as cnapsCode, -- 收款联行号
+        item.showvalue as personalFlag,-- 公私标记
+        '' as revBankType,-- 收款银行类型
+        '10' as currency,-- 币种
+        '' as busType,-- 业务类型
+        '' as receipt -- 电子回单
+        from
+        formson_0210
+        LEFT JOIN formmain_0209 ON formson_0210.FORMMAIN_ID = formmain_0209.id
+        LEFT JOIN COL_SUMMARY ON COL_SUMMARY.FORM_RECORDID = formmain_0209.id
+        LEFT JOIN CTP_AFFAIR ON CTP_AFFAIR.object_id = COL_SUMMARY.id
+        left join CTP_ENUM_ITEM item on item.id =formson_0210.field0070
+        left join ORG_UNIT unit on unit.id =formmain_0209.field0002
+        -- left join V_USER_VIEW_ALL us on us.staffid=formmain_0209.field0024
+        WHERE 1=1
+        -- and formson_0210.field0031>0
+        and CTP_AFFAIR.node_name = '发起者' and CTP_AFFAIR.COMPLETE_TIME is null and CTP_AFFAIR.STATE = 3
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and payAccount = #{payAccount} </if>
+            <if test="revAccount != null and revAccount !='' "> and revAccount = #{revAccount}  </if>
+            <if test="revAccountName != null and revAccountName !='' "> and  revAccountName = #{revAccountName}  </if>
+            <if test="revBankType != null and revBankType !='' "> and revBankType = #{revBankType} </if>
+            <if test="revBankName != null and revBankName !='' ">and revBankName = #{revBankName}  </if>
+            <if test="cnapsCode != null and cnapsCode !='' ">and cnapsCode = #{cnapsCode}  </if>
+            <if test="purpose != null and purpose !='' "> and purpose = #{purpose}  </if>
+            <if test="personalFlag != null and personalFlag !='' ">and personalFlag = #{personalFlag}  </if>
+            <if test="tableName != null and tableName !='' "> and tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and oaId = #{oaId} </if>
+            <if test="payCompany != null and payCompany !='' "> and payCompany = #{payCompany}  </if>
+            <if test="payCompanyCode != null and payCompanyCode !='' "> and payCompanyCode = #{payCompanyCode}  </if>
+            <if test="title != null and title !='' "> and  title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and billName = #{billName} </if>
+            <if test="payBankName != null and payBankName !='' ">and payBankName = #{payBankName}  </if>
+            <if test="payType != null and payType !='' "> and payType = #{payType}  </if>
+            and receipt is null and personalFlag='0' and payResult = '支付成功'
+        </trim>
+    </select>
+    <!-- 查询待支付的 -->
+    <select id="PaymentEntity_list_base_unpaid" resultMap="get-PaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+     select v.* from (
+        <include refid="base_sql"/>
+        ) v
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> v.referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and v.busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and v.amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and v.currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and v.payAccount = #{payAccount} </if>
+            <if test="revAccount != null and revAccount !='' "> and v.revAccount = #{revAccount}  </if>
+            <if test="revAccountName != null and revAccountName !='' "> and  v.revAccountName = #{revAccountName}  </if>
+            <if test="revBankType != null and revBankType !='' "> and v.revBankType = #{revBankType} </if>
+            <if test="revBankName != null and revBankName !='' ">and v.revBankName = #{revBankName}  </if>
+            <if test="cnapsCode != null and cnapsCode !='' ">and v.cnapsCode = #{cnapsCode}  </if>
+            <if test="purpose != null and purpose !='' "> and v.purpose = #{purpose}  </if>
+            <if test="personalFlag != null and personalFlag !='' ">and v.personalFlag = #{personalFlag}  </if>
+            <if test="tableName != null and tableName !='' "> and v.tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and v.oaId = #{oaId} </if>
+            <if test="payCompany != null and payCompany !='' "> and v.payCompany = #{payCompany}  </if>
+            <if test="payCompanyCode != null and payCompanyCode !='' "> and v.payCompanyCode = #{payCompanyCode}  </if>
+            <if test="title != null and title !='' "> and  v.title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and v.billName = #{billName} </if>
+            <if test="payResult != null and payResult !='' ">and v.payResult = #{payResult}  </if>
+            <if test="payBankName != null and payBankName !='' ">and v.payBankName = #{payBankName}  </if>
+            <if test="payType != null and payType !='' "> and v.payType = #{payType}  </if>
+            <if test="finishedflag != null and finishedflag !='' "> and v.finishedflag = #{finishedflag}  </if>
+            and v.amount > 0
+            and v.payResult is null
+        </trim>
+    </select>
+
+
+
+
+
+    <!-- 查询未完成的 采用==查询 -->
+    <select id="PaymentEntity_list_base_in_payment" resultMap="get-PaymentEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+        select
+        <include refid="PaymentEntity_Base_Column_List"/>
+        from
+        v_hzya_oa_cbs
+        <trim prefix="where" prefixOverrides="and">
+            <if test="referenceNum != null and referenceNum !='' "> referenceNum = #{referenceNum} </if>
+            <if test="busType != null and busType !='' "> and busType = #{busType} </if>
+            <if test="amount != null and amount !='' ">and amount = #{amount}  </if>
+            <if test="currency != null and currency !='' "> and currency = #{currency}  </if>
+            <if test="payAccount != null and payAccount !='' ">and payAccount = #{payAccount} </if>
+            <if test="revAccount != null and revAccount !='' "> and revAccount = #{revAccount}  </if>
+            <if test="revAccountName != null and revAccountName !='' "> and  revAccountName = #{revAccountName}  </if>
+            <if test="revBankType != null and revBankType !='' "> and revBankType = #{revBankType} </if>
+            <if test="revBankName != null and revBankName !='' ">and revBankName = #{revBankName}  </if>
+            <if test="cnapsCode != null and cnapsCode !='' ">and cnapsCode = #{cnapsCode}  </if>
+            <if test="purpose != null and purpose !='' "> and purpose = #{purpose}  </if>
+            <if test="personalFlag != null and personalFlag !='' ">and personalFlag = #{personalFlag}  </if>
+            <if test="tableName != null and tableName !='' "> and tableName = #{tableName}  </if>
+            <if test="oaId != null and oaId !='' ">and oaId = #{oaId} </if>
+            <if test="payCompany != null and payCompany !='' "> and payCompany = #{payCompany}  </if>
+            <if test="payCompanyCode != null and payCompanyCode !='' "> and payCompanyCode = #{payCompanyCode}  </if>
+            <if test="title != null and title !='' "> and  title = #{title}  </if>
+            <if test="billName != null and billName !='' "> and billName = #{billName} </if>
+            <if test="payResult != null and payResult !='' ">and payResult = #{payResult}  </if>
+            <if test="payBankName != null and payBankName !='' ">and payBankName = #{payBankName}  </if>
+            <if test="payType != null and payType !='' "> and payType = #{payType}  </if>
+            and (payResult='支付中'
+            or payResult not in ('审批撤销','审批拒绝','处理失败','退票','支付成功','取消支付','修改支付','支付失败'))
+            and personalFlag='0'
+        </trim>
+    </select>
+
+
+
+
+    <!--修改视图支付状态-->
+    <update id="PaymentEntity_update_payState" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+        update ${tableName} set
+        <trim suffix="" suffixOverrides=",">
+            <if test="payDate != null and payDate !='' ">${payDateField} =#{payDate},</if>
+            <if test="payResult != null and payResult !='' ">${payResultField} =#{payResult},</if>
+            <if test="applyCodeField != null and applyCodeField !='' ">${applyCodeField} =#{applyCode}</if>
+        </trim>
+        where id = #{formsonId}
+    </update>
+
+    <!--修改电子回单-->
+    <update id="PaymentEntity_update_electronic" parameterType="com.hzya.frame.seeyon.cbs8.entity.PaymentEntity">
+        update ${tableName} set ${receiptFiled}=#{receipt} where id = #{oaId} and ${receiptFiled} is null
+    </update>
+
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.java
new file mode 100644
index 00000000..e1d66a2d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.java
@@ -0,0 +1,155 @@
+package com.hzya.frame.seeyon.cbs8.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ * @Description cbs交易明细日志OA底表
+ * @Author xiangerlin
+ * @Date 2024/6/24 10:49
+ **/
+public class TransactionDetailEntity extends BaseEntity {
+    private String id;//id
+    private String accountNo;//银行账号
+    private String accountName;//户名
+    private String openBank;//开户行名称
+    private String bankType;//我方银行类型
+    private String bankTransactionDate;//交易日期
+    private String transactionSerialNumber;//交易流水号
+    private String bankSerialNumber;//银行流水号
+    private String currency;//币种
+    private String incurredAmount;//发生额
+    private String purpose;//用途
+    private String digest;//摘要
+    private String oppositeAccount;//对方账号
+    private String oppositeName;//对方户名
+    private String oppositeOpeningBank;//对方开户行
+
+    private String remark;//备注
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getAccountNo() {
+        return accountNo;
+    }
+
+    public void setAccountNo(String accountNo) {
+        this.accountNo = accountNo;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getOpenBank() {
+        return openBank;
+    }
+
+    public void setOpenBank(String openBank) {
+        this.openBank = openBank;
+    }
+
+    public String getBankTransactionDate() {
+        return bankTransactionDate;
+    }
+
+    public void setBankTransactionDate(String bankTransactionDate) {
+        this.bankTransactionDate = bankTransactionDate;
+    }
+
+    public String getTransactionSerialNumber() {
+        return transactionSerialNumber;
+    }
+
+    public void setTransactionSerialNumber(String transactionSerialNumber) {
+        this.transactionSerialNumber = transactionSerialNumber;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getIncurredAmount() {
+        return incurredAmount;
+    }
+
+    public void setIncurredAmount(String incurredAmount) {
+        this.incurredAmount = incurredAmount;
+    }
+
+    public String getPurpose() {
+        return purpose;
+    }
+
+    public void setPurpose(String purpose) {
+        this.purpose = purpose;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+
+    public String getOppositeAccount() {
+        return oppositeAccount;
+    }
+
+    public void setOppositeAccount(String oppositeAccount) {
+        this.oppositeAccount = oppositeAccount;
+    }
+
+    public String getOppositeName() {
+        return oppositeName;
+    }
+
+    public void setOppositeName(String oppositeName) {
+        this.oppositeName = oppositeName;
+    }
+
+    public String getOppositeOpeningBank() {
+        return oppositeOpeningBank;
+    }
+
+    public void setOppositeOpeningBank(String oppositeOpeningBank) {
+        this.oppositeOpeningBank = oppositeOpeningBank;
+    }
+
+    public String getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(String bankType) {
+        this.bankType = bankType;
+    }
+
+    public String getBankSerialNumber() {
+        return bankSerialNumber;
+    }
+
+    public void setBankSerialNumber(String bankSerialNumber) {
+        this.bankSerialNumber = bankSerialNumber;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.xml
new file mode 100644
index 00000000..3fa7fc60
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/entity/TransactionDetailEntity.xml
@@ -0,0 +1,91 @@
+<?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.cbs8.entity.TransactionDetailEntity">
+    <resultMap id="get-TransactionDetailEntity-result" type="com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity">
+        <result property="id" column="id" />
+        <result property="accountNo" column="accountNo" />
+        <result property="accountName" column="accountName" />
+        <result property="openBank" column="openBank" />
+        <result property="bankType" column="bankType" />
+        <result property="bankTransactionDate" column="bankTransactionDate" />
+        <result property="transactionSerialNumber" column="transactionSerialNumber" />
+        <result property="currency" column="currency" />
+        <result property="incurredAmount" column="incurredAmount" />
+        <result property="purpose" column="purpose" />
+        <result property="digest" column="digest" />
+        <result property="oppositeAccount" column="oppositeAccount" />
+        <result property="oppositeName" column="oppositeName" />
+        <result property="oppositeOpeningBank" column="oppositeOpeningBank" />
+        <result property="remark" column="remark" />
+    </resultMap>
+
+    <sql id="TransactionDetailEntity_Base_Column_List">
+        id,
+        field0001 as accountNo,
+        field0002 as accountName,
+        field0003 as openBank,
+        field0004 as bankType,
+        field0005 as transactionSerialNumber,
+        field0006 as bankTransactionDate,
+        field0007 as bankSerialNumber,
+        field0008 as currency,
+        field0009 as incurredAmount,
+        field0010 as purpose,
+        field0011 as digest,
+        field0012 as oppositeAccount,
+        field0013 as oppositeName,
+        field0014 as oppositeOpeningBank,
+        field0015 as remark
+    </sql>
+
+    <!--  采用==查询 -->
+    <select id="TransactionDetailEntity_list_base" resultMap="get-TransactionDetailEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity">
+        select
+        <include refid="TransactionDetailEntity_Base_Column_List"/>
+        from
+        formmain_0233
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id !='' ">id = #{id} </if>
+            <if test="accountNo != null and accountNo !='' "> and field0001 = #{accountNo} </if>
+            <if test="accountName != null and accountName !='' "> and field0002 = #{accountName} </if>
+            <if test="openBank != null and openBank !='' "> and field0003 = #{openBank} </if>
+            <if test="bankType != null and bankType !='' "> and field0004 = #{bankType} </if>
+            <if test="transactionSerialNumber != null and transactionSerialNumber !='' "> and field0005 = #{transactionSerialNumber} </if>
+            <if test="bankTransactionDate != null and bankTransactionDate !='' "> and field0006 = #{bankTransactionDate} </if>
+            <if test="bankSerialNumber != null and bankSerialNumber !='' "> and field0007 = #{bankSerialNumber} </if>
+            <if test="currency != null and currency !='' "> and field0008 = #{currency} </if>
+            <if test="incurredAmount != null and incurredAmount !='' "> and field0009 = #{incurredAmount} </if>
+            <if test="purpose != null and purpose !='' "> and field0010 = #{purpose} </if>
+            <if test="digest != null and digest !='' "> and field0011 = #{digest} </if>
+            <if test="oppositeAccount != null and oppositeAccount !='' "> and field0012 = #{oppositeAccount} </if>
+            <if test="oppositeName != null and oppositeName !='' "> and field0013 = #{oppositeName} </if>
+            <if test="oppositeOpeningBank != null and oppositeOpeningBank !='' "> and field0014 = #{oppositeOpeningBank} </if>
+            <if test="remark != null and remark !='' "> and field0015 = #{remark} </if>
+        </trim>
+    </select>
+    <!-- 只查询交易流水号-->
+    <select id="TransactionDetailEntity_list_serialNumber" resultMap="get-TransactionDetailEntity-result" parameterType="com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity">
+        select
+        field0005 as transactionSerialNumber
+        from
+        formmain_0233
+        <trim prefix="where" prefixOverrides="and">
+            <if test="id != null and id !='' ">id = #{id} </if>
+            <if test="accountNo != null and accountNo !='' "> and field0001 = #{accountNo} </if>
+            <if test="accountName != null and accountName !='' "> and field0002 = #{accountName} </if>
+            <if test="openBank != null and openBank !='' "> and field0003 = #{openBank} </if>
+            <if test="bankType != null and bankType !='' "> and field0004 = #{bankType} </if>
+            <if test="transactionSerialNumber != null and transactionSerialNumber !='' "> and field0005 = #{transactionSerialNumber} </if>
+            <if test="bankTransactionDate != null and bankTransactionDate !='' "> and field0006 >= #{bankTransactionDate} </if>
+            <if test="bankSerialNumber != null and bankSerialNumber !='' "> and field0007 = #{bankSerialNumber} </if>
+            <if test="currency != null and currency !='' "> and field0008 = #{currency} </if>
+            <if test="incurredAmount != null and incurredAmount !='' "> and field0009 = #{incurredAmount} </if>
+            <if test="purpose != null and purpose !='' "> and field0010 = #{purpose} </if>
+            <if test="digest != null and digest !='' "> and field0011 = #{digest} </if>
+            <if test="oppositeAccount != null and oppositeAccount !='' "> and field0012 = #{oppositeAccount} </if>
+            <if test="oppositeName != null and oppositeName !='' "> and field0013 = #{oppositeName} </if>
+            <if test="oppositeOpeningBank != null and oppositeOpeningBank !='' "> and field0014 = #{oppositeOpeningBank} </if>
+            <if test="remark != null and remark !='' "> and field0015 = #{remark} </if>
+        </trim>
+    </select>
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentDetailService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentDetailService.java
new file mode 100644
index 00000000..f0a4811b
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentDetailService.java
@@ -0,0 +1,18 @@
+package com.hzya.frame.seeyon.cbs8.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+
+/**
+ * @Description 代发代扣明细
+ * @Author xiangerlin
+ * @Date 2024/6/26 11:00
+ **/
+public interface IAgentPaymentDetailService extends IBaseService<AgentPaymentDetailEntity,String> {
+    /**
+     * 更新明细表支付状态
+     * @param detail
+     */
+    void updatePayResult(AgentPaymentDetailEntity detail);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentService.java
new file mode 100644
index 00000000..dcb6d78f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IAgentPaymentService.java
@@ -0,0 +1,45 @@
+package com.hzya.frame.seeyon.cbs8.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+
+import java.util.List;
+
+/**
+ * @Description OA代发代扣
+ * @Author xiangerlin
+ * @Date 2024/6/18 15:04
+ **/
+public interface IAgentPaymentService extends IBaseService<AgentPaymentEntity,String> {
+
+    /**
+     * 查询待支付待代发代扣 主表
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<AgentPaymentEntity> queryUnpaid(AgentPaymentEntity entity) throws Exception;
+
+    /**
+     * 根据支付申请单号查询
+     * @param agentPayment
+     * @return
+     * @throws Exception
+     */
+    AgentPaymentEntity queryByApplyCode(AgentPaymentEntity agentPayment)throws Exception;
+
+    /**
+     * 查询明细表
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<AgentPaymentDetailEntity> queryDetails(AgentPaymentDetailEntity entity)throws Exception;
+
+    /**
+     * 更新支付状态
+     * @param entity
+     */
+    void updateResult(AgentPaymentEntity entity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ICbsLogService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ICbsLogService.java
new file mode 100644
index 00000000..7160c21f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ICbsLogService.java
@@ -0,0 +1,53 @@
+package com.hzya.frame.seeyon.cbs8.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+
+import java.util.List;
+
+/**
+ * @Description cbs8支付日志
+ * @Author xiangerlin
+ * @Date 2024/6/14 17:22
+ **/
+public interface ICbsLogService extends IBaseService<CbsLogEntity,String> {
+    /**
+     * 查询支付中的数据
+     * @param logEntity
+     * @return
+     */
+    List<CbsLogEntity> queryInPayment(CbsLogEntity logEntity);
+    /**
+     * 保存日志,通过rest接口的形式
+     * @param logEntity
+     */
+    void saveLog(CbsLogEntity logEntity);
+
+    /**
+     * 补推,从自己开发的页面或者APIpost
+     * 需要传oa表单id和表单编号
+     * @param entity
+     */
+    void retry(CbsLogEntity entity);
+    /**
+     * 补推,从OA页面
+     * 只需要传日志表id就行
+     * @param jsonObject
+     */
+    void resend(JSONObject jsonObject);
+
+    /**
+     * 获取token
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity getTokenExt(SysExtensionApiEntity entity);
+
+    /**
+     * 更新日志
+     * @param logEntity
+     */
+    void updateLog(CbsLogEntity logEntity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IPaymentService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IPaymentService.java
new file mode 100644
index 00000000..4243084c
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/IPaymentService.java
@@ -0,0 +1,63 @@
+package com.hzya.frame.seeyon.cbs8.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+
+import java.util.List;
+
+/**
+ * @Description oa对接cbs
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:31
+ **/
+public interface IPaymentService extends IBaseService<PaymentEntity,String> {
+
+    /**
+     * 查询待支付的数据 需要推送到CBS的
+     * 如果需要查询流程状态已结束的 需要调用方设置finishedflag=1
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<PaymentEntity> queryUnpaid(PaymentEntity entity)throws Exception;
+
+    /**
+     * 查询交易成功的数据
+     * 内置了查询条件payResult = PayState.payStateGetValue("g"); 支付成功
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<PaymentEntity> querySuccess(PaymentEntity entity)throws Exception;
+
+    /**
+     * 查询交易成功,且电子回单为空的
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<PaymentEntity> queryElecIsNull(PaymentEntity entity)throws Exception;
+
+    /**
+     * 查询支付中的数据
+     * 内置了查询条件 payResult = '支付中' or payResult not in ('审批撤销','审批拒绝','处理失败','退票','支付成功','取消支付','修改支付','支付失败')
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    List<PaymentEntity> queryInPayment(PaymentEntity entity)throws Exception;
+
+    /**
+     * 更新支付状态
+     * @param entity
+     * @throws Exception
+     */
+    void updatePayState(PaymentEntity entity)throws Exception;
+
+    /**
+     * 更新电子回单字段
+     * @param entity
+     * @throws Exception
+     */
+    void updateElec(PaymentEntity entity)throws Exception;
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ITransactionDetailService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ITransactionDetailService.java
new file mode 100644
index 00000000..61126686
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/ITransactionDetailService.java
@@ -0,0 +1,29 @@
+package com.hzya.frame.seeyon.cbs8.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity;
+
+import java.util.List;
+
+/**
+ * @Description cbs交易明细 OA底表
+ * @Author xiangerlin
+ * @Date 2024/6/24 11:07
+ **/
+public interface ITransactionDetailService extends IBaseService<TransactionDetailEntity,String> {
+
+
+    /**
+     * 只返回交易流水号
+     * @param entity
+     * @return
+     */
+    List<TransactionDetailEntity> querySerialNumber(TransactionDetailEntity entity);
+
+    /**
+     * 保存交易明细,通过rest接口的方式
+     * @param entity
+     * @throws Exception
+     */
+    void restSave(TransactionDetailEntity entity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentDetailServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentDetailServiceImpl.java
new file mode 100644
index 00000000..8bbbad34
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentDetailServiceImpl.java
@@ -0,0 +1,39 @@
+package com.hzya.frame.seeyon.cbs8.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.cbs8.dao.IAgentPaymentDetailDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+import com.hzya.frame.seeyon.cbs8.service.IAgentPaymentDetailService;
+import com.hzya.frame.seeyon.cbs8.service.IAgentPaymentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/26 11:01
+ **/
+@Service("OAAgentPaymentDetailServiceImpl")
+public class AgentPaymentDetailServiceImpl extends BaseService<AgentPaymentDetailEntity,String> implements IAgentPaymentDetailService {
+
+    private IAgentPaymentDetailDao agentPaymentDetailDao;
+
+    @Autowired
+    public void setAgentPaymentDetailDao(IAgentPaymentDetailDao agentPaymentDetailDao) {
+        this.agentPaymentDetailDao = agentPaymentDetailDao;
+        this.dao = agentPaymentDetailDao;
+    }
+
+    /**
+     * 更新明细表支付状态
+     *
+     * @param detail
+     */
+    @DS("#detail.dataSourceCode")
+    @Override
+    public void updatePayResult(AgentPaymentDetailEntity detail) {
+        agentPaymentDetailDao.update("com.hzya.frame.seeyon.cbs8.dao.impl.AgentPaymentDetailDaoImpl.entity_update_result",detail);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentServiceImpl.java
new file mode 100644
index 00000000..ab3ab4b9
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/AgentPaymentServiceImpl.java
@@ -0,0 +1,93 @@
+package com.hzya.frame.seeyon.cbs8.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.cbs8.dao.IAgentPaymentDao;
+import com.hzya.frame.seeyon.cbs8.dao.IAgentPaymentDetailDao;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentDetailEntity;
+import com.hzya.frame.seeyon.cbs8.entity.AgentPaymentEntity;
+import com.hzya.frame.seeyon.cbs8.service.IAgentPaymentDetailService;
+import com.hzya.frame.seeyon.cbs8.service.IAgentPaymentService;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/18 15:06
+ **/
+@Service(value = "cbs8AgentPaymentServiceImpl")
+public class AgentPaymentServiceImpl extends BaseService<AgentPaymentEntity,String> implements IAgentPaymentService {
+
+    private IAgentPaymentDao agentPaymentDao;
+
+    @Autowired
+    private IAgentPaymentDetailService agentPaymentDetailService;
+    @Autowired
+    public void setAgentPaymentDao(IAgentPaymentDao agentPaymentDao) {
+        this.agentPaymentDao = agentPaymentDao;
+        this.dao = agentPaymentDao;
+    }
+    /**
+     * 查询待支付待代发代扣 主表
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<AgentPaymentEntity> queryUnpaid(AgentPaymentEntity entity) throws Exception {
+        List<AgentPaymentEntity> list = agentPaymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.dao.impl.AgentPaymentDaoImpl.entity_list_base_unpaid");
+        return list;
+    }
+
+    /**
+     * 根据支付申请单号查询
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public AgentPaymentEntity queryByApplyCode(AgentPaymentEntity entity) throws Exception {
+        if (null != entity && StrUtil.isNotEmpty(entity.getApplyCode())){
+            List<AgentPaymentEntity> list = agentPaymentDao.query(entity);
+            if (CollectionUtils.isNotEmpty(list)){
+                if (list.size() > 1){
+                    throw new BaseSystemException("根据"+entity.getApplyCode()+"查询到多条记录");
+                }
+                return list.get(0);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 查询明细表
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<AgentPaymentDetailEntity> queryDetails(AgentPaymentDetailEntity entity) throws Exception {
+        List<AgentPaymentDetailEntity> list = agentPaymentDetailService.query(entity);
+        return list;
+    }
+
+    /**
+     * @param entity
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public void updateResult(AgentPaymentEntity entity) {
+        agentPaymentDao.update("com.hzya.frame.seeyon.cbs8.dao.impl.AgentPaymentDaoImpl.entity_update",entity);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/CbsLogServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/CbsLogServiceImpl.java
new file mode 100644
index 00000000..5ff114e9
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/CbsLogServiceImpl.java
@@ -0,0 +1,197 @@
+package com.hzya.frame.seeyon.cbs8.service.impl;
+
+import cn.hutool.core.map.MapBuilder;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.cbs8.dao.ICbsLogDao;
+import com.hzya.frame.seeyon.cbs8.entity.CbsLogEntity;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.cbs8.service.ICbsLogService;
+import com.hzya.frame.seeyon.util.OAPayState;
+import com.hzya.frame.seeyon.util.OARestUtil;
+import com.hzya.frame.stringutil.StringUtil;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description cbs8支付日志
+ * @Author xiangerlin
+ * @Date 2024/6/14 17:22
+ **/
+@Service(value = "CbsLogServiceImpl")
+public class CbsLogServiceImpl extends BaseService<CbsLogEntity,String> implements ICbsLogService {
+
+
+    Logger log = LoggerFactory.getLogger(getClass());
+
+    private ICbsLogDao cbsLogDao;
+
+    @Autowired
+    public void setCbsLogDao(ICbsLogDao cbsLogDao) {
+        this.cbsLogDao = cbsLogDao;
+        this.dao = cbsLogDao;
+    }
+    @Autowired
+    private OARestUtil restUtil;
+
+    /**
+     * 查询支付中的数据
+     *
+     * @param logEntity
+     * @return
+     */
+    @DS("#logEntity.dataSourceCode")
+    @Override
+    public List<CbsLogEntity> queryInPayment(CbsLogEntity logEntity) {
+        List<CbsLogEntity> logList = cbsLogDao.queryList(logEntity, "CbsLogEntity_list_base_in_payment");
+        return logList;
+    }
+
+    /**
+     * 保存日志,通过rest接口的形式
+     *
+     * @param cbsLogEntity
+     */
+    @Override
+    public void saveLog(CbsLogEntity cbsLogEntity) {
+        String oa_id = StringUtil.nullConvert(cbsLogEntity.getOa_id());
+        String bill_code = StringUtil.nullConvert(cbsLogEntity.getBill_code());
+        String tab_name_en = StringUtil.nullConvert(cbsLogEntity.getTab_name_en());
+        String tab_name_ch = StringUtil.nullConvert(cbsLogEntity.getTab_name_ch());
+        String pay_state = StringUtil.nullConvert(cbsLogEntity.getPay_state());
+        String message = StringUtil.nullConvert(cbsLogEntity.getMessage());
+        String apply_state = StringUtil.nullConvert(cbsLogEntity.getApply_state());
+        String successed = StringUtil.nullConvert(cbsLogEntity.getSuccessed());
+        String title = StringUtil.nullConvert(cbsLogEntity.getTitle());
+        String pay_company = StringUtil.nullConvert(cbsLogEntity.getPay_company());
+        String payee = StringUtil.nullConvert(cbsLogEntity.getPayee());
+        String amount = StringUtil.nullConvert(cbsLogEntity.getAmount());
+        String cbs_apply_code = StringUtil.nullConvert(cbsLogEntity.getCbs_apply_code());
+        //根据oaid判断是否在日志表中存在,如果存在,则更新,如果不存在,则新增
+        CbsLogEntity cbsLogEntityResend=new CbsLogEntity();
+        cbsLogEntityResend.setOa_id(cbsLogEntity.getOa_id());
+        cbsLogEntityResend.setDataSourceCode(cbsLogEntity.getDataSourceCode());
+        List<CbsLogEntity> queryList = query(cbsLogEntityResend);
+        if(CollectionUtils.isEmpty(queryList)){
+            String data = StrUtil.format(getXmlTemplate(),title,pay_company,payee,amount,cbs_apply_code,bill_code,oa_id,tab_name_ch,tab_name_en,pay_state,message,apply_state,successed);
+            Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                    .put("apiCode", "8000240007")
+                    .put("publicKey","ZJYAorA7JuRDfrVjywcx78BFcqlLwthgXNC65TXxxQMUHuxCe7eDIk+3zDUT+v578prj")//发送者
+                    .put("secretKey","a54vt9Wx7gdBig+4JCkZ/lISIIL2m4ZEyZkXtW0uQVBDHS+V4SVgT6xhNblacri/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//发送者
+                    .put("appId","800024")
+                    .build();
+            JSONObject paramsTemplate = new JSONObject();
+            paramsTemplate.put("loginName", "hzya_rest");
+            paramsTemplate.put("dataXml", data);
+            String params = JSONObject.toJSONString(paramsTemplate);
+            logger.info("保存支付申请日志到OA底表请求参数:{}",params);
+            String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+            logger.info("保存支付申请日志到OA底表响应参数:{}",body);
+        }else{
+            for (CbsLogEntity logEntity : queryList) {
+                logEntity.setPay_state(pay_state);
+                logEntity.setMessage(message);
+                logEntity.setApply_state(apply_state);
+                logEntity.setSuccessed(successed);
+                logEntity.setBill_code(cbsLogEntity.getBill_code());
+                logEntity.setDataSourceCode(cbsLogEntity.getDataSourceCode());
+                try {
+                    update(logEntity);
+                }catch (Exception e){
+                    e.printStackTrace();
+                    logger.error("更新");
+                }
+            }
+        }
+    }
+
+    /**
+     * 补推,从自己开发的页面或者APIpost
+     * 需要传oa表单id和表单编号
+     *
+     * @param entity
+     */
+    @Override
+    public void retry(CbsLogEntity entity) {
+        PaymentEntity paymentEntity = new PaymentEntity();
+        paymentEntity.setOaId(entity.getOa_id());
+        paymentEntity.setReferenceNum(entity.getBill_code());
+        CbsLogEntity logEntity = new CbsLogEntity();
+        logEntity.setId(entity.getId());
+        logEntity = cbsLogDao.queryOne(logEntity);
+        String pay_state = logEntity.getPay_state();
+        if (OAPayState.h.getValue().equals(pay_state)
+                || OAPayState.three.getValue().equals(pay_state)
+                || OAPayState.k.getValue().equals(pay_state)
+                || "推送失败".equals(pay_state)){
+            //todo 调用重试方法
+        }else {
+            throw new BaseSystemException("只允许补推支付失败的记录");
+        }
+    }
+
+    /**
+     * 补推,从OA页面
+     * 只需要传日志表id就行
+     *
+     * @param jsonObject
+     */
+    @Override
+    public void resend(JSONObject jsonObject) {
+        if (null != jsonObject && StrUtil.isNotEmpty(jsonObject.getString("id"))){
+            String id = jsonObject.getString("id");
+            CbsLogEntity cbsLogEntity = new CbsLogEntity();
+            cbsLogEntity.setId(id);
+            cbsLogEntity =cbsLogDao.queryOne(cbsLogEntity);
+            if (null != cbsLogEntity && StrUtil.isNotEmpty(cbsLogEntity.getOa_id()) && StrUtil.isNotEmpty(cbsLogEntity.getBill_code())){
+                retry(cbsLogEntity);
+            }
+        }
+    }
+
+    /**
+     * 获取token
+     *
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity getTokenExt(SysExtensionApiEntity entity) {
+        String token = restUtil.getToken("hzya_rest", "8000240000");
+        Map<String, String> headers = entity.getHeaders();
+        if (null == headers){
+            headers = new HashMap<>();
+        }
+        headers.put("token",token);
+        return entity;
+    }
+
+    /**
+     * 更新日志
+     *
+     * @param logEntity
+     */
+    @DS("#logEntity.dataSourceCode")
+    @Override
+    public void updateLog(CbsLogEntity logEntity) {
+        cbsLogDao.update(logEntity);
+    }
+
+    //获取xml模板
+    private String getXmlTemplate(){
+        return "<forms  version=\"2.1\"><formExport><summary  id=\"9195604394844442459\" name=\"formmain_0232\"/><definitions><column  id=\"field0002\" type=\"0\" name=\"流程标题\" isNullable=\"false\" length=\"100\"/><column  id=\"field0003\" type=\"0\" name=\"付款主体公司\" isNullable=\"false\" length=\"100\"/><column  id=\"field0004\" type=\"0\" name=\"收款人\" isNullable=\"false\" length=\"100\"/><column  id=\"field0019\" type=\"4\" name=\"金额\" isNullable=\"false\" length=\"20\"/><column  id=\"field0005\" type=\"0\" name=\"CBS支付申请单号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0006\" type=\"0\" name=\"OA单据编号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0007\" type=\"0\" name=\"OA单据ID\" isNullable=\"false\" length=\"100\"/><column  id=\"field0008\" type=\"0\" name=\"OA中文表名\" isNullable=\"false\" length=\"100\"/><column  id=\"field0009\" type=\"0\" name=\"OA数据库表名\" isNullable=\"false\" length=\"100\"/><column  id=\"field0010\" type=\"0\" name=\"支付状态\" isNullable=\"false\" length=\"100\"/><column  id=\"field0011\" type=\"0\" name=\"支付信息\" isNullable=\"false\" length=\"100\"/><column  id=\"field0012\" type=\"0\" name=\"支付申请状态\" isNullable=\"false\" length=\"100\"/><column  id=\"field0014\" type=\"0\" name=\"成功标记\" isNullable=\"false\" length=\"100\"/></definitions><values><column  name=\"流程标题\"><value><![CDATA[{}]]></value></column><column  name=\"付款主体公司\"><value><![CDATA[{}]]></value></column><column  name=\"收款人\"><value><![CDATA[{}]]></value></column><column  name=\"金额\"><value><![CDATA[{}]]></value></column><column  name=\"CBS支付申请单号\"><value><![CDATA[{}]]></value></column><column  name=\"OA单据编号\"><value><![CDATA[{}]]></value></column><column  name=\"OA单据ID\"><value><![CDATA[{}]]></value></column><column  name=\"OA中文表名\"><value><![CDATA[{}]]></value></column><column  name=\"OA数据库表名\"><value><![CDATA[{}]]></value></column><column  name=\"支付状态\"><value><![CDATA[{}]]></value></column><column  name=\"支付信息\"><value><![CDATA[{}]]></value></column><column  name=\"支付申请状态\"><value><![CDATA[{}]]></value></column><column  name=\"成功标记\"><value><![CDATA[{}]]></value></column></values><subForms/></formExport></forms>";
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/PaymentServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/PaymentServiceImpl.java
new file mode 100644
index 00000000..3a8b01f1
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/PaymentServiceImpl.java
@@ -0,0 +1,150 @@
+package com.hzya.frame.seeyon.cbs8.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.cbs8.dao.IPaymentDao;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.cbs8.service.IPaymentService;
+import com.hzya.frame.seeyon.util.OAPayState;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/6 16:34
+ **/
+@Service("OAPaymentServiceImpl")
+public class PaymentServiceImpl extends BaseService<PaymentEntity,String> implements IPaymentService {
+
+
+
+    private IPaymentDao paymentDao;
+
+    @Autowired
+    public void setPaymentDao(IPaymentDao paymentDao) {
+        this.paymentDao = paymentDao;
+        this.dao = paymentDao;
+    }
+
+    /**
+     * 查询列表
+     * @param entity
+     * @return
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PaymentEntity> query(PaymentEntity entity) {
+        List<PaymentEntity> list = paymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.entity_list_base");
+        return list;
+    }
+
+    /**
+     * 查询待支付的数据 需要推送到CBS的
+     * 如果需要查询流程状态已结束的 需要调用方设置finishedflag=1
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+
+
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PaymentEntity> queryUnpaid(PaymentEntity entity) throws Exception {
+        List<PaymentEntity> list = paymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_list_base_unpaid");
+        return list;
+    }
+
+    /**
+     * 查询交易成功的数据
+     * 内置了查询条件payResult = PayState.payStateGetValue("g"); 支付成功
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PaymentEntity> querySuccess(PaymentEntity entity) throws Exception {
+        if (null == entity){
+            entity = new PaymentEntity();
+        }
+        entity.setPayResult(OAPayState.payStateGetValue("g"));
+        List<PaymentEntity> list = paymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_list_base");
+        return list;
+    }
+
+    /**
+     * 查询交易成功,且电子回单为空的
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PaymentEntity> queryElecIsNull(PaymentEntity entity) throws Exception {
+        List<PaymentEntity> list = paymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_list_base_elec_isnull");
+        return list;
+    }
+
+    /**
+     * 查询支付中的数据
+     * 内置了查询条件 payResult = '支付中' or payResult not in ('审批撤销','审批拒绝','处理失败','退票','支付成功','取消支付','修改支付','支付失败')
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PaymentEntity> queryInPayment(PaymentEntity entity) throws Exception {
+        List<PaymentEntity> list = paymentDao.queryList(entity, "com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_list_base_in_payment");
+        return list;
+    }
+
+    /**
+     * 更新支付状态
+     *
+     * @param entity
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public void updatePayState(PaymentEntity entity) throws Exception {
+        if (null != entity
+                && StrUtil.isNotEmpty(entity.getTableName())
+                && StrUtil.isNotEmpty(entity.getOaId())
+                && StrUtil.isNotEmpty(entity.getFormsonId())
+                && StrUtil.isNotEmpty(entity.getPayDateField())
+                && StrUtil.isNotEmpty(entity.getPayResultField())){
+            String formsonId = entity.getFormsonId();
+            String[] formsonIdArray =  formsonId.split(",");
+            for (String s : formsonIdArray) {
+                entity.setFormsonId(s);
+                paymentDao.update("com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_update_payState",entity);
+            }
+        }
+    }
+
+    /**
+     * 更新电子回单字段
+     *
+     * @param entity
+     * @throws Exception
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public void updateElec(PaymentEntity entity) throws Exception {
+        if (null != entity
+                && StrUtil.isNotEmpty(entity.getTableName())
+                && StrUtil.isNotEmpty(entity.getOaId())
+                && StrUtil.isNotEmpty(entity.getReceiptFiled())){
+            paymentDao.update("com.hzya.frame.seeyon.cbs8.entity.PaymentEntity.PaymentEntity_update_electronic",entity);
+        }
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/TransactionDetailServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/TransactionDetailServiceImpl.java
new file mode 100644
index 00000000..21cee3ea
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/cbs8/service/impl/TransactionDetailServiceImpl.java
@@ -0,0 +1,98 @@
+package com.hzya.frame.seeyon.cbs8.service.impl;
+
+import cn.hutool.core.map.MapBuilder;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.cbs8.dao.ITransactionDetailDao;
+import com.hzya.frame.seeyon.cbs8.entity.TransactionDetailEntity;
+import com.hzya.frame.seeyon.cbs8.service.IPaymentService;
+import com.hzya.frame.seeyon.cbs8.service.ITransactionDetailService;
+import com.hzya.frame.stringutil.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/24 11:08
+ **/
+@Service(value = "OATransactionDetailServiceImpl")
+public class TransactionDetailServiceImpl extends BaseService<TransactionDetailEntity,String> implements ITransactionDetailService {
+
+    private ITransactionDetailDao transactionDetailDao;
+
+    @Autowired
+    public void setTransactionDetailDao(ITransactionDetailDao dao) {
+        this.transactionDetailDao = dao;
+        this.dao=dao;
+    }
+
+    /**
+     * 只返回交易流水号
+     *
+     * @param entity
+     * @return
+     */
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<TransactionDetailEntity> querySerialNumber(TransactionDetailEntity entity) {
+        List<TransactionDetailEntity> list = transactionDetailDao.queryList(entity, "TransactionDetailEntity_list_serialNumber");;
+        return list;
+    }
+
+    /**
+     * 保存交易明细,通过rest接口的方式
+     *
+     * @param entity
+     * @throws Exception
+     */
+    @Override
+    public void restSave(TransactionDetailEntity entity) {
+        String field0001= StringUtil.nullConvert(entity.getAccountNo());//我方银行账号
+        String field0002=StringUtil.nullConvert(entity.getAccountName());//我方户名
+        String field0003=StringUtil.nullConvert(entity.getOpenBank());//我方开户行
+        String field0004=StringUtil.nullConvert(entity.getBankType());//我方银行类型
+        String field0005=StringUtil.nullConvert(entity.getTransactionSerialNumber());//交易流水号
+        String field0006=StringUtil.nullConvert(entity.getBankTransactionDate());//交易日期
+        String field0007=StringUtil.nullConvert(entity.getBankSerialNumber());//银行流水号
+        String field0008=StringUtil.nullConvert(entity.getCurrency());//币种
+        String field0009=StringUtil.nullConvert(entity.getIncurredAmount());//收款金额
+        String field0010=StringUtil.nullConvert(entity.getPurpose());//用途
+        String field0011=StringUtil.nullConvert(entity.getDigest());//摘要
+        String field0012=StringUtil.nullConvert(entity.getOppositeAccount());//对方账号
+        String field0013=StringUtil.nullConvert(entity.getOppositeName());//对方户名
+        String field0014=StringUtil.nullConvert(entity.getOppositeOpeningBank());//对方开户行
+        String field0015=StringUtil.nullConvert(entity.getRemark());//备注
+        String data = StrUtil.format(getXmlTemplate(),field0001,field0002,field0003,field0004,field0005,field0006,field0007,field0008,field0009,field0010,field0011,field0012,field0013,field0014,field0015);
+        Map<String, String> headerMap = MapBuilder.<String, String>create(true)
+                .put("apiCode", "8000240006")
+                .put("publicKey","ZJYAorA7JuRDfrVjywcx78BFcqlLwthgXNC65TXxxQMUHuxCe7eDIk+3zDUT+v578prj")
+                .put("secretKey","a54vt9Wx7gdBig+4JCkZ/lISIIL2m4ZEyZkXtW0uQVBDHS+V4SVgT6xhNblacri/j3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")
+                .put("appId","800024")
+                .build();
+        JSONObject paramsTemplate = new JSONObject();
+        paramsTemplate.put("loginName", "hzya_rest");
+        paramsTemplate.put("dataXml", data);
+        String params = JSONObject.toJSONString(paramsTemplate);
+        logger.info("保存交易明细到OA底表请求参数:{}",params);
+        String body = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface").addHeaders(headerMap).body(params).timeout(60000).execute().body();
+        logger.info("保存交易明细到OA底表响应参数:{}",body);
+    }
+
+    /**
+     * 无流程表单模版
+     *  transaction 交易明细
+     *  payApply 支付申请日志
+     * @return
+     */
+    private String getXmlTemplate(){
+        return "<forms  version=\"2.1\"><formExport><summary  id=\"-6287716442449165745\" name=\"formmain_0233\"/><definitions><column  id=\"field0001\" type=\"0\" name=\"我方银行账户\" isNullable=\"false\" length=\"100\"/><column  id=\"field0002\" type=\"0\" name=\"我方户名\" isNullable=\"false\" length=\"100\"/><column  id=\"field0003\" type=\"0\" name=\"我方开户行\" isNullable=\"false\" length=\"100\"/><column  id=\"field0004\" type=\"0\" name=\"我方银行类型\" isNullable=\"false\" length=\"100\"/><column  id=\"field0005\" type=\"0\" name=\"交易流水号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0006\" type=\"3\" name=\"交易日期\" isNullable=\"false\" length=\"255\"/><column  id=\"field0007\" type=\"0\" name=\"银行流水号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0008\" type=\"0\" name=\"币种\" isNullable=\"false\" length=\"100\"/><column  id=\"field0009\" type=\"4\" name=\"收款金额\" isNullable=\"false\" length=\"20\"/><column  id=\"field0010\" type=\"0\" name=\"用途\" isNullable=\"false\" length=\"800\"/><column  id=\"field0011\" type=\"0\" name=\"摘要\" isNullable=\"false\" length=\"256\"/><column  id=\"field0012\" type=\"0\" name=\"对方账号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0013\" type=\"0\" name=\"对方户名\" isNullable=\"false\" length=\"100\"/><column  id=\"field0014\" type=\"0\" name=\"对方开户行\" isNullable=\"false\" length=\"100\"/><column  id=\"field0015\" type=\"0\" name=\"备注\" isNullable=\"false\" length=\"800\"/></definitions><values><column  name=\"我方银行账户\"><value><![CDATA[{}]]></value></column><column  name=\"我方户名\"><value><![CDATA[{}]]></value></column><column  name=\"我方开户行\"><value><![CDATA[{}]]></value></column><column  name=\"我方银行类型\"><value><![CDATA[{}]]></value></column><column  name=\"交易流水号\"><value><![CDATA[{}]]></value></column><column  name=\"交易日期\"><value><![CDATA[{}]]></value></column><column  name=\"银行流水号\"><value><![CDATA[{}]]></value></column><column  name=\"币种\"><value><![CDATA[{}]]></value></column><column  name=\"收款金额\"><value><![CDATA[{}]]></value></column><column  name=\"用途\"><value><![CDATA[{}]]></value></column><column  name=\"摘要\"><value><![CDATA[{}]]></value></column><column  name=\"对方账号\"><value><![CDATA[{}]]></value></column><column  name=\"对方户名\"><value><![CDATA[{}]]></value></column><column  name=\"对方开户行\"><value><![CDATA[{}]]></value></column><column  name=\"备注\"><value><![CDATA[{}]]></value></column></values><subForms/></formExport></forms>";
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICapFormDefinitionDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICapFormDefinitionDao.java
new file mode 100644
index 00000000..f892fa11
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICapFormDefinitionDao.java
@@ -0,0 +1,51 @@
+package com.hzya.frame.seeyon.dao;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.entity.CapFormDefinitionEntity;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+
+import java.util.List;
+
+/**
+ *
+ * @content OA字段配置表DAO
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 16:00
+ *
+ */
+
+public interface ICapFormDefinitionDao extends IBaseDao<CapFormDefinitionEntity,String> {
+
+    /**
+    *
+    * @content 通过模版编号获取无流程表单配置信息
+    * @className: Administrator
+    * @author laborer
+    * @date 2024-09-09 16:02
+    *
+    */
+    List<CapFormDefinitionEntity> getFormFiled(CapFormDefinitionEntity fieldInfo);
+/**
+ *
+ * @content 通过主键删除单据数据
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 17:04
+ *
+ */
+
+    int deleteByKey(CapFormDefinitionEntity fieldInfo);
+/**
+ *
+ * @content 通过客户传递的数据值查询古河条件的数据
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 17:05
+ *
+ */
+
+    List<CapFormDefinitionEntity> getFormFiledByFileValue(CapFormDefinitionEntity fieldInfo);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpAttachmentDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpAttachmentDao.java
new file mode 100644
index 00000000..5c64e35f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpAttachmentDao.java
@@ -0,0 +1,21 @@
+package com.hzya.frame.seeyon.dao;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.entity.CtpAttachmentEntity;
+
+import java.util.List;
+
+public interface ICtpAttachmentDao extends IBaseDao<CtpAttachmentEntity,String> {
+    //更新数据
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    int updateCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity);
+
+    //根据fiel_url查询附件业务记录,如果存在则更新,如果不存在则新增
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    List<CtpAttachmentEntity> queryCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity);
+
+    //新增
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    CtpAttachmentEntity saveCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpFileDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpFileDao.java
new file mode 100644
index 00000000..87961648
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ICtpFileDao.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.dao;
+
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+
+/**
+ * @Description seeyon 附件对象
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:21
+ **/
+public interface ICtpFileDao extends IBaseDao<CtpFileEntity,String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonDao.java
new file mode 100644
index 00000000..02d6888a
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonDao.java
@@ -0,0 +1,108 @@
+package com.hzya.frame.seeyon.dao;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.IBaseDao;
+import com.hzya.frame.seeyon.entity.SeeyonEntity;
+
+import java.util.List;
+
+/**
+ * com.hzya.frame.seeyon.dao
+ *
+ * @author yqh
+ * @date 2023-08 -30 10:43
+ */
+
+public interface ISeeYonDao extends IBaseDao<SeeyonEntity,String> {
+    /***
+     * @Content:通过类型获取OA基本档案数据
+     * @Author 👻👻👻👻yqh👻👻👻👻
+     * @Date  2023年8月30日11:33:17
+     * @Param seeyon
+     * @return
+     **/
+    @DS("ht_oa_sqlserver")
+    List<SeeyonEntity> selectOAListByTypeformson_0324(SeeyonEntity seeyon);
+    @DS("ht_oa_sqlserver")
+    List<SeeyonEntity> selectOAListByTypeformson_0352(SeeyonEntity seeyon);
+    @DS("ht_oa_sqlserver")
+    List<SeeyonEntity> selectOAListByTypeMain(SeeyonEntity seeyon);
+    /**
+     * 通过关联关系获取附件主键
+     * @param seeyonEntity
+     * @return
+     */
+    @DS("ht_oa_sqlserver")
+    List<SeeyonEntity> selectFileUrl(SeeyonEntity seeyonEntity);
+/***
+ * @Content:修改数据状态,避免重复抓取
+ * @Author 👻👻👻👻yqh👻👻👻👻
+ * @Date
+ * @Param
+ * @return
+ **/
+    int updateFormStete(SeeyonEntity s);
+
+    /**
+     * 
+     * @content 查询付款单中得电子回单
+     * @Param 
+     * @Return 
+     * @Author hecan 
+     * @Date 2023/11/9 14:23
+     * **/
+    @DS("ht_oa_sqlserver")
+    List<SeeyonEntity> selectOAListByTypeformmain_0327(SeeyonEntity seeyon);
+    @DS("ht_oa_sqlserver")
+    int updateFormformmain_0327(SeeyonEntity seeyon);
+    
+    /**
+     * 
+     * @content 根据付款方id查询付款名
+     * @Param 
+     * @Return 
+     * @Author hecan 
+     * @Date 2023/11/9 14:23
+     * **/
+    @DS("ht_oa_sqlserver")
+     List<SeeyonEntity> selectOAListByField0258(SeeyonEntity seeyon);
+
+    /**
+     *
+     * @content 查询速网U8C中的所有组织
+     * @Param
+     * @Return
+     * @Author hecan
+     * @Date 2023/11/13 11:56
+     * **/
+     @DS("sowow_sqlserver_test")
+    List<SeeyonEntity> selectOAListByCorp(SeeyonEntity seeyon);
+     
+     /**
+      * 
+      * @content 修改OA中的字段为速网U8C销售订单主键
+      * @Param 
+      * @Return 
+      * @Author hecan 
+      * @Date 2023/11/15 11:28
+      * **/
+     @DS("swoa_mysql")
+    int updateFormformmain_0237(SeeyonEntity seeyonEntity);
+    @DS("swoa_mysql")
+    int updateFormformson_0238(SeeyonEntity seeyonEntity);
+    //根据销售订单编码查询档案主键
+    @DS("swoa_mysql")
+    SeeyonEntity selectOAListByformmain_0237(SeeyonEntity seeyonEntity);
+
+    /**
+     * 
+     * @content 修改付款单报销单等单据的推送状态
+     * @Param 
+     * @Return 
+     * @Author hecan 
+     * @Date 2023/12/20 8:59
+     * **/
+    @DS("ht_oa_sqlserver")
+    int updatepush(SeeyonEntity seeyon);
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonInterFaceDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonInterFaceDao.java
new file mode 100644
index 00000000..2edbc648
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/ISeeYonInterFaceDao.java
@@ -0,0 +1,37 @@
+package com.hzya.frame.seeyon.dao;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+public interface ISeeYonInterFaceDao {
+    /***
+     * 查询OA档案数据,暂时只根据ID查询,只返回ID集合,此方法暂时用于更新无流程表单判断
+     * @content:
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date  2023-08-30 10:54
+     * @param
+     * @return java.util.List<com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity>
+     **/
+   List<SeeYonInterFaceEntity> queryArchives(SeeYonInterFaceEntity seeYonInterFaceEntity);
+
+   /***
+    * 答应我写注释好吗
+    * @content:
+    * @author 👻👻👻👻👻👻👻👻 gjh
+    * @date  2024-01-18 16:01
+    * @param jsonObject 根据模版ID获取数据
+    * @return java.util.List<com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity>
+    **/
+    List<SeeYonInterFaceEntity> queryDefinitionInfo(SeeYonInterFaceEntity jsonObject);
+    List<Map<String, Object>> queryDefinitionData(SeeYonInterFaceEntity jsonObject);
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CapFormDefinitionDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CapFormDefinitionDaoImpl.java
new file mode 100644
index 00000000..07304f45
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CapFormDefinitionDaoImpl.java
@@ -0,0 +1,39 @@
+package com.hzya.frame.seeyon.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.dao.ICapFormDefinitionDao;
+import com.hzya.frame.seeyon.dao.ICtpFileDao;
+import com.hzya.frame.seeyon.entity.CapFormDefinitionEntity;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ *
+ * @content OA字段配置表DAO
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 16:00
+ *
+ */
+@Repository(value = "CapFormDefinitionDaoImpl")
+public class CapFormDefinitionDaoImpl extends MybatisGenericDao<CapFormDefinitionEntity,String> implements ICapFormDefinitionDao {
+    @DS("#fieldInfo.dataSourceCode")
+    @Override
+    public List<CapFormDefinitionEntity> getFormFiled(CapFormDefinitionEntity fieldInfo) {
+        return (List<CapFormDefinitionEntity>) selectList("com.hzya.frame.seeyon.entity.CapFormDefinitionEntity.CapFormDefinitionEntity_list_base",fieldInfo);
+    }
+    @DS("#fieldInfo.dataSourceCode")
+    @Override
+    public int deleteByKey(CapFormDefinitionEntity fieldInfo) {
+        return super.delete("com.hzya.frame.seeyon.entity.CapFormDefinitionEntity.CapFormDefinitionEntity_delete",fieldInfo);
+    }
+    @DS("#fieldInfo.dataSourceCode")
+    @Override
+    public List<CapFormDefinitionEntity> getFormFiledByFileValue(CapFormDefinitionEntity fieldInfo) {
+        return (List<CapFormDefinitionEntity>) selectList("com.hzya.frame.seeyon.entity.CapFormDefinitionEntity.CapFormDefinitionEntity_list_table_info",fieldInfo);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpAttachmentDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpAttachmentDaoImpl.java
new file mode 100644
index 00000000..080c28bc
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpAttachmentDaoImpl.java
@@ -0,0 +1,31 @@
+package com.hzya.frame.seeyon.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.dao.ICtpAttachmentDao;
+import com.hzya.frame.seeyon.entity.CtpAttachmentEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository(value = "ctpAttachmentDaoImpl")
+public class
+CtpAttachmentDaoImpl extends MybatisGenericDao<CtpAttachmentEntity,String> implements ICtpAttachmentDao {
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    @Override
+    public int updateCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.CtpAttachmentDaoImpl.entity_update",ctpAttachmentEntity);
+    }
+
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    @Override
+    public List<CtpAttachmentEntity> queryCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity) {
+        return (List<CtpAttachmentEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.CtpAttachmentDaoImpl.entity_list_base",ctpAttachmentEntity);
+    }
+
+    @DS("#ctpAttachmentEntity.dataSourceCode")
+    @Override
+    public CtpAttachmentEntity saveCtpAttachment(CtpAttachmentEntity ctpAttachmentEntity) {
+        return super.save("com.hzya.frame.seeyon.dao.impl.CtpAttachmentDaoImpl.entity_insert",ctpAttachmentEntity);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpFileDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpFileDaoImpl.java
new file mode 100644
index 00000000..8b80d3d7
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/CtpFileDaoImpl.java
@@ -0,0 +1,17 @@
+package com.hzya.frame.seeyon.dao.impl;
+
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.dao.ICtpAttachmentDao;
+import com.hzya.frame.seeyon.dao.ICtpFileDao;
+import com.hzya.frame.seeyon.entity.CtpAttachmentEntity;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:22
+ **/
+@Repository()
+public class CtpFileDaoImpl extends MybatisGenericDao<CtpFileEntity,String> implements ICtpFileDao {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonDaoImpl.java
new file mode 100644
index 00000000..332ae7fc
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonDaoImpl.java
@@ -0,0 +1,94 @@
+package com.hzya.frame.seeyon.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.dao.ISeeYonDao;
+import com.hzya.frame.seeyon.entity.SeeyonEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * com.hzya.frame.seeyon.dao.impl
+ *
+ * @author yqh
+ * @date 2023-08 -30 10:44
+ */
+@DS("htsqlserver")
+@Repository(value = "seeYonDaoImpl")
+public class SeeYonDaoImpl extends MybatisGenericDao<SeeyonEntity,String> implements ISeeYonDao {
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectOAListByTypeformson_0352(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_formson_0352",seeyon);
+    }
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectOAListByTypeformson_0324(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_formson_0324",seeyon);
+    }
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectOAListByTypeMain(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_main",seeyon);
+    }
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectFileUrl(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_ctp_attachment",seeyon);
+    }
+    @DS("ht_oa_sqlserver")
+    @Override
+    public int updateFormStete(SeeyonEntity s) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_update",s);
+    }
+
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectOAListByTypeformmain_0327(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_formmain_0327",seeyon);
+    }
+
+    @DS("ht_oa_sqlserver")
+    @Override
+    public int updateFormformmain_0327(SeeyonEntity seeyon) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_update_formmain_0327",seeyon);
+    }
+
+    @DS("ht_oa_sqlserver")
+    @Override
+    public List<SeeyonEntity> selectOAListByField0258(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_field0258",seeyon);
+    }
+
+    @DS("sowow_sqlserver_test")
+    @Override
+    public List<SeeyonEntity> selectOAListByCorp(SeeyonEntity seeyon) {
+        return (List<SeeyonEntity>) super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_corp",seeyon);
+    }
+
+    @Override
+    @DS("swoa_mysql")
+    public int updateFormformmain_0237(SeeyonEntity seeyonEntity) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_update_formmain_0237",seeyonEntity);
+    }
+
+    @Override
+    @DS("swoa_mysql")
+    public int updateFormformson_0238(SeeyonEntity seeyonEntity) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_update_formson_0238",seeyonEntity);
+    }
+
+    @Override
+    @DS("swoa_mysql")
+    public SeeyonEntity selectOAListByformmain_0237(SeeyonEntity seeyonEntity) {
+        return (SeeyonEntity) super.selectOne("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_list_base_formmain_0237",seeyonEntity);
+    }
+
+    @DS("ht_oa_sqlserver")
+    @Override
+    public int updatepush(SeeyonEntity seeyon) {
+        return super.update("com.hzya.frame.seeyon.dao.impl.SeeYonDaoImpl.entity_update_push",seeyon);
+    }
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonInterFaceDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonInterFaceDaoImpl.java
new file mode 100644
index 00000000..4091f0be
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/dao/impl/SeeYonInterFaceDaoImpl.java
@@ -0,0 +1,43 @@
+package com.hzya.frame.seeyon.dao.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.dao.ISeeYonInterFaceDao;
+import com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+@Repository(value = "seeYonInterFaceDao")
+public class SeeYonInterFaceDaoImpl extends MybatisGenericDao implements ISeeYonInterFaceDao {
+
+
+    @Override
+    @DS("ht_oa_sqlserver")
+    public List<SeeYonInterFaceEntity> queryArchives(SeeYonInterFaceEntity seeYonInterFaceEntity) {
+        List list = super.query("com.hzya.frame.seeyon.dao.impl.SeeYonInterFaceDaoImpl.queryArchives",seeYonInterFaceEntity);
+        return  list;
+    }
+
+    @Override
+    @DS("#seeYonInterFaceEntity.dataSourceCode")
+    public List<SeeYonInterFaceEntity> queryDefinitionInfo(SeeYonInterFaceEntity seeYonInterFaceEntity) {
+
+        return super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonInterFaceDaoImpl.queryDefinitionInfo",seeYonInterFaceEntity);
+    }
+
+    @Override
+    @DS("#seeYonInterFaceEntity.dataSourceCode")
+    public List<Map<String, Object>> queryDefinitionData(SeeYonInterFaceEntity seeYonInterFaceEntity) {
+        List<Map<String, Object>> list = super.selectList("com.hzya.frame.seeyon.dao.impl.SeeYonInterFaceDaoImpl.queryDefinitionData",seeYonInterFaceEntity);
+        return list ;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.java
new file mode 100644
index 00000000..2ab841bd
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.java
@@ -0,0 +1,71 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.io.File;
+
+/** 
+ * 
+ * @content OA字段配置表
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 15:48
+ *
+ */
+
+public class CapFormDefinitionEntity extends BaseEntity {
+    private String fieldInfo;//字段属性定义
+    private String viewInfo;//视图权限定义
+    private String appbindInfo;//应用绑定定义
+    private String tableName;//表名
+    private String fieldName;//字段名称
+    private String fieldValue;//字段值
+
+    public String getFieldValue() {
+        return fieldValue;
+    }
+
+    public void setFieldValue(String fieldValue) {
+        this.fieldValue = fieldValue;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getFieldInfo() {
+        return fieldInfo;
+    }
+
+    public void setFieldInfo(String fieldInfo) {
+        this.fieldInfo = fieldInfo;
+    }
+
+    public String getViewInfo() {
+        return viewInfo;
+    }
+
+    public void setViewInfo(String viewInfo) {
+        this.viewInfo = viewInfo;
+    }
+
+    public String getAppbindInfo() {
+        return appbindInfo;
+    }
+
+    public void setAppbindInfo(String appbindInfo) {
+        this.appbindInfo = appbindInfo;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.xml
new file mode 100644
index 00000000..5c0a498d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CapFormDefinitionEntity.xml
@@ -0,0 +1,41 @@
+<?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.entity.CapFormDefinitionEntity">
+    <resultMap id="get-CapFormDefinitionEntity-result" type="com.hzya.frame.seeyon.entity.CapFormDefinitionEntity">
+        <!--主键 -->
+        <result property="id" column="id" />
+        <result property="fieldInfo" column="field_info" />
+        <result property="viewInfo" column="view_info" />
+        <result property="appbindInfo" column="appbind_info" />
+
+    </resultMap>
+
+
+
+    <sql id="CapFormDefinitionEntity_sql">
+        id,
+        field_info,
+        view_info,
+        appbind_info
+    </sql>
+
+
+    <!-- 查询 采用==查询 -->
+    <select id="CapFormDefinitionEntity_list_base" resultMap="get-CapFormDefinitionEntity-result" parameterType="com.hzya.frame.seeyon.entity.CapFormDefinitionEntity">
+    select
+    <include refid="CapFormDefinitionEntity_sql"/>
+    from
+    cap_form_definition
+    <trim prefix="where" prefixOverrides="and">
+        <if test="appbindInfo != null and appbindInfo != ''">and APPBIND_INFO like '%${appbindInfo}%'</if>
+    </trim>
+    </select>
+    <!-- 查询 采用==查询 -->
+    <select id="CapFormDefinitionEntity_list_table_info" resultMap="get-CapFormDefinitionEntity-result" parameterType="com.hzya.frame.seeyon.entity.CapFormDefinitionEntity">
+        select id from ${tableName} where ${fieldName}  = #{fieldValue}
+    </select>
+
+    <delete id="CapFormDefinitionEntity_delete" parameterType="com.hzya.frame.basedao.entity.RequestDisposeEntity">
+        delete from ${tableName} where ${fieldName} = #{id}
+    </delete>
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CfsLogEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CfsLogEntity.java
new file mode 100644
index 00000000..31c22e17
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CfsLogEntity.java
@@ -0,0 +1,65 @@
+package com.hzya.frame.seeyon.entity;
+
+/**
+ * @Description 保存交行日志用
+ * @Author xiangerlin
+ * @Date 2024/3/18 14:07
+ **/
+public class CfsLogEntity {
+
+    private String tab_name_ch;//中文表名
+    private String tab_name_en;//英文表名
+    private OAWorkflowEventDataEntity oaWorkflowEventDataEntity;//无流程表单数据
+
+    private String result;//交通银行返回的参数(解析后的)
+    public CfsLogEntity() {
+
+    }
+
+    /**
+     *
+     * @param tab_name_ch 中文表名
+     * @param tab_name_en 英文表名
+     * @param oaWorkflowEventDataEntity 无流程表单数据
+     */
+    public CfsLogEntity(String tab_name_ch, String tab_name_en,  OAWorkflowEventDataEntity oaWorkflowEventDataEntity,String result) {
+        this.tab_name_ch = tab_name_ch;
+        this.tab_name_en = tab_name_en;
+        this.oaWorkflowEventDataEntity = oaWorkflowEventDataEntity;
+        this.result=result;
+    }
+
+    public String getTab_name_ch() {
+        return tab_name_ch;
+    }
+
+    public void setTab_name_ch(String tab_name_ch) {
+        this.tab_name_ch = tab_name_ch;
+    }
+
+    public String getTab_name_en() {
+        return tab_name_en;
+    }
+
+    public void setTab_name_en(String tab_name_en) {
+        this.tab_name_en = tab_name_en;
+    }
+
+
+
+    public OAWorkflowEventDataEntity getOaWorkflowEventDataEntity() {
+        return oaWorkflowEventDataEntity;
+    }
+
+    public void setOaWorkflowEventDataEntity(OAWorkflowEventDataEntity oaWorkflowEventDataEntity) {
+        this.oaWorkflowEventDataEntity = oaWorkflowEventDataEntity;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CollAttachmentResDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CollAttachmentResDTO.java
new file mode 100644
index 00000000..42094a55
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CollAttachmentResDTO.java
@@ -0,0 +1,340 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.alibaba.fastjson.annotation.JSONField;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 查询协同附件列表返回对象 /rest/coll/attachments/{summaryID}/{attType}
+ * @Author xiangerlin
+ * @Date 2024/8/16 09:11
+ **/
+public class CollAttachmentResDTO {
+    private String id; //ctp_attachment 表的id
+    private String reference;// 流程表的id, col_summary
+    private String subReference;//流程表单附件字段存的id
+    private String category;//应用分类
+    private String type;
+    private String filename;//附件名称
+    private String mimeType;//附件类型
+    private String createdate;
+    private String size;//附件大小
+    private String description;
+    private String fileUrl;//附件id,ctp_file 表的逐渐
+    private String extension;
+    private String icon;
+    private String iconFont;
+    private String genesisId;
+    private String sort;
+    private String officeTransformEnable;
+    private String obsObjectKey;
+    private String secretLevel;
+    private String secretLevelName;
+    private String canBrowse;
+    private String v;
+    private Boolean wpsOnlineEnable;
+    private Boolean allowTrans;
+    private JSONObject transValue;
+    private String createdateStr;
+    @JSONField(name = "new")
+    private Boolean newFile;
+    private Map<String, String> extraMap; // 使用Map来存储额外的键值对
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getReference() {
+        return reference;
+    }
+
+    public void setReference(String reference) {
+        this.reference = reference;
+    }
+
+    public String getSubReference() {
+        return subReference;
+    }
+
+    public void setSubReference(String subReference) {
+        this.subReference = subReference;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public String getMimeType() {
+        return mimeType;
+    }
+
+    public void setMimeType(String mimeType) {
+        this.mimeType = mimeType;
+    }
+
+    public String getCreatedate() {
+        return createdate;
+    }
+
+    public void setCreatedate(String createdate) {
+        this.createdate = createdate;
+    }
+
+    public String getSize() {
+        return size;
+    }
+
+    public void setSize(String size) {
+        this.size = size;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public String getExtension() {
+        return extension;
+    }
+
+    public void setExtension(String extension) {
+        this.extension = extension;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public String getIconFont() {
+        return iconFont;
+    }
+
+    public void setIconFont(String iconFont) {
+        this.iconFont = iconFont;
+    }
+
+    public String getGenesisId() {
+        return genesisId;
+    }
+
+    public void setGenesisId(String genesisId) {
+        this.genesisId = genesisId;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getOfficeTransformEnable() {
+        return officeTransformEnable;
+    }
+
+    public void setOfficeTransformEnable(String officeTransformEnable) {
+        this.officeTransformEnable = officeTransformEnable;
+    }
+
+    public String getObsObjectKey() {
+        return obsObjectKey;
+    }
+
+    public void setObsObjectKey(String obsObjectKey) {
+        this.obsObjectKey = obsObjectKey;
+    }
+
+    public String getSecretLevel() {
+        return secretLevel;
+    }
+
+    public void setSecretLevel(String secretLevel) {
+        this.secretLevel = secretLevel;
+    }
+
+    public String getSecretLevelName() {
+        return secretLevelName;
+    }
+
+    public void setSecretLevelName(String secretLevelName) {
+        this.secretLevelName = secretLevelName;
+    }
+
+    public String getCanBrowse() {
+        return canBrowse;
+    }
+
+    public void setCanBrowse(String canBrowse) {
+        this.canBrowse = canBrowse;
+    }
+
+    public String getV() {
+        return v;
+    }
+
+    public void setV(String v) {
+        this.v = v;
+    }
+
+    public Boolean getWpsOnlineEnable() {
+        return wpsOnlineEnable;
+    }
+
+    public void setWpsOnlineEnable(Boolean wpsOnlineEnable) {
+        this.wpsOnlineEnable = wpsOnlineEnable;
+    }
+
+    public Boolean getAllowTrans() {
+        return allowTrans;
+    }
+
+    public void setAllowTrans(Boolean allowTrans) {
+        this.allowTrans = allowTrans;
+    }
+
+    public JSONObject getTransValue() {
+        return transValue;
+    }
+
+    public void setTransValue(JSONObject transValue) {
+        this.transValue = transValue;
+    }
+
+    public String getCreatedateStr() {
+        return createdateStr;
+    }
+
+    public void setCreatedateStr(String createdateStr) {
+        this.createdateStr = createdateStr;
+    }
+
+    public Boolean getNewFile() {
+        return newFile;
+    }
+
+    public void setNewFile(Boolean newFile) {
+        this.newFile = newFile;
+    }
+
+    public Map<String, String> getExtraMap() {
+        return extraMap;
+    }
+
+    public void setExtraMap(Map<String, String> extraMap) {
+        this.extraMap = extraMap;
+    }
+
+    public static void main(String[] args) {
+        String str = "[{\n" +
+                "\t\"id\": 5180424495316486643,\n" +
+                "\t\"reference\": -1741558410793893622,\n" +
+                "\t\"subReference\": 584122959825946183,\n" +
+                "\t\"category\": 66,\n" +
+                "\t\"type\": 0,\n" +
+                "\t\"filename\": \"Order.pdf\",\n" +
+                "\t\"mimeType\": \"application/pdf\",\n" +
+                "\t\"createdate\": 1723454209000,\n" +
+                "\t\"size\": 131234,\n" +
+                "\t\"description\": null,\n" +
+                "\t\"fileUrl\": -5577707714790406265,\n" +
+                "\t\"extension\": \"pdf\",\n" +
+                "\t\"icon\": \"pdf.gif\",\n" +
+                "\t\"iconFont\": \"pdf\",\n" +
+                "\t\"genesisId\": null,\n" +
+                "\t\"sort\": 0,\n" +
+                "\t\"officeTransformEnable\": \"disable\",\n" +
+                "\t\"obsObjectKey\": \"\",\n" +
+                "\t\"secretLevel\": null,\n" +
+                "\t\"secretLevelName\": null,\n" +
+                "\t\"canBrowse\": 1,\n" +
+                "\t\"v\": \"fcdf8ae9d97bf2969fa6005394442885\",\n" +
+                "\t\"wpsOnlineEnable\": false,\n" +
+                "\t\"allowTrans\": false,\n" +
+                "\t\"transValue\": {\n" +
+                "\t\t\"isWpsOnlineEnable\": false,\n" +
+                "\t\t\"isAllowTrans\": false\n" +
+                "\t},\n" +
+                "\t\"createdateStr\": \"1723454209000\",\n" +
+                "\t\"new\": false,\n" +
+                "\t\"extraMap\": {}\n" +
+                "}, {\n" +
+                "\t\"id\": -6639984402087339,\n" +
+                "\t\"reference\": -1741558410793893622,\n" +
+                "\t\"subReference\": 649078190027982545,\n" +
+                "\t\"category\": 66,\n" +
+                "\t\"type\": 0,\n" +
+                "\t\"filename\": \"Invoice.pdf\",\n" +
+                "\t\"mimeType\": \"application/pdf\",\n" +
+                "\t\"createdate\": 1723454201000,\n" +
+                "\t\"size\": 158553,\n" +
+                "\t\"description\": null,\n" +
+                "\t\"fileUrl\": -4345076582332676605,\n" +
+                "\t\"extension\": \"pdf\",\n" +
+                "\t\"icon\": \"pdf.gif\",\n" +
+                "\t\"iconFont\": \"pdf\",\n" +
+                "\t\"genesisId\": null,\n" +
+                "\t\"sort\": 0,\n" +
+                "\t\"officeTransformEnable\": \"disable\",\n" +
+                "\t\"obsObjectKey\": \"\",\n" +
+                "\t\"secretLevel\": null,\n" +
+                "\t\"secretLevelName\": null,\n" +
+                "\t\"canBrowse\": 1,\n" +
+                "\t\"v\": \"85d721af033c7dddf385be2c7ea8d423\",\n" +
+                "\t\"wpsOnlineEnable\": false,\n" +
+                "\t\"allowTrans\": false,\n" +
+                "\t\"transValue\": {\n" +
+                "\t\t\"isWpsOnlineEnable\": false,\n" +
+                "\t\t\"isAllowTrans\": false\n" +
+                "\t},\n" +
+                "\t\"createdateStr\": \"1723454201000\",\n" +
+                "\t\"new\": false,\n" +
+                "\t\"extraMap\": {}\n" +
+                "}]";
+        List<CollAttachmentResDTO> list = JSON.parseArray(str,CollAttachmentResDTO.class);
+        System.out.println(list);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.java
new file mode 100644
index 00000000..1b482263
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.java
@@ -0,0 +1,124 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 
+ * @content OA附件业务表
+ * @Param 
+ * @Return 
+ * @Author hecan 
+ * @Date 2023/11/1 14:58
+ * **/
+public class CtpAttachmentEntity extends BaseEntity {
+    private String id;//主键ID
+    private String sub_reference;//次数据ID此id为真正写在流程表单中的ID
+    private String category; //应用分类、
+    private String type;//分类
+    private String filename;//附件名称
+    private String file_url;//附件链接
+    private String mime_type;//
+    private Date createdate;//创建时间
+    private String attachment_size;//附件大小
+    private String sort;//序号
+    private String att_reference;//流程表的ID(col_summary)
+    private String uuid;
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getSub_reference() {
+        return sub_reference;
+    }
+
+    public void setSub_reference(String sub_reference) {
+        this.sub_reference = sub_reference;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public String getFile_url() {
+        return file_url;
+    }
+
+    public void setFile_url(String file_url) {
+        this.file_url = file_url;
+    }
+
+    public String getMime_type() {
+        return mime_type;
+    }
+
+    public void setMime_type(String mime_type) {
+        this.mime_type = mime_type;
+    }
+
+    public Date getCreatedate() {
+        return createdate;
+    }
+
+    public void setCreatedate(Date createdate) {
+        this.createdate = createdate;
+    }
+
+    public String getAttachment_size() {
+        return attachment_size;
+    }
+
+    public void setAttachment_size(String attachment_size) {
+        this.attachment_size = attachment_size;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getAtt_reference() {
+        return att_reference;
+    }
+
+    public void setAtt_reference(String att_reference) {
+        this.att_reference = att_reference;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.xml
new file mode 100644
index 00000000..f4747121
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpAttachmentEntity.xml
@@ -0,0 +1,89 @@
+<?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.dao.impl.CtpAttachmentDaoImpl">
+    <resultMap id="get-CtpAttachmentEntity-result" type="com.hzya.frame.seeyon.entity.CtpAttachmentEntity">
+        <result property="id" column="id" />
+        <result property="sub_reference" column="sub_reference" />
+        <result property="category" column="category" />
+        <result property="type" column="type" />
+        <result property="filename" column="filename" />
+        <result property="file_url" column="file_url" />
+        <result property="mime_type" column="mime_type" />
+        <result property="createdate" column="createdate" />
+        <result property="attachment_size" column="attachment_size" />
+        <result property="sort" column="sort" />
+        <result property="att_reference" column="att_reference" />
+    </resultMap>
+
+    <sql id="CtpAttachmentEntity_Column_List">
+		id,
+		sub_reference,
+		category,
+		type,
+		filename,
+		file_url,
+		mime_type,
+		createdate,
+		attachment_size,
+		sort,
+		att_reference
+	</sql>
+
+
+
+    <!-- 查询 采用==查询 -->
+    <select id="entity_list_base" resultMap="get-CtpAttachmentEntity-result" parameterType="com.hzya.frame.seeyon.entity.CtpAttachmentEntity">
+        select
+        <include refid="CtpAttachmentEntity_Column_List" />
+        from CTP_ATTACHMENT
+        <trim prefix="where" prefixOverrides="and">
+            <if test="file_url != null and file_url !='' ">file_url = #{file_url} </if>
+        </trim>
+    </select>
+
+    <!-- 新增 -->
+    <insert id="entity_insert" parameterType="com.hzya.frame.seeyon.entity.CtpAttachmentEntity">
+        insert into CTP_ATTACHMENT(
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id !='' "> id, </if>
+            <if test="sub_reference != null and sub_reference !='' "> sub_reference, </if>
+            <if test="category != null and category !='' "> category, </if>
+            <if test="type != null and type !='' "> type, </if>
+            <if test="filename != null and filename !='' "> filename, </if>
+            <if test="file_url != null and file_url !='' "> file_url, </if>
+            <if test="mime_type != null and mime_type !='' "> mime_type, </if>
+            <if test="attachment_size != null and attachment_size !='' "> attachment_size, </if>
+            <if test="sort != null and sort !='' "> sort, </if>
+            <if test="att_reference != null and att_reference !='' "> att_reference, </if>
+            <if test="createdate != null"> createdate</if>
+        </trim>
+        )values
+        (
+        <trim suffix="" suffixOverrides=",">
+            <if test="id != null and id !='' "> #{id}, </if>
+            <if test="sub_reference != null and sub_reference !='' "> #{sub_reference}, </if>
+            <if test="category != null and category !='' "> #{category}, </if>
+            <if test="type != null and type !='' "> #{type}, </if>
+            <if test="filename != null and filename !='' "> #{filename}, </if>
+            <if test="file_url != null and file_url !='' "> #{file_url}, </if>
+            <if test="mime_type != null and mime_type !='' "> #{mime_type}, </if>
+            <if test="attachment_size != null and attachment_size !='' "> #{attachment_size}, </if>
+            <if test="sort != null and sort !='' "> #{sort}, </if>
+            <if test="att_reference != null and att_reference !='' "> #{att_reference}, </if>
+            <if test="createdate != null "> #{createdate}</if>
+        </trim>
+        )
+    </insert>
+
+    <!-- 修改 付款单中的电子回单字段-->
+    <update id="entity_update" parameterType="com.hzya.frame.seeyon.entity.CtpAttachmentEntity">
+        update CTP_ATTACHMENT set
+        <trim suffix="" suffixOverrides=",">
+            <if test="sub_reference != null and sub_reference !='' "> sub_reference = #{sub_reference},</if>
+            <if test="att_reference != null and att_reference !='' "> att_reference = #{att_reference}</if>
+        </trim>
+        where file_url = #{file_url}
+    </update>
+
+
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.java
new file mode 100644
index 00000000..61ebce25
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.java
@@ -0,0 +1,113 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.io.File;
+
+/**
+ * @Description OA附件表
+ * @Author xiangerlin
+ * @Date 2021/10/29 08:56
+ **/
+public class CtpFileEntity extends BaseEntity {
+    private String category;//应用类别
+    private String type;//类型
+    private String filename;//文件名
+    private String mime_type;//文件类型
+    private String create_date;
+    private String create_member;
+    private String file_size;//大小
+    private String description;//描述
+    private String update_date;
+    private String account_id;
+
+
+    private File file;//临时用
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public String getMime_type() {
+        return mime_type;
+    }
+
+    public void setMime_type(String mime_type) {
+        this.mime_type = mime_type;
+    }
+
+    public String getCreate_date() {
+        return create_date;
+    }
+
+    public void setCreate_date(String create_date) {
+        this.create_date = create_date;
+    }
+
+    public String getCreate_member() {
+        return create_member;
+    }
+
+    public void setCreate_member(String create_member) {
+        this.create_member = create_member;
+    }
+
+    public String getFile_size() {
+        return file_size;
+    }
+
+    public void setFile_size(String file_size) {
+        this.file_size = file_size;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getUpdate_date() {
+        return update_date;
+    }
+
+    public void setUpdate_date(String update_date) {
+        this.update_date = update_date;
+    }
+
+    public String getAccount_id() {
+        return account_id;
+    }
+
+    public void setAccount_id(String account_id) {
+        this.account_id = account_id;
+    }
+
+    public File getFile() {
+        return file;
+    }
+
+    public void setFile(File file) {
+        this.file = file;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.xml
new file mode 100644
index 00000000..3f3c8cad
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/CtpFileEntity.xml
@@ -0,0 +1,49 @@
+<?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.entity.CtpFileEntity">
+    <resultMap id="get-CtpFileEntity-result" type="com.hzya.frame.seeyon.entity.CtpFileEntity">
+        <!--主键 -->
+        <result property="id" column="id" />
+        <result property="category" column="category" />
+        <result property="type" column="type" />
+        <result property="filename" column="filename" />
+        <result property="mime_type" column="mime_type" />
+        <result property="create_date" column="create_date" />
+        <result property="create_member" column="create_member" />
+        <result property="file_size" column="file_size" />
+        <result property="description" column="description" />
+        <result property="update_date" column="update_date" />
+        <result property="account_id" column="account_id" />
+    </resultMap>
+
+
+
+    <sql id="CtpFileEntity_sql">
+        id,
+        category,
+        type,
+        filename,
+        mime_type,
+        create_date,
+        create_member,
+        file_size,
+        description,
+        update_date,
+        account_id
+    </sql>
+
+
+    <!-- 查询 采用==查询 -->
+    <select id="CtpFileEntity_list_base" resultMap="get-CtpFileEntity-result" parameterType="com.hzya.frame.seeyon.entity.CtpFileEntity">
+    select
+    <include refid="CtpFileEntity_sql"/>
+    from
+    ctp_file
+    <trim prefix="where" prefixOverrides="and">
+        <if test="id != null and id != ''">id = #{id}</if>
+        <if test="filename != null and filename != ''">and filename = #{filename}</if>
+    </trim>
+    </select>
+
+
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAU8ResponseDTO.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAU8ResponseDTO.java
new file mode 100644
index 00000000..c8b473ec
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAU8ResponseDTO.java
@@ -0,0 +1,89 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * @Description u8返回对象
+ * @Author xiangerlin
+ * @Date 2024/5/14 15:40
+ **/
+public class OAU8ResponseDTO {
+    @JSONField(name = "Flag")
+    private String flag;
+    @JSONField(name = "DataOne")
+    private String dataOne;
+    @JSONField(name = "DataTwo")
+    private String dataTwo;
+    @JSONField(name = "Msg")
+    private String msg;
+
+    //如果co初始化失败,或者token不对的时候会返回这些信息
+    private String code;
+    private String success;
+    private String message;
+    private String data;
+
+    public String getFlag() {
+        return flag;
+    }
+
+    public void setFlag(String flag) {
+        this.flag = flag;
+    }
+
+    public String getDataOne() {
+        return dataOne;
+    }
+
+    public void setDataOne(String dataOne) {
+        this.dataOne = dataOne;
+    }
+
+    public String getDataTwo() {
+        return dataTwo;
+    }
+
+    public void setDataTwo(String dataTwo) {
+        this.dataTwo = dataTwo;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getSuccess() {
+        return success;
+    }
+
+    public void setSuccess(String success) {
+        this.success = success;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAWorkflowEventDataEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAWorkflowEventDataEntity.java
new file mode 100644
index 00000000..341e553f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/OAWorkflowEventDataEntity.java
@@ -0,0 +1,153 @@
+package com.hzya.frame.seeyon.entity;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+/**
+ * @Content OA监听事件提供的表单内容
+ * @Author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @Date 2020-12-24 8:38
+ * @Version 1.0
+ */
+public class OAWorkflowEventDataEntity  {
+    private String id;//业务表单id
+    private String eventType;//流程类型
+    /** 流程ID*/
+    private String summaryId;
+    /** 节点ID*/
+    private String affairId;
+    private String currentActivityId;
+    /** 表单表的FORM ID,用此字段标记是哪个流程*/
+    private String formApp;
+    /****/
+    private String formViewOperation;
+    private Object summaryObj;
+    private String deeCfgId;
+    private String currentNodeLast;
+    private Map<String, Object> businessData;
+    private Map<String, Object> extData;
+    private String businessDataStr;
+    private JSONObject hzyaExtData;//存放一些扩展数据
+    private String OnProcessFinished;
+    public String getSummaryId() {
+        return summaryId;
+    }
+
+    public void setSummaryId(String summaryId) {
+        this.summaryId = summaryId;
+    }
+
+    public String getAffairId() {
+        return affairId;
+    }
+
+    public void setAffairId(String affairId) {
+        this.affairId = affairId;
+    }
+
+    public String getCurrentActivityId() {
+        return currentActivityId;
+    }
+
+    public void setCurrentActivityId(String currentActivityId) {
+        this.currentActivityId = currentActivityId;
+    }
+
+    public String getFormApp() {
+        return formApp;
+    }
+
+    public void setFormApp(String formApp) {
+        this.formApp = formApp;
+    }
+
+    public String getFormViewOperation() {
+        return formViewOperation;
+    }
+
+    public void setFormViewOperation(String formViewOperation) {
+        this.formViewOperation = formViewOperation;
+    }
+
+    public Object getSummaryObj() {
+        return summaryObj;
+    }
+
+    public void setSummaryObj(Object summaryObj) {
+        this.summaryObj = summaryObj;
+    }
+
+    public String getDeeCfgId() {
+        return deeCfgId;
+    }
+
+    public void setDeeCfgId(String deeCfgId) {
+        this.deeCfgId = deeCfgId;
+    }
+
+    public String getCurrentNodeLast() {
+        return currentNodeLast;
+    }
+
+    public void setCurrentNodeLast(String currentNodeLast) {
+        this.currentNodeLast = currentNodeLast;
+    }
+
+    public Map<String, Object> getBusinessData() {
+        return businessData;
+    }
+
+    public void setBusinessData(Map<String, Object> businessData) {
+        this.businessData = businessData;
+    }
+
+    public Map<String, Object> getExtData() {
+        return extData;
+    }
+
+    public void setExtData(Map<String, Object> extData) {
+        this.extData = extData;
+    }
+
+    public String getBusinessDataStr() {
+        return businessDataStr;
+    }
+
+    public void setBusinessDataStr(String businessDataStr) {
+        this.businessDataStr = businessDataStr;
+    }
+
+    public String getOnProcessFinished() {
+        return OnProcessFinished;
+    }
+
+    public void setOnProcessFinished(String onProcessFinished) {
+        OnProcessFinished = onProcessFinished;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getEventType() {
+        return eventType;
+    }
+
+    public void setEventType(String eventType) {
+        this.eventType = eventType;
+    }
+
+    public JSONObject getHzyaExtData() {
+        return hzyaExtData;
+    }
+
+    public void setHzyaExtData(JSONObject hzyaExtData) {
+        this.hzyaExtData = hzyaExtData;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.java
new file mode 100644
index 00000000..449da122
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.java
@@ -0,0 +1,112 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.List;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:38
+ */
+public class SeeYonInterFaceEntity extends BaseEntity {
+    private String tabName;
+    //三方系统ID
+    private String tripartiteId;
+    //OA对应字段
+    private String oaField;
+    //模板info
+    private String field_info;
+    //模版ID
+    private String formAppId;
+    //主表集合
+    private List<String> formMainIds;
+    //主表ID,用于查询明细数据
+    private String formMainId;
+    //事件类型
+    private String eventType;
+    //表单名称
+    private String name;
+    //流程id
+    private String summaryId;
+    public String getTabName() {
+        return tabName;
+    }
+
+    public void setTabName(String tabName) {
+        this.tabName = tabName;
+    }
+
+    public String getTripartiteId() {
+        return tripartiteId;
+    }
+
+    public void setTripartiteId(String tripartiteId) {
+        this.tripartiteId = tripartiteId;
+    }
+
+    public String getOaField() {
+        return oaField;
+    }
+
+    public void setOaField(String oaField) {
+        this.oaField = oaField;
+    }
+
+    public String getField_info() {
+        return field_info;
+    }
+
+    public void setField_info(String field_info) {
+        this.field_info = field_info;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getFormAppId() {
+        return formAppId;
+    }
+
+    public void setFormAppId(String formAppId) {
+        this.formAppId = formAppId;
+    }
+
+    public List<String> getFormMainIds() {
+        return formMainIds;
+    }
+
+    public void setFormMainIds(List<String> formMainIds) {
+        this.formMainIds = formMainIds;
+    }
+
+    public String getFormMainId() {
+        return formMainId;
+    }
+
+    public void setFormMainId(String formMainId) {
+        this.formMainId = formMainId;
+    }
+
+    public String getEventType() {
+        return eventType;
+    }
+
+    public void setEventType(String eventType) {
+        this.eventType = eventType;
+    }
+
+    public String getSummaryId() {
+        return summaryId;
+    }
+
+    public void setSummaryId(String summaryId) {
+        this.summaryId = summaryId;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.xml
new file mode 100644
index 00000000..4190704d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeYonInterFaceEntity.xml
@@ -0,0 +1,52 @@
+<?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.dao.impl.SeeYonInterFaceDaoImpl">
+	<resultMap id="get-entity-result" type="com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity">
+        <!--主键 -->
+        <result property="id" column="id" />
+	</resultMap>
+
+    <resultMap id="get-DefinitionEntity-result" type="com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity">
+        <result property="id" column="id" />
+        <result property="name" column="name" />
+        <result property="field_info" column="field_info" />
+    </resultMap>
+
+	<sql id="Sysproduct_Base_Column_List">
+		id as id
+	</sql>
+
+	<!-- 修改 -->
+	<select id="queryArchives" parameterType="com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity"  resultMap="get-entity-result">
+		 select id from  ${tabName}
+        <trim prefix="where" prefixOverrides="and">
+            <if test="tripartiteId != null and tripartiteId != '' and oaField != null and oaField != '' ">${oaField} = #{tripartiteId} </if>
+        </trim>
+	</select>
+
+
+
+    <!-- 查询模版数据 -->
+    <select id="queryDefinitionInfo" parameterType="com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity"  resultMap="get-DefinitionEntity-result">
+       SELECT id,NAME,FIELD_INFO from CAP_FORM_DEFINITION
+        <trim prefix="where" prefixOverrides="and">
+            <if test="formAppId != null and formAppId != ''  "> id = #{formAppId} </if>
+        </trim>
+    </select>
+
+    <!-- 查询实体数据 -->
+    <select id="queryDefinitionData" parameterType="com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity"  resultType="java.util.Map">
+        SELECT  *  from ${tabName}
+        <trim prefix="where" prefixOverrides="and">
+            <if test="formMainId != null and formMainId != '' ">
+                and formmain_id = #{formMainId}
+            </if>
+            <if test="formMainIds != null and formMainIds.size >0 ">
+                and id in
+                <foreach item="ids" collection="formMainIds" open="(" separator="," close=")">
+                    #{ids}
+                </foreach>
+            </if>
+        </trim>
+    </select>
+</mapper>
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.java
new file mode 100644
index 00000000..773386d0
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.java
@@ -0,0 +1,684 @@
+package com.hzya.frame.seeyon.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.List;
+
+/**
+ * com.hzya.frame.seeyon.entity
+ *
+ * @author yqh
+ * @date 2023-08 -30 10:45
+ */
+
+public class SeeyonEntity extends BaseEntity {
+    private String field0026;//合同评审编号
+    private String field0001;//关联合同
+    private String field0003;//合同编号
+    private String field0016;//创建日期
+    private String field0002;//合同名称
+    private String field0004;//入账公司
+    private String field0005;//供应商
+    private String field0006;//合同类型
+    private String field0015;//合同签订日期
+    private String field0009;//合同开始时间
+    private String field0010;//合同结束时间
+    private String field0012;//是否固定金额
+    private String field0013;//合同总金额
+    private String field0027;//是否重大合同
+    private String field0008;//项目
+    private String field0032;//合同附件
+    private String field0033;//其他附件
+    private String field0034;//业务板块一级
+    private String field0035;//合同分类
+    private String field0038;//开票信息查询
+    private String field0039;//付款信息查询
+    private String field0044;//合同数量
+    private String field0047;//业务板块二级
+    private String field0048;//内容概要与评审理由
+    private String field0049;//是否多方
+    private String field0050;//是否多项目
+    private String field0054;//合同已付金额
+    private String field0055;//发票已收金额
+    private String field0056;//审批中付款金额
+    private String field0057;//审批中已收发票金额
+    private String field0017;//行号
+    private String field0018;//标的物名称
+    private String field0019;//标的物编码
+    private String field0021;//规格型号
+    private String field0022;//总数量
+    private String field0023;//单价
+    private String field0024;//不含税金额
+    private String field0025;//含税金额
+    private String field0036;//税率
+    private String field0037;//税务编码
+    private String field0040;//已开票数量
+    private String field0041;//剩余数量
+    private String field0042;//在途数量
+    private String field0051;//标的物明细表项目
+    private String field0052;//相对方
+    private String field0053;//其他相关方名称
+    private String tableName;//表名称
+    private List<SeeyonEntity> formson_0324;//合同标的物明细(明细表1)
+    private List<SeeyonEntity> formson_0352;//  相对方(明细表2)
+    private String formmain_id;//主表ID
+    private String file_url;//附件ID
+    private String sub_reference;//附件管理关系
+    private String filename;//附件名称
+    private String attachment_size;//文件大小
+    private String field0067;//状态
+    private String field0066;//业务板块三级
+    private String loginName;//登录名
+    private String dduid;//钉钉id
+
+    private String field0137;//付款账号
+    private String field0264;//CFS电子回单
+    private String summary_id;//col_summary表id
+    private String name;//姓名
+    private String pk_corp;//公司主键
+    private String field0120;//OA关联速网U8C主键的字段
+
+    private String field0121;//oa对接erp明细主键
+    private String  details_id;//销售订单明细id
+    private String da_id;//销售订单档案id
+
+    private String pushField;//杭泰推送标识字段
+    private String pushValue;//推送的值
+    private String updateTime;
+    private String field0066Id;
+    private String field0047Id;
+    private String field0034Id;
+    private String field0103;//钉钉ID
+
+    public String getField0103() {
+        return field0103;
+    }
+
+    public void setField0103(String field0103) {
+        this.field0103 = field0103;
+    }
+
+    public String getField0066Id() {
+        return field0066Id;
+    }
+
+    public void setField0066Id(String field0066Id) {
+        this.field0066Id = field0066Id;
+    }
+
+    public String getField0047Id() {
+        return field0047Id;
+    }
+
+    public void setField0047Id(String field0047Id) {
+        this.field0047Id = field0047Id;
+    }
+
+    public String getField0034Id() {
+        return field0034Id;
+    }
+
+    public void setField0034Id(String field0034Id) {
+        this.field0034Id = field0034Id;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getPushField() {
+        return pushField;
+    }
+
+    public void setPushField(String pushField) {
+        this.pushField = pushField;
+    }
+
+    public String getPushValue() {
+        return pushValue;
+    }
+
+    public void setPushValue(String pushValue) {
+        this.pushValue = pushValue;
+    }
+
+    public String getDa_id() {
+        return da_id;
+    }
+
+    public void setDa_id(String da_id) {
+        this.da_id = da_id;
+    }
+
+    public String getDetails_id() {
+        return details_id;
+    }
+
+    public void setDetails_id(String details_id) {
+        this.details_id = details_id;
+    }
+
+    public String getField0121() {
+        return field0121;
+    }
+
+    public void setField0121(String field0121) {
+        this.field0121 = field0121;
+    }
+
+    public String getField0120() {
+        return field0120;
+    }
+
+    public void setField0120(String field0120) {
+        this.field0120 = field0120;
+    }
+
+    public String getPk_corp() {
+        return pk_corp;
+    }
+
+    public void setPk_corp(String pk_corp) {
+        this.pk_corp = pk_corp;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getField0264() {
+        return field0264;
+    }
+
+    public void setField0264(String field0264) {
+        this.field0264 = field0264;
+    }
+
+    public String getSummary_id() {
+        return summary_id;
+    }
+
+    public void setSummary_id(String summary_id) {
+        this.summary_id = summary_id;
+    }
+
+    public String getField0137() {
+        return field0137;
+    }
+
+    public void setField0137(String field0137) {
+        this.field0137 = field0137;
+    }
+
+    public String getDduid() {
+        return dduid;
+    }
+
+    public void setDduid(String dduid) {
+        this.dduid = dduid;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getField0067() {
+        return field0067;
+    }
+
+    public void setField0067(String field0067) {
+        this.field0067 = field0067;
+    }
+
+    public String getAttachment_size() {
+        return attachment_size;
+    }
+
+    public void setAttachment_size(String attachment_size) {
+        this.attachment_size = attachment_size;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public String getSub_reference() {
+        return sub_reference;
+    }
+
+    public void setSub_reference(String sub_reference) {
+        this.sub_reference = sub_reference;
+    }
+
+    public String getFile_url() {
+        return file_url;
+    }
+
+    public void setFile_url(String file_url) {
+        this.file_url = file_url;
+    }
+
+    public String getFormmain_id() {
+        return formmain_id;
+    }
+
+    public void setFormmain_id(String formmain_id) {
+        this.formmain_id = formmain_id;
+    }
+
+    public List<SeeyonEntity> getFormson_0324() {
+        return formson_0324;
+    }
+
+    public void setFormson_0324(List<SeeyonEntity> formson_0324) {
+        this.formson_0324 = formson_0324;
+    }
+
+    public List<SeeyonEntity> getFormson_0352() {
+        return formson_0352;
+    }
+
+    public void setFormson_0352(List<SeeyonEntity> formson_0352) {
+        this.formson_0352 = formson_0352;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getField0026() {
+        return field0026;
+    }
+
+    public void setField0026(String field0026) {
+        this.field0026 = field0026;
+    }
+
+    public String getField0001() {
+        return field0001;
+    }
+
+    public void setField0001(String field0001) {
+        this.field0001 = field0001;
+    }
+
+    public String getField0003() {
+        return field0003;
+    }
+
+    public void setField0003(String field0003) {
+        this.field0003 = field0003;
+    }
+
+    public String getField0016() {
+        return field0016;
+    }
+
+    public void setField0016(String field0016) {
+        this.field0016 = field0016;
+    }
+
+    public String getField0002() {
+        return field0002;
+    }
+
+    public void setField0002(String field0002) {
+        this.field0002 = field0002;
+    }
+
+    public String getField0004() {
+        return field0004;
+    }
+
+    public void setField0004(String field0004) {
+        this.field0004 = field0004;
+    }
+
+    public String getField0005() {
+        return field0005;
+    }
+
+    public void setField0005(String field0005) {
+        this.field0005 = field0005;
+    }
+
+    public String getField0006() {
+        return field0006;
+    }
+
+    public void setField0006(String field0006) {
+        this.field0006 = field0006;
+    }
+
+    public String getField0015() {
+        return field0015;
+    }
+
+    public void setField0015(String field0015) {
+        this.field0015 = field0015;
+    }
+
+    public String getField0009() {
+        return field0009;
+    }
+
+    public void setField0009(String field0009) {
+        this.field0009 = field0009;
+    }
+
+    public String getField0010() {
+        return field0010;
+    }
+
+    public void setField0010(String field0010) {
+        this.field0010 = field0010;
+    }
+
+    public String getField0012() {
+        return field0012;
+    }
+
+    public void setField0012(String field0012) {
+        this.field0012 = field0012;
+    }
+
+    public String getField0013() {
+        return field0013;
+    }
+
+    public void setField0013(String field0013) {
+        this.field0013 = field0013;
+    }
+
+    public String getField0027() {
+        return field0027;
+    }
+
+    public void setField0027(String field0027) {
+        this.field0027 = field0027;
+    }
+
+    public String getField0008() {
+        return field0008;
+    }
+
+    public void setField0008(String field0008) {
+        this.field0008 = field0008;
+    }
+
+    public String getField0032() {
+        return field0032;
+    }
+
+    public void setField0032(String field0032) {
+        this.field0032 = field0032;
+    }
+
+    public String getField0033() {
+        return field0033;
+    }
+
+    public void setField0033(String field0033) {
+        this.field0033 = field0033;
+    }
+
+    public String getField0034() {
+        return field0034;
+    }
+
+    public void setField0034(String field0034) {
+        this.field0034 = field0034;
+    }
+
+    public String getField0035() {
+        return field0035;
+    }
+
+    public void setField0035(String field0035) {
+        this.field0035 = field0035;
+    }
+
+    public String getField0038() {
+        return field0038;
+    }
+
+    public void setField0038(String field0038) {
+        this.field0038 = field0038;
+    }
+
+    public String getField0039() {
+        return field0039;
+    }
+
+    public void setField0039(String field0039) {
+        this.field0039 = field0039;
+    }
+
+    public String getField0044() {
+        return field0044;
+    }
+
+    public void setField0044(String field0044) {
+        this.field0044 = field0044;
+    }
+
+    public String getField0047() {
+        return field0047;
+    }
+
+    public void setField0047(String field0047) {
+        this.field0047 = field0047;
+    }
+
+    public String getField0048() {
+        return field0048;
+    }
+
+    public void setField0048(String field0048) {
+        this.field0048 = field0048;
+    }
+
+    public String getField0049() {
+        return field0049;
+    }
+
+    public void setField0049(String field0049) {
+        this.field0049 = field0049;
+    }
+
+    public String getField0050() {
+        return field0050;
+    }
+
+    public void setField0050(String field0050) {
+        this.field0050 = field0050;
+    }
+
+    public String getField0054() {
+        return field0054;
+    }
+
+    public void setField0054(String field0054) {
+        this.field0054 = field0054;
+    }
+
+    public String getField0055() {
+        return field0055;
+    }
+
+    public void setField0055(String field0055) {
+        this.field0055 = field0055;
+    }
+
+    public String getField0056() {
+        return field0056;
+    }
+
+    public void setField0056(String field0056) {
+        this.field0056 = field0056;
+    }
+
+    public String getField0057() {
+        return field0057;
+    }
+
+    public void setField0057(String field0057) {
+        this.field0057 = field0057;
+    }
+
+    public String getField0017() {
+        return field0017;
+    }
+
+    public void setField0017(String field0017) {
+        this.field0017 = field0017;
+    }
+
+    public String getField0018() {
+        return field0018;
+    }
+
+    public void setField0018(String field0018) {
+        this.field0018 = field0018;
+    }
+
+    public String getField0019() {
+        return field0019;
+    }
+
+    public void setField0019(String field0019) {
+        this.field0019 = field0019;
+    }
+
+    public String getField0021() {
+        return field0021;
+    }
+
+    public void setField0021(String field0021) {
+        this.field0021 = field0021;
+    }
+
+    public String getField0022() {
+        return field0022;
+    }
+
+    public void setField0022(String field0022) {
+        this.field0022 = field0022;
+    }
+
+    public String getField0023() {
+        return field0023;
+    }
+
+    public void setField0023(String field0023) {
+        this.field0023 = field0023;
+    }
+
+    public String getField0024() {
+        return field0024;
+    }
+
+    public void setField0024(String field0024) {
+        this.field0024 = field0024;
+    }
+
+    public String getField0025() {
+        return field0025;
+    }
+
+    public void setField0025(String field0025) {
+        this.field0025 = field0025;
+    }
+
+    public String getField0036() {
+        return field0036;
+    }
+
+    public void setField0036(String field0036) {
+        this.field0036 = field0036;
+    }
+
+    public String getField0037() {
+        return field0037;
+    }
+
+    public void setField0037(String field0037) {
+        this.field0037 = field0037;
+    }
+
+    public String getField0040() {
+        return field0040;
+    }
+
+    public void setField0040(String field0040) {
+        this.field0040 = field0040;
+    }
+
+    public String getField0041() {
+        return field0041;
+    }
+
+    public void setField0041(String field0041) {
+        this.field0041 = field0041;
+    }
+
+    public String getField0042() {
+        return field0042;
+    }
+
+    public void setField0042(String field0042) {
+        this.field0042 = field0042;
+    }
+
+    public String getField0051() {
+        return field0051;
+    }
+
+    public void setField0051(String field0051) {
+        this.field0051 = field0051;
+    }
+
+    public String getField0052() {
+        return field0052;
+    }
+
+    public void setField0052(String field0052) {
+        this.field0052 = field0052;
+    }
+
+    public String getField0053() {
+        return field0053;
+    }
+
+    public void setField0053(String field0053) {
+        this.field0053 = field0053;
+    }
+
+    public String getField0066() {
+        return field0066;
+    }
+
+    public void setField0066(String field0066) {
+        this.field0066 = field0066;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.xml
new file mode 100644
index 00000000..83714c7d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/entity/SeeyonEntity.xml
@@ -0,0 +1,250 @@
+<?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.dao.impl.SeeYonDaoImpl">
+	<resultMap id="get-SeeyonEntity-result" type="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		<result property="id" column="id" />
+		<result property="field0026" column="field0026" />
+		<result property="field0001" column="field0001" />
+		<result property="field0003" column="field0003" />
+		<result property="field0016" column="field0016" />
+		<result property="field0002" column="field0002" />
+		<result property="field0004" column="field0004" />
+		<result property="field0005" column="field0005" />
+		<result property="field0006" column="field0006" />
+		<result property="field0015" column="field0015" />
+		<result property="field0009" column="field0009" />
+		<result property="field0010" column="field0010" />
+		<result property="field0012" column="field0012" />
+		<result property="field0013" column="field0013" />
+		<result property="field0027" column="field0027" />
+		<result property="field0008" column="field0008" />
+		<result property="field0032" column="field0032" />
+		<result property="field0033" column="field0033" />
+		<result property="field0034" column="field0034" />
+		<result property="field0035" column="field0035" />
+		<result property="field0038" column="field0038" />
+		<result property="field0039" column="field0039" />
+		<result property="field0044" column="field0044" />
+		<result property="field0047" column="field0047" />
+		<result property="field0048" column="field0048" />
+		<result property="field0049" column="field0049" />
+		<result property="field0050" column="field0050" />
+		<result property="field0054" column="field0054" />
+		<result property="field0055" column="field0055" />
+		<result property="field0056" column="field0056" />
+		<result property="field0057" column="field0057" />
+		<result property="field0017" column="field0017" />
+		<result property="field0018" column="field0018" />
+		<result property="field0019" column="field0019" />
+		<result property="field0021" column="field0021" />
+		<result property="field0022" column="field0022" />
+		<result property="field0023" column="field0023" />
+		<result property="field0024" column="field0024" />
+		<result property="field0025" column="field0025" />
+		<result property="field0036" column="field0036" />
+		<result property="field0037" column="field0037" />
+		<result property="field0040" column="field0040" />
+		<result property="field0041" column="field0041" />
+		<result property="field0042" column="field0042" />
+		<result property="field0051" column="field0051" />
+		<result property="field0052" column="field0052" />
+		<result property="field0053" column="field0053" />
+		<result property="field0067" column="field0067" />
+		<result property="field0066" column="field0066" />
+		<result property="formmian_id" column="formmian_id" />
+		<result property="file_url" column="file_url" />
+		<result property="filename" column="filename" />
+		<result property="attachment_size" column="attachment_size" />
+		<result property="loginName" column="loginName" />
+		<result property="dduid" column="dduid" />
+		<result property="field0137" column="field0137" />
+		<result property="field0264" column="field0264" />
+		<result property="summary_id" column="summary_id" />
+		<result property="name" column="name" />
+		<result property="pk_corp" column="pk_corp" />
+		<result property="field0120" column="field0120" />
+		<result property="field0121" column="field0121" />
+		<result property="details_id" column="details_id" />
+		<result property="da_id" column="da_id" />
+		<result property="field0066Id" column="field0066_id" />
+		<result property="field0047Id" column="field0047_id" />
+		<result property="field0034Id" column="field0034_id" />
+		<result property="field0103" column="field0103" />
+	</resultMap>
+
+	<sql id="SeeyonEntity_Base_Column_List">
+		id
+	</sql>
+
+	<sql id="SeeyonEntity_Base_Column_List_details">
+		splitbank,bankaccno,name,code
+	</sql>
+
+
+
+
+	<!-- 查询 采用==查询 -->
+	<select id="entity_list_base_formson_0324" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select
+		body.id,
+		field0017,
+		field0018,
+		field0019,
+		field0021,
+		field0022,
+		field0023,
+		field0024,
+		field0025,
+		item.code as field0036,
+		field0037,
+		field0040,
+		field0041,
+		field0042,
+		field0051
+
+		from formson_0324 body
+		left join ctp_enum_item item on body.field0036 = item.id
+		<trim prefix="where" prefixOverrides="and">
+			<if test="id != null and id !=''">formmain_id=#{id}</if>
+		</trim>
+	</select>
+	<!-- 查询 采用==查询 -->
+	<select id="entity_list_base_formson_0352" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select
+		body.id,
+		item.SHOWVALUE as field0052,
+		field0053
+
+		from formson_0352 body
+		left join ctp_enum_item item on body.field0052 = item.id
+		<trim prefix="where" prefixOverrides="and">
+			<if test="id != null and id !=''">formmain_id=#{id}</if>
+		</trim>
+	</select>
+	<!-- 查询 采用==查询 -->
+	<select id="entity_list_base_main" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select
+			main.id,
+			field0026,
+			field0001,
+			field0003,
+			field0016,
+			field0002,
+			field0004,
+			field0005,
+			item1.SHOWVALUE as field0006,
+			field0015,
+			field0009,
+			field0010,
+			item2.SHOWVALUE as field0012,
+			field0013,
+			item3.SHOWVALUE as field0027,
+			field0008,
+			field0032,
+			field0033,
+			item4.SHOWVALUE as field0034,
+			item5.SHOWVALUE as field0035,
+			field0038,
+			field0039,
+			field0044,
+			item6.SHOWVALUE as field0047,
+			field0048,
+			item7.SHOWVALUE as field0049,
+			item8.SHOWVALUE as field0050,
+			field0054,
+			field0055,
+			field0056,
+			field0057,
+			field0063,
+			field0064,
+			field0065,
+			item9.SHOWVALUE as field0066,
+			field0067,
+			sm_user.loginName,
+			sm_user.dduid,
+			field0103,
+			field0034 as field0034_id,
+			field0047 as field0047_id,
+			field0066 as field0066_id
+			from formmain_0323 main
+			left join ctp_enum_item item1 on main.field0006 = item1.id
+			left join ctp_enum_item item2 on main.field0012 = item2.id
+			left join ctp_enum_item item3 on main.field0027 = item3.id
+			left join ctp_enum_item item4 on main.field0034 = item4.id
+			left join ctp_enum_item item5 on main.field0035 = item5.id
+			left join ctp_enum_item item6 on main.field0047 = item6.id
+			left join ctp_enum_item item7 on main.field0049 = item7.id
+			left join ctp_enum_item item8 on main.field0050 = item8.id
+			left join ctp_enum_item item9 on main.field0066 = item9.id
+			left join v_user_view_all sm_user on sm_user.id = main.start_member_id
+		where 1=1
+ 		AND field0003 = '345678'
+			and (field0103 is null or main.modify_date >= #{updateTime})
+	</select>
+
+	<!-- 查询 采用==查询 -->
+	<select id="entity_list_base_ctp_attachment" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select * FROM ctp_attachment where sub_reference = #{sub_reference}
+	</select>
+
+	<!-- 查询 查询付款单中电子回单为null得 -->
+	<select id="entity_list_base_formmain_0327" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select -- top 5.
+			   main.id,
+			   main.field0264,
+			   col.id as summary_id,
+			   formson.field0137 -- 付款账号
+		from formmain_0327  main
+				 left join formson_0329 formson on formson.formmain_id=main.id
+				 left join col_summary col on col.form_recordid=main.id
+		where main.field0264 is null
+		  and CONVERT(varchar,main.start_date,120) > '2023-11-02 10:05'
+		  and formmain_id='6385523488104860827'
+		group by main.id,formson.field0137,main.field0264,col.id
+	</select>
+
+	<!-- 查询 根据付款方id查询v_user_view_all中得名称 -->
+	<select id="entity_list_base_field0258" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select name from v_user_view_all where staffID=#{id}
+	</select>
+
+	<!-- 查询 查询速网U8C中所有组织-->
+	<select id="entity_list_base_corp" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select pk_corp from bd_corp;
+	</select>
+
+	<!-- 查询 根据销售订单单据编码查询销售档案主键-->
+	<select id="entity_list_base_formmain_0237" resultMap="get-SeeyonEntity-result" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		select id as da_id from formmain_0237 where field0010=#{field0010}
+	</select>
+
+	<!-- 修改 付款单中的电子回单字段-->
+	<update id="entity_update_formmain_0327" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		update formmain_0327 set field0264 = #{field0264} where id = #{id}
+	</update>
+
+	<!-- 修改 -->
+	<update id="entity_update" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		update formmain_0323 set field0067 = 'Y'
+		where id = #{id}
+	</update>
+
+	<!-- 修改 修改OA字段为速网U8C销售订单主键 -->
+	<update id="entity_update_formmain_0237" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		update formmain_0237 set field0120 = #{field0120}
+		where field0010 = #{field0010}
+	</update>
+
+	<!-- 修改 修改OA字段为速网U8C销售订单明细主键 -->
+	<update id="entity_update_formson_0238" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		update formson_0238 set field0121 = #{field0121}
+		where field0012 = #{field0012} and formmain_id=#{formmain_id}
+	</update>
+
+	<!-- 修改 修改付款单报销单等单据的推送状态 -->
+	<update id="entity_update_push" parameterType="com.hzya.frame.seeyon.entity.SeeyonEntity">
+		update ${tableName} set ${pushField} = #{pushValue}
+		where id=#{id}
+	</update>
+</mapper>
+
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/enums/ColEventTypeEnum.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/enums/ColEventTypeEnum.java
new file mode 100644
index 00000000..69b1af3e
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/enums/ColEventTypeEnum.java
@@ -0,0 +1,45 @@
+package com.hzya.frame.seeyon.enums;
+
+/**
+ * 流程事件类型枚举
+ */
+public enum ColEventTypeEnum {
+
+    ONBEFORESTART("onBeforeStart","流程发起前"),
+    ONSTART("onStart","流程发起"),
+    ONBEFORESTOP("onBeforeStop","终止前事件"),
+    ONSTOP("onStop","终止事件"),
+    ONBEFORECANCEL("onBeforeCancel","撤销前事件"),
+    ONCANCEL("onCancel","撤销事件"),
+    ONPROCESSFINISHED("onProcessFinished","结束事件"),
+    ONBEFOREFINISHWORKITEM("onBeforeFinishWorkitem","处理前事件"),
+    ONFINISHWORKITEM("onFinishWorkitem","处理事件"),
+    ONBEFORESTEPBACK("onBeforeStepBack","回退前事件"),
+    ONSTEPBACK("onStepBack","回退事件"),
+    ONBEFORETAKEBACK("onBeforeTakeBack","取回前事件"),
+    ONTAKEBACK("onTakeBack","取回事件"),
+    ;
+    private String type;
+    private String name;
+
+    ColEventTypeEnum(String type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/IPayBillDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/IPayBillDao.java
new file mode 100644
index 00000000..a0ec8db8
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/IPayBillDao.java
@@ -0,0 +1,33 @@
+package com.hzya.frame.seeyon.paybill.dao;
+
+import com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+public interface IPayBillDao {
+/**
+ *
+ * @content 获取OA工程付款单数据
+ * @author laborer
+ * @date 2024/6/20 0020 11:30
+ *
+ */
+    List<PayBillEntity> getOaEngineerPay(PayBillEntity entity);
+/**
+ *
+ * @content 修改推送状态
+ * @author laborer
+ * @date 2024/6/21 0021 11:15
+ *
+ */
+
+    int updateState(PayBillEntity pay);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/impl/PayBillDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/impl/PayBillDaoImpl.java
new file mode 100644
index 00000000..3a753554
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/dao/impl/PayBillDaoImpl.java
@@ -0,0 +1,32 @@
+package com.hzya.frame.seeyon.paybill.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity;
+import com.hzya.frame.seeyon.paybill.dao.IPayBillDao;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+@Repository(value = "PayBillDaoImpl")
+public class PayBillDaoImpl extends MybatisGenericDao implements IPayBillDao {
+
+    @DS("#entity.dataSourceCode")
+    @Override
+    public List<PayBillEntity> getOaEngineerPay(PayBillEntity entity) {
+        return super.selectList("com.hzya.frame.seeyon.paybill.dao.impl.PayBillDaoImpl.PayBillEntity_list_base",entity);
+    }
+    @DS("#pay.dataSourceCode")
+    @Override
+    public int updateState(PayBillEntity pay) {
+        return super.update("com.hzya.frame.seeyon.paybill.dao.impl.PayBillDaoImpl.PayBillEntity_update",pay);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.java
new file mode 100644
index 00000000..1a9308de
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.java
@@ -0,0 +1,107 @@
+package com.hzya.frame.seeyon.paybill.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @content 付款結算單
+ * @author laborer
+ * @date 2024/6/20 0020 11:07
+ *
+ */
+
+public class PayBillEntity extends BaseEntity {
+    private String billDate;//付款日期
+    private String primalMoney;//付款金额信息
+    private String pkOppaccount;//付款银行信息
+    private String pkSupplier;//供应商信息
+    private String tableName;//表名称
+    private String fieldName;//字段名称
+    private String state;//推送状态
+    private String pkOrg;//组织
+    private String pkCustomer;//客户
+    private String pk_oppaccount;//付款账户
+
+    public String getPkCustomer() {
+        return pkCustomer;
+    }
+
+    public void setPkCustomer(String pkCustomer) {
+        this.pkCustomer = pkCustomer;
+    }
+
+    public String getPk_oppaccount() {
+        return pk_oppaccount;
+    }
+
+    public void setPk_oppaccount(String pk_oppaccount) {
+        this.pk_oppaccount = pk_oppaccount;
+    }
+
+    public String getPkOrg() {
+        return pkOrg;
+    }
+
+    public void setPkOrg(String pkOrg) {
+        this.pkOrg = pkOrg;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getBillDate() {
+        return billDate;
+    }
+
+    public void setBillDate(String billDate) {
+        this.billDate = billDate;
+    }
+
+    public String getPrimalMoney() {
+        return primalMoney;
+    }
+
+    public void setPrimalMoney(String primalMoney) {
+        this.primalMoney = primalMoney;
+    }
+
+    public String getPkOppaccount() {
+        return pkOppaccount;
+    }
+
+    public void setPkOppaccount(String pkOppaccount) {
+        this.pkOppaccount = pkOppaccount;
+    }
+
+    public String getPkSupplier() {
+        return pkSupplier;
+    }
+
+    public void setPkSupplier(String pkSupplier) {
+        this.pkSupplier = pkSupplier;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.xml
new file mode 100644
index 00000000..736d5914
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/entity/PayBillEntity.xml
@@ -0,0 +1,62 @@
+<?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.paybill.dao.impl.PayBillDaoImpl">
+    <resultMap id="get-PayBillEntity-result" type="com.hzya.frame.seeyon.paybill.entity.PayBillEntity" >
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="pkOrg" column="pk_org" jdbcType="VARCHAR"/>
+        <result property="billDate" column="bill_date" jdbcType="VARCHAR"/>
+        <result property="primalMoney" column="primal_money" jdbcType="VARCHAR"/>
+        <result property="pkOppaccount" column="pk_oppaccount" jdbcType="VARCHAR"/>
+        <result property="pkSupplier" column="pk_supplier" jdbcType="VARCHAR"/>
+        <result property="tableName" column="table_name" jdbcType="VARCHAR"/>
+        <result property="fieldName" column="field_name" jdbcType="VARCHAR"/>
+
+    </resultMap>
+
+    <!--工程项目查询-->
+    <select id="PayBillEntity_list_base" resultMap="get-PayBillEntity-result" parameterType="com.hzya.frame.seeyon.paybill.entity.PayBillEntity">
+       SELECT
+        body.id as id,
+        field0070 AS bill_date,
+        field0057 AS primal_money,
+        field0019 AS pk_oppaccount,
+        field0082 AS pk_supplier,
+        'formson_0222' as table_name,
+        'field0084' as field_name
+        FROM formmain_0093 main
+        LEFT JOIN formson_0222 body ON main.id = body.formmain_id
+        WHERE field0070 IS NOT null and field0084 is null
+        union all
+        SELECT
+        body.id as id,
+        field0073 AS bill_date,
+        field0031 AS primal_money,
+        field0042 AS pk_oppaccount,
+        field0077 AS pk_supplier,
+        'formson_0210' as table_name,
+        'field0078' as field_name
+        FROM formmain_0209 main
+        LEFT JOIN formson_0210 body ON main.id = body.formmain_id
+        WHERE field0073 IS NOT null and field0078 is null
+        union all
+        SELECT
+        body.id as id,
+        field0053 AS bill_date,
+        field0041 AS primal_money,
+        field0024 AS pk_oppaccount,
+        field0057 AS pk_supplier,
+        'formson_0223' as table_name,
+        'field0058' as field_name
+        FROM formmain_0094 main
+        LEFT JOIN formson_0223 body ON main.id = body.formmain_id
+        WHERE field0053 IS NOT NULL and field0058 is null
+    </select>
+
+    <!--通过主键修改方法-->
+    <update id="PayBillEntity_update" parameterType = "java.util.Map" >
+        update ${tableName} set ${fieldName} = #{state} where id = #{id}
+    </update>
+
+
+</mapper>
+
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/IPayBillService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/IPayBillService.java
new file mode 100644
index 00000000..caad27a7
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/IPayBillService.java
@@ -0,0 +1,29 @@
+package com.hzya.frame.seeyon.paybill.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+import java.util.List;
+
+/**
+ *
+ * @content huoqu
+ * @author laborer获取OA付款单数据并推送BIP生成付款结算单
+ * @date 2024/6/20 0020 11:19
+ *
+ */
+
+public interface IPayBillService extends IBaseService<PaymentEntity,String> {
+/**
+ *
+ * @content 工程付款单数据同步BIP
+ * @author laborer
+ * @date 2024/6/20 0020 11:24
+ *
+ */
+JsonResultEntity sendEngineerPayBillToBip(JSONObject requestJson);
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/impl/PayBillServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/impl/PayBillServiceImpl.java
new file mode 100644
index 00000000..5bdf9b4b
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/paybill/service/impl/PayBillServiceImpl.java
@@ -0,0 +1,105 @@
+package com.hzya.frame.seeyon.paybill.service.impl;
+
+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.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.paybill.dao.IPayBillDao;
+import com.hzya.frame.seeyon.paybill.entity.PayBillEntity;
+import com.hzya.frame.seeyon.paybill.service.IPayBillService;
+import com.hzya.frame.seeyon.service.impl.SeeYonInterFaceImpl;
+import com.hzya.frame.seeyon.util.OABipUtil;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * @content 付款单同步BIP
+ * @author laborer
+ * @date 2024/6/20 0020 15:20
+ *
+ */
+
+@Service("PayBillServiceImpl")
+public class PayBillServiceImpl extends BaseService<PaymentEntity,String> implements IPayBillService {
+    private static final Logger logger = LoggerFactory.getLogger(PayBillServiceImpl.class);
+
+    @Autowired
+    private IPayBillDao payBillDao;
+    /**
+     *
+     * @content 工程付款单数据同步BIP
+     * @author laborer
+     * @date 2024/6/20 0020 11:24
+     *
+     */
+    @Override
+    public JsonResultEntity sendEngineerPayBillToBip(JSONObject requestJson) {
+        PayBillEntity entity = new PayBillEntity();
+        requestJson.put("db_code","OA");
+        entity.setDataSourceCode(requestJson.getString("db_code"));
+        List<PayBillEntity>payBillEntityList = payBillDao.getOaEngineerPay(entity);
+        if(CollectionUtils.isNotEmpty(payBillEntityList)){
+            for(PayBillEntity pay : payBillEntityList){
+                String token = OABipUtil.getBipToken("yonyou","8000230000");
+                JSONObject main = bindingAdd(pay);
+                logger.info("工程付款单调用中台生成BIP付款结算单推送报文{}",main.toString());
+                String result = OABipUtil.sendU9cTOBipEsb(main.toString(),"8000230014",token);
+                logger.info("工程付款单调用中台生成BIP付款结算单返回结果{}",result);
+                JSONObject resultObj = JSON.parseObject(result);
+                boolean flag = resultObj.getBoolean("success");
+                if(flag){
+                    pay.setState("Y");
+                }else{
+                    pay.setState("N");
+                }
+                pay.setDataSourceCode(requestJson.getString("db_code"));
+                payBillDao.updateState(pay);
+                // todo 后续在写吧(没字段等OA开了外网在创建),修改推送状态,避免再次查询
+            }
+        }
+        return null;
+    }
+
+    @NotNull
+    private JSONObject bindingAdd(PayBillEntity pay) {
+        JSONObject head = new JSONObject();
+        head.put("pk_org","");//所属组织
+        head.put("pk_group","");//集团
+        head.put("bill_type","F5");//单据类型 默认F5
+        head.put("trade_type","D5");//付款结算类型 默认D5
+        head.put("source_flag","2");//付款结算类型 默认2
+        head.put("bill_date",pay.getBillDate());//单据日期
+        head.put("primal_money",pay.getPrimalMoney());//付款原币金额
+        head.put("pk_currtype","CNY");//币种
+        head.put("billmaker","");//制单人
+        //处理明细数据,按照明细付款 多个明细生成多个付款结算单
+        JSONArray detailsArr = new JSONArray();
+        JSONObject body = new JSONObject();
+        body.put("pk_org","");//所属组织
+        body.put("pk_group","");//集团
+        body.put("bill_type","F5");//单据类型 默认F5
+        body.put("trade_type","D5");//付款结算类型 默认D5
+        body.put("pk_currtype","CNY");//币种
+        body.put("bill_date",pay.getBillDate());//单据日期
+        body.put("pay_primal",pay.getPrimalMoney());//付款原币金额
+        body.put("creationtime",pay.getBillDate());//创建时间
+        body.put("direction","-1");//方向 :1=收;-1=付;
+        body.put("objecttype","0");//交易对象
+        body.put("pk_customer",pay.getPkCustomer());//客户
+        body.put("pk_account",pay.getPkOppaccount());//付款银行账号
+        detailsArr.add(body);
+        JSONObject main = new JSONObject();
+        main.put("head",head);//表头
+        main.put("body",detailsArr);//明细数据
+        return main;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/IRecBillDao.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/IRecBillDao.java
new file mode 100644
index 00000000..7668f65e
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/IRecBillDao.java
@@ -0,0 +1,31 @@
+package com.hzya.frame.seeyon.recbill.dao;
+
+import com.hzya.frame.seeyon.recbill.entity.RecBillEntity;
+
+import java.util.List;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+public interface IRecBillDao {
+/**
+ *
+ * @content 获取OA工程付款单数据
+ * @author laborer
+ * @date 2024/6/20 0020 11:30
+ *
+ */
+    List<RecBillEntity> getOaRecBill(RecBillEntity rec);
+/**
+ *
+ * @content 修改推送状态
+ * @author laborer
+ * @date 2024/6/21 0021 11:15
+ *
+ */
+
+    int updateState(RecBillEntity rec);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/impl/RecBillDaoImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/impl/RecBillDaoImpl.java
new file mode 100644
index 00000000..3682e8a2
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/dao/impl/RecBillDaoImpl.java
@@ -0,0 +1,30 @@
+package com.hzya.frame.seeyon.recbill.dao.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.hzya.frame.basedao.dao.MybatisGenericDao;
+import com.hzya.frame.seeyon.recbill.dao.IRecBillDao;
+import com.hzya.frame.seeyon.recbill.entity.RecBillEntity;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-30 10:27
+ */
+@Repository(value = "RecBillDaoImpl")
+public class RecBillDaoImpl extends MybatisGenericDao implements IRecBillDao {
+
+    @DS("#rec.dataSourceCode")
+    @Override
+    public List<RecBillEntity> getOaRecBill(RecBillEntity rec) {
+        return super.selectList("com.hzya.frame.seeyon.recbill.dao.impl.RecBillDaoImpl.PayBillEntity_list_base",rec);
+    }
+    @DS("#rec.dataSourceCode")
+    @Override
+    public int updateState(RecBillEntity rec) {
+        return super.update("com.hzya.frame.seeyon.recbill.dao.impl.RecBillDaoImpl.PayBillEntity_update",rec);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.java
new file mode 100644
index 00000000..5a271b5d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.java
@@ -0,0 +1,104 @@
+package com.hzya.frame.seeyon.recbill.entity;
+
+import com.hzya.frame.web.entity.BaseEntity;
+
+/**
+ *
+ * @content 付款結算單
+ * @author laborer
+ * @date 2024/6/20 0020 11:07
+ *
+ */
+
+public class RecBillEntity extends BaseEntity {
+    private String billDate;//付款日期
+    private String primalMoney;//付款金额信息
+    private String pkOppaccount;//付款银行信息
+    private String pkSupplier;//供应商信息
+    private String tableName;//表名称
+    private String fieldName;//字段名称
+    private String state;//推送状态
+    private String pkCustomer;//客户
+    private String pkAccount;//收款账户
+    private String pkOrg;//组织
+
+    public String getPkCustomer() {
+        return pkCustomer;
+    }
+
+    public void setPkCustomer(String pkCustomer) {
+        this.pkCustomer = pkCustomer;
+    }
+
+    public String getPkAccount() {
+        return pkAccount;
+    }
+
+    public void setPkAccount(String pkAccount) {
+        this.pkAccount = pkAccount;
+    }
+
+    public String getPkOrg() {
+        return pkOrg;
+    }
+
+    public void setPkOrg(String pkOrg) {
+        this.pkOrg = pkOrg;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public String getBillDate() {
+        return billDate;
+    }
+
+    public void setBillDate(String billDate) {
+        this.billDate = billDate;
+    }
+
+    public String getPrimalMoney() {
+        return primalMoney;
+    }
+
+    public void setPrimalMoney(String primalMoney) {
+        this.primalMoney = primalMoney;
+    }
+
+    public String getPkOppaccount() {
+        return pkOppaccount;
+    }
+
+    public void setPkOppaccount(String pkOppaccount) {
+        this.pkOppaccount = pkOppaccount;
+    }
+
+    public String getPkSupplier() {
+        return pkSupplier;
+    }
+
+    public void setPkSupplier(String pkSupplier) {
+        this.pkSupplier = pkSupplier;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.xml b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.xml
new file mode 100644
index 00000000..21f3fc7e
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/entity/RecBillEntity.xml
@@ -0,0 +1,40 @@
+<?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.recbill.dao.impl.RecBillDaoImpl">
+    <resultMap id="get-RecBillEntity-result" type="com.hzya.frame.seeyon.recbill.entity.RecBillEntity" >
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="pkOrg" column="pk_org" jdbcType="VARCHAR"/>
+        <result property="billDate" column="bill_date" jdbcType="VARCHAR"/>
+        <result property="primalMoney" column="primal_money" jdbcType="VARCHAR"/>
+        <result property="pkAccount" column="pk_account" jdbcType="VARCHAR"/>
+        <result property="pkCustomer" column="pk_customer" jdbcType="VARCHAR"/>
+        <result property="pkOppaccount" column="pk_oppaccount" jdbcType="VARCHAR"/>
+        <result property="pkSupplier" column="pk_supplier" jdbcType="VARCHAR"/>
+        <result property="tableName" column="table_name" jdbcType="VARCHAR"/>
+        <result property="fieldName" column="field_name" jdbcType="VARCHAR"/>
+
+    </resultMap>
+
+    <!--工程项目查询-->
+    <select id="RecBillEntity_list_base" resultMap="get-RecBillEntity-result" parameterType="com.hzya.frame.seeyon.recbill.entity.RecBillEntity">
+      SELECT
+        field0002 AS pk_org,
+        field0006 AS bill_date,
+        field0009 AS primal_money,
+        field0001 AS pk_account,
+        field0013  AS pk_customer,
+        field0012 AS pk_oppaccount,
+        'formmain_0233' as table_name,
+        'field0016' as field_name
+        FROM formmain_0233
+        WHERE field0016 IS null
+    </select>
+
+    <!--通过主键修改方法-->
+    <update id="RecBillEntity_update" parameterType = "java.util.Map" >
+        update ${tableName} set ${fieldName} = #{state} where id = #{id}
+    </update>
+
+
+</mapper>
+
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/IRecBillService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/IRecBillService.java
new file mode 100644
index 00000000..96930a43
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/IRecBillService.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.seeyon.recbill.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ *
+ * @content huoqu
+ * @author laborer获取OA付款单数据并推送BIP生成付款结算单
+ * @date 2024/6/20 0020 11:19
+ *
+ */
+
+public interface IRecBillService extends IBaseService<PaymentEntity,String> {
+/**
+ *
+ * @content 工程付款单数据同步BIP
+ * @author laborer
+ * @date 2024/6/20 0020 11:24
+ *
+ */
+JsonResultEntity sendRecBillToBip(JSONObject requestJson);
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/impl/RecBillServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/impl/RecBillServiceImpl.java
new file mode 100644
index 00000000..f65d2855
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/recbill/service/impl/RecBillServiceImpl.java
@@ -0,0 +1,104 @@
+package com.hzya.frame.seeyon.recbill.service.impl;
+
+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.seeyon.cbs8.entity.PaymentEntity;
+import com.hzya.frame.seeyon.recbill.dao.IRecBillDao;
+import com.hzya.frame.seeyon.recbill.entity.RecBillEntity;
+import com.hzya.frame.seeyon.recbill.service.IRecBillService;
+import com.hzya.frame.seeyon.util.OABipUtil;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * @content 付款单同步BIP
+ * @author laborer
+ * @date 2024/6/20 0020 15:20
+ *
+ */
+
+@Service("RecBillServiceImpl")
+public class RecBillServiceImpl extends BaseService<PaymentEntity,String> implements IRecBillService {
+    private static final Logger logger = LoggerFactory.getLogger(RecBillServiceImpl.class);
+
+    @Autowired
+    private IRecBillDao payBillDao;
+    /**
+     *
+     * @content 工程付款单数据同步BIP
+     * @author laborer
+     * @date 2024/6/20 0020 11:24
+     *
+     */
+    @Override
+    public JsonResultEntity sendRecBillToBip(JSONObject requestJson) {
+        RecBillEntity entity = new RecBillEntity();
+        requestJson.put("db_code","OA");
+        entity.setDataSourceCode(requestJson.getString("db_code"));
+        List<RecBillEntity>payBillEntityList = payBillDao.getOaRecBill(entity);
+        if(CollectionUtils.isNotEmpty(payBillEntityList)){
+            for(RecBillEntity pay : payBillEntityList){
+                String token = OABipUtil.getBipToken("yonyou","8000230000");
+                JSONObject main = bindingAdd(pay);
+                logger.info("银行流水收款信息数据{}",main.toString());
+                String result = OABipUtil.sendU9cTOBipEsb(main.toString(),"8000230016",token);
+                logger.info("银行流水收款信息数据{}",result);
+                JSONObject resultObj = JSON.parseObject(result);
+                boolean flag = resultObj.getBoolean("success");
+                if(flag){
+                    pay.setState("Y");
+                }else{
+                    pay.setState("N");
+                }
+                pay.setDataSourceCode(requestJson.getString("db_code"));
+                payBillDao.updateState(pay);
+                // todo 后续在写吧(没字段等OA开了外网在创建),修改推送状态,避免再次查询
+            }
+        }
+        return null;
+    }
+
+    @NotNull
+    private JSONObject bindingAdd(RecBillEntity pay) {
+        JSONObject head = new JSONObject();
+        head.put("pk_org","");//所属组织
+        head.put("pk_group","");//集团
+        head.put("bill_type","F4");//单据类型 默认F5
+        head.put("trade_type","D4");//付款结算类型 默认D5
+        head.put("source_flag","2");//付款结算类型 默认2
+        head.put("bill_date",pay.getBillDate());//单据日期
+        head.put("primal_money",pay.getPrimalMoney());//付款原币金额
+        head.put("pk_currtype","CNY");//币种
+        head.put("billmaker","");//制单人
+        //处理明细数据,按照明细付款 多个明细生成多个付款结算单
+        JSONArray detailsArr = new JSONArray();
+        JSONObject body = new JSONObject();
+        body.put("pk_org","");//所属组织
+        body.put("pk_group","");//集团
+        body.put("bill_type","F4");//单据类型 默认F5
+        body.put("trade_type","D4");//付款结算类型 默认D5
+        body.put("pk_currtype","CNY");//币种
+        body.put("bill_date",pay.getBillDate());//单据日期
+        body.put("pay_primal",pay.getPrimalMoney());//付款原币金额
+        body.put("creationtime",pay.getBillDate());//创建时间
+        body.put("direction","-1");//方向 :1=收;-1=付;
+        body.put("objecttype","0");//交易对象
+        body.put("pk_customer",pay.getPkCustomer());//客户
+        body.put("pk_account",pay.getPkAccount());//收款银行账号
+        detailsArr.add(body);
+        JSONObject main = new JSONObject();
+        main.put("head",head);//表头
+        main.put("body",detailsArr);//明细数据
+        return main;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpAttachmentService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpAttachmentService.java
new file mode 100644
index 00000000..3af20d9d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpAttachmentService.java
@@ -0,0 +1,20 @@
+package com.hzya.frame.seeyon.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.entity.CtpAttachmentEntity;
+
+/**
+ * @Description seeyon 附件关系
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:30
+ **/
+public interface ICtpAttachmentService extends IBaseService<CtpAttachmentEntity, String> {
+    /**
+     * 保存附件关系表
+     * @param fileUrl ctp_file id
+     * @param col_summary_id col_summary id
+     * @param sub_reference 随机uuid
+     * @return
+     */
+    CtpAttachmentEntity saveAttachment(String fileUrl, String col_summary_id, String sub_reference)throws Exception;
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpFileService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpFileService.java
new file mode 100644
index 00000000..b34826ef
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ICtpFileService.java
@@ -0,0 +1,12 @@
+package com.hzya.frame.seeyon.service;
+
+import com.hzya.frame.basedao.service.IBaseService;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+
+/**
+ * @Description seeyon 附件
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:23
+ **/
+public interface ICtpFileService extends IBaseService<CtpFileEntity, String> {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/INoProcessService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/INoProcessService.java
new file mode 100644
index 00000000..57e72e80
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/INoProcessService.java
@@ -0,0 +1,26 @@
+package com.hzya.frame.seeyon.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ *
+ * @content 无流程表单公用service
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 14:53
+ *
+ */
+public interface INoProcessService {
+/**
+ *
+ * @content 无流程删除通用接口
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 15:08
+ *
+ */
+
+    JsonResultEntity DeleteProcessField(JSONObject requestData);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeYonInterFace.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeYonInterFace.java
new file mode 100644
index 00000000..5dc53395
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeYonInterFace.java
@@ -0,0 +1,94 @@
+package com.hzya.frame.seeyon.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * 致远OA接口类
+ *
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-22 9:29
+ */
+public interface ISeeYonInterFace {
+
+    /***
+     * 发起OA表单方法
+     * @content:
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-22 9:31
+     * @param requestData 请求json
+     * @return com.hzya.frame.web.entity.JsonResultEntity
+     **/
+    JsonResultEntity thirdInterfaceSend(JSONObject requestData);
+
+
+    /***
+     * @Content: 提供给OA的标准接口方法,包含参数 entity 为OA 的data信息, ,  eventType 为事件类型
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2020-12-24 10:36
+     * @Param [entity, eventType]
+     * eventType:
+     * 发起前事件 onBeforeStart ,
+     * 发起事件 onStart ,
+     * 终止前事件 onBeforeStop ,
+     * 终止事件 onStop,
+     * 撤销前事件 onBeforeCancel,
+     * 撤销事件 onCancel,
+     * 结束事件 onProcessFinished,
+     * 处理前事件 onBeforeFinishWorkitem,
+     * 处理事件 onFinishWorkitem,
+     * 回退前事件 onBeforeStepBack,
+     * 回退事件 onStepBack,
+     * 取回前事件 onBeforeTakeBack,
+     * 取回事件 onTakeBack,
+     * @return string
+     **/
+    JsonResultEntity thirdInterfaceSeeYonPlugInInterfaceEntrance(JSONObject requestData);
+
+
+    /***
+     * 致远OA业务流程集成补推方法,需要传递参数
+     * @param  jsonObject formAppId 表单模版ID CAP_FORM_DEFINITION, formMainIds 集合  dataSourceCode 数据源编码
+     * @return ht_oa_sqlserver
+     * @throws Exception
+     */
+    JsonResultEntity thirdInterfaceSeeYonDefinitionRePush(JSONObject jsonObject) throws Exception;
+
+    /**
+     * seeyon流程事件监听前置方法,绑定数据源
+     *
+     * @param sysExtensionApi
+     * @return
+     * @throws Exception
+     */
+    SysExtensionApiEntity colEventPre(SysExtensionApiEntity sysExtensionApi) throws Exception;
+
+    /**
+     * seeyon流程事件监听
+     *
+     * @param jsonObject
+     * @return
+     * @throws Exception
+     */
+    JsonResultEntity colEventListener(JSONObject jsonObject) throws Exception;
+
+    /**
+     * seeyon流程事件监听后置方法,调用三方接口
+     *
+     * @param jsonStr
+     * @param formAppId
+     * @param eventType
+     * @return
+     * @throws Exception
+     */
+    JsonResultEntity colEventPost(String jsonStr, String formAppId, String eventType) throws Exception;
+
+
+    JsonResultEntity chengeBody(JSONObject jsonObject) throws Exception;
+
+    SysExtensionApiEntity chengeBodySetPlug(SysExtensionApiEntity entity);
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeyonExtService.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeyonExtService.java
new file mode 100644
index 00000000..4f06472d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/ISeeyonExtService.java
@@ -0,0 +1,29 @@
+package com.hzya.frame.seeyon.service;
+
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogEntity;
+import com.hzya.frame.web.entity.JsonResultEntity;
+
+/**
+ * @Description seeyon扩展类
+ * @Author xiangerlin
+ * @Date 2024/5/14 14:04
+ **/
+public interface ISeeyonExtService {
+
+    /**
+     * @Since 3.0
+     * 英德赛 OA档案传U8
+     * 根据不同formApp来调U8不同接口
+     * @param entity
+     * @return
+     */
+    SysExtensionApiEntity ydcSeeyon2u8(SysExtensionApiEntity entity);
+
+    /**
+     * @Since 3.0
+     * 回调方法
+     * @param logEntity
+     */
+    void ydcSeeyon2u8CallBack(SysMessageManageLogEntity logEntity);
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpAttachmentServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpAttachmentServiceImpl.java
new file mode 100644
index 00000000..0ee1e68f
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpAttachmentServiceImpl.java
@@ -0,0 +1,70 @@
+package com.hzya.frame.seeyon.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.dao.ICtpAttachmentDao;
+import com.hzya.frame.seeyon.entity.CtpAttachmentEntity;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+import com.hzya.frame.seeyon.service.ICtpAttachmentService;
+import com.hzya.frame.seeyon.service.ICtpFileService;
+import com.hzya.frame.uuid.UUIDLong;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:31
+ **/
+@Service(value = "ctpAttachmentService")
+public class CtpAttachmentServiceImpl extends BaseService<CtpAttachmentEntity, String> implements ICtpAttachmentService {
+
+    private ICtpAttachmentDao ctpAttachmentDao;
+    @Autowired
+    private ICtpFileService ctpFileService;
+    @Autowired
+    public void setCtpAttachmentDao(ICtpAttachmentDao dao) {
+        this.ctpAttachmentDao = dao;
+        this.dao = dao;
+    }
+
+    /**
+     * 保存附件关系表
+     *
+     * @param fileUrl        ctp_file id
+     * @param col_summary_id col_summary id
+     * @param sub_reference  随机uuid
+     * @return
+     */
+    @Override
+    public CtpAttachmentEntity saveAttachment(String fileUrl, String col_summary_id, String sub_reference)throws Exception {
+        //查一下附件
+        CtpFileEntity ctpFileEntity = new CtpFileEntity();
+        ctpFileEntity.setId(fileUrl);
+        ctpFileEntity.setDataSourceCode("");
+        List<CtpFileEntity> ctpFileList = ctpFileService.query(ctpFileEntity);
+        if (CollectionUtils.isNotEmpty(ctpFileList)){
+            CtpFileEntity ctpFile = ctpFileList.get(0);
+            if (null != ctpFile){
+                CtpAttachmentEntity ctpAttachmentEntity = new CtpAttachmentEntity();
+                ctpAttachmentEntity.setId(String.valueOf(UUIDLong.longUUID()));
+                ctpAttachmentEntity.setFile_url(ctpFile.getId());//ctp_file表的id
+                ctpAttachmentEntity.setAtt_reference(col_summary_id);//业务表单的id
+                ctpAttachmentEntity.setSub_reference(sub_reference);//这个字段要保存到业务表附件到字段上
+                ctpAttachmentEntity.setCategory("66");//这里写66 才可以显示图片
+                ctpAttachmentEntity.setFilename(ctpFile.getFilename());
+                ctpAttachmentEntity.setType(ctpFile.getType());
+                ctpAttachmentEntity.setMime_type(ctpFile.getMime_type());
+                ctpAttachmentEntity.setAttachment_size(ctpFile.getFile_size());
+                ctpAttachmentEntity.setCreatedate(new Date());
+                this.save(ctpAttachmentEntity);
+                return ctpAttachmentEntity;
+            }
+        }
+        return null;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpFileServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpFileServiceImpl.java
new file mode 100644
index 00000000..31f96553
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/CtpFileServiceImpl.java
@@ -0,0 +1,15 @@
+package com.hzya.frame.seeyon.service.impl;
+
+import com.hzya.frame.basedao.service.impl.BaseService;
+import com.hzya.frame.seeyon.entity.CtpFileEntity;
+import com.hzya.frame.seeyon.service.ICtpFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:24
+ **/
+@Service()
+public class CtpFileServiceImpl extends BaseService<CtpFileEntity, String> implements ICtpFileService {
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/NoProcessServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/NoProcessServiceImpl.java
new file mode 100644
index 00000000..87ba10be
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/NoProcessServiceImpl.java
@@ -0,0 +1,119 @@
+package com.hzya.frame.seeyon.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.seeyon.dao.ICapFormDefinitionDao;
+import com.hzya.frame.seeyon.entity.CapFormDefinitionEntity;
+import com.hzya.frame.seeyon.service.INoProcessService;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import org.apache.commons.collections.CollectionUtils;
+import org.checkerframework.checker.units.qual.A;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ *
+ * @content 无流程表单公用service
+ * @className: Administrator
+ * @author laborer
+ * @date 2024-09-09 14:53
+ *
+ */
+
+@Service(value = "NoProcessServiceImpl")
+public class NoProcessServiceImpl implements INoProcessService {
+    private static final Logger logger = LoggerFactory.getLogger(NoProcessServiceImpl.class);
+    @Autowired
+    private ICapFormDefinitionDao capFormDefinitionDao;
+    @Override
+    public JsonResultEntity DeleteProcessField(JSONObject requestData) {
+        List<String>count  =new ArrayList<>();
+        JSONObject jsonStrObj = requestData.getJSONObject("jsonStr");
+        String formCode = jsonStrObj.getString("formCode");
+        String fieldName = jsonStrObj.getString("fieldName");
+        String fieldValue = jsonStrObj.getString("fieldValue");
+        if(StrUtil.isEmpty(formCode)){
+            return new JsonResultEntity("表单编码不能为空:formCode",false);
+        }
+        if(StrUtil.isEmpty(fieldName)){
+            return new JsonResultEntity("字段名称不能为空:fieldName",false);
+        }
+        if(StrUtil.isEmpty(fieldValue)){
+            return new JsonResultEntity("字段值不能为空:fieldValue",false);
+        }
+
+        //通过表单编号获取表单字段信息
+        CapFormDefinitionEntity fieldInfo = new CapFormDefinitionEntity();
+        fieldInfo.setAppbindInfo(formCode);
+        fieldInfo.setDataSourceCode("djoatest");
+        List<CapFormDefinitionEntity>capFormDefinitionEntityList = capFormDefinitionDao.getFormFiled(fieldInfo);
+        if(CollectionUtils.isEmpty(capFormDefinitionEntityList)){
+            return new JsonResultEntity("通过表单编号查询表单有误,请检查表单编号:"+formCode,false);
+        }
+
+        try {
+            capFormDefinitionEntityList.forEach(item->{
+                String appbindInfo = item.getAppbindInfo();
+                //格式化字段信息
+                JSONObject jsonObject = JSONObject.parseObject(appbindInfo);
+                boolean queryFlag = false;
+                //如果模版编号相同则继续删除,反正跳过
+                if(formCode.equals(jsonObject.getString("formCode"))){
+                    JSONObject field = JSONObject.parseObject(item.getFieldInfo());
+                    JSONObject frontFormmain = field.getJSONObject("front_formmain");
+                    JSONArray formsons = field.getJSONArray("formsons");
+                    JSONArray fieldInfoTable =  frontFormmain.getJSONArray("fieldInfo");
+                    //验证需要删除的条件字段在表单属性中是否存在
+                    for (int i = 0; i < fieldInfoTable.size(); i++) {
+                        JSONObject fieldInfoTableObj = fieldInfoTable.getJSONObject(i);
+                        String name = fieldInfoTableObj.getString("name");
+                        //如果表单属性中存在该字段则验证通过,如果不存在直接返回错误
+                       if(name.equals(fieldName)){
+                           queryFlag = true;
+
+                       }
+                    }
+                    //验证通过获取数据库表名称进行数据删除
+                    if(queryFlag){
+                        String tableName = frontFormmain.getString("tableName");
+                        //如果主表名称获取主表的主键进行数据删除
+                        fieldInfo.setTableName(tableName);
+                        fieldInfo.setFieldName(fieldName);
+                        fieldInfo.setFieldValue(fieldValue);
+                        List<CapFormDefinitionEntity>dataFormList = capFormDefinitionDao.getFormFiledByFileValue(fieldInfo);
+                        if(CollectionUtils.isNotEmpty(dataFormList)){
+                            dataFormList.forEach(item1->{
+                                String id = item1.getId();
+                                count.add(id);
+                                fieldInfo.setFieldName("id");
+                                fieldInfo.setId(id);
+                                capFormDefinitionDao.deleteByKey(fieldInfo);
+                                //循环该表单下面的所有子表信息进行子表删除
+                                if(CollectionUtils.isNotEmpty(formsons)){
+                                    formsons.forEach(formsonsItem->{
+                                        JSONObject jsonObjectBoddy = JSONObject.parseObject(formsonsItem.toString());
+                                        String bodyTableName = jsonObjectBoddy.getString("tableName");
+                                        fieldInfo.setTableName(bodyTableName);
+                                        fieldInfo.setFieldName("formmain_id");
+                                        fieldInfo.setId(id);
+                                        capFormDefinitionDao.deleteByKey(fieldInfo);
+                                    });
+                                }
+                            });
+                        }
+                    }
+                }
+            });
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        return new JsonResultEntity("删除成功,删除的数据ID"+ JSON.toJSONString(count),true);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeYonInterFaceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeYonInterFaceImpl.java
new file mode 100644
index 00000000..7475c8f4
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeYonInterFaceImpl.java
@@ -0,0 +1,568 @@
+package com.hzya.frame.seeyon.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.base.PluginBaseEntity;
+import com.hzya.frame.seeyon.dao.ISeeYonInterFaceDao;
+import com.hzya.frame.seeyon.entity.OAWorkflowEventDataEntity;
+import com.hzya.frame.seeyon.entity.SeeYonInterFaceEntity;
+import com.hzya.frame.seeyon.service.ISeeYonInterFace;
+import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity;
+import com.hzya.frame.sysnew.application.api.service.ISysApplicationApiService;
+import com.hzya.frame.sysnew.application.database.dao.ISysApplicationDatabaseDao;
+import com.hzya.frame.sysnew.application.database.entity.SysApplicationDatabaseEntity;
+import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.util.PluginUtils;
+import com.hzya.frame.web.entity.BaseResult;
+import com.hzya.frame.web.entity.JsonResultEntity;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 👻👻👻👻👻👻👻👻👻👻 gjh
+ * @version 1.0
+ * @content
+ * @date 2023-08-22 9:30
+ */
+@Service(value = "seeYonInterFace")
+public class SeeYonInterFaceImpl implements ISeeYonInterFace {
+    private static final Logger logger = LoggerFactory.getLogger(SeeYonInterFaceImpl.class);
+    /*** rest 用户名*/
+    private static final String RESTUSERNAME = "hzyaRest";
+    /*** rest 密码*/
+    private static final String RESTPASSWORD = "a5ce21b8-91db-4cec-b3e3-3e44719655fd";
+    // TODO 此处URL暂时写死,后续根据传递的应用ID获取
+    private static final String sendUrl = "http://60.204.152.210/seeyon/";
+    //速网esb地址
+    private static final String baseUrl = "http://hzya.ufyct.com:9067/kangarooDataCenter/entranceController/externalCallInterface";
+    /**
+     * 定义所支持的事件静态代码块
+     */
+    private static final StringBuffer eventTypeBuffer = new StringBuffer();
+    //基础档案类型
+    private final String ARCHIVESTYPE = "archives";
+    //流程表单类型
+    private final String FLOWTYPE = "flow";
+    //创建基础档案
+    private final String CREATEARCHIVES = "create";
+    //更新基础档案
+    private final String UPDATEARCHIVES = "update";
+    //创建基础档案
+    private final String CREATEARCHIVESURL = "rest/form/import/";
+    //创建基础档案
+    private final String UPDATEARCHIVESURL = "rest/form/update";
+    @Resource
+    private ISysApplicationDatabaseDao sysApplicationDatabaseDao;
+    @Autowired
+    private ISysApplicationApiService sysApplicationApiService;
+    @Resource
+    private ISeeYonInterFaceDao seeYonInterFaceDao;
+    //上一次同步时间
+    private final String LAST_SYNCHRONISED_TIME = "";
+
+    {
+        eventTypeBuffer.append("发起前事件 onBeforeStart ,");
+        eventTypeBuffer.append("发起事件 onStart ,");
+        eventTypeBuffer.append("终止前事件 onBeforeStop ,");
+        eventTypeBuffer.append("终止事件 onStop,");
+        eventTypeBuffer.append("撤销前事件 onBeforeCancel,");
+        eventTypeBuffer.append("撤销事件 onCancel,");
+        eventTypeBuffer.append("结束事件 onProcessFinished,");
+        eventTypeBuffer.append("处理前事件 onBeforeFinishWorkitem,");
+        eventTypeBuffer.append("处理事件 onFinishWorkitem,");
+        eventTypeBuffer.append("回退前事件 onBeforeStepBack,");
+        eventTypeBuffer.append("回退事件 onStepBack,");
+        eventTypeBuffer.append("取回前事件 onBeforeTakeBack,");
+        eventTypeBuffer.append("取回事件 onTakeBack,");
+    }
+
+    /****
+     * @Content:发起无流程表单接口实现
+     * @Author 👻👻👻👻👻👻👻👻 gjh
+     * @Date 2019/12/23 17:03
+     * @Param [templateCode 模版编码, sendLoginName 发送人登录帐号 ,xmlData  ]
+     * @return java.lang.Integer
+     **/
+    public static JsonResultEntity saveNoProcess(String templateCode, String interfaceUrl, String sendLoginName, String xmlData) {
+        String token = getToken(RESTUSERNAME, RESTPASSWORD, sendLoginName);
+        Map res = new HashMap();
+        res.put("loginName", sendLoginName);
+        res.put("dataXml", xmlData);
+        res.put("token", token);
+        String result = HttpRequest.post(sendUrl + interfaceUrl + templateCode).header("token", token).body(JSON.toJSONString(res)).execute().body();
+        logger.info("无流程表单执行结果:" + result);
+        return BaseResult.getFailureMessageEntity("执行成功", result);
+    }
+
+    public static JsonResultEntity upDateNoProcess(String interfaceUrl, String templateCode, String sendLoginName, String moduleId, String xmlData) {
+        String token = getToken(RESTUSERNAME, RESTPASSWORD, sendLoginName);
+        Map res = new HashMap();
+        res.put("loginName", sendLoginName);
+        res.put("dataXml", xmlData);
+        res.put("token", token);
+        res.put("moduleId", moduleId);
+        res.put("templateCode", templateCode);
+        logger.info("更新无流程表单参数:{}", JSON.toJSONString(res));
+        String result = HttpRequest.put(sendUrl + interfaceUrl).header("token", token).body(JSON.toJSONString(res)).execute().body();
+        logger.info("更新无流程表单执行结果:" + result);
+        return BaseResult.getFailureMessageEntity("执行成功", result);
+    }
+
+    //    {
+//        "moduleId":"5701605966502512923",
+//            "templateCode":"formmain_0360",
+//            "loginName":"seeyon",
+//            "dataXml":"<forms  version=\"2.1\"><formExport><summary  id=\"7382733425750590212\" name=\"formmain_0360\"/><definitions><column  id=\"field0001\" type=\"0\" name=\"供应商编码\" isNullable=\"false\" length=\"100\"/><column  id=\"field0002\" type=\"0\" name=\"供应商名称\" isNullable=\"false\" length=\"100\"/><column  id=\"field0007\" type=\"0\" name=\"税号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0008\" type=\"0\" name=\"地址\" isNullable=\"false\" length=\"100\"/><column  id=\"field0009\" type=\"0\" name=\"电话\" isNullable=\"false\" length=\"100\"/><column  id=\"field0011\" type=\"0\" name=\"联系人\" isNullable=\"false\" length=\"100\"/></definitions><values><column  name=\"供应商编码\"><value><![CDATA[ 12345 ]]></value></column><column  name=\"供应商名称\"><value><![CDATA[ 测试客户银行1111 ]]></value></column><column  name=\"税号\"><value><![CDATA[ 982698741E96 ]]></value></column><column  name=\"地址\"><value><![CDATA[ 杭州 ]]></value></column><column  name=\"电话\"><value><![CDATA[ null ]]></value></column><column  name=\"联系人\"><value><![CDATA[ null ]]></value></column></values><subForms><subForm><definitions><column  id=\"field0003\" type=\"4\" name=\"序号\" isNullable=\"false\" length=\"20\"/><column  id=\"field0005\" type=\"0\" name=\"开户行名称\" isNullable=\"false\" length=\"100\"/><column  id=\"field0006\" type=\"0\" name=\"银行账号\" isNullable=\"false\" length=\"100\"/><column  id=\"field0004\" type=\"0\" name=\"是否默认\" isNullable=\"false\" length=\"100\"/></definitions><values><row><column  name=\"序号\"><value><![CDATA[1]]></value><title><![CDATA[1438373948291346275]]></title></column><column  name=\"开户行名称\"><value><![CDATA[1234]]></value><title><![CDATA[9218745623489128746]]></title></column><column  name=\"银行账号\"><value><![CDATA[111111111]]></value><title><![CDATA[6897123456789123456]]></title></column><column  name=\"是否默认\"><value><![CDATA[是]]></value><title><![CDATA[5729461284567891234]]></title></column></row></values></subForm></subForms></formExport></forms>"
+//    }
+    private static String getToken(String userName, String password, String loginName) {
+        JSONObject jsonObject = new JSONObject();
+        /** 获取token*/
+
+        jsonObject.put("userName", userName);
+        jsonObject.put("password", password);
+        jsonObject.put("loginName", loginName);
+        logger.info("请求获取token开始---------------------------------------------");
+        logger.info("请求参数" + jsonObject.toJSONString());
+        String result = HttpUtil.post(sendUrl + "rest/token", jsonObject.toJSONString());
+        logger.info("获取token结果---------------------------------------------" + result);
+        logger.info("获取token结果---------------------------------------------" + result);
+        jsonObject = JSONObject.parseObject(result);
+        if ("".equals(result) || result == null) {
+            logger.info("获取token失败!");
+            throw new RuntimeException("获取token失败!");
+        } else {
+            String token = jsonObject.get("id").toString();
+            return token;
+        }
+    }
+
+    /***
+     * 发起OA表单方法
+     * @content:
+     * @author 👻👻👻👻👻👻👻👻 gjh
+     * @date 2023-08-22 9:32
+     * @param
+     * @return com.hzya.frame.web.entity.BaseResult
+     **/
+    @Override
+    public JsonResultEntity thirdInterfaceSend(JSONObject requestData) {
+        JSONObject jsonStr = requestData.getJSONObject("jsonStr");
+        if (ObjectUtils.isEmpty(jsonStr)) {
+            throw new BaseSystemException("jsonStr为空!请传递参数");
+        }
+        //类型 flow archives
+        String type = jsonStr.getString("type");
+        if (StringUtils.isEmpty(type)) {
+            throw new BaseSystemException("请传递类型!type 流程表单:flow 基础档案:archives");
+        }
+        //模版编号
+        String templateCode = jsonStr.getString("templateCode");
+        if (StringUtils.isEmpty(templateCode)) {
+            throw new BaseSystemException("请传入模版编号!templateCode不允许为空");
+        }
+        JSONObject data = jsonStr.getJSONObject("data");
+        String attributeArrayStr = jsonStr.getString("attribute");
+        if (StringUtils.isEmpty(attributeArrayStr)) {
+            throw new BaseSystemException("attribute不允许为空");
+        }
+        List<JSONObject> attributeArray = JSON.parseArray(attributeArrayStr, JSONObject.class);
+        JsonResultEntity result = null;
+        if (ARCHIVESTYPE.equalsIgnoreCase(type)) {
+            switch (templateCode) {
+                //预留的
+                case "abc123":
+                    break;
+            }
+        }
+        if (FLOWTYPE.equalsIgnoreCase(type)) {
+        }
+        return result;
+    }
+
+
+    @Override
+    public JsonResultEntity thirdInterfaceSeeYonPlugInInterfaceEntrance(JSONObject requestData) {
+        String jsonStr = requestData.getString("jsonStr");
+        JSONObject jsonObject = requestData.getJSONObject("jsonStr");
+        OAWorkflowEventDataEntity entity = JSON.parseObject(jsonStr, OAWorkflowEventDataEntity.class);
+        logger.info("监听OA事件入参:" + jsonObject.toJSONString());
+        JSONObject formBeanData = jsonObject.getJSONObject("businessDataStr");
+        String eventType = jsonObject.getString("eventType");
+        /** 流程ID*/
+        String summaryId = entity.getSummaryId();
+        /** 节点ID*/
+        String affairId = entity.getAffairId();
+        String currentActivityId = entity.getCurrentActivityId();
+        /****/
+        String formViewOperation = entity.getFormViewOperation();
+        Object summaryObj = entity.getSummaryObj();
+        String deeCfgId = entity.getDeeCfgId();
+        String currentNodeLast = entity.getCurrentNodeLast();
+        Map<String, Object> businessData = JSON.parseObject(entity.getBusinessDataStr(), Map.class);
+        Map<String, Object> extData = entity.getExtData();
+        /** 表单表的FORM ID,用此字段标记是哪个流程*/
+        String formApp = entity.getFormApp();
+
+        //formApp 最好过滤一下
+
+
+        JsonResultEntity result = null;
+        try {
+            //流程事件处理
+            result = colEventPost(jsonStr, formApp, eventType);
+        } catch (Exception e) {
+            return BaseResult.getFailureMessageEntity("传递失败", e.getMessage());
+        }
+        return result;
+//        try {
+//            /** 根据事件类型处理相关事件*/
+//            switch (eventType) {
+//                /** 发起前事件*/
+//                case "onBeforeStart":
+//                    break;
+//                /** 发起事件*/
+//                case "onStart":
+//                    //流程发起 新增grpu8单据
+//                    break;
+//                /** 终止前事件*/
+//                case "onBeforeStop":
+//                    break;
+//                /** 终止事件*/
+//                case "onStop":
+//                    //流程终止,更新grpu8单据
+//                    break;
+//                /** 撤销前事件*/
+//                case "onBeforeCancel":
+//                    break;
+//                /** 撤销事件*/
+//                case "onCancel":
+//                    //流程撤销,更新grpu8单据
+//                    break;
+//                /** 结束事件*/
+//                case "onProcessFinished":
+//                    break;
+//                /** 处理前事件*/
+//                case "onBeforeFinishWorkitem":
+//                    /** 根据form处理相关业务表单的数据*/
+//                    switch (formApp) {
+//                        case "abc123":
+//                            break;
+//                        default:
+//                            return   BaseResult.getFailureMessageEntity("未匹配到表单!当前formID:" + formApp,  "");
+//                    }
+//                    break;
+//                /** 处理事件*/
+//                case "onFinishWorkitem":
+//                    break;
+//                /** 回退前事件*/
+//                case "onBeforeStepBack":
+//                    break;
+//                /** 回退事件*/
+//                case "onStepBack":
+//                    break;
+//                /** 取回前事件*/
+//                case "onBeforeTakeBack":
+//                    break;
+//                /** 取回事件*/
+//                case "onTakeBack":
+//                    break;
+//                default:
+////                throw new RuntimeException("传入了非法事件类型!请参照:" + eventTypeBuffer.toString());
+//                    return   BaseResult.getFailureMessageEntity("传入了非法事件类型!请参照:" + eventTypeBuffer.toString(), "", "");
+//            }
+//            return BaseResult.getSuccessMessageEntity("传递成功",  result);
+//        }catch (Exception e){
+//            return BaseResult.getFailureMessageEntity("传递失败",e.getMessage());
+//        }
+    }
+
+
+    @Override
+    public JsonResultEntity thirdInterfaceSeeYonDefinitionRePush(JSONObject jsonObject) throws Exception {
+        JSONObject requestData = jsonObject.getJSONObject("jsonStr");
+        JSONArray resultEntityArray = new JSONArray();
+        if (null == requestData) {
+            throw new BaseSystemException("参数传递错误需要jsonStr!");
+        }
+        //表单模版ID
+        String formAppId = requestData.getString("formAppId");
+        //事件事件类型
+        String eventType = requestData.getString("eventType");
+        //数据源编码
+        String dataSourceCode = requestData.getString("dataSourceCode");
+        //主表ID集合 formMainIds
+        JSONArray formMainIds = requestData.getJSONArray("formMainIds");
+        if (StrUtil.isEmpty(eventType)) {
+            throw new BaseSystemException("需要传递eventType 参照致远OA事件!");
+        }
+        if (StrUtil.isEmpty(formAppId)) {
+            throw new BaseSystemException("需要传递formAppId 参照致远OA 表 CAP_FORM_DEFINITION!");
+        }
+        if (StrUtil.isEmpty(dataSourceCode)) {
+            throw new BaseSystemException("需要传递dataSourceCode 参照中台表 sys_data_source!");
+        }
+        if (null == formMainIds || formMainIds.size() == 0) {
+            throw new BaseSystemException("需要传递业务主表数据id集合,不允许全量推送!");
+        }
+
+        SeeYonInterFaceEntity seeYonInterFaceEntity = new SeeYonInterFaceEntity();
+        BeanUtil.copyProperties(requestData, seeYonInterFaceEntity);
+        List<SeeYonInterFaceEntity> seeYonInterFaceEntityList = seeYonInterFaceDao.queryDefinitionInfo(seeYonInterFaceEntity);
+        if (null != seeYonInterFaceEntityList && seeYonInterFaceEntityList.size() > 0) {
+            for (SeeYonInterFaceEntity interFaceEntity : seeYonInterFaceEntityList) {
+                String field_info = interFaceEntity.getField_info();
+                JSONObject infoJson = JSON.parseObject(field_info);
+                //获取主表信息
+                JSONObject formMain = infoJson.getJSONObject("front_formmain");
+                //获取明细表信息
+                JSONArray formSons = infoJson.getJSONArray("formsons");
+                //主表tableName
+                String formMainTableName = formMain.getString("tableName");
+
+                /** 设置主表查询条件*/
+                interFaceEntity.setTabName(formMainTableName);
+                interFaceEntity.setDataSourceCode(dataSourceCode);
+                interFaceEntity.setFormMainIds(formMainIds.toJavaList(String.class));
+
+                List<Map<String, Object>> forMainList = seeYonInterFaceDao.queryDefinitionData(interFaceEntity);
+                for (Map<String, Object> forMainRow : forMainList) {
+                    //定义致远OA事件对象
+                    JSONObject seeYonBean = new JSONObject();
+                    //定义主表对象
+                    JSONObject formMainObj = new JSONObject();
+                    //获取主表ID
+                    String forMainId = String.valueOf(forMainRow.get("ID"));
+                    //组装主表数据
+                    for (Map.Entry<String, Object> entry : forMainRow.entrySet()) {
+                        formMainObj.put(entry.getKey().toLowerCase(), entry.getValue());
+                    }
+                    //组装明细表数据
+                    if (null != formSons && formSons.size() > 0) {
+                        for (Object formSon : formSons) {
+                            JSONObject son = JSON.parseObject(JSON.toJSONString(formSon));
+                            //明细数据
+                            String sonTableName = son.getString("tableName");
+                            SeeYonInterFaceEntity details = new SeeYonInterFaceEntity();
+                            details.setFormMainId(forMainId);
+                            details.setTabName(sonTableName);
+                            details.setDataSourceCode(dataSourceCode);
+                            JSONArray jsonArray = new JSONArray();
+                            List<Map<String, Object>> forSonList = seeYonInterFaceDao.queryDefinitionData(details);
+                            for (Map<String, Object> forSons : forSonList) {
+                                //组装明细数据
+                                JSONObject forSonJson = new JSONObject();
+                                for (Map.Entry<String, Object> entry : forSons.entrySet()) {
+                                    forSonJson.put(entry.getKey().toLowerCase(), entry.getValue());
+                                }
+                                jsonArray.add(forSonJson);
+                            }
+                            //设置明细表数据
+                            seeYonBean.put(sonTableName, jsonArray);
+                        }
+                    }
+
+                    seeYonBean.put(formMainTableName, formMainObj);
+                    JSONObject rePushRequestData = new JSONObject();
+                    JSONObject object = new JSONObject();
+                    object.put("formApp", formAppId);
+                    object.put("eventType", eventType);
+                    object.put("businessDataStr", seeYonBean.toJSONString());
+                    object.put("affairId", "");
+                    object.put("summaryId", requestData.getString("summaryId"));
+                    object.put("currentActivityId", "");
+                    object.put("id", forMainId);
+                    object.put("hzyaExtData", requestData.getJSONObject("hzyaExtData"));
+                    logger.info("Method:thirdInterfaceSeeYonDefinitionRePush 组装seeYonBean DATA: {}", seeYonBean.toJSONString());
+
+                    rePushRequestData.put("jsonStr", object);
+
+
+                    JsonResultEntity resultEntity = thirdInterfaceSeeYonPlugInInterfaceEntrance(rePushRequestData);
+                    if (null != resultEntity) {
+                        resultEntityArray.add(resultEntity.getAttribute());
+                    } else {
+                        JSONObject jsonResultEntity = new JSONObject();
+                        jsonResultEntity.put("msg", "从新推送失败");
+                        jsonResultEntity.put("id", forMainId);
+                        resultEntityArray.add(jsonResultEntity);
+
+                    }
+
+                }
+            }
+        }
+        return BaseResult.getSuccessMessageEntity("从新推送执行结束", resultEntityArray);
+    }
+
+    /**
+     * seeyon流程事件监听前置方法,绑定数据源
+     *
+     * @param entity
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public SysExtensionApiEntity colEventPre(SysExtensionApiEntity entity) throws Exception {
+        try {
+            SysApplicationEntity applicationEntity = entity.getSendApp();
+            SysApplicationDatabaseEntity sysApplicationDatabaseEntity = new SysApplicationDatabaseEntity();
+            sysApplicationDatabaseEntity.setSts("Y");
+            sysApplicationDatabaseEntity.setDbStatus("1");
+            sysApplicationDatabaseEntity.setAppId(applicationEntity.getId());
+            sysApplicationDatabaseEntity.setDataSourceCode("master");
+            List<SysApplicationDatabaseEntity> sysDataSourceEntities = sysApplicationDatabaseDao.queryDSBase(sysApplicationDatabaseEntity);
+            if (sysDataSourceEntities != null && sysDataSourceEntities.size() > 0) {
+                String parm = entity.getBodys();
+                JSONObject jsonObject = JSONObject.parseObject(parm);
+                jsonObject.put("dataSourceCode", sysDataSourceEntities.get(0).getSourceCode());
+                entity.setBodys(jsonObject.toJSONString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return entity;
+    }
+
+    /**
+     * seeyon流程事件监听
+     *
+     * @param jsonObject
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public JsonResultEntity colEventListener(JSONObject jsonObject) throws Exception {
+        try {
+            if (null != jsonObject && StrUtil.isNotEmpty(jsonObject.getString("jsonStr"))) {
+                SeeYonInterFaceEntity entity = jsonObject.getJSONObject("jsonStr").toJavaObject(SeeYonInterFaceEntity.class);
+                JSONObject requestData = new JSONObject();
+                //表单模版ID
+                requestData.put("formAppId", entity.getFormAppId());
+                //事件事件类型
+                requestData.put("eventType", entity.getEventType());
+                //数据源编码
+                requestData.put("dataSourceCode", entity.getDataSourceCode());
+                requestData.put("formMainIds", entity.getFormMainIds());
+                requestData.put("summaryId", entity.getSummaryId());
+                JSONObject jsonStr = new JSONObject();
+                jsonStr.put("jsonStr", requestData);
+                thirdInterfaceSeeYonDefinitionRePush(jsonStr);
+            }
+        } catch (Exception e) {
+            logger.error("流程事件通知接口出错:{}", e);
+            return BaseResult.getSuccessMessageEntity("失败", e.getMessage());
+        }
+        return BaseResult.getSuccessMessageEntity("成功");
+    }
+
+    /**
+     * seeyon流程事件监听后置方法,调用三方接口
+     *
+     * @param jsonStr
+     * @param formAppId
+     * @param eventType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public JsonResultEntity colEventPost(String jsonStr, String formAppId, String eventType) throws Exception {
+        if (StrUtil.isNotEmpty(jsonStr) && StrUtil.isNotEmpty(formAppId) && StrUtil.isNotEmpty(eventType)) {
+            SysApplicationApiEntity sysApplicationApiEntity = new SysApplicationApiEntity();
+            sysApplicationApiEntity.setHeaderIn(formAppId + "_" + eventType);
+            List<SysApplicationApiEntity> applist = sysApplicationApiService.queryLike(sysApplicationApiEntity);
+            if (CollectionUtil.isNotEmpty(applist)) {
+                if (applist.size() > 1) {
+                    throw new BaseSystemException("根据formID:" + formAppId + "查询出多条数据");
+                }
+                if (applist.size() == 0 ) {
+                    throw new BaseSystemException("根据formID:" + formAppId + "eventType:"+eventType+"未查询到API配置");
+                }
+                SysApplicationApiEntity sysApp = applist.get(0);
+                //数据源配置
+                SysApplicationDatabaseEntity sysApiDatabase = new SysApplicationDatabaseEntity();
+                sysApiDatabase.setAppId(sysApp.getAppId());
+                List<SysApplicationDatabaseEntity> apiDataBaseList = sysApplicationDatabaseDao.queryDSBase(sysApiDatabase);
+                if (CollectionUtils.isNotEmpty(apiDataBaseList) && apiDataBaseList.size() == 1){
+                    sysApiDatabase = apiDataBaseList.get(0);
+                }
+                JSONArray headerArray = JSONArray.parseArray(sysApp.getHeaderIn());
+                Map<String,String> headerMap = new HashMap<>();
+                if (null != headerArray && headerArray.size() > 0) {
+                    for (int i = 0; i < headerArray.size(); i++) {
+                        JSONObject querys = headerArray.getJSONObject(i);
+                        //query 只有基本类型,不用循环判断下级
+                        //判断参数是否有值
+                        //获取对象下面的层级数据
+                        String parameterName = querys.getString("parameterName");
+                        String example = querys.getString("example");
+                        headerMap.put(parameterName,example);
+                    }
+                    if (headerMap.isEmpty()){
+                        throw new BaseSystemException("根据formID:" + formAppId + "未获取到head参数");
+                    }
+                    PluginBaseEntity pluginBaseEntity = PluginUtils.getPluginsById(headerMap.get("plugId"));
+                    if (null == pluginBaseEntity) {
+                        throw new BaseSystemException("根据ID获取插件错误!请传入正确的 pluginId");
+                    }
+                    //执行业务逻辑代码
+                    JSONObject  reqJson = new JSONObject();
+                    reqJson.put("jsonStr",jsonStr);
+                    reqJson.put("formAppId",formAppId);
+                    reqJson.put("eventType",eventType);
+                    reqJson.put("headers",JSON.toJSONString(headerMap));
+                    reqJson.put("sourceCode",sysApiDatabase.getSourceCode());
+                    JsonResultEntity result = pluginBaseEntity.executeBusiness(reqJson);
+                    return result;
+                } else {
+                    throw new BaseSystemException("根据formID:" + formAppId + "未获取到head参数");
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public JsonResultEntity chengeBody(JSONObject object) throws Exception {
+        JSONObject jsonstr = object.getJSONObject("jsonStr");
+        PluginBaseEntity pluginBaseEntity = null;
+        JsonResultEntity result;
+        String pluginId = jsonstr.getString("plugId");
+        pluginBaseEntity = PluginUtils.getPluginsById(pluginId);
+        if (null == pluginBaseEntity) {
+            throw new BaseSystemException("根据ID获取插件错误!请传入正确的 pluginId");
+        } else {
+            //执行业务逻辑代码
+            result = pluginBaseEntity.executeBusiness(object);
+        }
+        return result;
+    }
+
+    @Override
+    public SysExtensionApiEntity chengeBodySetPlug(SysExtensionApiEntity entity) {
+        Map<String, String> headers = entity.getHeaders();
+        JSONObject jsonObject = JSONObject.parseObject(entity.getBodys());
+        jsonObject.put("plugId", headers.get("plugId"));
+        entity.setBodys(jsonObject.toJSONString());
+        return entity;
+    }
+
+
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeyonExtServiceImpl.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeyonExtServiceImpl.java
new file mode 100644
index 00000000..9849bb40
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/service/impl/SeeyonExtServiceImpl.java
@@ -0,0 +1,241 @@
+package com.hzya.frame.seeyon.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+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.seeyon.entity.OAWorkflowEventDataEntity;
+import com.hzya.frame.seeyon.service.ISeeyonExtService;
+import com.hzya.frame.seeyon.util.OAU8Util;
+import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity;
+import com.hzya.frame.sysnew.integtationTaskLivingDetails.entity.IntegrationTaskLivingDetailsEntity;
+import com.hzya.frame.sysnew.integtationTaskLivingDetails.service.IIntegrationTaskLivingDetailsService;
+import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogEntity;
+import com.hzya.frame.sysnew.messageManageLog.entity.SysMessageManageLogStatusEnum;
+import com.hzya.frame.uuid.UUIDLong;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description seeyon扩展类
+ * @Author xiangerlin
+ * @Date 2024/5/14 14:04
+ **/
+@Service(value = "seeyonExt")
+public class SeeyonExtServiceImpl implements ISeeyonExtService {
+
+
+    Logger logger = LogManager.getLogger(getClass());
+
+    @Autowired
+    private IIntegrationTaskLivingDetailsService taskLivingDetailsService;
+
+    /**
+     * 英德赛 OA档案传U8
+     * 根据不同formApp来调U8不同接口
+     * @Since 3.0
+     * @param entity
+     * @return
+     */
+    @Override
+    public SysExtensionApiEntity ydcSeeyon2u8(SysExtensionApiEntity entity) {
+        String bodys = entity.getBodys();
+        if (StrUtil.isNotEmpty(bodys)){
+            try {
+                OAWorkflowEventDataEntity dataEntity = JSON.parseObject(bodys,OAWorkflowEventDataEntity.class);
+                String businessDataStr = dataEntity.getBusinessDataStr();//oa表单参数
+                JSONObject businessData = JSON.parseObject(businessDataStr);
+                String formApp = dataEntity.getFormApp();
+                SysExtensionApiEntity param = new SysExtensionApiEntity();
+                Map<String, String> headerMap = entity.getHeaders();
+                JSONObject hzyaExtData = dataEntity.getHzyaExtData();//扩展参数
+                if (null == hzyaExtData){
+                    hzyaExtData = new JSONObject();
+                }
+                //根据forApp组装不同参数
+                switch (formApp){
+                    case "-8691606453890363968"://
+                        hzyaExtData.put("billCode", "cunhuoabc123456");
+                        getInventory(businessData,param);
+                        break;
+                    case "6223456019738676230":
+                        getSupplier(businessData,param,hzyaExtData);
+                        break;
+                    case "-9122508232154527168":
+                        getCustomer(businessData,param,hzyaExtData);
+                        break;
+                    default:
+                        param.setBodys("未匹配到表单!当前formID:"+ formApp);
+                        logger.error("未匹配到表单!当前formID:"+formApp);
+                }
+                headerMap.put("hzyaExtData", JSON.toJSONString(hzyaExtData));
+                return param;
+            }catch (Exception e){
+                e.printStackTrace();
+                logger.error("执行英德赛OA存货同步U8接口报错:{}", e);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 回调方法
+     * @Since 3.0
+     * @param logEntity
+     */
+    @Override
+    public void ydcSeeyon2u8CallBack(SysMessageManageLogEntity logEntity) {
+
+
+        //在这里记录日志
+        JSONObject targetData = JSON.parseObject(logEntity.getTargetData());//这个对象里的body是 发送到u8的请求报文
+        JSONObject sourceData = JSON.parseObject(logEntity.getSourceData());
+        JSONObject sourceHeaders = sourceData.getJSONObject("header");//源数据header
+        JSONObject sourceBody = sourceData.getJSONObject("body");//源数据body
+        JSONObject hzyaExtData = sourceHeaders.getJSONObject("hzyaExtData");
+        JSONArray formMainIds = new JSONArray();
+        formMainIds.add(sourceBody.getString("id"));
+        JSONObject param = new JSONObject();
+        String formApp = sourceBody.getString("formApp");
+        param.put("formAppId",formApp);
+        param.put("formMainIds",formMainIds);
+        param.put("dataSourceCode","ht_oa_sqlserver");
+        param.put("eventType",sourceBody.getString("eventType"));
+
+        //把返回的单号更新到oa档案表
+        String sql = "";
+        switch (formApp){
+            case "-8691606453890363968"://存货
+                sql = "";
+                break;
+            case "6223456019738676230"://供应商
+                sql = "update formmain_0229 set field0002 = '' where field0001 = "+hzyaExtData.getString("billCode");
+                break;
+            case "-9122508232154527168"://客户
+                sql = "update formmain_0230 set field0002 = '' where field0001 = "+hzyaExtData.getString("billCode");
+                break;
+        }
+        IntegrationTaskLivingDetailsEntity logDetails = new IntegrationTaskLivingDetailsEntity();
+        logDetails.setRootAppPk(JSON.toJSONString(param));
+        logDetails.setRootAppBill(hzyaExtData.getString("billCode"));
+        logDetails.setNewTransmitInfo(logEntity.getReturnData());
+        logDetails.setNewPushDate(new Date());
+        logDetails.setRootAppNewData(targetData.getString("body"));
+        //logDetails.setNewState(SysMessageManageLogStatusEnum.statusGetValue(logEntity.getStatus()));
+        logDetails.setPluginId("SeeyonExtPlugin");
+        try {
+            if (StrUtil.isEmpty(hzyaExtData.getString("integration_task_living_details_id"))){
+                if (SysMessageManageLogStatusEnum.SUCCESS.getType().equals(logEntity.getStatus())) {//成功
+                    taskLivingDetailsService.saveLogToSuccess(logDetails);
+                }else {
+                    taskLivingDetailsService.saveLogToFail(logDetails);//失败
+                }
+            }else {
+                logDetails.setId(hzyaExtData.getString("integration_task_living_details_id"));
+                if (SysMessageManageLogStatusEnum.SUCCESS.getType().equals(logEntity.getStatus())) {//成功
+                    taskLivingDetailsService.saveLogFailToSuccess(logDetails);
+                }else {
+                    taskLivingDetailsService.updateLogFailToSuccess(logDetails);//失败
+                }
+            }
+        }catch (Exception e){
+            logger.error("保存日志出错:{}",e);
+        }
+    }
+
+    //存货参数组装
+    private SysExtensionApiEntity getInventory(JSONObject businessData,SysExtensionApiEntity param){
+        if (null != businessData){
+            JSONObject formmain0227 = businessData.getJSONObject("formmain_0227");
+            JSONArray formson0228Arr = businessData.getJSONArray("formson_0228");
+            for (int i=0; i< formson0228Arr.size(); i++){
+                JSONObject formson0228 = formson0228Arr.getJSONObject(i);
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("Token", "Hzya1314_CheckSkip");
+                jsonObject.put("billid", formson0228.getString("id"));
+                jsonObject.put("AccId", formmain0227.getString("field0015"));
+
+                JSONObject oArchives = new JSONObject();
+                oArchives.put("cInvCode", formson0228.getString("field0002"));
+                oArchives.put("cInvCCode", formson0228.getString("field0005"));
+                oArchives.put("cInvName", formson0228.getString("field0003"));
+                //todo 这个没值
+                oArchives.put("cGroupCode", "01");
+                oArchives.put("cComUnitCode", formson0228.getString("field0006"));
+
+                jsonObject.put("oArchives", oArchives);
+                param.setBodys(JSON.toJSONString(jsonObject));
+            }
+        }
+        return param;
+    }
+    //供应商参数组装
+    private SysExtensionApiEntity getSupplier(JSONObject businessData,SysExtensionApiEntity param,JSONObject hzyaExtData){
+        if (null != businessData){
+            JSONObject formmain0225 = businessData.getJSONObject("formmain_0225");
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("billid", formmain0225.getString("id"));
+            jsonObject.put("AccId", formmain0225.getString("field0020"));
+            jsonObject.put("Token", OAU8Util.getToken());
+            JSONObject oArchives = new JSONObject();
+            oArchives.put("cVenCode", formmain0225.getString("field0002"));
+            oArchives.put("cVenName ", formmain0225.getString("field0003"));
+            oArchives.put("cVenAbbName", formmain0225.getString("field0004"));
+            oArchives.put("cVCCode", formmain0225.getString("field0006"));
+            oArchives.put("cVenExch_name", formmain0225.getString("field0010"));
+            //oArchives.put("bVenTax", "false");
+            //oArchives.put("bLicenceDate", "false");
+            //oArchives.put("bBusinessDate", "false");
+            //oArchives.put("bProxyDate", "false");
+            //oArchives.put("bPassGMP", "false");
+            //oArchives.put("bVenCargo", "false");
+            //oArchives.put("bProxyForeign", "true");
+            //oArchives.put("bVenService", "true");
+            //oArchives.put("iVenGSPType", "0");
+            //oArchives.put("bVenOverseas", "false");
+            //oArchives.put("bVenAccPeriodMng", "false");
+            //oArchives.put("bVenHomeBranch", "false");
+            oArchives.put("dVenCreateDatetime", DateUtil.now());
+            oArchives.put("cVenRegCode", formmain0225.getString("field0009"));
+            oArchives.put("cVenBank", formmain0225.getString("field0011"));
+            oArchives.put("cVenAccount", formmain0225.getString("field0012"));
+            jsonObject.put("oArchives", oArchives);
+            param.setBodys(JSON.toJSONString(jsonObject));
+            hzyaExtData.put("billCode", formmain0225.getString("field0001"));
+            hzyaExtData.put("formmainId", formmain0225.getString("id"));
+        }
+        return param;
+    }
+    //客户参数组装
+    private SysExtensionApiEntity getCustomer(JSONObject businessData,SysExtensionApiEntity param,JSONObject hzyaExtData){
+        if (null != businessData){
+            JSONObject formmain0226 = businessData.getJSONObject("formmain_0226");
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("billid", formmain0226.getString("id"));
+            jsonObject.put("AccId", formmain0226.getString("field0025"));
+            jsonObject.put("Token", "Hzya1314_CheckSkip");
+
+            JSONObject oArchives = new JSONObject();
+            oArchives.put("cCusCode", formmain0226.getString("field0002"));
+            oArchives.put("cCusName", formmain0226.getString("field0007"));
+            oArchives.put("cCusAbbName", formmain0226.getString("field0008"));
+            oArchives.put("cCCCode", formmain0226.getString("field0012"));
+            oArchives.put("cCusExch_name", formmain0226.getString("field0013"));
+            // todo 这个字段没值
+            oArchives.put("cCusMngTypeCode", "999");
+
+            jsonObject.put("oArchives", oArchives);
+            param.setBodys(JSON.toJSONString(jsonObject));
+            hzyaExtData.put("billCode",formmain0226.getString("field0001"));
+            hzyaExtData.put("formmainId",formmain0226.getString("id"));
+        }
+        return param;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OABipUtil.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OABipUtil.java
new file mode 100644
index 00000000..9484e2fb
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OABipUtil.java
@@ -0,0 +1,65 @@
+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.JSONObject;
+
+/**
+ * com.hzya.frame.bip.v3.v2207.util
+ *
+ * @author makejava
+ * @date 2024-05 -30 14:20
+ */
+
+public class OABipUtil {
+    /**
+     *
+     * @content 发送单据到BIP系统
+     * @author laborer
+     * @date 2024/6/21 0021 10:51
+     *
+     */
+
+    public static String sendU9cTOBipEsb(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 getBipToken(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");
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAPayState.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAPayState.java
new file mode 100644
index 00000000..3fdfac15
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAPayState.java
@@ -0,0 +1,73 @@
+package com.hzya.frame.seeyon.util;
+
+/**
+ * @Author:hecan
+ * @Description:支付类型(支付状态)
+ * @params:
+ * @return:
+ * @Date: 2023/3/14 15:05
+ */
+public enum OAPayState {
+    a("a","待提交直联"),
+    b("b","已提交直联"),
+    c("c","银行已受理"),
+    d("d","银行未受理"),
+    e("e","可疑"),
+    f("f","待人工确认"),
+    g("g","支付成功"),
+    h("h","支付失败"),
+    i("i","部分成功"),
+    j("j","退票"),
+    k("k","取消支付"),
+    n("n","其他"),
+    p("p","支付中"),
+    q("q","待支付"),
+    one("1","待处理"),
+    two("2","审批中"),
+    three("3","处理失败"),
+    four("4","审批完成"),
+    five("5","审批撤销"),
+    six("6","审批拒绝"),
+    seven("7","待发送审批"),
+    eight("8","集中受理中"),
+    nine("9","审批退回"),
+    ten("10","预处理中"),
+    eleven("11","预处理拒绝"),
+    twelve("12","资金监控审批中");
+
+
+    //类型
+    private String type;
+    //值
+    private String value;
+
+    OAPayState(String type, String value){
+        this.type=type;
+        this.value=value;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public static String payStateGetValue(String type){
+        for (OAPayState payState : OAPayState.values()){
+            if(payState.getType()==type||payState.getType().equals(type)){
+                return payState.getValue().toString();
+            }
+        }
+        return null;
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OARestUtil.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OARestUtil.java
new file mode 100644
index 00000000..06143106
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OARestUtil.java
@@ -0,0 +1,248 @@
+package com.hzya.frame.seeyon.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.seeyon.entity.CollAttachmentResDTO;
+import com.hzya.frame.sysnew.application.api.entity.SysApplicationApiEntity;
+import com.hzya.frame.sysnew.application.api.service.ISysApplicationApiService;
+import com.hzya.frame.web.exception.BaseSystemException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @Description 致远rest接口工具类
+ * @Author xiangerlin
+ * @Date 2024/6/17 15:49
+ **/
+@Component
+public class OARestUtil {
+    @Autowired
+    private ISysApplicationApiService sysApplicationApiService;
+    static Logger logger = LoggerFactory.getLogger(OARestUtil.class);
+
+    private OARestUtil() {
+    }
+
+
+    /**
+     * 附件上传
+     * @param file 附件对象
+     * @param api_code 接口编码
+     * @return
+     */
+    public  JSONObject fileUpload(File file,String api_code) {
+        if (StrUtil.isNotEmpty(api_code)){
+            //1、查询附件上传api接口信息
+            SysApplicationApiEntity sysApp = getByCode(api_code);
+            if (null != sysApp){
+                String app_url = sysApp.getAppUrl();
+                String url = app_url+"/seeyon/rest/attachment?token=@token@";
+                String token = getToken(null,"8000240000");
+                url = url.replaceAll("@token@",token);
+                HashMap<String, Object> paramMap = new HashMap<>();
+                paramMap.put("file", file);
+                String result = HttpUtil.post(url, paramMap);
+                if (StrUtil.isNotBlank(result)) {
+                    logger.info("附件上传结果"+result);
+                    JSONObject jsonObject = JSONObject.parseObject(result);
+                    String atts = jsonObject.get("atts").toString();
+                    if (StrUtil.isNotEmpty(atts)) {
+                        JSONArray jsonArray = JSONArray.parseArray(atts);
+                        JSONObject res = (JSONObject) jsonArray.get(0);
+                        return res;
+                    }
+                }
+            }
+        }else {
+            throw new BaseSystemException("api_code不能为空");
+        }
+        return null;
+    }
+
+    /***
+     * 查询协同附件列表
+     * @param summaryId col_summary表id
+     * @param attType 0代表附件,2代表关联文档,“0,2”代表附件和关联文档
+     * @param apiCode 接口编码
+     * @param token
+     * @return
+     */
+    public List<CollAttachmentResDTO> getColAttachments(String summaryId,String attType,String apiCode,String token){
+        if (StrUtil.isNotEmpty(summaryId) && StrUtil.isNotEmpty(apiCode)){
+            SysApplicationApiEntity sysApp = getByCode(apiCode);
+            String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
+            if (StrUtil.isEmpty(attType)){
+                attType = "0";
+            }
+            String url = "/seeyon/rest/coll/attachments/@SummaryID@/@attType@";
+            url = url.replaceAll("@SummaryID@",summaryId).replaceAll("@attType@",attType);
+            String body = HttpRequest.get(appUrl + url).header("token", token).execute().body();
+            if (StrUtil.isNotEmpty(body) && JSONUtil.isTypeJSON(body)){
+                List<CollAttachmentResDTO> list = JSON.parseArray(body,CollAttachmentResDTO.class);
+                return list;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 附件下载
+     * @param loginName oa登录名
+     * @param apiCode 接口编码
+     * @param fileId 附件id
+     * @param fileName 附件名
+     * @return 附件字节数组
+     */
+    public byte[] downloadFileBytes(String loginName,String apiCode,String fileId,String fileName){
+        if (StrUtil.isNotEmpty(apiCode)){
+            SysApplicationApiEntity sysApp = getByCode(apiCode);
+            String token = getToken(loginName,sysApp);
+            String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
+            String url = "/seeyon/rest/attachment/file/@ctp_file_ID@?fileName=@文件名@&token=@token@";
+            url = url.replaceAll("@ctp_file_ID@",fileId).replaceAll("@文件名@",fileName).replaceAll("@token@",token);
+            byte[] bytes = HttpUtil.downloadBytes(appUrl + url);
+            return bytes;
+        }
+        return null;
+    }
+
+
+    /**
+     * 附件下载
+     * @param loginName oa登录名
+     * @param apiCode 接口编码
+     * @param fileId 附件id
+     * @param fileName 附件名
+     * @param token
+     * @return 附件字节数组
+     */
+    public byte[] downloadFileBytes(String loginName,String apiCode,String fileId,String fileName,String token){
+        if (StrUtil.isNotEmpty(apiCode)){
+            SysApplicationApiEntity sysApp = getByCode(apiCode);
+            if (StrUtil.isEmpty(token)){
+                token = getToken(loginName,sysApp);
+            }
+            String appUrl = StrUtil.removeSuffix(sysApp.getAppUrl(),"/");
+            String url = "/seeyon/rest/attachment/file/@ctp_file_ID@?fileName=@文件名@&token=@token@";
+            url = url.replaceAll("@ctp_file_ID@",fileId).replaceAll("@文件名@",fileName).replaceAll("@token@",token);
+            byte[] bytes = HttpUtil.downloadBytes(appUrl + url);
+            return bytes;
+        }
+        return null;
+    }
+    /**
+     * 获取token
+     * @param login_name
+     * @param api_code
+     * @return
+     */
+    public  String getToken(String login_name,String api_code){
+        if (StrUtil.isNotEmpty(api_code)){
+            SysApplicationApiEntity sysApp = getByCode(api_code);
+            return getToken(login_name,sysApp);
+        }else {
+            throw new BaseSystemException("api_code不能为空");
+        }
+    }
+
+    /**
+     * 获取token
+     * @param login_name oa登录名
+     * @param sysApp 应用信息
+     * @return
+     */
+    public String getToken(String login_name,SysApplicationApiEntity sysApp){
+        if (null != sysApp){
+            HashMap<String, String> hashMap = new HashMap<>();
+            String app_url = StrUtil.removeSuffix(sysApp.getAppUrl(), "/");
+            String url = app_url+"/seeyon/rest/token";
+            String headerIn = sysApp.getHeaderIn();
+            JSONArray headers = JSON.parseArray(headerIn);
+            for (int i = 0; i < headers.size(); i++) {
+                JSONObject object1 = headers.getJSONObject(i);
+                String parameterName = object1.getString("parameterName");
+                if ("userName".equals(parameterName) || "password".equals(parameterName) || "loginName".equals(parameterName)){
+                    String example = object1.getString("example");
+                    hashMap.put(parameterName,example);
+                }
+            }
+            login_name = hashMap.get("loginName");
+            if (StrUtil.isEmpty(login_name)){
+                hashMap.put("loginName","hzya");
+            }
+            String result = HttpRequest.post(url).body(JSON.toJSONString(hashMap)).execute().body();
+            JSONObject jsonObject = JSONObject.parseObject(result);
+            if (null != jsonObject) {
+                logger.info("======token:{}======" ,jsonObject.getString("id"));
+                return jsonObject.getString("id");
+            }
+        }
+        return null;
+    }
+    private SysApplicationApiEntity getByCode(String api_code){
+        if (StrUtil.isNotEmpty(api_code)){
+            SysApplicationApiEntity sysApp = new SysApplicationApiEntity();
+            sysApp.setApiCode(Long.valueOf(api_code));
+            sysApp = sysApplicationApiService.queryOne(sysApp);
+            if (null != sysApp && StrUtil.isNotEmpty(sysApp.getId())){
+                sysApp = sysApplicationApiService.get(sysApp.getId());
+                if (null != sysApp){
+                    return sysApp;
+                }
+            }
+        }else {
+            throw new BaseSystemException("api_code不能为空");
+        }
+        return null;
+    }
+
+
+
+    /**
+     * seeyon/rest/bpm/process/start 发起流程参数组装
+     * @param formmainData 主表参数
+     * @param formsonDatas 子表参数
+     * @param templateCode 模板编号
+     * @param formmainTableName 主表表名
+     * @param formsonTableName 子表表名
+     * @return
+     */
+    public  String processParamValueOf(JSONObject formmainData, List<JSONObject> formsonDatas,String templateCode,String formmainTableName,String formsonTableName){
+        JSONObject param = new JSONObject();
+        JSONObject data = new JSONObject();
+        param.put("data",data);
+        param.put("appName","collaboration");
+        JSONObject formData = new JSONObject();
+        data.put("data", formData);//表单数据
+        data.put("draft", "0");
+        data.put("templateCode", templateCode);//模板编号
+        formData.put(formmainTableName,formmainData);//主表数据
+        formData.put(formsonTableName,formsonDatas);//子表数据
+        String jsonStr = param.toString();
+        return jsonStr;
+    }
+
+    public static void main(String[] args) {
+        JSONObject formmainData = new JSONObject();
+        formmainData.put("单据编号","123456");
+        JSONObject formsonData = new JSONObject();
+        formsonData.put("物料编码", "001");
+        LinkedList<JSONObject> formsonDatas = new LinkedList<>();
+        formsonDatas.add(formsonData);
+        OARestUtil oaRestUtil = new OARestUtil();
+        String s = oaRestUtil.processParamValueOf(formmainData, formsonDatas, "formmain_0001_dev", "formmain_0001", "formson_0002");
+        System.out.println(s);
+    }
+}
diff --git a/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAU8Util.java b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAU8Util.java
new file mode 100644
index 00000000..76decc6d
--- /dev/null
+++ b/fw-oa/src/main/java/com/hzya/frame/seeyon/util/OAU8Util.java
@@ -0,0 +1,34 @@
+package com.hzya.frame.seeyon.util;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSONObject;
+import com.hzya.frame.seeyon.entity.OAU8ResponseDTO;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Description
+ * @Author xiangerlin
+ * @Date 2024/5/14 15:30
+ **/
+public class OAU8Util {
+
+    static Logger logger = LogManager.getLogger(OAU8Util.class);
+
+    //获取token
+    public static String getToken() {
+        String url = "http://127.0.0.1:51910/Api/Base/GetToken";
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("secretkey", "L1NhkDrQhtBDzTxFxPI0jxWcBzTBSPvaI5xZusRRi9ofS9d6ngxrj1erwbdjxtUT");
+        logger.info("获取U8token参数:{}", jsonObject.toJSONString());
+        String token = HttpRequest.post( url).body(jsonObject.toJSONString()).timeout(60000).execute().body();
+        logger.info("token返回参数:{}", jsonObject.toJSONString());
+        if (StrUtil.isNotEmpty(token)) {
+            OAU8ResponseDTO u8ResponseDTO = JSONObject.parseObject(token, OAU8ResponseDTO.class);
+            return u8ResponseDTO.getMessage();
+        }
+        return token;
+
+    }
+}
diff --git a/fw-oa/src/main/webapp/WEB-INF/web.xml b/fw-oa/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 00000000..d80081d1
--- /dev/null
+++ b/fw-oa/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+         version="4.0">
+</web-app>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c13df556..b38587f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,16 +8,17 @@
         <module>base-webapp</module>
         <module>base-core</module>
 <!--        <module>fw-bip</module>-->
-<!--        <module>fw-cbs</module>-->
+        <module>fw-cbs</module>
 <!--        <module>fw-dd</module>-->
 <!--        <module>fw-grpU8</module>-->
 <!--        <module>fw-nc</module>-->
         <module>fw-ncc</module>
 <!--        <module>fw-ningbobank</module>-->
-<!--        <module>fw-oa</module>-->
+        <module>fw-oa</module>
 <!--        <module>fw-u8</module>-->
 <!--        <module>fw-u8c</module>-->
 <!--        <module>fw-u9c</module>-->
+<!--        <module>fw-weixin</module>-->
     </modules>
     <groupId>com.hzya.frame</groupId>
     <artifactId>kangarooDataCenterV3</artifactId>
@@ -113,6 +114,11 @@
             <artifactId>httpclient</artifactId>
             <version>${httpclient.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.5.13</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-cache</artifactId>
@@ -405,6 +411,16 @@
             <artifactId>alibaba-dingtalk-service-sdk</artifactId>
             <version>2.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.8.0</version> <!-- 这里的版本号可根据实际情况修改 -->
+        </dependency>
+        <dependency>
+            <groupId>com.jcraft</groupId>
+            <artifactId>jsch</artifactId>
+            <version>0.1.53</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -455,15 +471,7 @@
                 <artifactId>maven-war-plugin</artifactId>
                 <configuration>
                     <webResources>
-                        <resource>
-                            <directory>${basedir}/../base-service/src/main/webapp/WEB-INF/lib</directory>
-                            <targetPath>WEB-INF/lib/</targetPath>
-                            <filtering>false</filtering>
-                            <includes>
-                                <!-- 匹配所有jar包 -->
-                                <include>**/*.jar</include>
-                            </includes>
-                        </resource>
+
                     </webResources>
                 </configuration>
             </plugin>