# ait-deploy **Repository Path**: chenli_sc/ait-deploy ## Basic Information - **Project Name**: ait-deploy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-23 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工具介绍 **如果有问题咨询或是业务合作,请发邮件至 chenli_sc@qq.com** Application Integration Toolkit(应用集成工具)        # 项目结构 - ait: 项目整体目录 - ruoyi-xxxx:若依框架模块 - ait-common:ait基础模块 - ait-demo:ait示例模块 - ait-msdz:盟升电子项目 - ait-qjkj:千嘉科技项目 - ait-ymyy:易明医药项目 # 系统运行 ## 环境要求 - JDK >= 1.8 (推荐1.8版本) - Mysql >= 5.7.0 (推荐5.7版本) - Redis >= 3.0 - Maven >= 3.0 ## 必要配置 修改数据库链接,编辑`resource/application-druid.yml` ```yml # 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: url: 数据库地址 username: 数据库账号 password: 数据库密码 ``` 修改服务器配置,编辑`resource/application-ait.yml` ```yml # 开发环境配置 server: # 服务器的HTTP端口,默认为80 port: 端口 ``` ## 系统运行 1. 导入到`Eclipse`,菜单 `File` -> `Import`,然后选择 `Maven` -> `Existing Maven Projects`,点击 `Next`> 按钮,选择工作目录,然后点击 `Finish` 按钮,即可成功导入。 2. `Eclipse`会自动加载`Maven`依赖包,初次加载会比较慢(根据自身网络情况而定) 3. 创建数据库`ry-vue`并导入数据脚本`ait-db.sql` 4. 打开项目运行`com.ruoyi.XXXXApplication.java`,出现如下表示启动成功。 ```text -------------[XXXX集成系统:202110]启动成功!---------------- 启动端口:8080,启动路径:D:\AIToolkit ``` # 配置说明 所有配置文件均放在resource目录下.ait-demo项目下存放各类示例. ## config目录 存放各类基础配置 | 配置名称 | 配置说明 | 其他 | | --------------- | ------------------------------- | ---- | | aitconfig.json | ait外部数据配置,ait外部接口配置 | | | oamap.sjon | OA字段映射,OA底表接口使用 | | | oatransmap.json | OA字段翻译器,OA底表接口使用 | | | servicedef.json | 服务定义,流程配置使用 | | | serviceex.json | 服务扩展定义,流程配置使用 | | | taskdef.json | 调度任务定义,jobid从100-199 | | | taskex.json | 调度任务扩展定义,jobid从200开始 | | ### aitconfig.json 系统基础配置 ```json { //数据源 "datasource": { "ncdb": { //oracle数据库 "url": "jdbc:oracle:thin:@localhost:1521:orcl", "username": "ncc10", "password": "ncc10" }, "u9db": { //sqlserver数据库 "url": "jdbc:sqlserver://121.37.242.171:1433;databasename=U9C", "username": "sa", "password": "Yunhe2021" }, "oadb": { //mysql数据库 "url": "jdbc:mysql://192.168.0.33:3306/oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8", "username": "root", "password": "1234567a" }, "plmdb": { //sqlserver数据库 "url": "jdbc:sqlserver://192.168.11.79:1433;databasename=PLMSJTESTDB", "username": "sa", "password": "Ms61773088" } }, // 外部接口 "interface": { //致远A8接口配置 "oa": { "userName": "rest", "password": "3ea4c726-1013-416f-9ca2-20d0e962913e", "url": "http://192.168.0.33:8180", "loginName": "wjl" }, //U9接口配置 "u9": { "url": "http://121.37.242.171:6678/U9C/RestServices", "context": { "CultureName": "zh-CN", "EntCode": "008", "OrgCode": "001", "UserCode": "cl" } }, //nc接口配置 "nc": { "url": "http://localhost:81/uapws/rest", "context": { "datasource": "design", "usercode": "cl", "groupcode": "0001", "orgcode": "0001" } } } } ``` ### oamap.json oa系统字段映射 ```json //OA字段映射 { //物料底表字段映射,formmain_0095 为底表表名,field0001 为OA底表字段,所属组织 为底表中文字段 "formmain_0095":{ "field0001":"所属组织", "field0002":"物料编码", "field0003":"物料名称", "field0004":"英文名称", "field0005":"版本号", "field0006":"规格", "field0007":"英文规格", "field0008":"型号", "field0009":"物料简称", "field0010":"助记码", "field0011":"图片", "field0012":"图号", "field0013":"条形码", "field0014":"服务类", "field0015":"价格折扣", "field0016":"助促销品", "field0017":"实物物料管理模式", "field0018":"成套件", "field0019":"选配件", "field0021":"长度", "field0022":"高度", "field0023":"宽度", "field0024":"单位体积", "field0025":"重量单位", "field0026":"适用零售", "field0027":"多少标准存储单位", "field0028":"入库容差", "field0029":"出库容差", "field0030":"出库关闭下容差", "field0031":"电子采购", "field0032":"产品簇", "field0033":"电子销售", "field0034":"海关商品打印名称", "field0035":"制造商", "field0037":"封装", "field0038":"供应商型号", "field0039":"工作温度", "field0040":"刻字后型号", "field0041":"启用状态", "field0042":"备注", "field0043":"物料分类", "field0044":"主计量单位", "field0045":"物料税类", "field0046":"质量等级", "field0047":"产品线", "field0048":"品牌", "field0049":"产地", "field0050":"海关商品代码", "field0051":"产品生命周期", "field0052":"申请人", "field0053":"组织代码" }, //客户 "formmain_0086": { "field0001": "客户编码", "field0002": "客户名称", "field0003": "客户英文名称", "field0004": "客户简称", "field0005": "助记码", "field0012": "所属组织", "field0014": "法人", "field0018": "注册资金", "field0019": "企业地址", "field0020": "供应商", "field0021": "散户", "field0022": "零售门店", "field0023": "e-mail地址", "field0024": "备注", "field0025": "冻结标志", "field0027": "所属行业", "field0028": "web网址", "field0029": "客户基本分类", "field0030": "地区分类", "field0031": "对应供应商", "field0032": "对应业务单元", "field0033": "客户类型", "field0034": "纳税人登记号", "field0036": "国家地区", "field0037": "数据格式", "field0038": "经济类型", "field0039": "注册资金币种", "field0040": "客户税类", "field0041": "启用状态", "field0042": "时区", "field0043": "客户分类--关联", "field0058": "企业性质--关联", "field0059": "年销售规模--关联", "field0061": "单位一--关联", "field0064": "企业性质11--关联", "field0065": "年销售规模11--关联", "field0083": "单位二--关联", "field0084": "客户ID", "field0092": "公司名称", "field0093": "开票方名称" } } ``` ### oatransmap.json oa系统字段翻译器 ```json //OA字段翻译器 { //来料不合格处理报告单,formmain_0033 为OA表名,发起人 为OA表单字段中文名称,oatrans.member 为翻译器名称 "formmain_0033":{ "发起人":"oatrans.member", "发起部门":"oatrans.dept", "部门":"oatrans.dept", "负责人":"oatrans.member" }, //完工不合格处理报告单 "formmain_0059":{ "发起人":"oatrans.member", "发起部门":"oatrans.dept", "部门":"oatrans.dept", "负责人":"oatrans.member" } } ``` ### servicedef.json 服务定义 ```json //flow中调用服务的定义,框架使用 { //ZYOAService 服务名称,formSave 方法名称,paramType 参数类型 "ZYOAService": { "formSave": { "paramType": [ "java.util.List", "com.alibaba.fastjson.JSONObject", "java.util.Map", "java.util.Map", "java.util.Map" ] }, "processStart":{ "paramType": [ "java.util.List", "com.alibaba.fastjson.JSONObject", "java.util.Map", "java.util.Map", "java.util.Map" ] } }, "aggVOService": { "transObjectKeytoValue": { "paramType": [ "java.util.List", "java.util.Map", "java.util.Map" ] }, "transObjectValuetoKey": { "paramType": [ "java.util.List", "java.util.Map", "java.util.Map" ] } } } ``` ### serviceex.json 服务扩展定义,项目中自行开发的服务均放在该配置文件,格式同servicedef.json ### taskdef.json 任务定义,系统预制任务 ```json { // 定时任务配置,框架使用,jobid从100到199 "task":[{ "jobId":"101", //任务ID "jobName":"并发测试1",//任务名称 "jobGroup":"基础数据",//任务组名 "invokeTarget":"msdzService.test()",//调用目标字符串 "cronExpression":"0/15 * 8-23 * * ?",//# cron执行表达式 "misfirePolicy":0,//cron计划策略 "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行" "concurrent":0,//是否并发执行(0允许 1禁止) "status":1,// 任务状态(0正常 1暂停) "remark":"" //备注 },{ "jobId":"102", //任务ID "jobName":"并发测试2",//任务名称 "jobGroup":"基础数据",//任务组名 "invokeTarget":"msdzService.test()",//调用目标字符串 "cronExpression":"0/15 * 8-23 * * ?",//# cron执行表达式 "misfirePolicy":0,//cron计划策略 "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行" "concurrent":0,//是否并发执行(0允许 1禁止) "status":1,// 任务状态(0正常 1暂停) "remark":"" //备注 },{ "jobId":"103", //任务ID "jobName":"并发测试3",//任务名称 "jobGroup":"基础数据",//任务组名 "invokeTarget":"msdzService.test()",//调用目标字符串 "cronExpression":"0/16 * 8-23 * * ?",//# cron执行表达式 "misfirePolicy":0,//cron计划策略 "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行" "concurrent":0,//是否并发执行(0允许 1禁止) "status":1,// 任务状态(0正常 1暂停) "remark":"" //备注 }] } ``` ### taskex.json 任务扩展定义,项目中开发的定时任务均放在该配置文件 ```json { // 定时任务配置,项目使用,jobid从200开始 "task": [ { "jobId": "201", //任务ID "jobName": "请购单", //任务名称 "jobGroup": "OA流程", //任务组名 "invokeTarget": "flowService.templateService('flow.u9-oa-qgd')", //调用目标字符串 "cronExpression": "0 1/15 8-23 * * ?", //# cron执行表达式 "misfirePolicy": 0, //cron计划策略 "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行" "concurrent": 1, //是否并发执行(0允许 1禁止) "status": 1, // 任务状态(0正常 1暂停) "remark": "" //备注 }, { "jobId": "202", //任务ID "jobName": "采购单", //任务名称 "jobGroup": "OA流程", //任务组名 "invokeTarget": "flowService.templateService('flow.u9-oa-cgd')", //调用目标字符串 "cronExpression": "0 1/15 8-23 * * ?", //# cron执行表达式 "misfirePolicy": 0, //cron计划策略 "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行" "concurrent": 1, //是否并发执行(0允许 1禁止) "status": 1, // 任务状态(0正常 1暂停) "remark": "" //备注 } ] } ``` ## flow目录 存放各类流程配置 文件命名方式:nc-oa-formSave:来源系统-目标系统-动作(名动结构). 实际项目举例:nc-oa-cgddSave:采购订单底表同步 | 文件名 | 文件说明 | 其他 | | ----------------------- | ---------------------------------------------- | ---- | | nc-oa-formSave.json | NC同步OA底表,包含新增\更新 | | | nc-oa-processStart.json | NC同步OA流程,只有新增 | | | oa-nc-docApprove.json | OA同步NC单据审批 | | | oa-nc-docSave.json | OA同步NC单据保存,只有新增 | | | oa-nc-recordSave.json | OA同步NC档案保存,包含新增\修改 | | | oa-u9-batchApprove.json | OA同步U9单据批量审批.一个OA底表,审批U9各类单据 | | | u9-oa-processStart.json | U9同步OA单据审批 | | ### nc-oa-formSave.json ```json { //流程编码 "code": "nc-oa-formSave-flow", //流程名称 "name": "OA底表保存 NC->OA", "steps": [ { "name": "从ERP读取物料数据", "method": "SQLService.execQuery(${parm.erp-material},${erpdb})", "result": "${materialData}" }, { "name": "写入OA", "method": "ZYOAService.formSave(${materialData},${oadb},${context},${interface},${entityInfo})" } ], "params": { "erpdb": "${config.msdz.datasource.ncdb}", "oadb": "${config.msdz.datasource.oadb}", //OA底表接口参数 "context": { //通过OA接口[导出无流程表单数据接口]获取 //http://open.seeyon.com/book/ctp/restjie-kou/ye-wu-sheng-cheng-qi-fu-wu-guan-li.html "formid": "-8180444791095476097", "formname": "formmain_0095", //模板编码 "entityname": "wldadb", //底表编码字段 "codefield": "field0002", //底表编码字段中文名称 "codename": "物料编码", //OA翻译器 "transmap": "${config.oatransmap.formmain_0095}", //OA字段映射 "oamap": "${config.oamap.formmain_0095}" }, "interface": "${config.msdz.interface.oa}" }, "extinfo": { "entityInfo": { "code": "${物料编码}", "name": "${物料名称}", "type": "物料" } } } ``` ### nc-oa-processStart.json ```json { //流程编码 "code": "nc-oa-processStart-flow", //流程名称 "name": "OA流程发起测试 NC->OA", "steps": [ { "name": "从ERP读取物料数据", "method": "SQLService.execQuery(${parm.erp-processStartData},${erpdb})", "result": "${processData}" }, { "name": "AggVO转换", "method": "mapService.transAggVO(${processData},'项目名称','feng-ge')", "result": "${processData}" }, { "name": "发起OA流程", "method": "ZYOAService.processStart(${processData},${oadb},${context},${interface},${entityInfo})" } ], "params": { "erpdb": "${config.msdz.datasource.ncdb}", "oadb": "${config.msdz.datasource.oadb}", //OA流程发起参数 "context": { //主表名 "maintable": "formmain_0018", //子表名 "sontable": "", //模板编号 "entityname": "yflx", //唯一编码的字段名称 "codefield": "field0003", //唯一编码的中文名称 "codename": "项目名称", //数据中的登陆用户字段,在SQL中定义字段 "loginName": "LOGINNAME" }, "interface": "${config.msdz.interface.oa}" }, "extinfo": { "entityInfo": { "code": "${项目名称}", "name": "${项目型号}", "type": "研发项目立项", "oper": "发起流程" } } } ``` ### oa-nc-docApprove.json ```json { //流程编码 "code": "oa-nc-docApprove-flow", //流程名称 "name": "单据审核流程 OA->NC", "steps": [ { "name": "从OA读取采购订单审批数据", "method": "SQLService.execQuery(${parm.oa-poorder-approve},${oadb})", "result": "${entityData}" }, { "name": "写入NCC", "method": "NCCRestService.entitySave(${context},${url},${entityData},${entityInfo})" } ], "params": { "erpdb": "${config.msdz.datasource.ncdb}", "oadb": "${config.msdz.datasource.oadb}", "context": "${config.msdz.interface.ncc.context}", "url": "${config.msdz.interface.ncc.url}/ait/poorder/approve" }, "extinfo": { "entityInfo": { "code": "${vbillcode}", "name": "采购订单", "type": "采购订单审批", "oper": "审批" } } } ``` ### oa-nc-docSave.json ```json { //流程编码 "code": "oa-nc-docSave-flow", //流程名称 "name": "NC采购订单保存 OA->NC", "steps": [ { "name": "从OA读取订单数据", "method": "SQLService.execQuery(${parm.oa-poorder},${oadb})", "result": "${orderData}" }, { "name": "数据转换为AGGVO", "method": "mapService.transAggVO(${orderData},'vbillcode','feng_ge')", "result": "${orderData}" }, { "name": "写入NC", "method": "NCCRestService.docSave(${context},${saveurl},${orderData},${entityInfo})", "result": "${orderData}" } ], "params": { "erpdb": "${config.msdz.datasource.erpdb}", "oadb": "${config.msdz.datasource.oadb}", "context": "${config.msdz.interface.ncc.context}", "saveurl": "${config.msdz.interface.ncc.url}/ait/poorder/save" }, "extinfo": { "entityInfo": { "code": "${doc.vbillcode}", "name": "采购订单", "type": "采购订单", "oper": "保存" } } } ``` ### oa-nc-recordSave.json ```json { //流程编码 "code": "oa-nc-record-flow", //流程名称 "name": "OA同步NC基础档案示例 OA->NC", "steps": [ { "name": "从OA读取客户数据", "method": "SQLService.execQuery(${parm.oa-custom},${oadb})", "result": "${customData}" }, { "name": "写入NCC", "method": "NCCRestService.entitySave(${context},${url},${customData},${entityInfo})" } ], "params": { "erpdb": "${config.aitconfig.datasource.ncdb}", "oadb": "${config.aitconfig.datasource.oadb}", //NC调用参数 "context": "${config.aitconfig.interface.ncc.context}", //NC接口地址 "url": "${config.aitconfig.interface.ncc.url}/ait/custom/save" }, "extinfo": { //实体记录信息 "entityInfo": { "code": "${code}", "name": "${name}", "type": "客户", "oper": "保存" } } } ``` ## oatrans目录 存放OA翻译器 | 文件名 | 文件说明 | 其他 | | ---------- | ------------------- | ---- | | dept.sql | 部门翻译器,Code->ID | | | enum.sql | 枚举翻译器,Code->ID | | | member.sql | 人员翻译器,Code->ID | | ## sqldata目录 存放取数SQL,支持备注符号 -- ,支持分号 ; 示例: ```sql --流程表单示例:来料不合格处理报告 select '陈黎' loginName, --流程数据中必须要有制单人 'OA1004' 发起人, --发起人编码,通过翻译器翻译为id 'OA002' 发起部门, --发起部门编码,通过编译器翻译为id CONVERT(varchar(100), GETDATE(), 120) 发起日期, --日期要转换为字符串 '普通' 单据类型, 'OA002' 部门, 'OA1004' 负责人, 'testno24' 单号, 'wl001' 料号, '待检验料品' 品名, 'feng_ge' feng_ge, --分隔符 1 明细表序号, 10 明细表行号, '张三,李四' 明细表会判人员, CONVERT(varchar(100), GETDATE(), 120) 会判时间 ``` ## application-ait.yml文件 ait应用基础配置文件 ```yaml #独立的配置文件 #在application.yml中配置spring.profiles.active即可 #这里的配置可以覆盖application.yml中的配置 #配置文件的加载优先级: #-file:/config/ #-file:./ #-classpath:/config/ #-classpath:/ #AIT模块信息 ait: # 名称 name: 集成系统DEMO # 版本 version: 202110 # 版权年份 copyrightYear: 2021 # 程序路径 path: D:\AIToolkit # 配置管理器的加载路径 configpath: config,flow,sqldata,oatrans # 配置任务的加载路径,支持逗号分隔 taskpath: config.taskdef.task,config.taskex.task # 配置服务定义的加载路径,支持逗号分隔 servicedef: config.servicedef,config.serviceex #应用信息 ruoyi: # 若依框架名称 name: ${ait.name} # 若依框架上传文件路径 profile: ${ait.path}\uploadPath # 服务器配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 # 日志配置 # 优先级 从高到低分别是 ERROR、WARN、INFO、DEBUG logging: level: com.ruoyi: info org.springframework: warn ait-common: debug ``` 重点配置说明: - ait.configpath: 定义了ait的所有配置文件的目录 - ait.taskpath:定义了ait的所有任务的配置文件的路径 - ait.service:定义了ait的所有服务定义的配置文件的路径 - server.port:定义了ait的运行端口 - logging.level.ait-common:定义了ait日志输出级别.如果是debug,会输出所有的sql.正式部署的ait建议配置成info ## application-durid.yml文件 ait系统数据库配置 ```yaml # 主库数据源 master: url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: root ``` 核心配置说明: - spring.datasource.druid.master:ait系统本身使用数据库的地址 ## index.html文件 手工任务触发页面,该页面静态页面,可以手工编辑. 核心是调用url地址: ```html
``` 说明: - http://localhost:8080/ait/common/task/run:系统预制的任务触发rest接口 - codestr参数:任务定义中的jobid # 部署说明 1. 执行项目下的批处理文件 ait/bin/package.bat,进行maven打包 2. 打包文件在项目模块下target目录 3. 将jar包拷贝到部署目录下 4. 将项目模块下resource目录的文件全部拷贝至部署目录 5. 拷贝批处理文件 ait/bin/run.bat文件至部署目录 6. 在部署目录中执行run.bat文件启动jar包 部署后,目录结构如下: 