commit 117a1f4469f729d2a6a156b874f8731220c38db9 Author: 李蒙 Date: Tue Sep 22 17:04:22 2026 +0800 'init' diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d33e591 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*.{java, xml}] +charset = utf-8 +indent_style = space +indent_size = 4 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +tab_width = 4 + +[*.{yml}] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +tab_width = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5311421 --- /dev/null +++ b/.gitignore @@ -0,0 +1,71 @@ +# ===== Java 编译产物 ===== +*.class +*.jar +*.war +*.ear +target/ +build/ +out/ + +# ===== Maven / Gradle ===== +.gradle/ +.mvn/ +mvnw +mvnw.cmd +gradle/ +gradlew +gradlew.bat + +# ===== 静态资源目录(你指定不需要上传)===== +jeeplus-web/src/main/resources/static/ + +# ===== IDE - IntelliJ IDEA ===== +.idea/ +*.iml +*.iws +*.ipr +out/ + +# ===== IDE - VSCode ===== +.vscode/ +*.code-workspace + +# ===== Eclipse ===== +.classpath +.project +.settings/ +bin/ + +# ===== 日志 ===== +*.log +logs/ +logging/ + +# ===== 环境配置(含敏感信息)===== +.env +.env.local +application-local.yml +application-dev.yml.bak + +# ===== 系统文件 ===== +.DS_Store +Thumbs.db +desktop.ini + +# ===== 临时文件 ===== +*.tmp +*.bak +*.swp +*~ +tmp/ +temp/ + +# ===== 测试覆盖率 ===== +.coverage +htmlReport/ +jacoco/ + +# ===== 其他 ===== +*.pid +*.seed +*.pid.lock diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1a06a1e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,253 @@ +# ticket system + +- 创建什么的功能... created +- 增加什么的功能... created +- 更新什么的功能... updated +- 移除什么的功能... removed +- 修复什么的功能... fixed bug + +# 10-20-2020 v1.1.12 + +- 属性值为null值的字段默认返回""空字符串 `created` +- 修改了一些sql的小bug `updated` + +# 10-12-2020 v1.1.11 + +- 所有票种发票重号不能添加 `created` +- 火车验真加载提示去掉 `updated` +- 增值税发票验真失败提示内容具体一点 `updated` + +# 10-10-2020 v1.1.10 + +- 添加druid线程池检测(将空连接的回收) `created` +- 用户注册默认添加公司和客户ID `created` + +# 09-27-2020 v1.1.09 + +- 修改了费用报告的发票总金额和发票总数量 `updated` + +# 09-27-2020 v1.1.09 + +- 在我的页面增加了姓名数据 `updated` +- 验真的触发改在发票的按钮上,不在扫描发票时就验真 `updated` +- 发票重票的逻辑修改,凡是发票重号一律不允许通过 `updated` +- 修复了火车票的金额小数值会没有的数据问题 `updated` +- 除了增值税专用发票发票状态为税票外,其他票全为普票 `updated` + +# 09-24-2020 v1.1.08 + +- 添加了费用报告提交功能及接口 created +- 添加了发票验真状态的验证功能 created +- 添加了城市数据接口 created + +# 09-22-2020 v1.1.07 + +- 添加用户和公司的关系,以及根据当前用户来判断发票的验证规则以及审核力度和是否通过 created + +# 09-18-2020 v1.1.06 + +- 新增公司表/客户表/规则集表/客户规则集关系表增删改查接口 created +- 新增用户对应公司所属客户发票查重逻辑判断 created + +# 09-16-2020 v1.1.05 + +- ocr发票扫描时添加增值税普通发票(卷票)票种 created +- 修改了发票回显时的报销金额数据 updated + +# 09-14-2020 v1.1.04 + +- 将ocr接口扫描的图片进行裁剪 created +- 将发票的字段排序进行修改 updated + +# 09-07-2020 v1.1.03 + +- 修改了图片的HTTPS路径以及回显 updated +- 修改了发票编辑时添加附件图片 created +- 修改了电子发票的时间和供应商以及一些其他字段的数据格式 updated + +# 09-05-2020 v1.1.02 + +- 修改了图片的HTTPS路径 updated + +# 09-04-2020 v1.1.01 + +- 对服务的部署添加了HTTPS和域名 created + +# 09-03-2020 v1.0.30 + +- 解决了添加页面没英文的问题 updated +- 对各种票中的发票状态进行修改 updated +- 修改了图片预览的功能 updated + +# 09-03-2020 v1.0.30 + +- 解决了添加页面没英文的问题 updated +- 对各种票中的发票状态进行修改 updated +- 修改了图片预览的功能 updated + +# 09-01-2020 v1.0.29 + +- 进行微信卡包的接口测试和联调,以及接口数据封装和转换 created +- 测试微信卡包的可用性和效果 created + +# 08-31-2020 v1.0.28 + +- 修改了所有票种扫描时发票的时间,进行格式化处理 created +- 添加了扫描发票进行回显发票 created +- 对微信卡包进行初测 created + +# 08-28-2020 v1.0.27 + +- 给费用报告添加动态字段的功能,创建动态字段表,创建动态字段的接口,进行增删改查的测试 created +- 对动态字段的中英文写法进行重新更新和测试 created + +# 08-27-2020 v1.0.26 + +- 将动态字段的下拉值通过value_set表来管理,重写动态字段的下拉值接口 created +- 和前端重新测试不同票种和不同费用类型的所需动态字段,重新创建接口以及写法 created +- 并且测试了不同票种和不同费用类型的动态字段以及下拉框的数据接口 created + +# 08-26-2020 v1.0.25 + +- 添加了增值税发票的验真功能 created +- 商量讨论了动态字段的构造以及下拉选项的数据库构造问题 -created + +# 08-25-2020 v1.0.24 + +- 修改在扫描发票后图片的上传路径以及前端得到的图片路径 updated +- 进行发票的验真测试 created +- 修改手动添加发票的图片路径问题以及前段得到的图片路径 updated +- 修改了一些发票扫描结果的默认值问题 updated + +# 08-24-2020 v1.0.23 + +- 修改在扫描发票后图片的上传路径以及前端得到的图片路径 updated +- 对动态字段进行修改和更新 updated + +# 08-21-2020 v1.0.22 + +- 对动态字段进行修改和更新 updated +- 新建动态字段表,重写动态字段的写法 created + +# 08-20-2020 v1.0.21 + +- 对动态字段进行修改 updated +- 增加费用用途数据接口 updated +- 对ocr进行更新和修改 created + +# 08-19-2020 v1.0.20 + +- 对ocr接口进行更新和修改 updated +- 进行阿里云服务器的搭建和初步测试 + +# 08-18-2020 v1.0.19 + +- 对ocr接口进行更新和修改 updated +- 对阿里云短信服务进行二次调试完成功能 updated +- 对所有功能进行测试,修改偏好设置功能,增加回显手机号,以及发票移动和筛选的更新和修改 created + +# 08-17-2020 v1.0.18 + +- 对ocr接口进行更新和修改 updated +- 对阿里云短信服务进行初次测试 created + +# 08-15-2020 v1.0.17 + +- 对ocr接口进行更新和修改,添加多张发票的扫描以及对发票支持种类进行添加 updated + +# 08-14-2020 v1.0.16 + +- 对ocr接口进行更新和修改 updated +- 对偏好设置的功能进行测试和再次修改 updated + +# 08-13-2020 v1.0.15 + +- 对ocr接口进行更新和修改 updated +- 添加了偏好设置的功能并进行测试和再次修改 created + +# 08-12-2020 v1.0.14 + +- 对ocr接口进行更新和修改 updated + +# 08-11-2020 v1.0.13 + +- 对登录进行更新修改 updated +- 查看了ocr接口代码,并测试调通接口,实现接口1.0 created +- 对不同的发票类型动态添加字段的数据库和sql进行了修改 updated + +# 08-10-2020 v1.0.12 + +- 修改发票查询的sql,发票查询时要同时查到这张发票所对应的图片 updated +- 修改发票添加是图片的添加sql,发票图片添加要知道这些发票图片对应着那些发票 +- 和前端修改了没授权的显示问题 + +# 08-7-2020 v1.0.11 + +- 添加币种的后台接口 created +- 添加了帮助页面的后台数据接口 created +- 修改多条件查询功能 updated +- 修改了之前接口的查询条件,用户根据自己的微信唯一openID查询自己的数据 updated +- 用户的语言设置通过接口来实现 created + +# 08-6-2020 v1.0.10 + +- 添加了权限控制(通过拦截器实现的) created +- 修改了发票的查询方法,改为多条件查询 updated + +# 08-5-2020 v1.0.9 + +- 对国际化的数据接口进行了修改 updated +- 增加了发送手机验证码的功能(模拟) created +- 增加了手机验证码的验证以及账号的添加和权限的验证 created + +# 08-4-2020 v1.0.8 + +- 增加了国际化数据接口 created +- 增加了费用类型下拉列表的数据接口 created +- 增加了费用类型下拉列表选择的时候添加动态字段输入框的接口 created +- 对之前的发票搜索进行修改更新(增加了费用类型的搜索) updated + +# 08-3-2020 v1.0.7 + +- 增加了设置偏好设置时,将费用类型和消费类型下拉选项的数据从数据库获得,在数据库建表并写增删改查 created +- 增加了偏好设置的添加功能,修改功能,删除功能,查询功能 created +- 修改了费用类型的下拉功能,更新了下拉数据的层级关系 updated + +# 07-31-2020 v1.0.6 + +- 增加了对发票拍照进行扫描并将图片上传到后台(模拟) created +- 增加了冲相册选择多张图片进行扫描并将图片上传到后台(模拟) created +- 增加了费用类型的下拉功能,创建数据库并实现增删改查 created + +# 07-30-2020 v1.0.5 + +- 修改了查询费用报告对应的发票的金额问题 updated +- 增加了发票添加的时候图片的多张上传以及图片的回显信息 created +- 创建文件的数据库表以及增删改查 + +# 07-29-2020 v1.0.4 + +- 增加了发票删除的功能 created +- 增加了发票的移动,发票可以随意移动到别的费用报告里面 created +- 增加了发票的搜索功能,在费用类型里面发票可以根据发票的金额、发票的开票时间、发票的状态、 还有发票的币种进行搜索 created + +# 07-28-2020 v1.0.3 + +- 增加了发票添加的功能 created +- 增加了发票根据不同的费用报告类型进行查询的功能 created +- 对之前费用报告的查询sql进行修改,每个费用报告的总金额和总笔数更准确 updated + +# 07-27-2020 v1.0.2 + +- 增加了费用报告的查询功能 created +- 增加了费用报告的修改功能 created +- 增加了费用报告的删除功能 created +- 更新了费用报告的查询功能,和报销表进行新的联动 updated + +# 07-24-2020 v1.0.1 + +- 根据数据库创建实体类,并写相应的mapper,service,controller层代码,增加了 添加费用报告的功能 created + +# 07-21-2020 v1.0.0 + +- 初始化系统架构 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..df97e07 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# ticket system + +> 状态码:`10` ==> `添加失败` + +> 状态码:`11` ==> `修改失败` + +> 状态码:`12` ==> `删除失败` + +> 状态码:`10001` ==> `费用报告名称为空` + +> 状态码:`10002` ==> `费用创建时间为空` + +> 状态码:`10003` ==> `主键id不能为空` + +> 状态码:`10004` ==> `INVOICE_ID为null` + +> 状态码:`10005` ==> `传递集合为空` + +> 状态码:`10006` ==> `上传图片失败` + +> 状态码:`10007` ==> `该用户不存在` + +> 状态码:`10008` ==> `参数对象为空` \ No newline at end of file diff --git a/city.json b/city.json new file mode 100644 index 0000000..b851573 --- /dev/null +++ b/city.json @@ -0,0 +1,44 @@ +[ + { + "id": 23, + "value": "项目", + "subs": [ + { + "id": 1, + "name": "项目1" + }, + { + "id": 2, + "name": "项目2" + } + ], + "child": [ + { + "id": 24, + "value": "Study Code", + "subs": [ + { + "id": 1, + "name": "China01_1", + "pid": 1 + }, + { + "id": 2, + "name": "China01_2", + "pid": 1 + }, + { + "id": 3, + "name": "China02_1", + "pid": 2 + }, + { + "id": 4, + "name": "China02_2", + "pid": 2 + } + ] + } + ] + } +] \ No newline at end of file diff --git a/fonts/AdobeKaitiStd-Regular.otf b/fonts/AdobeKaitiStd-Regular.otf new file mode 100644 index 0000000..c7045cf Binary files /dev/null and b/fonts/AdobeKaitiStd-Regular.otf differ diff --git a/fonts/STSong-Light.ttf b/fonts/STSong-Light.ttf new file mode 100644 index 0000000..6f84fd6 Binary files /dev/null and b/fonts/STSong-Light.ttf differ diff --git a/fonts/pdf-fonts.md b/fonts/pdf-fonts.md new file mode 100644 index 0000000..324b3ae --- /dev/null +++ b/fonts/pdf-fonts.md @@ -0,0 +1,17 @@ +##### PDF转图片中文字体处理 + +````sh +1.在/usr/shared/fonts下创建fees目录,将AdobeKaitiStd-Regular.otf,STSong-Light.ttf 复制进去 +2.安装索引 + yum install mkfontscale +3.修改文件夹权限 + chmod -R 755 /usr/share/fonts/fees +4.yum -y install ttmkfdir +5.ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir +6.vi /etc/fonts/fonts.conf + /usr/share/fonts/fees +7.fc-cache +```` + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..334403f --- /dev/null +++ b/pom.xml @@ -0,0 +1,526 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.2.5.RELEASE + + + + com.cmsen + ticket + 2.3.31 + jar + + + 1.8 + true + true + MMddyymm + 2.17.1 + + + + rdc-snapshots + https://repo.rdc.aliyun.com/repository/124956-snapshot-jMwdvf/ + + true + never + + + + + + + net.smarttax + sim-client-starter + 1.2.3.0-SNAPSHOT + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.1 + + + mysql + mysql-connector-java + runtime + + + com.cmsen.common + cmsen-common + 2.0.2 + + + org.projectlombok + lombok + true + + + com.cmsen.ofd + cmsen-ofd + 1.0.0 + + + org.springframework.boot + spring-boot-starter-test + test + + + com.cmsenframework.springboot + cmsen-springboot-security + 1.1.1 + + + com.alibaba + fastjson + 2.0.63 + + + com.sun.mail + javax.mail + 1.6.2 + + + cn.hutool + hutool-all + 5.5.8 + + + com.cmsen.einvoice + cmsen-einvoice + 1.0.0 + + + com.ofdbox + converter + 1.0-SNAPSHOT + + + log4j + log4j + + + + + com.alibaba + easyexcel + 3.3.2 + + + poi-ooxml + org.apache.poi + + + poi + org.apache.poi + + + org.apache.poi + poi-ooxml-schemas + + + + + org.apache.poi + poi + 5.2.3 + + + org.apache.poi + poi-ooxml + 5.2.3 + + + commons-io + commons-io + 2.11.0 + + + fr.opensagres.xdocreport + org.apache.poi.xwpf.converter.pdf + 1.0.6 + + + poi-ooxml + org.apache.poi + + + + + org.apache.poi + poi-scratchpad + 5.2.1 + + + poi-ooxml + org.apache.poi + + + + + + org.jsoup + jsoup + 1.16.2 + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.8 + + + org.springframework.boot + spring-boot-starter-mail + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.2.5 + + + + + + + + com.cmsen.pdf + cmsen-pdf + 2.0.0 + + + + com.squareup.okhttp3 + okhttp + 3.11.0 + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + org.springframework.boot + spring-boot-starter-websocket + + + + com.github.jai-imageio + jai-imageio-core + 1.4.0 + + + + com.github.jai-imageio + jai-imageio-jpeg2000 + 1.3.0 + + + + org.apache.pdfbox + pdfbox + 2.0.25 + + + org.dom4j + dom4j + 2.1.3 + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + + com.alibaba + simpleimage + 1.1.9 + + + javax.media + jai_cliwrapper_jiio + + + javax.media + jai_imageio + + + javax.media + jai_mlibwrapper + + + log4j + log4j + + + + + + javax.media + jai_codec + 1.1.3 + + + + javax.media + jai_core + 1.1.3 + + + + com.jacob + jacob + 1.19 + system + ${project.basedir}/lib/jacob.jar + + + cn.databytes.btw + btw + 1.0 + system + ${project.basedir}/lib/bartender-printer-service.jar + + + + org.apache.commons + commons-exec + 1.3 + + + + + + + + + com.github.mwiede + jsch + 2.27.9 + + + com.twelvemonkeys.imageio + imageio-tiff + 3.9.4 + + + + com.microsoft.ews-java-api + ews-java-api + 2.0 + + + + + com.google.guava + guava + 32.1.3-jre + + + com.azure + azure-identity + 1.11.1 + compile + + + com.microsoft.graph + microsoft-graph + 5.77.0 + + + + + com.microsoft.graph + microsoft-graph-auth + 0.3.0 + + + + com.microsoft.graph + microsoft-graph-core + 2.0.14 + + + + + commons-net + commons-net + 3.6 + + + + + net.coobird + thumbnailator + 0.4.20 + + + + + com.documents4j + documents4j-local + 1.1.12 + + + com.documents4j + documents4j-transformer-msoffice-word + 1.1.12 + + + + + org.apache.commons + commons-compress + 1.25.0 + + + org.tukaani + xz + 1.9 + + + net.sf.sevenzipjbinding + sevenzipjbinding + 16.02-2.01 + + + net.sf.sevenzipjbinding + sevenzipjbinding-all-platforms + 16.02-2.01 + + + + org.ofdrw + ofdrw-converter + 2.3.2 + + + com.profesorfalken + jPowerShell + 3.1.1 + + + com.microsoft.sqlserver + mssql-jdbc + 12.8.1.jre8 + + + org.opensaml + opensaml-core + 3.4.6 + + + + org.opensaml + opensaml-saml-api + 3.4.6 + + + org.opensaml + opensaml-saml-impl + 3.4.6 + + + org.opensaml + opensaml-security-api + 3.4.6 + + + org.opensaml + opensaml-security-impl + 3.4.6 + + + org.opensaml + opensaml-profile-api + 3.4.6 + + + org.opensaml + opensaml-profile-impl + 3.4.6 + + + org.opensaml + opensaml-soap-api + 3.4.6 + + + org.opensaml + opensaml-soap-impl + 3.4.6 + + + org.opensaml + opensaml-xmlsec-api + 3.4.6 + + + org.opensaml + opensaml-xmlsec-impl + 3.4.6 + + + com.dtflys.forest + forest-core + 1.7.1 + + + + + + + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.12.RELEASE + + true + + + + + + + + + + + + + + + + + + + + diff --git a/sql/0329.SQL b/sql/0329.SQL new file mode 100644 index 0000000..20fbd64 --- /dev/null +++ b/sql/0329.SQL @@ -0,0 +1,2 @@ +alter table invoice_image + add POSTED_AMOUNT VARCHAR(20) null; \ No newline at end of file diff --git a/sql/11-20.SQL b/sql/11-20.SQL new file mode 100644 index 0000000..0de577d --- /dev/null +++ b/sql/11-20.SQL @@ -0,0 +1,6 @@ +ALTER TABLE `fees_invoice`.`invoice_img` +ADD COLUMN `ext01` varchar(50) NULL AFTER `ORG_NAME`, +ADD COLUMN `ext02` varchar(50) NULL AFTER `ext01`, +ADD COLUMN `ext03` varchar(50) NULL AFTER `ext02`, +ADD COLUMN `ext04` varchar(50) NULL AFTER `ext03`, +ADD COLUMN `ext05` varchar(255) NULL AFTER `ext04`; \ No newline at end of file diff --git a/sql/1103.SQL b/sql/1103.SQL new file mode 100644 index 0000000..6a6309d --- /dev/null +++ b/sql/1103.SQL @@ -0,0 +1,532 @@ +alter table supplier_order + change ORG_NAME COMPANY_NAME varchar(120) null; + +alter table supplier_order + add COMPANY_CODE VARCHAR(50) null; + +alter table supplier_order + add COSTCENTER VARCHAR(50) null; + +alter table supplier_order + add ORG_CODE VARCHAR(50) null; + +alter table supplier_order + add ITEM_NAME VARCHAR(255) null; + +alter table supplier_order + add TAX_RATE VARCHAR(10) null; + +alter table supplier_order + add OWNER VARCHAR(100) null; + +alter table supplier_order + add DESCRIPTION VARCHAR(100) null; + +alter table supplier_order + add CREATION_TIME DATETIME null; + +alter table supplier_order + add UPDATE_TIME DATETIME null; + +alter table supplier_order + drop column V_STATUS_NAME; + +create table sys_user_org +( + USER_ID int null, + AUTHORIZED_ORG VARCHAR(255) null comment '授权组织id集合', + OWNED_ORG varchar(255) null comment '所属的组织' +) + comment '用户组织关联表'; + +create unique index sys_user_org_USER_ID_uindex + on sys_user_org (USER_ID); + +alter table sys_user_org + add constraint sys_user_org_pk + primary key (USER_ID); + +alter table corporate_invoice + add OWNER int null comment '所属用户ID'; + +alter table sys_user_org + drop column OWNED_ORG; + +alter table sys_user_org + add DATA_AUTH_TYPE TINYINT(1) default 0 null comment '数据权限 0 All,1 by org,2 by owner'; + + +alter table supplier_order_item_matching + modify PRICE VARCHAR(50) default 0 null comment '价格'; + +alter table supplier_order_item_matching + modify TOTAL VARCHAR(50) default 0 null comment '金额'; + +alter table supplier_order_item_matching + modify TAX VARCHAR(50) default 0 null comment '税额'; + +alter table supplier_order_item_matching + add RECEIVE_NO VARCHAR(50) null comment '收货号码'; + +alter table supplier_order_item_matching + add DEDUCTION_AMOUNT varchar(50) default 0 null comment '抵扣金额'; + +alter table supplier_order_item_matching + add DEDUCTION_TAX varchar(50) default 0 null comment '抵扣税额'; + +alter table supplier_order_item_matching + add DEDUCTION_TAX_RATE varchar(10) null comment '抵扣税率'; +alter table supplier_material + add SPECIFICATION varchar(100) null; + +alter table corporate_invoice + add IS_DEL TINYINT(1) default 0 null; + +alter table corporate_invoice_items + add IS_DEL TINYINT(1) default 0 null; + +alter table supplier_order_item_matching + add INVOICE_ID VARCHAR(100) null after ID; + +alter table supplier_order_item_matching + add ORDER_NO VARCHAR(100) null; + +alter table supplier_order + modify GOODS_NUM decimal(8) null; +alter table supplier_order + modify RECEIVED_NUM decimal(8) null; + +alter table supplier_order + modify UNIT_PRICE decimal(20, 5) null; +alter table supplier_order + modify AMOUNT decimal(20, 5) null; + +alter table supplier_order + modify GOODS_NUM int(8) null; + +alter table supplier_order + modify RECEIVED_NUM int(8) null; + +alter table supplier_order_item_matching + add RECEIVED_TOTAL decimal(20, 5) default 0 null; + +alter table supplier_order + change ITEM_NAME ITEM_NO varchar(100) null; + + +##### been updated + +alter table file + add DESCRIPTION VARCHAR(255) null; + +alter table file + add UPLOAD_USER int null; + +alter table file + add UPLOAD_TIME DATETIME null; + +#### been updated + +alter table invoice + add LOGIN_ID VARCHAR(255) null; + +alter table supplier_order_item_matching + add ITEM_NO VARCHAR(100) null comment '物料号'; + + +#### 2021/11/15 + +alter table corporate_invoice + add USE_STATUS TINYINT(1) default 0 null comment '使用状态 0 未使用 1 已使用 2 后票'; + +##### 2021/11/16 +alter table file + modify TYPE VARCHAR(100) null comment '附件类型'; +create index emp_id on t_10_employee (emp_id); + +create table expense_type_ticket +( + ID int comment '主键ID', + EXPENSE_TYPE_ID int not null comment '费用类型ID', + TICKET_TYPE_CODE VARCHAR(20) not null comment '票种对应CODE码', + KIND VARCHAR(20) null comment '消费类型,多个可以英文逗号隔开', + CONTENT VARCHAR(100) null comment '消费内容,可多个以英文逗号隔开', + ACTIVE BOOLEAN null comment '是否可用' +) + comment '费用类型票种关系表-用于特定规则'; + +create unique index EXPENSE_TYPE_TICKET_ID_uindex + on EXPENSE_TYPE_TICKET (ID); + +alter table EXPENSE_TYPE_TICKET + add constraint EXPENSE_TYPE_TICKET_pk + primary key (ID); + +alter table EXPENSE_TYPE_TICKET + modify ID int auto_increment comment '主键ID'; + + +alter table corporate_invoice_type + drop column PATH; + +alter table corporate_invoice_type + add REVIEW BOOLEAN default FALSE not null comment '是否需要审核 默认不需要'; + +alter table corporate_invoice + modify INVOICE_TYPE int null comment '发票类型'; + +create table invoice_item_mileage +( + ID BIGINT comment '主键ID', + ITEM_DATE DATE null comment '行程日期', + `FROM` VARCHAR(100) null comment '出发地', + `TO` VARCHAR(100) null comment '到达地', + MILEAGE DECIMAL(10, 2) default 0 null comment '里程数', + REASON VARCHAR(200) null comment '事由', + CUSTOM1 VARCHAR(100) null, + CUSTOM2 VARCHAR(100) null, + CUSTOM3 VARCHAR(100) null, + CUSTOM4 VARCHAR(100) null, + CUSTOM5 VARCHAR(100) null +) + comment '里程发票明细'; + +create unique index invoice_item_mileage_ID_uindex + on invoice_item_mileage (ID); + +alter table invoice_item_mileage + add constraint invoice_item_mileage_pk + primary key (ID); + +alter table invoice_item_mileage + modify ID BIGINT auto_increment comment '主键ID'; + +alter table invoice_item_mileage + add INVOICE_ID VARCHAR(50) not null comment '发票ID' after ID; + + +#### 1118 been updated + +alter table customer + modify ORG_UNIT_WORD varchar(20) not null; + +alter table customer + add COMPANY_WORD VARCHAR(20) not null after ORG_UNIT_WORD; + +alter table files + add MQ_ID VARCHAR(50) null comment 'MQ返回标识字符'; + +create table band_config +( + ID int, + BAND VARCHAR(50) null, + MILEAGE VARCHAR(20) null, + EXT01 VARCHAR(100) null, + EXT02 VARCHAR(100) null, + EXT03 VARCHAR(100) null, + EXT04 VARCHAR(100) null, + EXT05 VARCHAR(100) null, + EXT06 VARCHAR(100) null, + EXT07 VARCHAR(100) null, + EXT08 VARCHAR(100) null, + EXT09 VARCHAR(100) null, + EXT10 VARCHAR(100) null +); + +create unique index band_config_ID_uindex + on band_config (ID); + +alter table band_config + add constraint band_config_pk + primary key (ID); + +alter table band_config + modify ID int auto_increment; + +create table band_area_config +( + ID INT, + BAND VARCHAR(50) null, + AREA VARCHAR(100) null, + HOTEL VARCHAR(100) null, + EXT01 VARCHAR(100) null, + EXT02 VARCHAR(100) null, + EXT03 VARCHAR(100) null, + EXT04 VARCHAR(100) null, + EXT05 VARCHAR(100) null +); + +create unique index band_area_config_ID_uindex + on band_area_config (ID); + +alter table band_area_config + add constraint band_area_config_pk + primary key (ID); + +alter table band_area_config + modify ID INT auto_increment; + + +#### been updated 1122 +alter table corporate_invoice_type + add SEND_TYPE TINYINT(1) default 0 null; +#### been updated 1123 + + +alter table supplier_order + add EXT01 VARCHAR(50) null; +alter table supplier_order + add EXT02 VARCHAR(50) null; +alter table supplier_order + add EXT03 VARCHAR(50) null; +alter table supplier_order + add EXT04 VARCHAR(50) null; +alter table supplier_order + add EXT05 VARCHAR(50) null; + +alter table expense_type_ticket + add TYPE TINYINT(1) default 0 null comment '0允许报销 1不允许报销'; + + +alter table sys_org + add ORG_NAME VARCHAR(100) null; +##### updated 1201 + + +alter table invoice_attendees + add FILES_ID int null; + +alter table invoice_item_mileage + add FILES_ID int null; + +alter table invoice_items + add FILES_ID INT null; + +alter table expense_reports + add OWNER_ID VARCHAR(150) null; + +update expense_reports e +set e.OWNER_ID = (select u.EMAIL from user u where u.USER_ID = e.USER_ID) +where USER_ID is not null; + + +CREATE TABLE `t_10_employee` +( + `id` varchar(64) NOT NULL COMMENT 'UUID', + `emp_id` varchar(50) DEFAULT NULL COMMENT '员工Id', + `user_email` varchar(255) DEFAULT NULL COMMENT '邮箱 ', + `login_id` varchar(255) DEFAULT NULL COMMENT '登录Id', + `first_name` varchar(50) DEFAULT NULL COMMENT '姓名-名', + `last_name` varchar(50) DEFAULT NULL COMMENT '姓名-姓', + `org_unit1` varchar(200) DEFAULT NULL COMMENT '组织1', + `org_unit2` varchar(200) DEFAULT NULL COMMENT '组织2', + `org_unit3` varchar(200) DEFAULT NULL COMMENT '组织3', + `org_unit4` varchar(200) DEFAULT NULL COMMENT '组织4', + `org_unit5` varchar(200) DEFAULT NULL, + `org_unit6` varchar(200) DEFAULT NULL, + `attributer1` varchar(100) DEFAULT NULL COMMENT '属性1', + `attributer2` varchar(100) DEFAULT NULL COMMENT '属性2', + `attributer3` varchar(100) DEFAULT NULL COMMENT '属性3', + `attributer4` varchar(100) DEFAULT NULL COMMENT '属性4', + `attributer5` varchar(100) DEFAULT NULL COMMENT '属性5', + `attributer6` varchar(100) DEFAULT NULL COMMENT '属性6', + `attributer7` varchar(100) DEFAULT NULL COMMENT '属性7', + `attributer8` varchar(100) DEFAULT NULL COMMENT '属性8', + `attributer9` varchar(100) DEFAULT NULL COMMENT '属性9', + `attributer10` varchar(100) DEFAULT NULL COMMENT '属性10', + `create_by` varchar(36) DEFAULT NULL COMMENT '创建者 ', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(36) DEFAULT NULL COMMENT '更新者', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + `remarks` varchar(200) DEFAULT NULL COMMENT '备注信息', + `expense_approver` varchar(10) DEFAULT NULL, + `expense_approver_employeeID` varchar(50) DEFAULT NULL, + `ext11` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext12` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext13` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext14` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext15` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext16` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext17` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext18` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext19` varchar(100) DEFAULT NULL COMMENT '扩展11', + `ext20` varchar(100) DEFAULT NULL COMMENT '扩展11', + `active` varchar(10) DEFAULT NULL COMMENT '是否激活', + `cash_advance_account_code` varchar(100) DEFAULT NULL COMMENT '科目', + `crn_key` varchar(100) DEFAULT NULL COMMENT 'crnKey', + `ctry_code` varchar(100) DEFAULT NULL COMMENT 'ctryCode', + `ctry_sub_code` varchar(100) DEFAULT NULL COMMENT 'subCode', + `custom1` varchar(100) DEFAULT NULL COMMENT '自定义1', + `custom2` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom3` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom4` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom5` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom6` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom7` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom8` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom9` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom10` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom11` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom12` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom13` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom14` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom15` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom16` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom17` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom18` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom19` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom20` varchar(100) DEFAULT NULL COMMENT '自定义', + `custom21` varchar(100) DEFAULT NULL COMMENT '自定义', + `invoice_approver` varchar(100) DEFAULT NULL COMMENT '是否发票审批', + `invoice_user` varchar(100) DEFAULT NULL COMMENT '发票审批人', + `is_test_emp` varchar(100) DEFAULT NULL COMMENT '是否测试', + `ledger_key` varchar(100) DEFAULT NULL COMMENT 'ledgerkey', + `ledger_name` varchar(100) DEFAULT NULL COMMENT 'ledgerName', + `locale_name` varchar(100) DEFAULT NULL COMMENT '本地名', + `trip_user` varchar(100) DEFAULT NULL COMMENT '是否临时用户', + `mi` varchar(100) DEFAULT NULL COMMENT 'mi', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +alter table verified_user + add BAND VARCHAR(50) null; + +alter table verified_user + add EXT01 VARCHAR(50) null; + +alter table verified_user + add EXT02 VARCHAR(50) null; + +alter table verified_user + add EXT03 VARCHAR(50) null; + +alter table verified_user + add EXT04 VARCHAR(50) null; + +alter table verified_user + add EXT05 VARCHAR(50) null; + +alter table user + modify TEL varchar(255) null comment '用户电话'; + +alter table verified_user + modify TEL varchar(255) not null; + +alter table t_10_employee + modify login_id varchar(255) null comment '登录Id'; +alter table user + modify EMAIL varchar(255) null comment '用户邮箱'; + +alter table verified_user + modify LOGIN_ID varchar(255) not null; + + +####updated 1210 +create table user_guide +( + ID int, + TITLE VARCHAR(255) not null comment '标题', + CONTENT TEXT null comment '内容', + UPDATE_TIME DATETIME null comment '更新时间', + SORT int(5) default 0 null comment '排序', + IS_DEL BOOLEAN default 0 null comment '删除标记' +) + comment '用户向导'; + +create unique index user_guide_ID_uindex + on user_guide (ID); + +alter table user_guide + add constraint user_guide_pk + primary key (ID); + +alter table user_guide + modify ID int auto_increment; + +create table sys_notification +( + ID int, + TITLE VARCHAR(255) null comment '标题', + CONTENT TEXT null comment '内容', + LEVEL TINYINT(1) default 0 null comment '级别', + UPDATE_TIME DATETIME null comment '更新时间', + SORT INT(5) null comment '排序', + IS_DEL BOOLEAN default 0 null comment '删除标记' +) + comment '系统通知'; + +create unique index sys_notification_ID_uindex + on sys_notification (ID); + +alter table sys_notification + add constraint sys_notification_pk + primary key (ID); + +alter table sys_notification + modify ID int auto_increment; + +alter table user_guide + add TITLE_EN VARCHAR(255) null; + +alter table user_guide + add CONTENT_EN TEXT null; + + +#### updated 1214 + +create table invoice_kind_matching +( + ID int comment '主键', + CONTENT VARCHAR(255) null comment '内容关键字', + KIND VARCHAR(10) null comment '类型', + ACTIVE BOOLEAN default TRUE null comment '是否可用' +) + comment '发票消费类型匹配表'; + +create unique index invoice_kind_matching_ID_uindex + on invoice_kind_matching (ID); + +alter table invoice_kind_matching + add constraint invoice_kind_matching_pk + primary key (ID); + +alter table invoice_kind_matching + modify ID int auto_increment comment '主键'; + + +create index t_10_employee_login_id_index + on t_10_employee (login_id); + +create index invoice_image_REPORT_ID_index + on invoice_image (REPORT_ID); + +alter table expense_reports + add SOURCE varchar(10) default 'APP' null; + + +###### UPDATED 1220 +alter table supplier_order + add SUPPLIER_NAME VARCHAR(100) null; + +alter table invoice_image + modify CREATE_DATE DATETIME null; + + + +#####been updated +alter table corporate_invoice modify ORG_ID int(11) unsigned default 0 null; + + + + + + + + + + + + + + diff --git a/sql/2023-11-27-pengfeiSQL.sql b/sql/2023-11-27-pengfeiSQL.sql new file mode 100644 index 0000000..f296a04 --- /dev/null +++ b/sql/2023-11-27-pengfeiSQL.sql @@ -0,0 +1,53 @@ + +CREATE TABLE `invoice_pf_nc_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `billmaker` varchar(20) DEFAULT NULL COMMENT '提交人', + `corigcurrencyid` varchar(20) DEFAULT NULL COMMENT '币种', + `ntotalorigmny` varchar(20) DEFAULT NULL COMMENT '头入账金额', + `vbillcode` varchar(30) DEFAULT NULL COMMENT '发票号-nc号?', + `vmemo` varchar(255) DEFAULT NULL COMMENT '备注-是否需要处理?', + `vsourcecode` varchar(50) DEFAULT NULL COMMENT '收获单据号', + `vordercode` varchar(50) DEFAULT NULL COMMENT 'po号', + `vfirstrowno` varchar(10) DEFAULT NULL COMMENT 'Po行号', + `nastorigprice` varchar(20) DEFAULT NULL COMMENT '无税单价', + `nshouldnum` varchar(20) DEFAULT NULL COMMENT '供应商发货数量', + `nnum` varchar(20) DEFAULT NULL COMMENT '开票数量', + `norigmny` varchar(20) DEFAULT NULL COMMENT '无税金额', + `ntaxrate` varchar(20) DEFAULT NULL COMMENT '税率', + `pk_material_code` varchar(50) DEFAULT NULL COMMENT '物料编码', + `pk_material_name` varchar(255) DEFAULT NULL COMMENT '物料名称', + `pk_material_graphid` varchar(50) DEFAULT NULL COMMENT '物料图号', + `pk_material_materialspec` varchar(50) DEFAULT NULL COMMENT '物料规格', + `pk_material_materialtype` varchar(50) DEFAULT NULL COMMENT '物料型号', + `pk_supplier_name` varchar(255) DEFAULT NULL COMMENT '供应商名称', + `pk_supplier_code` varchar(20) DEFAULT NULL COMMENT '供应商编码', + `pk_supplier_taxpayerid` varchar(50) DEFAULT NULL COMMENT '供应商税号', + `ext01` varchar(255) DEFAULT NULL, + `ext02` varchar(255) DEFAULT NULL, + `ext03` varchar(255) DEFAULT NULL, + `ext04` varchar(255) DEFAULT NULL, + `ext05` varchar(255) DEFAULT NULL, + `ext06` varchar(255) DEFAULT NULL, + `ext07` varchar(255) DEFAULT NULL, + `ext08` varchar(255) DEFAULT NULL, + `ext09` varchar(255) DEFAULT NULL, + `ext10` varchar(255) DEFAULT NULL, + `create_date` datetime DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `flag` varchar(1) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +ALTER TABLE `invoice_pf_nc_info` +CHANGE COLUMN `ext09` `invoiceNumber` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `ext08`; + +ALTER TABLE `invoice_pf_nc_info` +CHANGE COLUMN `ext10` `vdef21` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; + +ALTER TABLE `invoice_pf_nc_info` +CHANGE COLUMN `ext07` `dbilldate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `ext06`, +CHANGE COLUMN `ext08` `pkorg` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `dbilldate`; +ALTER TABLE `invoice_pf_nc_info` +CHANGE COLUMN `ext06` `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `ext05`; \ No newline at end of file diff --git a/sql/2023-11-27ticket_type_merge.sql b/sql/2023-11-27ticket_type_merge.sql new file mode 100644 index 0000000..e1557a0 --- /dev/null +++ b/sql/2023-11-27ticket_type_merge.sql @@ -0,0 +1,6 @@ +ALTER TABLE `ticket_type` +ADD COLUMN `ext01` varchar(50) NULL AFTER `TAX_RATE`, +ADD COLUMN `ext02` varchar(50) NULL AFTER `ext01`, +ADD COLUMN `ext03` varchar(50) NULL AFTER `ext02`, +ADD COLUMN `ext04` varchar(50) NULL AFTER `ext03`, +ADD COLUMN `ext05` varchar(50) NULL AFTER `ext04`; \ No newline at end of file diff --git a/sql/2023-12-27HLYPWC.sql b/sql/2023-12-27HLYPWC.sql new file mode 100644 index 0000000..5175efc --- /dev/null +++ b/sql/2023-12-27HLYPWC.sql @@ -0,0 +1,5 @@ +CREATE TABLE `fees_invoice`.`hly_employee_company` ( + `employee_no` varchar(20) NOT NULL COMMENT '汇联易PWC接口创建人工号', + `company_name` varchar(255) NULL, + `company_code` varchar(50) NULL +); \ No newline at end of file diff --git a/sql/20230719.sql b/sql/20230719.sql new file mode 100644 index 0000000..4959620 --- /dev/null +++ b/sql/20230719.sql @@ -0,0 +1,7 @@ +ALTER TABLE `corporate_invoice` +MODIFY COLUMN `PO` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `ORIGINAL_FILE_PATH`; +ALTER TABLE `corporate_invoice_items` +MODIFY COLUMN `NAME` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `PID`; +ALTER TABLE `corporate_invoice_items` +MODIFY COLUMN `NAME` varchar(400) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `PID`; + diff --git a/sql/20230801.sql b/sql/20230801.sql new file mode 100644 index 0000000..353fc6b --- /dev/null +++ b/sql/20230801.sql @@ -0,0 +1,70 @@ +drop table if exists `corporate_invoice`; +CREATE TABLE `corporate_invoice` ( + `ID` varchar(40) NOT NULL, + `ORG_ID` int(10) unsigned DEFAULT NULL, + `NAME` varchar(80) DEFAULT NULL, + `SELLER` varchar(100) DEFAULT NULL, + `SELLER_NO` varchar(100) DEFAULT NULL, + `CODE` varchar(100) DEFAULT NULL, + `NUMBER` varchar(100) DEFAULT NULL, + `DATE` varchar(20) DEFAULT NULL, + `TOTAL` varchar(50) DEFAULT NULL, + `IMG_URI` varchar(255) DEFAULT NULL, + `EXTRA_FIELDS` text, + `REMARK` varchar(1000) DEFAULT NULL, + `LOGIN_ID` varchar(100) DEFAULT NULL, + `IS_SEND` tinyint(1) DEFAULT '0' COMMENT '0未发送 1已发送', + `ENTRY_ID` varchar(100) DEFAULT NULL, + `UPDATE_DATE` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `BUYER` varchar(50) DEFAULT NULL, + `BUYER_NO` varchar(50) DEFAULT NULL, + `ORIGINAL_FILE_PATH` varchar(300) DEFAULT NULL, + `PO` varchar(1000) DEFAULT NULL, + `TICKET_CODE` varchar(10) DEFAULT NULL, + `KIND` varchar(20) DEFAULT NULL, + `STATUS` smallint(6) DEFAULT '0' COMMENT '0 未处理 1 已处理 2 异常 3 pending', + `VERIFIED_CODE` varchar(50) DEFAULT NULL, + `PRETAX_AMOUNT` varchar(20) DEFAULT NULL, + `TAX` varchar(20) DEFAULT NULL, + `DETAILS` text, + `OPERATOR_ID` varchar(50) DEFAULT NULL, + `CREATE_DATE` datetime DEFAULT NULL, + `CURRENCY` varchar(10) DEFAULT NULL, + `CHECKED` smallint(6) DEFAULT NULL, + `DESC` varchar(100) DEFAULT NULL, + `MESSAGE` varchar(100) DEFAULT NULL, + `PAY_DATE` varchar(11) DEFAULT NULL, + `POSTING_DATE` date DEFAULT NULL, + `DEDUCT_TIME` date DEFAULT NULL, + `DEDUCT_STATUS` varchar(255) DEFAULT NULL, + `INVOICE_TYPE` int(11) DEFAULT NULL COMMENT '发票类型', + `VALID_STATUS` tinyint(1) DEFAULT '0' COMMENT '验真状态 0、未验真 1、已验真', + `VALID_COUNT` int(11) DEFAULT '0' COMMENT '验真总次数', + `VALID_DAY_COUNT` int(11) DEFAULT '0' COMMENT '当日验真次数', + `MATCH_STATUS` tinyint(3) unsigned DEFAULT NULL, + `OWNER` int(11) DEFAULT NULL COMMENT '所属用户ID', + `IS_DEL` tinyint(1) DEFAULT '0', + `USE_STATUS` tinyint(1) DEFAULT '0' COMMENT '使用状态 0 未使用 1 已使用 2 后票', + `SUBJECT` int(11) DEFAULT NULL COMMENT '科目id', + `MATCH_TYPE` tinyint(1) DEFAULT '0' COMMENT '匹配类型 0 金额 1 数量 一般为1', + `PRICE_TYPE` tinyint(1) DEFAULT '0' COMMENT '税前税后匹配:0 税前 1 税后', + `PERIOD` varchar(30) DEFAULT NULL, + `source_id` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT, + `RECEIVED` varchar(50) DEFAULT NULL COMMENT '接收状态 1是正常 2是未找到对应数据 3是发票异常', + `NUMBER_BACKUP` varchar(100) DEFAULT NULL, + `NUMBER_CONFIRM` varchar(100) DEFAULT NULL, + `COMPANY_SEAL` varchar(100) DEFAULT NULL, + `DEDUCTION_AMOUNT` varchar(50) DEFAULT NULL COMMENT '抵扣金额', + `EXT01` varchar(100) DEFAULT NULL, + `EXT02` varchar(100) DEFAULT NULL, + `EXT03` varchar(100) DEFAULT NULL, + `EXT04` varchar(100) DEFAULT NULL, + `EXT05` varchar(100) DEFAULT NULL, + `EXT06` varchar(100) DEFAULT NULL COMMENT '标签编号', + `EXT07` varchar(100) DEFAULT NULL COMMENT '印泥', + `EXT08` varchar(100) DEFAULT NULL COMMENT '1:未拉取PO,2:已拉取PO,3:已生成XML', + `EXT09` varchar(100) DEFAULT NULL, + `EXT10` varchar(100) DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE, + KEY `source_id` (`source_id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=49352 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/sql/20231114bayerSendLog.SQL b/sql/20231114bayerSendLog.SQL new file mode 100644 index 0000000..325de1d --- /dev/null +++ b/sql/20231114bayerSendLog.SQL @@ -0,0 +1,22 @@ +drop table if exists `invoice_pwc_send_log`; +CREATE TABLE `invoice_pwc_send_log` ( + `id` bigint(0) NOT NULL AUTO_INCREMENT, + `p_uuid` varchar(50) NULL COMMENT '发送消息号', + `p_code` varchar(10) NULL COMMENT '推送结果编码', + `p_msg` varchar(255) NULL COMMENT '推送结果说明', + `c_invoice_number` varchar(20) NULL COMMENT '发票号码', + `c_invoice_code` varchar(20) NULL COMMENT '发票代码', + `c_error_code` varchar(10) NULL COMMENT '错误code', + `c_error_msg` varchar(255) NULL COMMENT '错误信息', + `c_json` varchar(1000) NULL COMMENT '完整json数据', + `create_date` datetime(0) NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '日志时间', + `ext01` varchar(255) NULL, + `ext02` varchar(255) NULL, + `ext03` varchar(255) NULL, + `ext04` varchar(255) NULL, + `ext05` varchar(255) NULL, + `is_del` smallint(1) NULL, + `status` varchar(10) NULL, + `remarks` varchar(255) NULL, + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/sql/2024-01-10PENGFEI.SQL b/sql/2024-01-10PENGFEI.SQL new file mode 100644 index 0000000..fcf5639 --- /dev/null +++ b/sql/2024-01-10PENGFEI.SQL @@ -0,0 +1,55 @@ +drop table if exists `invoice_pengfei_nc_header`; + +CREATE TABLE `invoice_pengfei_nc_header` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `billmaker` varchar(255) DEFAULT NULL COMMENT '制表人', + `corigcurrencyid` varchar(20) DEFAULT NULL COMMENT '币种', + `ntotalorigmny` varchar(20) DEFAULT NULL COMMENT '入账金额', + `vbillcode` varchar(30) DEFAULT NULL COMMENT '发票号-nc号', + `pk_invoice` varchar(255) DEFAULT NULL COMMENT '查询发票用的invoice', + `title` varchar(255) DEFAULT NULL COMMENT '返回的title', + `pkorg` varchar(255) DEFAULT NULL COMMENT '组织', + `vdef21` varchar(1000) DEFAULT NULL COMMENT '回写备注', + `create_date` datetime DEFAULT NULL, + `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `flag` varchar(1) DEFAULT NULL COMMENT '是否已发送rpa', + `status` varchar(255) DEFAULT NULL COMMENT '是否已执行匹配', + `ext01` varchar(255) DEFAULT NULL, + `ext02` varchar(255) DEFAULT NULL, + `ext03` varchar(255) DEFAULT NULL, + `ext04` varchar(255) DEFAULT NULL, + `ext05` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `pk` (`vbillcode`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8; + +drop table if exists `invoice_pengfei_nc_line`; +CREATE TABLE `invoice_pengfei_nc_line` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `header_id` int(11) DEFAULT NULL, + `vmemo` varchar(255) DEFAULT NULL COMMENT '备注-是否需要处理?', + `vsourcecode` varchar(50) DEFAULT NULL COMMENT '收获单据号', + `vordercode` varchar(50) DEFAULT NULL COMMENT 'po号', + `vfirstrowno` varchar(10) DEFAULT NULL COMMENT 'Po行号', + `nastorigprice` varchar(20) DEFAULT NULL COMMENT '无税单价', + `nshouldnum` varchar(20) DEFAULT NULL COMMENT '供应商发货数量', + `nnum` varchar(20) DEFAULT NULL COMMENT '开票数量', + `norigmny` varchar(20) DEFAULT NULL COMMENT '无税金额', + `ntaxrate` varchar(20) DEFAULT NULL COMMENT '税率', + `pk_material_code` varchar(50) DEFAULT NULL COMMENT '物料编码', + `pk_material_name` varchar(255) DEFAULT NULL COMMENT '物料名称', + `pk_material_graphid` varchar(50) DEFAULT NULL COMMENT '物料图号', + `pk_material_materialspec` varchar(255) DEFAULT NULL COMMENT '物料规格', + `pk_material_materialtype` varchar(255) DEFAULT NULL COMMENT '物料型号', + `pk_supplier_name` varchar(255) DEFAULT NULL COMMENT '供应商名称', + `pk_supplier_code` varchar(20) DEFAULT NULL COMMENT '供应商编码', + `pk_supplier_taxpayerid` varchar(50) DEFAULT NULL COMMENT '供应商税号', + `csourcebid` varchar(255) DEFAULT NULL, + `uom` varchar(255) DEFAULT NULL, + `ext01` varchar(255) DEFAULT NULL, + `ext02` varchar(255) DEFAULT NULL, + `ext03` varchar(255) DEFAULT NULL, + `pk_invoice` varchar(255) DEFAULT NULL, + `dbilldate` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=155 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/sql/2024-04-30.SQL b/sql/2024-04-30.SQL new file mode 100644 index 0000000..ac46515 --- /dev/null +++ b/sql/2024-04-30.SQL @@ -0,0 +1,8 @@ +ALTER TABLE `report_images` +ADD COLUMN `source` varchar(50) NULL AFTER `IMG_URI`, +ADD COLUMN `create_date` datetime NULL AFTER `source`, +ADD COLUMN `ext01` varchar(255) NULL AFTER `create_date`, +ADD COLUMN `ext02` varchar(255) NULL AFTER `ext01`, +ADD COLUMN `ext03` varchar(255) NULL AFTER `ext02`, +ADD COLUMN `ext04` varchar(255) NULL AFTER `ext03`, +ADD COLUMN `ext05` varchar(255) NULL AFTER `ext04`; \ No newline at end of file diff --git a/sql/20250523.sql b/sql/20250523.sql new file mode 100644 index 0000000..3d9b8ce --- /dev/null +++ b/sql/20250523.sql @@ -0,0 +1,22 @@ +ALTER TABLE `fees_invoice`.`corporate_invoice_items` +ADD COLUMN `ITEM_NO` varchar(100) NULL AFTER `ORIGIN_PRICE`, +ADD COLUMN `EXT01` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `ITEM_NO`, +ADD COLUMN `EXT02` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `EXT01`, +ADD COLUMN `EXT03` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `EXT02`, +ADD COLUMN `EXT04` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `EXT03`, +ADD COLUMN `EXT05` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `EXT04`; + +CREATE TABLE `supplier_material_define` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `item_no` varchar(100) NOT NULL COMMENT '物料号', + `similar_item_no` varchar(100) DEFAULT NULL COMMENT '相似物料号', + `item_type` varchar(50) DEFAULT NULL COMMENT '0:按单价匹配/1:相似物料', + `remark` varchar(100) DEFAULT NULL, + `ext01` varchar(100) DEFAULT NULL, + `ext02` varchar(100) DEFAULT NULL, + `ext03` varchar(100) DEFAULT NULL, + `ext04` varchar(100) DEFAULT NULL, + `ext05` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; + diff --git a/sql/3.30.sql b/sql/3.30.sql new file mode 100644 index 0000000..c4603bf --- /dev/null +++ b/sql/3.30.sql @@ -0,0 +1 @@ +INSERT INTO `` (`company`, `NAME`, `SUBJECT`, `LEDGER`, `COMPANY_ID`, `DEPID`) VALUES ('上海博道电子商务有限公司', 'shop01', '返点积分', NULL, 6, '3202'); diff --git a/sql/UPDATE_0311.SQL b/sql/UPDATE_0311.SQL new file mode 100644 index 0000000..47051bf --- /dev/null +++ b/sql/UPDATE_0311.SQL @@ -0,0 +1,82 @@ +create table supplier_diff_allow +( + id int, + org_id int not null, + cor_type_id int not null, + diff_allow boolean default true not null +) + comment '差异配置'; + +create unique index supplier_diff_allow_id_uindex + on supplier_diff_allow (id); + +alter table supplier_diff_allow + add constraint supplier_diff_allow_pk + primary key (id); + +alter table supplier_diff_allow + modify id int auto_increment; + +alter table supplier_matching_log + add REASON VARCHAR(255) null; + +create table concur_event_log +( + id bigint, + entry_id varchar(50) null, + filepath varchar(255) null, + original_path varchar(255) null, + create_time datetime null +) + comment 'concur event log'; + +create unique index concur_event_log_id_uindex + on concur_event_log (id); + +alter table concur_event_log + add constraint concur_event_log_pk + primary key (id); + +alter table concur_event_log + modify id bigint auto_increment; + +CREATE TABLE `mileage` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) DEFAULT NULL, + `money` double DEFAULT NULL COMMENT '金额', + `currency` varchar(50) DEFAULT NULL COMMENT '币种', + `mileage_sum` double NOT NULL DEFAULT '0' COMMENT '总里程', + `mileage_date` datetime DEFAULT NULL COMMENT '里程日期', + `mileage_date_sum` varchar(255) DEFAULT NULL COMMENT '耗时总计', + `location_start` varchar(255) DEFAULT NULL COMMENT '起点', + `location_end` varchar(255) DEFAULT NULL COMMENT '终点', + `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0/未完成 1/已完成', + `used_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0/未使用 1/已使用', + `user_id` int(11) NOT NULL, + `create_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `mileage_sum_affirm` double NOT NULL DEFAULT '0' COMMENT '确认里程数', + `remark` varchar(255) DEFAULT NULL, + `image` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1669 + DEFAULT CHARSET = utf8; + +CREATE TABLE `mileage_detail` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `mileage_id` bigint(20) NOT NULL COMMENT '里程ID', + `sort` int NOT NULL DEFAULT '0' COMMENT '里程顺序 0为起点', + `title` varchar(255) DEFAULT NULL COMMENT '地点名称', + `longitude` double DEFAULT NULL COMMENT '经度', + `latitude` double DEFAULT NULL COMMENT '纬度', + `distance` double NOT NULL DEFAULT '0' COMMENT '与上一个地点的距离', + `arrive_time` datetime DEFAULT NULL COMMENT '到达该地点时间', + `create_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1669 + DEFAULT CHARSET = utf8 COMMENT ='里程途径地点细节'; \ No newline at end of file diff --git a/sql/account_period.sql b/sql/account_period.sql new file mode 100644 index 0000000..8742742 --- /dev/null +++ b/sql/account_period.sql @@ -0,0 +1,31 @@ +/* + Navicat Premium Data Transfer + + Source Server : fees-invoice + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : reg.qcisoft.com:29330 + Source Schema : fees_invoice + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 22/03/2022 11:09:20 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for account_period +-- ---------------------------- +DROP TABLE IF EXISTS `account_period`; +CREATE TABLE `account_period` ( + `ID` int(10) NOT NULL, + `STATUS` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `PERIOD` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/sql/t_public_workday.sql b/sql/t_public_workday.sql new file mode 100644 index 0000000..56e3fe0 --- /dev/null +++ b/sql/t_public_workday.sql @@ -0,0 +1,400 @@ +/* + Navicat Premium Data Transfer + + Source Server : fees-invoice + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : reg.qcisoft.com:29330 + Source Schema : fees_invoice + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 19/05/2022 16:43:48 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for t_public_workday +-- ---------------------------- +DROP TABLE IF EXISTS `t_public_workday`; +CREATE TABLE `t_public_workday` ( + `ID` int(20) NOT NULL AUTO_INCREMENT, + `WORK_DAY` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `DAY_TYPE` int(10) NULL DEFAULT 0, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 366 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of t_public_workday +-- ---------------------------- +INSERT INTO `t_public_workday` VALUES (1, '2022-01-01', 1); +INSERT INTO `t_public_workday` VALUES (2, '2022-01-02', 1); +INSERT INTO `t_public_workday` VALUES (3, '2022-01-03', 1); +INSERT INTO `t_public_workday` VALUES (4, '2022-01-04', 0); +INSERT INTO `t_public_workday` VALUES (5, '2022-01-05', 0); +INSERT INTO `t_public_workday` VALUES (6, '2022-01-06', 0); +INSERT INTO `t_public_workday` VALUES (7, '2022-01-07', 0); +INSERT INTO `t_public_workday` VALUES (8, '2022-01-08', 3); +INSERT INTO `t_public_workday` VALUES (9, '2022-01-09', 3); +INSERT INTO `t_public_workday` VALUES (10, '2022-01-10', 0); +INSERT INTO `t_public_workday` VALUES (11, '2022-01-11', 0); +INSERT INTO `t_public_workday` VALUES (12, '2022-01-12', 0); +INSERT INTO `t_public_workday` VALUES (13, '2022-01-13', 0); +INSERT INTO `t_public_workday` VALUES (14, '2022-01-14', 0); +INSERT INTO `t_public_workday` VALUES (15, '2022-01-15', 3); +INSERT INTO `t_public_workday` VALUES (16, '2022-01-16', 3); +INSERT INTO `t_public_workday` VALUES (17, '2022-01-17', 0); +INSERT INTO `t_public_workday` VALUES (18, '2022-01-18', 0); +INSERT INTO `t_public_workday` VALUES (19, '2022-01-19', 0); +INSERT INTO `t_public_workday` VALUES (20, '2022-01-20', 0); +INSERT INTO `t_public_workday` VALUES (21, '2022-01-21', 0); +INSERT INTO `t_public_workday` VALUES (22, '2022-01-22', 3); +INSERT INTO `t_public_workday` VALUES (23, '2022-01-23', 3); +INSERT INTO `t_public_workday` VALUES (24, '2022-01-24', 0); +INSERT INTO `t_public_workday` VALUES (25, '2022-01-25', 0); +INSERT INTO `t_public_workday` VALUES (26, '2022-01-26', 0); +INSERT INTO `t_public_workday` VALUES (27, '2022-01-27', 0); +INSERT INTO `t_public_workday` VALUES (28, '2022-01-28', 0); +INSERT INTO `t_public_workday` VALUES (29, '2022-01-29', 2); +INSERT INTO `t_public_workday` VALUES (30, '2022-01-30', 2); +INSERT INTO `t_public_workday` VALUES (31, '2022-01-31', 1); +INSERT INTO `t_public_workday` VALUES (32, '2022-02-01', 1); +INSERT INTO `t_public_workday` VALUES (33, '2022-02-02', 1); +INSERT INTO `t_public_workday` VALUES (34, '2022-02-03', 1); +INSERT INTO `t_public_workday` VALUES (35, '2022-02-04', 1); +INSERT INTO `t_public_workday` VALUES (36, '2022-02-05', 1); +INSERT INTO `t_public_workday` VALUES (37, '2022-02-06', 1); +INSERT INTO `t_public_workday` VALUES (38, '2022-02-07', 0); +INSERT INTO `t_public_workday` VALUES (39, '2022-02-08', 0); +INSERT INTO `t_public_workday` VALUES (40, '2022-02-09', 0); +INSERT INTO `t_public_workday` VALUES (41, '2022-02-10', 0); +INSERT INTO `t_public_workday` VALUES (42, '2022-02-11', 0); +INSERT INTO `t_public_workday` VALUES (43, '2022-02-12', 3); +INSERT INTO `t_public_workday` VALUES (44, '2022-02-13', 3); +INSERT INTO `t_public_workday` VALUES (45, '2022-02-14', 0); +INSERT INTO `t_public_workday` VALUES (46, '2022-02-15', 0); +INSERT INTO `t_public_workday` VALUES (47, '2022-02-16', 0); +INSERT INTO `t_public_workday` VALUES (48, '2022-02-17', 0); +INSERT INTO `t_public_workday` VALUES (49, '2022-02-18', 0); +INSERT INTO `t_public_workday` VALUES (50, '2022-02-19', 3); +INSERT INTO `t_public_workday` VALUES (51, '2022-02-20', 3); +INSERT INTO `t_public_workday` VALUES (52, '2022-02-21', 0); +INSERT INTO `t_public_workday` VALUES (53, '2022-02-22', 0); +INSERT INTO `t_public_workday` VALUES (54, '2022-02-23', 0); +INSERT INTO `t_public_workday` VALUES (55, '2022-02-24', 0); +INSERT INTO `t_public_workday` VALUES (56, '2022-02-25', 0); +INSERT INTO `t_public_workday` VALUES (57, '2022-02-26', 3); +INSERT INTO `t_public_workday` VALUES (58, '2022-02-27', 3); +INSERT INTO `t_public_workday` VALUES (59, '2022-02-28', 0); +INSERT INTO `t_public_workday` VALUES (60, '2022-03-01', 0); +INSERT INTO `t_public_workday` VALUES (61, '2022-03-02', 0); +INSERT INTO `t_public_workday` VALUES (62, '2022-03-03', 0); +INSERT INTO `t_public_workday` VALUES (63, '2022-03-04', 0); +INSERT INTO `t_public_workday` VALUES (64, '2022-03-05', 3); +INSERT INTO `t_public_workday` VALUES (65, '2022-03-06', 3); +INSERT INTO `t_public_workday` VALUES (66, '2022-03-07', 0); +INSERT INTO `t_public_workday` VALUES (67, '2022-03-08', 0); +INSERT INTO `t_public_workday` VALUES (68, '2022-03-09', 0); +INSERT INTO `t_public_workday` VALUES (69, '2022-03-10', 0); +INSERT INTO `t_public_workday` VALUES (70, '2022-03-11', 0); +INSERT INTO `t_public_workday` VALUES (71, '2022-03-12', 3); +INSERT INTO `t_public_workday` VALUES (72, '2022-03-13', 3); +INSERT INTO `t_public_workday` VALUES (73, '2022-03-14', 0); +INSERT INTO `t_public_workday` VALUES (74, '2022-03-15', 0); +INSERT INTO `t_public_workday` VALUES (75, '2022-03-16', 0); +INSERT INTO `t_public_workday` VALUES (76, '2022-03-17', 0); +INSERT INTO `t_public_workday` VALUES (77, '2022-03-18', 0); +INSERT INTO `t_public_workday` VALUES (78, '2022-03-19', 3); +INSERT INTO `t_public_workday` VALUES (79, '2022-03-20', 3); +INSERT INTO `t_public_workday` VALUES (80, '2022-03-21', 0); +INSERT INTO `t_public_workday` VALUES (81, '2022-03-22', 0); +INSERT INTO `t_public_workday` VALUES (82, '2022-03-23', 0); +INSERT INTO `t_public_workday` VALUES (83, '2022-03-24', 0); +INSERT INTO `t_public_workday` VALUES (84, '2022-03-25', 0); +INSERT INTO `t_public_workday` VALUES (85, '2022-03-26', 3); +INSERT INTO `t_public_workday` VALUES (86, '2022-03-27', 3); +INSERT INTO `t_public_workday` VALUES (87, '2022-03-28', 0); +INSERT INTO `t_public_workday` VALUES (88, '2022-03-29', 0); +INSERT INTO `t_public_workday` VALUES (89, '2022-03-30', 0); +INSERT INTO `t_public_workday` VALUES (90, '2022-03-31', 0); +INSERT INTO `t_public_workday` VALUES (91, '2022-04-01', 0); +INSERT INTO `t_public_workday` VALUES (92, '2022-04-02', 2); +INSERT INTO `t_public_workday` VALUES (93, '2022-04-03', 1); +INSERT INTO `t_public_workday` VALUES (94, '2022-04-04', 1); +INSERT INTO `t_public_workday` VALUES (95, '2022-04-05', 1); +INSERT INTO `t_public_workday` VALUES (96, '2022-04-06', 0); +INSERT INTO `t_public_workday` VALUES (97, '2022-04-07', 0); +INSERT INTO `t_public_workday` VALUES (98, '2022-04-08', 0); +INSERT INTO `t_public_workday` VALUES (99, '2022-04-09', 3); +INSERT INTO `t_public_workday` VALUES (100, '2022-04-10', 3); +INSERT INTO `t_public_workday` VALUES (101, '2022-04-11', 0); +INSERT INTO `t_public_workday` VALUES (102, '2022-04-12', 0); +INSERT INTO `t_public_workday` VALUES (103, '2022-04-13', 0); +INSERT INTO `t_public_workday` VALUES (104, '2022-04-14', 0); +INSERT INTO `t_public_workday` VALUES (105, '2022-04-15', 0); +INSERT INTO `t_public_workday` VALUES (106, '2022-04-16', 3); +INSERT INTO `t_public_workday` VALUES (107, '2022-04-17', 3); +INSERT INTO `t_public_workday` VALUES (108, '2022-04-18', 0); +INSERT INTO `t_public_workday` VALUES (109, '2022-04-19', 0); +INSERT INTO `t_public_workday` VALUES (110, '2022-04-20', 0); +INSERT INTO `t_public_workday` VALUES (111, '2022-04-21', 0); +INSERT INTO `t_public_workday` VALUES (112, '2022-04-22', 0); +INSERT INTO `t_public_workday` VALUES (113, '2022-04-23', 3); +INSERT INTO `t_public_workday` VALUES (114, '2022-04-24', 2); +INSERT INTO `t_public_workday` VALUES (115, '2022-04-25', 0); +INSERT INTO `t_public_workday` VALUES (116, '2022-04-26', 0); +INSERT INTO `t_public_workday` VALUES (117, '2022-04-27', 0); +INSERT INTO `t_public_workday` VALUES (118, '2022-04-28', 0); +INSERT INTO `t_public_workday` VALUES (119, '2022-04-29', 0); +INSERT INTO `t_public_workday` VALUES (120, '2022-04-30', 1); +INSERT INTO `t_public_workday` VALUES (121, '2022-05-01', 1); +INSERT INTO `t_public_workday` VALUES (122, '2022-05-02', 1); +INSERT INTO `t_public_workday` VALUES (123, '2022-05-03', 1); +INSERT INTO `t_public_workday` VALUES (124, '2022-05-04', 1); +INSERT INTO `t_public_workday` VALUES (125, '2022-05-05', 0); +INSERT INTO `t_public_workday` VALUES (126, '2022-05-06', 0); +INSERT INTO `t_public_workday` VALUES (127, '2022-05-07', 2); +INSERT INTO `t_public_workday` VALUES (128, '2022-05-08', 3); +INSERT INTO `t_public_workday` VALUES (129, '2022-05-09', 0); +INSERT INTO `t_public_workday` VALUES (130, '2022-05-10', 0); +INSERT INTO `t_public_workday` VALUES (131, '2022-05-11', 0); +INSERT INTO `t_public_workday` VALUES (132, '2022-05-12', 0); +INSERT INTO `t_public_workday` VALUES (133, '2022-05-13', 0); +INSERT INTO `t_public_workday` VALUES (134, '2022-05-14', 3); +INSERT INTO `t_public_workday` VALUES (135, '2022-05-15', 3); +INSERT INTO `t_public_workday` VALUES (136, '2022-05-16', 0); +INSERT INTO `t_public_workday` VALUES (137, '2022-05-17', 0); +INSERT INTO `t_public_workday` VALUES (138, '2022-05-18', 0); +INSERT INTO `t_public_workday` VALUES (139, '2022-05-19', 0); +INSERT INTO `t_public_workday` VALUES (140, '2022-05-20', 0); +INSERT INTO `t_public_workday` VALUES (141, '2022-05-21', 3); +INSERT INTO `t_public_workday` VALUES (142, '2022-05-22', 3); +INSERT INTO `t_public_workday` VALUES (143, '2022-05-23', 0); +INSERT INTO `t_public_workday` VALUES (144, '2022-05-24', 0); +INSERT INTO `t_public_workday` VALUES (145, '2022-05-25', 0); +INSERT INTO `t_public_workday` VALUES (146, '2022-05-26', 0); +INSERT INTO `t_public_workday` VALUES (147, '2022-05-27', 0); +INSERT INTO `t_public_workday` VALUES (148, '2022-05-28', 3); +INSERT INTO `t_public_workday` VALUES (149, '2022-05-29', 3); +INSERT INTO `t_public_workday` VALUES (150, '2022-05-30', 0); +INSERT INTO `t_public_workday` VALUES (151, '2022-05-31', 0); +INSERT INTO `t_public_workday` VALUES (152, '2022-06-01', 0); +INSERT INTO `t_public_workday` VALUES (153, '2022-06-02', 0); +INSERT INTO `t_public_workday` VALUES (154, '2022-06-03', 1); +INSERT INTO `t_public_workday` VALUES (155, '2022-06-04', 1); +INSERT INTO `t_public_workday` VALUES (156, '2022-06-05', 1); +INSERT INTO `t_public_workday` VALUES (157, '2022-06-06', 0); +INSERT INTO `t_public_workday` VALUES (158, '2022-06-07', 0); +INSERT INTO `t_public_workday` VALUES (159, '2022-06-08', 0); +INSERT INTO `t_public_workday` VALUES (160, '2022-06-09', 0); +INSERT INTO `t_public_workday` VALUES (161, '2022-06-10', 0); +INSERT INTO `t_public_workday` VALUES (162, '2022-06-11', 3); +INSERT INTO `t_public_workday` VALUES (163, '2022-06-12', 3); +INSERT INTO `t_public_workday` VALUES (164, '2022-06-13', 0); +INSERT INTO `t_public_workday` VALUES (165, '2022-06-14', 0); +INSERT INTO `t_public_workday` VALUES (166, '2022-06-15', 0); +INSERT INTO `t_public_workday` VALUES (167, '2022-06-16', 0); +INSERT INTO `t_public_workday` VALUES (168, '2022-06-17', 0); +INSERT INTO `t_public_workday` VALUES (169, '2022-06-18', 3); +INSERT INTO `t_public_workday` VALUES (170, '2022-06-19', 3); +INSERT INTO `t_public_workday` VALUES (171, '2022-06-20', 0); +INSERT INTO `t_public_workday` VALUES (172, '2022-06-21', 0); +INSERT INTO `t_public_workday` VALUES (173, '2022-06-22', 0); +INSERT INTO `t_public_workday` VALUES (174, '2022-06-23', 0); +INSERT INTO `t_public_workday` VALUES (175, '2022-06-24', 0); +INSERT INTO `t_public_workday` VALUES (176, '2022-06-25', 3); +INSERT INTO `t_public_workday` VALUES (177, '2022-06-26', 3); +INSERT INTO `t_public_workday` VALUES (178, '2022-06-27', 0); +INSERT INTO `t_public_workday` VALUES (179, '2022-06-28', 0); +INSERT INTO `t_public_workday` VALUES (180, '2022-06-29', 0); +INSERT INTO `t_public_workday` VALUES (181, '2022-06-30', 0); +INSERT INTO `t_public_workday` VALUES (182, '2022-07-01', 0); +INSERT INTO `t_public_workday` VALUES (183, '2022-07-02', 3); +INSERT INTO `t_public_workday` VALUES (184, '2022-07-03', 3); +INSERT INTO `t_public_workday` VALUES (185, '2022-07-04', 0); +INSERT INTO `t_public_workday` VALUES (186, '2022-07-05', 0); +INSERT INTO `t_public_workday` VALUES (187, '2022-07-06', 0); +INSERT INTO `t_public_workday` VALUES (188, '2022-07-07', 0); +INSERT INTO `t_public_workday` VALUES (189, '2022-07-08', 0); +INSERT INTO `t_public_workday` VALUES (190, '2022-07-09', 3); +INSERT INTO `t_public_workday` VALUES (191, '2022-07-10', 3); +INSERT INTO `t_public_workday` VALUES (192, '2022-07-11', 0); +INSERT INTO `t_public_workday` VALUES (193, '2022-07-12', 0); +INSERT INTO `t_public_workday` VALUES (194, '2022-07-13', 0); +INSERT INTO `t_public_workday` VALUES (195, '2022-07-14', 0); +INSERT INTO `t_public_workday` VALUES (196, '2022-07-15', 0); +INSERT INTO `t_public_workday` VALUES (197, '2022-07-16', 3); +INSERT INTO `t_public_workday` VALUES (198, '2022-07-17', 3); +INSERT INTO `t_public_workday` VALUES (199, '2022-07-18', 0); +INSERT INTO `t_public_workday` VALUES (200, '2022-07-19', 0); +INSERT INTO `t_public_workday` VALUES (201, '2022-07-20', 0); +INSERT INTO `t_public_workday` VALUES (202, '2022-07-21', 0); +INSERT INTO `t_public_workday` VALUES (203, '2022-07-22', 0); +INSERT INTO `t_public_workday` VALUES (204, '2022-07-23', 3); +INSERT INTO `t_public_workday` VALUES (205, '2022-07-24', 3); +INSERT INTO `t_public_workday` VALUES (206, '2022-07-25', 0); +INSERT INTO `t_public_workday` VALUES (207, '2022-07-26', 0); +INSERT INTO `t_public_workday` VALUES (208, '2022-07-27', 0); +INSERT INTO `t_public_workday` VALUES (209, '2022-07-28', 0); +INSERT INTO `t_public_workday` VALUES (210, '2022-07-29', 0); +INSERT INTO `t_public_workday` VALUES (211, '2022-07-30', 3); +INSERT INTO `t_public_workday` VALUES (212, '2022-07-31', 3); +INSERT INTO `t_public_workday` VALUES (213, '2022-08-01', 0); +INSERT INTO `t_public_workday` VALUES (214, '2022-08-02', 0); +INSERT INTO `t_public_workday` VALUES (215, '2022-08-03', 0); +INSERT INTO `t_public_workday` VALUES (216, '2022-08-04', 0); +INSERT INTO `t_public_workday` VALUES (217, '2022-08-05', 0); +INSERT INTO `t_public_workday` VALUES (218, '2022-08-06', 3); +INSERT INTO `t_public_workday` VALUES (219, '2022-08-07', 3); +INSERT INTO `t_public_workday` VALUES (220, '2022-08-08', 0); +INSERT INTO `t_public_workday` VALUES (221, '2022-08-09', 0); +INSERT INTO `t_public_workday` VALUES (222, '2022-08-10', 0); +INSERT INTO `t_public_workday` VALUES (223, '2022-08-11', 0); +INSERT INTO `t_public_workday` VALUES (224, '2022-08-12', 0); +INSERT INTO `t_public_workday` VALUES (225, '2022-08-13', 3); +INSERT INTO `t_public_workday` VALUES (226, '2022-08-14', 3); +INSERT INTO `t_public_workday` VALUES (227, '2022-08-15', 0); +INSERT INTO `t_public_workday` VALUES (228, '2022-08-16', 0); +INSERT INTO `t_public_workday` VALUES (229, '2022-08-17', 0); +INSERT INTO `t_public_workday` VALUES (230, '2022-08-18', 0); +INSERT INTO `t_public_workday` VALUES (231, '2022-08-19', 0); +INSERT INTO `t_public_workday` VALUES (232, '2022-08-20', 3); +INSERT INTO `t_public_workday` VALUES (233, '2022-08-21', 3); +INSERT INTO `t_public_workday` VALUES (234, '2022-08-22', 0); +INSERT INTO `t_public_workday` VALUES (235, '2022-08-23', 0); +INSERT INTO `t_public_workday` VALUES (236, '2022-08-24', 0); +INSERT INTO `t_public_workday` VALUES (237, '2022-08-25', 0); +INSERT INTO `t_public_workday` VALUES (238, '2022-08-26', 0); +INSERT INTO `t_public_workday` VALUES (239, '2022-08-27', 3); +INSERT INTO `t_public_workday` VALUES (240, '2022-08-28', 3); +INSERT INTO `t_public_workday` VALUES (241, '2022-08-29', 0); +INSERT INTO `t_public_workday` VALUES (242, '2022-08-30', 0); +INSERT INTO `t_public_workday` VALUES (243, '2022-08-31', 0); +INSERT INTO `t_public_workday` VALUES (244, '2022-09-01', 0); +INSERT INTO `t_public_workday` VALUES (245, '2022-09-02', 0); +INSERT INTO `t_public_workday` VALUES (246, '2022-09-03', 3); +INSERT INTO `t_public_workday` VALUES (247, '2022-09-04', 3); +INSERT INTO `t_public_workday` VALUES (248, '2022-09-05', 0); +INSERT INTO `t_public_workday` VALUES (249, '2022-09-06', 0); +INSERT INTO `t_public_workday` VALUES (250, '2022-09-07', 0); +INSERT INTO `t_public_workday` VALUES (251, '2022-09-08', 0); +INSERT INTO `t_public_workday` VALUES (252, '2022-09-09', 0); +INSERT INTO `t_public_workday` VALUES (253, '2022-09-10', 1); +INSERT INTO `t_public_workday` VALUES (254, '2022-09-11', 1); +INSERT INTO `t_public_workday` VALUES (255, '2022-09-12', 1); +INSERT INTO `t_public_workday` VALUES (256, '2022-09-13', 0); +INSERT INTO `t_public_workday` VALUES (257, '2022-09-14', 0); +INSERT INTO `t_public_workday` VALUES (258, '2022-09-15', 0); +INSERT INTO `t_public_workday` VALUES (259, '2022-09-16', 0); +INSERT INTO `t_public_workday` VALUES (260, '2022-09-17', 3); +INSERT INTO `t_public_workday` VALUES (261, '2022-09-18', 3); +INSERT INTO `t_public_workday` VALUES (262, '2022-09-19', 0); +INSERT INTO `t_public_workday` VALUES (263, '2022-09-20', 0); +INSERT INTO `t_public_workday` VALUES (264, '2022-09-21', 0); +INSERT INTO `t_public_workday` VALUES (265, '2022-09-22', 0); +INSERT INTO `t_public_workday` VALUES (266, '2022-09-23', 0); +INSERT INTO `t_public_workday` VALUES (267, '2022-09-24', 3); +INSERT INTO `t_public_workday` VALUES (268, '2022-09-25', 3); +INSERT INTO `t_public_workday` VALUES (269, '2022-09-26', 0); +INSERT INTO `t_public_workday` VALUES (270, '2022-09-27', 0); +INSERT INTO `t_public_workday` VALUES (271, '2022-09-28', 0); +INSERT INTO `t_public_workday` VALUES (272, '2022-09-29', 0); +INSERT INTO `t_public_workday` VALUES (273, '2022-09-30', 0); +INSERT INTO `t_public_workday` VALUES (274, '2022-10-01', 1); +INSERT INTO `t_public_workday` VALUES (275, '2022-10-02', 1); +INSERT INTO `t_public_workday` VALUES (276, '2022-10-03', 1); +INSERT INTO `t_public_workday` VALUES (277, '2022-10-04', 1); +INSERT INTO `t_public_workday` VALUES (278, '2022-10-05', 1); +INSERT INTO `t_public_workday` VALUES (279, '2022-10-06', 1); +INSERT INTO `t_public_workday` VALUES (280, '2022-10-07', 1); +INSERT INTO `t_public_workday` VALUES (281, '2022-10-08', 2); +INSERT INTO `t_public_workday` VALUES (282, '2022-10-09', 2); +INSERT INTO `t_public_workday` VALUES (283, '2022-10-10', 0); +INSERT INTO `t_public_workday` VALUES (284, '2022-10-11', 0); +INSERT INTO `t_public_workday` VALUES (285, '2022-10-12', 0); +INSERT INTO `t_public_workday` VALUES (286, '2022-10-13', 0); +INSERT INTO `t_public_workday` VALUES (287, '2022-10-14', 0); +INSERT INTO `t_public_workday` VALUES (288, '2022-10-15', 3); +INSERT INTO `t_public_workday` VALUES (289, '2022-10-16', 3); +INSERT INTO `t_public_workday` VALUES (290, '2022-10-17', 0); +INSERT INTO `t_public_workday` VALUES (291, '2022-10-18', 0); +INSERT INTO `t_public_workday` VALUES (292, '2022-10-19', 0); +INSERT INTO `t_public_workday` VALUES (293, '2022-10-20', 0); +INSERT INTO `t_public_workday` VALUES (294, '2022-10-21', 0); +INSERT INTO `t_public_workday` VALUES (295, '2022-10-22', 3); +INSERT INTO `t_public_workday` VALUES (296, '2022-10-23', 3); +INSERT INTO `t_public_workday` VALUES (297, '2022-10-24', 0); +INSERT INTO `t_public_workday` VALUES (298, '2022-10-25', 0); +INSERT INTO `t_public_workday` VALUES (299, '2022-10-26', 0); +INSERT INTO `t_public_workday` VALUES (300, '2022-10-27', 0); +INSERT INTO `t_public_workday` VALUES (301, '2022-10-28', 0); +INSERT INTO `t_public_workday` VALUES (302, '2022-10-29', 3); +INSERT INTO `t_public_workday` VALUES (303, '2022-10-30', 3); +INSERT INTO `t_public_workday` VALUES (304, '2022-10-31', 0); +INSERT INTO `t_public_workday` VALUES (305, '2022-11-01', 0); +INSERT INTO `t_public_workday` VALUES (306, '2022-11-02', 0); +INSERT INTO `t_public_workday` VALUES (307, '2022-11-03', 0); +INSERT INTO `t_public_workday` VALUES (308, '2022-11-04', 0); +INSERT INTO `t_public_workday` VALUES (309, '2022-11-05', 3); +INSERT INTO `t_public_workday` VALUES (310, '2022-11-06', 3); +INSERT INTO `t_public_workday` VALUES (311, '2022-11-07', 0); +INSERT INTO `t_public_workday` VALUES (312, '2022-11-08', 0); +INSERT INTO `t_public_workday` VALUES (313, '2022-11-09', 0); +INSERT INTO `t_public_workday` VALUES (314, '2022-11-10', 0); +INSERT INTO `t_public_workday` VALUES (315, '2022-11-11', 0); +INSERT INTO `t_public_workday` VALUES (316, '2022-11-12', 3); +INSERT INTO `t_public_workday` VALUES (317, '2022-11-13', 3); +INSERT INTO `t_public_workday` VALUES (318, '2022-11-14', 0); +INSERT INTO `t_public_workday` VALUES (319, '2022-11-15', 0); +INSERT INTO `t_public_workday` VALUES (320, '2022-11-16', 0); +INSERT INTO `t_public_workday` VALUES (321, '2022-11-17', 0); +INSERT INTO `t_public_workday` VALUES (322, '2022-11-18', 0); +INSERT INTO `t_public_workday` VALUES (323, '2022-11-19', 3); +INSERT INTO `t_public_workday` VALUES (324, '2022-11-20', 3); +INSERT INTO `t_public_workday` VALUES (325, '2022-11-21', 0); +INSERT INTO `t_public_workday` VALUES (326, '2022-11-22', 0); +INSERT INTO `t_public_workday` VALUES (327, '2022-11-23', 0); +INSERT INTO `t_public_workday` VALUES (328, '2022-11-24', 0); +INSERT INTO `t_public_workday` VALUES (329, '2022-11-25', 0); +INSERT INTO `t_public_workday` VALUES (330, '2022-11-26', 3); +INSERT INTO `t_public_workday` VALUES (331, '2022-11-27', 3); +INSERT INTO `t_public_workday` VALUES (332, '2022-11-28', 0); +INSERT INTO `t_public_workday` VALUES (333, '2022-11-29', 0); +INSERT INTO `t_public_workday` VALUES (334, '2022-11-30', 0); +INSERT INTO `t_public_workday` VALUES (335, '2022-12-01', 0); +INSERT INTO `t_public_workday` VALUES (336, '2022-12-02', 0); +INSERT INTO `t_public_workday` VALUES (337, '2022-12-03', 3); +INSERT INTO `t_public_workday` VALUES (338, '2022-12-04', 3); +INSERT INTO `t_public_workday` VALUES (339, '2022-12-05', 0); +INSERT INTO `t_public_workday` VALUES (340, '2022-12-06', 0); +INSERT INTO `t_public_workday` VALUES (341, '2022-12-07', 0); +INSERT INTO `t_public_workday` VALUES (342, '2022-12-08', 0); +INSERT INTO `t_public_workday` VALUES (343, '2022-12-09', 0); +INSERT INTO `t_public_workday` VALUES (344, '2022-12-10', 3); +INSERT INTO `t_public_workday` VALUES (345, '2022-12-11', 3); +INSERT INTO `t_public_workday` VALUES (346, '2022-12-12', 0); +INSERT INTO `t_public_workday` VALUES (347, '2022-12-13', 0); +INSERT INTO `t_public_workday` VALUES (348, '2022-12-14', 0); +INSERT INTO `t_public_workday` VALUES (349, '2022-12-15', 0); +INSERT INTO `t_public_workday` VALUES (350, '2022-12-16', 0); +INSERT INTO `t_public_workday` VALUES (351, '2022-12-17', 3); +INSERT INTO `t_public_workday` VALUES (352, '2022-12-18', 3); +INSERT INTO `t_public_workday` VALUES (353, '2022-12-19', 0); +INSERT INTO `t_public_workday` VALUES (354, '2022-12-20', 0); +INSERT INTO `t_public_workday` VALUES (355, '2022-12-21', 0); +INSERT INTO `t_public_workday` VALUES (356, '2022-12-22', 0); +INSERT INTO `t_public_workday` VALUES (357, '2022-12-23', 0); +INSERT INTO `t_public_workday` VALUES (358, '2022-12-24', 3); +INSERT INTO `t_public_workday` VALUES (359, '2022-12-25', 3); +INSERT INTO `t_public_workday` VALUES (360, '2022-12-26', 0); +INSERT INTO `t_public_workday` VALUES (361, '2022-12-27', 0); +INSERT INTO `t_public_workday` VALUES (362, '2022-12-28', 0); +INSERT INTO `t_public_workday` VALUES (363, '2022-12-29', 0); +INSERT INTO `t_public_workday` VALUES (364, '2022-12-30', 0); +INSERT INTO `t_public_workday` VALUES (365, '2022-12-31', 3); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/sql/update.sql b/sql/update.sql new file mode 100644 index 0000000..382d3e7 --- /dev/null +++ b/sql/update.sql @@ -0,0 +1,2339 @@ +#### 2021/12/22 +create table ticket_type_mapping +( + ID int, + TICKET_CODE VARCHAR(10) null comment '票种code', + TITLE VARCHAR(50) null comment '发票title', + TICKET_CODE_MAPPING VARCHAR(10) null comment '票种mapping', + ACTIVE BOOLEAN default TRUE null comment '是否可用' +) + comment '发票类型匹配表'; + +create unique index ticket_type_mapping_ID_uindex + on ticket_type_mapping (ID); + +alter table ticket_type_mapping + add constraint ticket_type_mapping_pk + primary key (ID); + +alter table ticket_type_mapping + modify ID int auto_increment; + +alter table user + add VALID_TYPE int(1) default 0 null comment '验真模式 0 常规 1隐式'; + +alter table company + add VALID_MODE TINYINT(1) default 0 null comment '验真模式 1 前后都验真 2 前后都不验真 3 前不验真后验真'; + +alter table verified_user + add VALID_MODE TINYINT(1) default 0 null comment '验真模式 1 前后都验真 2 前后都不验真 3 前不验真后验真'; + +alter table user + drop column VALID_TYPE; + +create table account_mapping +( + ID int comment '主键ID', + TYPE VARCHAR(100) null comment '类型', + DEBIT_ACCOUNT1 varchar(50) null comment '借方科目1', + CREDIT_SUBJECT1 varchar(50) null comment '贷方科目1', + DEBIT_ACCOUNT2 varchar(50) null comment '借方科目2', + CREDIT_SUBJECT2 varchar(50) null comment '贷方科目2' +) + comment '费用科目表'; + +create unique index expense_subject_ID_uindex + on account_mapping (ID); + +alter table account_mapping + add constraint expense_subject_pk + primary key (ID); + +alter table account_mapping + modify ID int auto_increment comment '主键ID'; + +alter table corporate_invoice + add SUBJECT int null comment '科目id'; + +alter table expense_type_active_tt + add EDITABLE TINYINT(1) default 0 null comment '0 不可编辑 1 可编辑'; + +create table account_object +( + ID int, + CATEGORY VARCHAR(50) null comment '科目类别', + ACCOUNT VARCHAR(50) null comment '科目', + DESCRIPTION VARCHAR(255) null comment '描述', + LEVEL VARCHAR(20) null comment '级别', + REMARK VARCHAR(255) null comment '备注' +) + comment '科目'; + +create unique index account_object_ID_uindex + on account_object (ID); + +alter table account_object + add constraint account_object_pk + primary key (ID); + +alter table account_object + modify ID int auto_increment; + +create index account_object_ACCOUNT_index + on account_object (ACCOUNT); + +drop index invoice_library_INVOICE_NUM_uindex on invoice_library; + +create unique index invoice_library_INVOICE_NUM_INVOICE_CODE_uindex + on invoice_library (INVOICE_NUM, INVOICE_CODE); + + +####PRC HAS UPDATED +alter table invoice_lines + add VALID_STATUS BOOLEAN default FALSE null; + +create table smarttax_infos +( + ID BIGINT, + NAME VARCHAR(30) null comment '接口名', + PARAM1 VARCHAR(100) null, + PARAM2 VARCHAR(100) null, + PARAM3 VARCHAR(100) null, + PARAM4 VARCHAR(100) null, + PARAM5 VARCHAR(100) null, + RESULT TEXT null, + TYPE VARCHAR(30) null +) + comment '慧穗接口信息'; + +create unique index smarttax_infos_ID_uindex + on smarttax_infos (ID); + +alter table smarttax_infos + add constraint smarttax_infos_pk + primary key (ID); + +alter table smarttax_infos + modify ID BIGINT auto_increment; + +create table smarttax_company +( + ID BIGINT, + NAME VARCHAR(50) null, + COM_NAME VARCHAR(50) null, + TAX_NO VARCHAR(50) null, + ACTIVE BOOLEAN default TRUE null +) + comment '慧穗公司白名单'; + +create unique index smarttax_company_ID_uindex + on smarttax_company (ID); + +alter table smarttax_company + add constraint smarttax_company_pk + primary key (ID); + +alter table smarttax_company + modify ID BIGINT auto_increment; + +create table report_images +( + ID BIGINT, + REPORT_ID VARCHAR(50) not null, + IMG_URI VARCHAR(200) null +) + comment '面单影像'; + +create unique index report_images_ID_uindex + on report_images (ID); + +create index report_images_REPORT_ID_index + on report_images (REPORT_ID); + +alter table report_images + add constraint report_images_pk + primary key (ID); + +alter table report_images + modify ID BIGINT auto_increment; + +alter table invoice_image_files + add REPORT_ID VARCHAR(50) null; + + +create table error_report +( + ID BIGINT comment '主键ID', + REPORT_ID VARCHAR(50) not null comment '报告', + STATUS VARCHAR(50) null comment '状态', + CREATE_TIME DATETIME null comment '创建时间' +) + comment '异常报告'; + +create unique index error_report_ID_uindex + on error_report (ID); + +alter table error_report + add constraint error_report_pk + primary key (ID); + +alter table error_report + modify ID BIGINT auto_increment comment '主键ID'; + + +alter table verified_user + modify VALID_MODE smallint(1) default 0 null comment '验真模式 1 前后都验真 2 前后都不验真 3 前不验真后验真'; + +alter table verified_user + modify MANUAL smallint(1) default 0 null; + + +##### 0207 +create table expense_type_active_tt_list_config +( + LIST_NAME VARCHAR(20) not null, + TYPE VARCHAR(20) not null, + VALUE VARCHAR(20) null +) + comment '动态字段 list 类型配置'; + +create unique index expense_type_active_tt_list_config_LIST_NAME_uindex + on expense_type_active_tt_list_config (LIST_NAME); + +alter table expense_type_active_tt_list_config + add constraint expense_type_active_tt_list_config_pk + primary key (LIST_NAME); + +create index value_set_CATEGORY_index + on value_set (CATEGORY); + +create index expense_type_active_tt_KIND_PID_index + on expense_type_active_tt (KIND, PID); + +create index expense_type_active_tt_IS_DEL_index + on expense_type_active_tt (IS_DEL); + +#### updated 20220207 +alter table corporate_invoice_type + add MATCH_TYPE TINYINT(1) default 0 null comment '匹配类型 0 金额匹配 1 数量匹配'; + +alter table compliance_check + add ORIGINAL_ID int null; + +alter table supplier_matching_log + add PRE_VALUE VARCHAR(255) null; + +alter table supplier_matching_log + add AFTER_VALUE VARCHAR(255) null; + + + +alter table invoice_image_files + modify ORIGINAL_ID varchar(100) null comment '源ID'; + +create index corporate_invoice_items_PID_index + on corporate_invoice_items (PID); + +alter table supplier_matching_log + modify ID varchar(50) not null; + +alter table supplier_matching_log + modify PID varchar(50) not null; + +alter table customer + add EXPENSE_TYPE_ACTIVE tinyint(1) default 0 not null comment '费用类型能否修改 0 不可以 1 可以'; + +alter table invoice_image + add ENTRY_ID VARCHAR(50) null; + +alter table invoice_image + add REIMBURSEMENT_AMOUNT varchar(20) null; + +alter table compliance_check + add INVOICE_MONEY VARCHAR(20) null comment '发票金额'; + +alter table compliance_check + add ENTRY_ID VARCHAR(50) null; + +alter table supplier_order_item_matching + add PRICE_HAS_UPDATED TINYINT(1) default 0 null; + + +##### 2022 02 18 +alter table supplier_order_item_matching + add DIFFERENCE DECIMAL(5, 2) null comment '差异'; + +alter table corporate_invoice_items + add DIFFERENCE VARCHAR(10) null comment '差异'; + + +#### 0222 +create table concur_image_log +( + entry_id varchar(50) not null, + update_time varchar(20) null +); + +create unique index concur_image_log_entry_id_uindex + on concur_image_log (entry_id); + +alter table concur_image_log + add constraint concur_image_log_pk + primary key (entry_id); + +create table deduction_company +( + id int, + name varchar(100) null, + code varchar(100) null +) + comment '可抵扣公司'; + +create unique index deduction_company_id_uindex + on deduction_company (id); + +alter table deduction_company + add constraint deduction_company_pk + primary key (id); + +alter table deduction_company modify id int auto_increment; + +#### 0224 +alter table invoice_lines + add KIND VARCHAR(10) null; + +alter table corporate_invoice + add PRICE_TYPE TINYINT(1) default 0 null comment '0 折后 1 折前'; + +alter table corporate_invoice_items + add ORIGIN_UNIT VARCHAR(50) null; + +alter table corporate_invoice_items + add ORIGIN_QUANTITY VARCHAR(50) null; + +alter table corporate_invoice_items + add ORIGIN_PRICE VARCHAR(50) null; + + +#### 0405 + +ALTER TABLE `fees_invoice`.`corporate_invoice` ADD COLUMN `source_id` bigint(20) NOT NULL AFTER `PERIOD`; + +ALTER TABLE `fees_invoice`.`corporate_invoice` ADD INDEX `source_id`(`source_id`) USING BTREE; + +ALTER TABLE `fees_invoice`.`corporate_invoice` MODIFY COLUMN `source_id` bigint(20) NOT NULL AUTO_INCREMENT AFTER `PERIOD`; + + +##### 2022 05 05 +ALTER TABLE `fees_invoice`.`band_config` ADD COLUMN `AREA` VARCHAR(100) DEFAULT NULL AFTER `BAND`; +ALTER TABLE `fees_invoice`.`band_config` ADD COLUMN `ITEM` VARCHAR(100) DEFAULT NULL AFTER `AREA`; +ALTER TABLE `fees_invoice`.`band_config` change `MILEAGE` `RATE` varchar(20) DEFAULT NULL; +alter table `fees_invoice`.`band_config` add unique index(BAND,AREA,ITEM); +drop table `fees_invoice`.`band_area_config`; + +##### 2022-05-06 +ALTER TABLE `corp_payment_header` ADD COLUMN `VENDOR_NAME` VARCHAR(150) DEFAULT NULL comment '供应商名称'; +ALTER TABLE `corp_payment_header` ADD COLUMN `VENDOR_CODE` VARCHAR(100) DEFAULT NULL comment '供应商Code'; +ALTER TABLE `corp_payment_header` ADD COLUMN `EMP_ID` VARCHAR(100) DEFAULT NULL comment '员工ID'; +ALTER TABLE `corp_payment_header` ADD COLUMN `REQUEST_ID` VARCHAR(100) DEFAULT NULL comment 'OAID'; + +##### 2022-05-13 +ALTER TABLE sys_user_org MODIFY AUTHORIZED_ORG varchar(2000) DEFAULT NULL comment '授权组织id集合'; + +##### 2022-05-19 +CREATE TABLE `exp_comb_report` ( + `COMB_REPORT_ID` bigint(20) NOT NULL AUTO_INCREMENT, + `COMB_REPORT_NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment '报告名称', + `COMB_START` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment '开始日期', + `COMB_END` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment '结束日期', + `POLICY` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment 'POLICY', + `USER_ID` int(11) NULL DEFAULT NULL COMMENT '用户ID', + `IS_SEND` int(1) NULL DEFAULT NULL COMMENT '是否传送 0/否 1/是', + `CONCUR_ID` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment 'Concur ID', + `COMB_TIME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL comment '报告生成时间', + `REMARK` varchar(200) NULL DEFAULT NULL comment '备注', + PRIMARY KEY (`COMB_REPORT_ID`) USING BTREE, + UNIQUE INDEX `exp_comb_report_ID_uindex`(`COMB_REPORT_ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '报告合并表'; + +CREATE TABLE `exp_comb_report_sub` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `COMB_REPORT_ID` int(11) NULL DEFAULT NULL COMMENT 'exp_comb_report表的ID', + `EXPENSE_REPROTS_ID` int(11) NULL DEFAULT NULL COMMENT 'expense_reports表的ID', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `exp_comb_report_sub_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '报告合并Sub表'; + +##### 2022-05-23 +CREATE TABLE `invoice_delete` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `ENTRY_ID` varchar(100) NULL DEFAULT NULL COMMENT 'invoice表的ENTRY_ID', + `REPORT_ID` varchar(255) NULL DEFAULT NULL COMMENT 'expense_reports表的REPORT_KEY', + `USER_LOGIN` varchar(100) NULL DEFAULT NULL COMMENT 'user表的EMAIL', + `FLAG` varchar(2) NULL DEFAULT '0' COMMENT '返回标记', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_delete_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '发票删除记录表'; + +##### 2022-05-24 +CREATE TABLE `efiles` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `FILE_DATE` varchar(20) NULL DEFAULT NULL COMMENT '', + `TYPE` varchar(20) NULL DEFAULT NULL COMMENT '类型', + `USER_ID` varchar(20) NULL DEFAULT NULL COMMENT '用户ID', + `REQ_ID` varchar(20) NULL DEFAULT '0' COMMENT 'REQ_ID', + `VERIFIED_DATA` text NULL DEFAULT NULL COMMENT '', + `STATUS` varchar(2) NULL DEFAULT '0' COMMENT '状态', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `efiles_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +ALTER TABLE files ADD COLUMN `TYPE` VARCHAR(20) DEFAULT NULL; + +##### 2022-05-31 +ALTER TABLE invoice ADD COLUMN `expmonth` VARCHAR(50) DEFAULT NULL; +ALTER TABLE corp_invoice_receive_header ADD COLUMN `TICKET_CODE` VARCHAR(50) DEFAULT NULL AFTER `INVOICE_TYPE`; +ALTER TABLE corp_invoice_receive_header ADD COLUMN `VERIFIED_CODE` VARCHAR(50) DEFAULT NULL AFTER `TICKET_CODE`; + +##### 2022-06-07 +ALTER TABLE expense_type ADD COLUMN `NEED_INV` VARCHAR(2) DEFAULT '1' COMMENT ''; +ALTER TABLE t_10_report_main_extension ADD COLUMN `SYNC_STATUS` tinyint(1) DEFAULT 0 COMMENT '0未同步,1已同步',; +ALTER TABLE t_10_report_main_extension ADD COLUMN `COMMENT` VARCHAR(200) DEFAULT null COMMENT'驳回意见'; + +##### 2022-06-14 +ALTER TABLE invoice_image ADD COLUMN `DATA_JSON` text DEFAULT null COMMENT'json数据'; + +##### 2022-06-16 +ALTER TABLE files ADD COLUMN `AUTO_INSERT` VARCHAR(2) DEFAULT null COMMENT '0-手动,1-自动'; +ALTER TABLE files ADD COLUMN `EFILES_ID` bigint(20) DEFAULT null COMMENT 'efiles_id'; +ALTER TABLE efiles ADD COLUMN `IMG_URL` VARCHAR(300) DEFAULT null COMMENT '图片地址'; +ALTER TABLE efiles ADD COLUMN `REUSE` VARCHAR(2) DEFAULT null COMMENT '0-不可重复使用,1-可以重复使用'; + +##### 2022-06-21 +ALTER TABLE mt_pic ADD COLUMN `IMG_URL` VARCHAR(300) DEFAULT null COMMENT '图片地址'; + +##### 2022-06-27 +ALTER TABLE t_10_report_main ADD COLUMN `custom21` VARCHAR(100) DEFAULT null COMMENT ''; + +drop table if exists `mt_agreement`; +CREATE TABLE `mt_agreement` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `REQ_ID` varchar(20) NULL DEFAULT NULL COMMENT 'REQ_ID', + `EXT_ID` varchar(20) NULL DEFAULT NULL COMMENT '讲者ID', + `AGREEMENT_ID` varchar(30) NULL DEFAULT NULL COMMENT '协议ID', + `CONTRACT_TITLE` varchar(200) NULL DEFAULT NULL COMMENT '标题', + `CONTRACT_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '类型', + `CONTRACT_CUSTOM_ID` varchar(50) NULL DEFAULT NULL COMMENT '公司内部编号', + `TEMPLATE_ID` varchar(30) NULL DEFAULT NULL COMMENT '模板ID', + `SIGN_EXPIRE_DAY` varchar(20) NULL DEFAULT NULL COMMENT '签约截止时间', + `CONTRACT_LIFE_END` varchar(20) NULL DEFAULT NULL COMMENT '协议内容有效期', + `DESCRIBE` varchar(200) NULL DEFAULT NULL COMMENT '描述', + `EFILE_URL` varchar(300) NULL DEFAULT NULL COMMENT '附件地址', + `STATUS` varchar(2) NULL DEFAULT '0' COMMENT '状态:0未发送1已发送2取消', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CLIENT` int NULL DEFAULT 1 COMMENT '', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_agreement_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +drop table if exists `mt_agree_template`; +CREATE TABLE `mt_agree_template` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `TEMPLATE_ID` varchar(30) NULL DEFAULT NULL COMMENT '模板ID', + `TEMPLATE_NAME` varchar(50) NULL DEFAULT NULL COMMENT '模板名称', + `SIGN_ORDERLY` varchar(2) NULL DEFAULT '1' COMMENT '是否按序签署:0否1是', + `BIZ_NO` varchar(50) NULL DEFAULT NULL COMMENT 'bizNo', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_agree_template_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +drop table if exists `mt_agree_router_config`; +CREATE TABLE `mt_agree_router_config` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `TEMPLATE_ID` varchar(30) NULL DEFAULT NULL COMMENT '模板ID', + `ROUTER_ID` varchar(20) NULL DEFAULT NULL COMMENT 'RouterID', + `ORDER` varchar(2) NULL DEFAULT NULL COMMENT '顺序', + `SIGNER` varchar(20) NULL DEFAULT NULL COMMENT '签署人', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_agree_router_config_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +drop table if exists `mt_agree_router`; +CREATE TABLE `mt_agree_router` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `AGREEMENT_ID` varchar(30) NULL DEFAULT NULL COMMENT '协议ID', + `TEMPLATE_ID` varchar(30) NULL DEFAULT NULL COMMENT '模板ID', + `ROUTER_ID` varchar(20) NULL DEFAULT NULL COMMENT 'RouterID', + `ORDER` varchar(2) NULL DEFAULT NULL COMMENT '顺序', + `ENTERPRISE_NAME` varchar(50) NULL DEFAULT NULL COMMENT '企业名称', + `SIGN_NAME` varchar(20) NULL DEFAULT NULL COMMENT '签署人', + `SIGN_ACCOUNT` varchar(30) NULL DEFAULT NULL COMMENT '签署人账号', + `SIGN_DATE` datetime NULL DEFAULT NULL COMMENT '签署时间', + `STATUS` varchar(2) NULL DEFAULT '0' COMMENT '状态:0失败1成功', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_agree_router_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2022-06-30 +ALTER TABLE supplier_blacklist ADD COLUMN `CREATE_DATE` datetime DEFAULT null COMMENT '创建时间'; + +ALTER TABLE mt_agreement ADD COLUMN `SPEAKER` varchar(20) DEFAULT null COMMENT '讲者' AFTER `EXT_ID`; +ALTER TABLE mt_agreement ADD COLUMN `SPEAKER_TEL` varchar(20) DEFAULT null COMMENT '讲者手机号' AFTER `SPEAKER`; + +##### 2022-07-07 +ALTER TABLE mt_agreement ADD COLUMN `SPEAKER_EMAIL` varchar(50) DEFAULT null COMMENT '讲者邮箱' AFTER `SPEAKER_TEL`; +ALTER TABLE mt_list ADD COLUMN `MEET_FORMAT` varchar(20) DEFAULT null COMMENT '会议形式' AFTER `CITY`; + +##### 2022-07-08 +ALTER TABLE mt_pic ADD COLUMN `PIC_TYPE` varchar(20) DEFAULT null COMMENT '照片类型' AFTER `REQ_ID`; + +##### 2022-07-12 +ALTER TABLE mt_checkin ADD COLUMN `ORG_NAME` varchar(50) DEFAULT null COMMENT '组织名称' AFTER `ORG_ID`; +ALTER TABLE mt_checkin ADD COLUMN `DEPT_NAME` varchar(50) DEFAULT null COMMENT '部门名称' AFTER `DEPT_ID`; + +##### 2022-07-12 +alter table supplier_order_item_matching + add matching_id varchar(100) null comment '分摊Id'; + +##### 2022-07-18 +ALTER TABLE mt_speaker ADD COLUMN `EXPENSE_NAME` varchar(50) DEFAULT null COMMENT '费用名称' AFTER `EXT_ID`; +ALTER TABLE mt_speaker ADD COLUMN `EXPENSE_AMOUNT` varchar(20) DEFAULT null COMMENT '费用金额' AFTER `EXPENSE_NAME`; + +##### 2022-07-19 +ALTER TABLE t_10_attendee ADD COLUMN `custom11` varchar(100) DEFAULT null COMMENT '' AFTER `custom10`; +ALTER TABLE t_10_attendee ADD COLUMN `custom12` varchar(100) DEFAULT null COMMENT '' AFTER `custom11`; +ALTER TABLE t_10_attendee ADD COLUMN `custom13` varchar(100) DEFAULT null COMMENT '' AFTER `custom12`; +ALTER TABLE t_10_attendee ADD COLUMN `custom14` varchar(100) DEFAULT null COMMENT '' AFTER `custom13`; +ALTER TABLE t_10_attendee ADD COLUMN `custom15` varchar(100) DEFAULT null COMMENT '' AFTER `custom14`; +ALTER TABLE t_10_attendee ADD COLUMN `custom16` varchar(100) DEFAULT null COMMENT '' AFTER `custom15`; +ALTER TABLE t_10_attendee ADD COLUMN `custom17` varchar(100) DEFAULT null COMMENT '' AFTER `custom16`; +ALTER TABLE t_10_attendee ADD COLUMN `custom18` varchar(100) DEFAULT null COMMENT '' AFTER `custom17`; +ALTER TABLE t_10_attendee ADD COLUMN `custom19` varchar(100) DEFAULT null COMMENT '' AFTER `custom18`; +ALTER TABLE t_10_attendee ADD COLUMN `custom20` varchar(100) DEFAULT null COMMENT '' AFTER `custom19`; +ALTER TABLE t_10_attendee ADD COLUMN `custom21` varchar(100) DEFAULT null COMMENT '' AFTER `custom20`; +ALTER TABLE t_10_attendee ADD COLUMN `custom22` varchar(100) DEFAULT null COMMENT '' AFTER `custom21`; +ALTER TABLE t_10_attendee ADD COLUMN `custom23` varchar(100) DEFAULT null COMMENT '' AFTER `custom22`; +ALTER TABLE t_10_attendee ADD COLUMN `custom24` varchar(100) DEFAULT null COMMENT '' AFTER `custom23`; +ALTER TABLE t_10_attendee ADD COLUMN `custom25` varchar(100) DEFAULT null COMMENT '' AFTER `custom24`; + +#2022-07-21 +drop table if exists `mt_attendee`; +CREATE TABLE `mt_attendee` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `REQ_ID` varchar(20) NULL DEFAULT NULL COMMENT 'REQ_ID', + `ATTENDEE_TYPE_ID` varchar(100) NULL DEFAULT NULL COMMENT '参与人类型id', + `ATTENDEE_TYPE_CODE` varchar(100) NULL DEFAULT NULL COMMENT '参与人类型', + `ATTENDEE_NAME` varchar(20) NULL DEFAULT NULL COMMENT '参与人姓名', + `ATTENDEE_EXT_ID` varchar(100) NULL DEFAULT NULL COMMENT '参与人extid', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_attendee_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会议参与人表'; + +##### 2022-07-25 +ALTER TABLE mt_checkin ADD COLUMN `ID_CARD` varchar(30) DEFAULT null COMMENT '身份证号码' AFTER `MOBILE`; + +CREATE TABLE `mt_attendee_type` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `GROUP` varchar(100) NULL DEFAULT NULL COMMENT 'GROUP', + `ACCESS_TYPE` varchar(20) NULL DEFAULT NULL COMMENT '类型', + `ALLOW_GROUP` varchar(100) NULL DEFAULT NULL COMMENT '类型名称', + `GROUP_CODE` varchar(100) NULL DEFAULT NULL COMMENT '类型code', + `ATTENDEE_TYPE_ID` varchar(100) NULL DEFAULT NULL COMMENT '参与人类型id', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_attendee_type_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会议参与人类型表'; + + +##### 2022-07-26 +ALTER TABLE mt_speaker ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-07-27 +ALTER TABLE expense_type ADD COLUMN `MESG` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE expense_type ADD COLUMN `MESG_EN` varchar(100) DEFAULT null COMMENT ''; + +ALTER TABLE mt_pic ADD COLUMN `EXPENSE_NAME` varchar(100) DEFAULT null COMMENT '费用名称' AFTER `PIC_TYPE`; +ALTER TABLE mt_pic ADD COLUMN `EXT_ID` varchar(100) DEFAULT null COMMENT '讲者extId' AFTER `EXPENSE_NAME`; +ALTER TABLE mt_pic ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_pic ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_pic ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_pic ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_pic ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +ALTER TABLE efiles ADD COLUMN `EXPENSE_NAME` varchar(100) DEFAULT null COMMENT '费用名称' AFTER `REQ_ID`; +ALTER TABLE efiles ADD COLUMN `EXT_ID` varchar(100) DEFAULT null COMMENT '讲者extId' AFTER `EXPENSE_NAME`; +ALTER TABLE efiles ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-07-29 +ALTER TABLE mt_agreement ADD COLUMN `BASE64` LONGTEXT DEFAULT null COMMENT ''; + +##### 2022-08-01 +ALTER TABLE invoice ADD COLUMN `REQ_ID` varchar(20) DEFAULT null COMMENT 'REQ_ID'; + +##### 2022-08-02 +CREATE TABLE `invoice_channel` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `ORDER` varchar(2) NULL DEFAULT NULL COMMENT '排序', + `NAME` varchar(100) NULL DEFAULT NULL COMMENT '名称', + `NAME_EN` varchar(100) NULL DEFAULT NULL COMMENT '名称_EN', + `ICON` varchar(200) NULL DEFAULT NULL COMMENT '图片地址', + `IS_VISIBLE` varchar(2) NULL DEFAULT '1' COMMENT '是否可见:1可见0不可见', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_channel_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2022-08-04 +ALTER TABLE verified_user ADD COLUMN `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT ''; + +##### 2022-08-05 +ALTER TABLE invoice_tmp ADD COLUMN `REQ_ID` varchar(20) DEFAULT null COMMENT 'REQ_ID'; + +# 2022-08-11 + +ALTER TABLE company ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE company ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE company ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE company ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE company ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-08-11 +ALTER TABLE files_ocr ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files_ocr ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files_ocr ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files_ocr ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files_ocr ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-08-12 +ALTER TABLE invoice ADD COLUMN `EXT_ID` varchar(100) DEFAULT null COMMENT '讲者extId'; +ALTER TABLE invoice ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +ALTER TABLE invoice_tmp ADD COLUMN `EXT_ID` varchar(100) DEFAULT null COMMENT '讲者extId'; +ALTER TABLE invoice_tmp ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_tmp ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_tmp ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_tmp ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_tmp ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-08-15 +ALTER TABLE rule ADD COLUMN `REMARK` varchar(255) DEFAULT null COMMENT ''; + +##### 2022-08-16 +ALTER TABLE corporate_invoice ADD COLUMN `NUMBER_BACKUP` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE corporate_invoice ADD COLUMN `NUMBER_CONFIRM` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE corporate_invoice ADD COLUMN `COMPANY_SEAL` varchar(100) DEFAULT null COMMENT ''; + +CREATE TABLE `t_10_attendee_ext` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `EXT_ID` varchar(20) NULL DEFAULT NULL COMMENT 'extId', + `SPEAKER` varchar(20) NULL DEFAULT NULL COMMENT '讲者', + `SPEAKER_TEL` varchar(20) NULL DEFAULT NULL COMMENT '电话', + `SPEAKER_EMAIL` varchar(50) NULL DEFAULT NULL COMMENT '邮箱', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `t_10_attendee_ext_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2022-08-17 +CREATE TABLE `user_pc` ( + `USER_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户的唯一标识自增id', + `OPENID` varchar(100) NULL DEFAULT NULL COMMENT '用户对应的微信openID', + `USERNAME` varchar(30) NULL DEFAULT NULL COMMENT '用户姓名', + `PWD` varchar(100) NULL DEFAULT NULL COMMENT '用户密码', + `AGE` varchar(10) NULL DEFAULT NULL COMMENT '用户年龄', + `EMAIL` varchar(255) NULL DEFAULT NULL COMMENT '用户邮箱', + `TEL` varchar(255) NULL DEFAULT NULL COMMENT '用户电话', + `IS_DEL` varchar(1) NOT NULL DEFAULT '0' COMMENT '0为未删除,1为已删除,默认为0', + `CREATE_TIME` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_TIME` datetime NULL DEFAULT NULL COMMENT '更新时间', + `LANGUAGE_TYPE` varchar(10) NULL DEFAULT 'en' COMMENT '用户的语言状态(比如cn=中文,en=英语)', + `VERIFICATION_CODE` int(11) NULL DEFAULT NULL COMMENT '验证码', + `VERIFY_TIME` varchar(30) NULL DEFAULT NULL COMMENT '验证时间', + `COMPANY_ID` int(11) NULL DEFAULT NULL COMMENT '所属公司ID', + `CLIENT` int(11) NULL DEFAULT NULL COMMENT '', + `IS_CHECKED` varchar(1) NULL DEFAULT '0' COMMENT '0/未验证 1/已验证', + PRIMARY KEY (`USER_ID`) USING BTREE, + INDEX `openId`(`OPENID`) USING BTREE, + INDEX `email`(`EMAIL`) USING BTREE, + INDEX `tel`(`TEL`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2022-08-16 +ALTER TABLE mileage ADD COLUMN `source` varchar(10) DEFAULT 'GPS' COMMENT '来源'; + +##### 2022-08-22 +ALTER TABLE corp_invoice_receive_header ADD COLUMN `BUYER_CODE` varchar(50) DEFAULT null COMMENT '购方税号' AFTER `BUYER`; +ALTER TABLE corp_invoice_receive_header ADD COLUMN `SELLER_CODE` varchar(50) DEFAULT null COMMENT '销方税号' AFTER `SELLER`; +ALTER TABLE corp_invoice_receive_header ADD COLUMN `INVOICE_REMARK` varchar(500) DEFAULT null COMMENT '发票备注'; + +##### 2022-08-24 +CREATE TABLE `sys_logo` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `SYS_NAME` varchar(50) NULL DEFAULT NULL COMMENT '系统名称', + `PC_LOGO` varchar(255) NULL DEFAULT NULL COMMENT 'PC的logo', + `APP_BASE` varchar(255) NULL DEFAULT NULL COMMENT '小程序底图', + `APP_LOGO` varchar(255) NULL DEFAULT NULL COMMENT '小程序的logo', + `IS_DEL` varchar(1) NOT NULL DEFAULT '0' COMMENT '0为未删除,1为已删除,默认为0', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `sys_logo_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + + +CREATE TABLE `mt_modify_log` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `REQ_ID` varchar(50) NULL DEFAULT NULL COMMENT 'reqId', + `MODULE` varchar(50) NULL DEFAULT NULL COMMENT '模块', + `METHODS` varchar(50) NULL DEFAULT NULL COMMENT '方法', + `REASON` varchar(255) NULL DEFAULT NULL COMMENT '说明', + `IS_SEND` varchar(1) NULL DEFAULT '0' COMMENT '是否已发送:0否1是', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_modify_log_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '活动内容修改日志'; + + +##### 2022-08-26 +ALTER TABLE corp_invoice_receive_header ADD COLUMN `IMG_URL` varchar(255) DEFAULT null COMMENT '附件路径'; +ALTER TABLE corp_invoice_receive_header ADD COLUMN `SEND_STATUS` varchar(2) DEFAULT '1' COMMENT '发送状态'; + +ALTER TABLE mt_checkin ADD COLUMN `LONGITUDE` varchar(50) DEFAULT NULL COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `LATITUDE` varchar(50) DEFAULT NULL COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `MEET_FORMAT` varchar(50) DEFAULT NULL COMMENT ''; + +##### 2022-9-2 +ALTER TABLE mt_checkin ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_checkin ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-9-5 +CREATE TABLE `attend_org` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `PID` int(11) NULL DEFAULT NULL COMMENT '父id', + `ORG_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '组织CODE', + `ORG_NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组织名称', + `IS_DEL` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0', + `EXT01` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `EXT02` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `EXT03` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `EXT04` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `EXT05` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CREATE_BY` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `attend_org_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '组织表' ROW_FORMAT = Dynamic; + +ALTER TABLE mt_list ADD COLUMN `AUTHORIZED_DATE` varchar(50) DEFAULT null COMMENT '审批时间' AFTER `CLIENT`; +ALTER TABLE mt_list ADD COLUMN `SUBMIT_DATE` varchar(50) DEFAULT null COMMENT '提交时间' AFTER `AUTHORIZED_DATE`; +ALTER TABLE mt_list ADD COLUMN `LIST_FLAG` varchar(2) DEFAULT null COMMENT '会议标识:0正常1新增2修改' AFTER `SUBMIT_DATE`; + +##### 2022-9-7 +CREATE TABLE `invoice_lines_log` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `INVOICE_ID` varchar(50) NULL DEFAULT NULL COMMENT 'invoiceId', + `INVOICE_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '发票类型', + `INVOICE_DATE` varchar(50) NULL DEFAULT NULL COMMENT '发票日期', + `INVOICE_CODE` varchar(50) NULL DEFAULT NULL COMMENT '发票代码', + `INVOICE_NUMBER` varchar(50) NULL DEFAULT NULL COMMENT '发票号码', + `TOTAL` varchar(20) NULL DEFAULT NULL COMMENT '', + `VALID_STATUS` varchar(2) NULL DEFAULT '0' COMMENT '有效状态:0有效1无效', + `USER_ID` varchar(20) NULL DEFAULT NULL COMMENT '', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_lines_log_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '发票行日志'; + +ALTER TABLE sys_org ADD COLUMN `TAX_NO` varchar(50) DEFAULT null COMMENT '税号'; +ALTER TABLE sys_org ADD COLUMN `REMARK` varchar(255) DEFAULT null COMMENT '备注'; + +##### 2022-9-16 +ALTER TABLE mt_list ADD COLUMN `UPDATE_DATE` datetime NULL DEFAULT null COMMENT '更新日期'; + +##### 2022-9-17 +ALTER TABLE value_set ADD COLUMN `EXT06` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE value_set ADD COLUMN `EXT07` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE value_set ADD COLUMN `EXT08` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE value_set ADD COLUMN `EXT09` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE value_set ADD COLUMN `EXT010` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-9-19 +ALTER TABLE sys_user ADD COLUMN `PWD_FLAG` varchar(5) DEFAULT '2' COMMENT '1代表强制修改2代码不修改'; +ALTER TABLE LAST_UPDATE_TIME ADD COLUMN `EXT07` varchar(30) COMMENT '最后更新密码时间'; + +##### 2022-9-23 +ALTER TABLE invoice_item_mileage ADD COLUMN `REC_MILEAGE` decimal(10,2) DEFAULT null COMMENT '推荐里程'; +ALTER TABLE invoice_item_mileage ADD COLUMN `REMARK` varchar(255) DEFAULT null COMMENT '备注'; +ALTER TABLE invoice_item_mileage ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_item_mileage ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_item_mileage ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_item_mileage ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_item_mileage ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-9-28 +ALTER TABLE invoice_lines ADD COLUMN `SELLER_CODE` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `BUYER` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `BUYER_CODE` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `ITEM_NAMES` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-9-30 +alter table invoice_image_files_ocr modify INV_DATE varchar(50); + +##### 2022-10-11 +ALTER TABLE invoice ADD COLUMN `TICKET_ID` varchar(20) DEFAULT null COMMENT 'ticketId' AFTER `EXT_ID`; +ALTER TABLE invoice_tmp ADD COLUMN `TICKET_ID` varchar(20) DEFAULT null COMMENT 'ticketId' AFTER `EXT_ID`; + +##### 2022-10-17 +CREATE TABLE `invoice_files_log` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `TABLE_NAME` varchar(50) NULL DEFAULT NULL COMMENT '表名', + `METHODS` varchar(50) NULL DEFAULT NULL COMMENT '操作方法:新增或编辑', + `INVOICE_ID` varchar(100) NULL DEFAULT NULL COMMENT 'invoiceId', + `ENTRY_ID` varchar(100) NULL DEFAULT NULL COMMENT 'entryId', + `IMAGE_PATH` varchar(200) NULL DEFAULT NULL COMMENT '附件地址:多个合并成pdf', + `IMAGE_ID` varchar(100) NULL DEFAULT NULL COMMENT 'imageId', + `STATUS` varchar(2) NULL DEFAULT NULL COMMENT '0 - 新建 1- 已发送 2. 报告已提交 9. 已修改', + `EXECUTE_DATE` datetime NULL DEFAULT NULL COMMENT '执行时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_files_log_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '报销附件日志'; + +ALTER TABLE files ADD COLUMN `STATUS` varchar(1) DEFAULT '0' COMMENT '状态:0草稿1确认'; +ALTER TABLE files ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE files ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-10-21 +ALTER TABLE invoice ADD COLUMN `PAYMENT_TYPE` varchar(100) DEFAULT null COMMENT '支付方式'; +ALTER TABLE invoice_tmp ADD COLUMN `PAYMENT_TYPE` varchar(100) DEFAULT null COMMENT '支付方式'; + +##### 2022-10-26 +alter table mt_attendee modify ATTENDEE_NAME varchar(100); + +##### 2022-11-1 +ALTER TABLE invoice_delete ADD COLUMN `INVOICE_ID` varchar(100) DEFAULT null COMMENT 'INVOICE_ID' AFTER `ID`; +ALTER TABLE invoice_delete ADD COLUMN `EXT01` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_delete ADD COLUMN `EXT02` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_delete ADD COLUMN `EXT03` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_delete ADD COLUMN `EXT04` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE invoice_delete ADD COLUMN `EXT05` varchar(100) DEFAULT null COMMENT ''; + +CREATE TABLE `invoice_log` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `URL` varchar(200) NULL DEFAULT NULL COMMENT '请求的接口地址', + `INVOICE_ID` varchar(100) NULL DEFAULT NULL COMMENT 'invoiceId', + `DATA_JSON` text NULL DEFAULT NULL COMMENT 'entryId', + `STATUS` varchar(2) NULL DEFAULT NULL COMMENT '0 - 新建 1- 已发送 2. 报告已提交 9. 已修改', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_log_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'invoice日志表'; + +##### 2022-11-8 +ALTER TABLE post_box ADD COLUMN `INVOICE_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '发票类型(出租车票,飞机票。。。)'; +ALTER TABLE post_box ADD COLUMN `CONSUME_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '消费类型'; +ALTER TABLE post_box ADD COLUMN `CURRENCY` varchar(30) NULL DEFAULT NULL COMMENT '币种'; +ALTER TABLE post_box ADD COLUMN `TRADE_DATE` varchar(30) NULL DEFAULT NULL COMMENT '交易日期'; +ALTER TABLE post_box ADD COLUMN `CITY` varchar(30) NULL DEFAULT NULL COMMENT '城市'; +ALTER TABLE post_box ADD COLUMN `SUPPLIER` varchar(255) NULL DEFAULT NULL COMMENT '供应商'; +ALTER TABLE post_box ADD COLUMN `INVOICE_CODE` varchar(200) NULL DEFAULT NULL COMMENT '发票代码'; +ALTER TABLE post_box ADD COLUMN `GET_ON_TIME` varchar(30) NULL DEFAULT NULL COMMENT '上车时间(出租车才有)'; +ALTER TABLE post_box ADD COLUMN `DEBUS_TIME` varchar(30) NULL DEFAULT NULL COMMENT '下车时间(出租车才有)'; +ALTER TABLE post_box ADD COLUMN `DESCR` varchar(300) NULL DEFAULT NULL COMMENT '备注说明'; +ALTER TABLE post_box ADD COLUMN `IMG_PATH` varchar(200) NULL DEFAULT NULL COMMENT '扫描时所扫描的图片路径'; +ALTER TABLE post_box ADD COLUMN `CLIENT` int(11) NULL DEFAULT NULL COMMENT '用户所对应的客户ID(每个用户有自己所属的公司,所属的公司有所属的客户,一个客户下面可以有多个公司)'; +ALTER TABLE post_box ADD COLUMN `CHECK_CODE` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `TAX` varchar(20) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `DATA_JSON` text NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `PRE_TAX` varchar(20) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `TAX_RATE` varchar(10) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `NEED_VALID` tinyint(1) NULL DEFAULT 0 COMMENT '0 否 1 是 是否需要验真'; +ALTER TABLE post_box ADD COLUMN `VALID_STATUS` tinyint(1) NULL DEFAULT 0 COMMENT '0 否 1 是 验真状态'; +ALTER TABLE post_box ADD COLUMN `VALID_COUNT` tinyint(4) NULL DEFAULT 0 COMMENT '验真次数'; +ALTER TABLE post_box ADD COLUMN `VALID_DAY_COUNT` tinyint(4) NULL DEFAULT 0 COMMENT '当日验真次数'; +ALTER TABLE post_box ADD COLUMN `LOGIN_ID` varchar(255) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `OTHER_FIELDS` text NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `INVOICE_STATUS` varchar(20) NULL DEFAULT NULL; + +##### 2022-11-18 +ALTER TABLE mt_list ADD COLUMN `EXT11` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT12` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT13` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT14` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT15` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT16` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT17` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT18` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT19` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT20` varchar(100) DEFAULT null COMMENT ''; + +ALTER TABLE mt_speaker ADD COLUMN `EXT06` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT07` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT08` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT09` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE mt_speaker ADD COLUMN `EXT10` varchar(100) DEFAULT null COMMENT ''; + +##### 2022-11-23 +CREATE TABLE `invoice_kind_mapping` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CONTENT` varchar(100) NULL DEFAULT NULL COMMENT '内容', + `KIND` varchar(50) NULL DEFAULT NULL COMMENT '类型', + `LEVEL` varchar(10) NULL DEFAULT NULL COMMENT '等级:值越大越高', + `ACTIVE` varchar(2) NULL DEFAULT '1' COMMENT '1:有效,0:无效', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_kind_mapping_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'invoice类型对照表'; + +##### 2022-12-1 +ALTER TABLE expense_type ADD COLUMN `FILES_TYPE` varchar(100) NULL DEFAULT NULL COMMENT '识别附件类型'; +ALTER TABLE expense_type ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2022-12-2 +ALTER TABLE mt_list ADD UNIQUE (`REQ_ID`); +ALTER TABLE mt_pic ADD INDEX mt_pic_reqID(`REQ_ID`); +ALTER TABLE mt_agreement ADD INDEX mt_agreement_reqID(`REQ_ID`); +ALTER TABLE mt_speaker ADD INDEX mt_speaker_reqID(`REQ_ID`); + +##### 2022-12-13 +ALTER TABLE files_config ADD COLUMN `ORDER` varchar(10) NULL DEFAULT NULL COMMENT '排序'; + +##### 2023-1-11 +CREATE TABLE `supplier_order_header` ( + `BILL_ID` varchar(50) NOT NULL DEFAULT '' COMMENT '唯一主键', + `BILL_NUMBER` varchar(50) NULL DEFAULT NULL COMMENT '单据编号', + `BILL_NAME` varchar(50) NULL DEFAULT NULL COMMENT '单据名称', + `INVOICE_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '发票类型', + `BUSINESS_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '业务类型', + `COMPANY_CODE` varchar(50) NULL DEFAULT NULL COMMENT '所属公司Code', + `COMPANY_NAME` varchar(100) NULL DEFAULT NULL COMMENT '所属公司', + `ORG_CODE` varchar(50) NULL DEFAULT NULL COMMENT '成本中心Code', + `ORG_NAME` varchar(100) NULL DEFAULT NULL COMMENT '成本中心', + `CURRENCY` varchar(20) NULL DEFAULT NULL COMMENT '币种', + `PAY_AMOUNT` decimal(20, 5) NULL DEFAULT NULL COMMENT '付款金额', + `PAY_DATE` varchar(20) NULL DEFAULT NULL COMMENT '约定/计划付款时间', + `APPLY_MAN` varchar(20) NULL DEFAULT NULL COMMENT '申请人', + `GS_NUM` varchar(100) NULL DEFAULT NULL COMMENT 'GS项目批号', + `OA_NUM` varchar(100) NULL DEFAULT NULL COMMENT 'OA通用项目批号', + `SUPPLIER_CODE` varchar(50) NULL DEFAULT NULL COMMENT '供应商Code', + `SUPPLIER_NAME` varchar(100) NULL DEFAULT NULL COMMENT '供应商名称', + `BRANCH_BANK` varchar(100) NULL DEFAULT NULL COMMENT '开户行分行', + `ACCOUNT_INFO` varchar(100) NULL DEFAULT NULL COMMENT '账户信息', + `PAY_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '付款类型', + `NON_PURCHASE` varchar(50) NULL DEFAULT NULL COMMENT '援引源引非经营性采购流程', + `PURCHASE` varchar(50) NULL DEFAULT NULL COMMENT '源引采购下单流程', + `CONTRACT` varchar(50) NULL DEFAULT NULL COMMENT '源引相关合同流程', + `BRAND` varchar(50) NULL DEFAULT NULL COMMENT '主流程品牌市场', + `STAKEHOLDER` varchar(10) NULL DEFAULT NULL COMMENT '抄送干系人', + `APPROVAL_COMMENT` varchar(200) NULL DEFAULT NULL COMMENT '审批意见', + `SUBMIT_DATE` varchar(50) NULL DEFAULT NULL COMMENT '提交日期', + `IS_COLLECT` varchar(2) NULL DEFAULT '0' COMMENT '是否收票:0否,1是', + `IS_MATCH` varchar(2) NULL DEFAULT '0' COMMENT '是否匹配完成:0否,1是', + `STATUS` varchar(10) NULL DEFAULT NULL COMMENT '状态: 0-草稿 2-上级审批 4-财务节点2 6-出纳付款 8-发票匹配 10-财务节点3 12-归档 99-撤销', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `OWNER` varchar(10) NULL DEFAULT NULL COMMENT '所属人', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`BILL_ID`) USING BTREE, + UNIQUE INDEX `supplier_order_header_uindex`(`BILL_ID`) USING BTREE, + INDEX `bill_number`(`BILL_NUMBER`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'supplier_order_header'; + +##### 2023-1-16 +ALTER TABLE sys_user ADD COLUMN `JOB_NO` varchar(30) NULL DEFAULT NULL COMMENT '工号'; +ALTER TABLE supplier ADD COLUMN `BRANCH_BANK` varchar(100) NULL DEFAULT NULL COMMENT '开户行分行'; +ALTER TABLE supplier ADD COLUMN `ACCOUNT_INFO` varchar(100) NULL DEFAULT NULL COMMENT '账户信息'; + +##### 2023-2-15 +CREATE TABLE `payment_type` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CODE` varchar(50) NULL DEFAULT NULL COMMENT '代码', + `NAME` varchar(50) NULL DEFAULT NULL COMMENT '名称', + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `payment_type_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '付款类型信息表'; + +CREATE TABLE `material` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CODE` varchar(50) NULL DEFAULT NULL COMMENT '代码', + `MATERIAL` varchar(50) NULL DEFAULT NULL COMMENT '名称', + `DESCRIPTION` varchar(255) NULL DEFAULT NULL COMMENT '描述', + `TYPE` varchar(50) NULL DEFAULT NULL COMMENT '类型', + `STATUS` varchar(2) NULL DEFAULT NULL COMMENT '状态', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `material_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2023-2-16 +CREATE TABLE `invoice_libarary_line` ( + `ID` varchar(40) NOT NULL COMMENT 'uuid', + `PID` varchar(40) NOT NULL COMMENT 'library表的ID', + `NAME` varchar(100) NULL DEFAULT NULL COMMENT '名称', + `UNIT` varchar(50) NULL DEFAULT NULL COMMENT '单位', + `QUANTITY` varchar(50) NULL DEFAULT NULL COMMENT '数量', + `PRICE` varchar(50) NULL DEFAULT NULL COMMENT '单价', + `TOTAL` varchar(50) NULL DEFAULT NULL COMMENT '金额', + `SPECIFICATION` varchar(50) NULL DEFAULT NULL COMMENT '规格型号', + `TAX_RATE` varchar(30) NULL DEFAULT NULL COMMENT '税率', + `TAX` varchar(50) NULL DEFAULT NULL COMMENT '税额', + `DEDUCTION_AMOUNT` varchar(30) NULL DEFAULT NULL COMMENT '抵扣金额', + `DEDUCTION_TAX_RATE` varchar(30) NULL DEFAULT NULL COMMENT '抵扣税率', + `DEDUCTION_TAX` varchar(30) NULL DEFAULT NULL COMMENT '抵扣税额', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `DIFFERENCE` varchar(100) NULL DEFAULT NULL COMMENT '差异', + `ORIGIN_UNIT` varchar(50) NULL DEFAULT NULL COMMENT '原-单位', + `ORIGIN_QUANTITY` varchar(50) NULL DEFAULT NULL COMMENT '原-数量', + `ORIGIN_PRICE` varchar(50) NULL DEFAULT NULL COMMENT '原-单价', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + INDEX `invoice_libarary_line_PID_index`(`PID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = ''; + +##### 2023-2-20 +CREATE TABLE `invoke_contract` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CLASSIFY` varchar(100) NOT NULL COMMENT '分类', + `PROCESS_NO` varchar(100) NULL DEFAULT NULL COMMENT '流程编号', + `PROCESS_TITLE` varchar(100) NULL DEFAULT NULL COMMENT '流程标题', + `APPLY_MAN` varchar(50) NULL DEFAULT NULL COMMENT '申请人', + `CONTRACT_NAME` varchar(255) NULL DEFAULT NULL COMMENT '合同名称', + `CONTRACT_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '合同类型', + `CONTRACT_TYPE2` varchar(50) NULL DEFAULT NULL COMMENT '合同类型2', + `OUR_SIGN_COMPANY` varchar(100) NULL DEFAULT NULL COMMENT '我方签约公司名称', + `OTHER_SIGN_COMPANY` varchar(100) NULL DEFAULT NULL COMMENT '对方签约公司名称', + `CONTRACT_START_TIME` varchar(20) NULL DEFAULT NULL COMMENT '合同开始时间', + `CONTRACT_END_TIME` varchar(20) NULL DEFAULT NULL COMMENT '合同到期时间', + `SIGN_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '签订类型', + `AFFIX_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '签署类型', + `CURRENCY` varchar(30) NULL DEFAULT NULL COMMENT '币种', + `CONTRACT_TERM` varchar(30) NULL DEFAULT NULL COMMENT '合同期限', + `IS_NON_PURCHASE` varchar(10) NULL DEFAULT NULL COMMENT '是否为非经营性采购', + `OWNER` varchar(255) NULL DEFAULT NULL COMMENT 'owner', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoke_contract_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '援引合同表'; + +##### 2023-2-24 +ALTER TABLE supplier_order_header ADD COLUMN `BILL_NAME_REMARK` varchar(255) NULL DEFAULT NULL COMMENT '标题特殊备注' AFTER `BILL_NAME`; +ALTER TABLE supplier_order_header ADD COLUMN `ALIPAY` varchar(100) NULL DEFAULT NULL COMMENT '店铺支付宝账户' AFTER `STAKEHOLDER`; +ALTER TABLE supplier_order_header ADD COLUMN `ACTIVITY_START_TIME` varchar(20) NULL DEFAULT NULL COMMENT '活动开始时间' AFTER `ALIPAY`; +ALTER TABLE supplier_order_header ADD COLUMN `ACTIVITY_END_TIME` varchar(20) NULL DEFAULT NULL COMMENT '活动结束时间' AFTER `ACTIVITY_START_TIME`; +ALTER TABLE supplier_order_header ADD COLUMN `FREEZE_START_TIME` varchar(20) NULL DEFAULT NULL COMMENT '保证金冻结开始时间' AFTER `ACTIVITY_END_TIME`; +ALTER TABLE supplier_order_header ADD COLUMN `FREEZE_END_TIME` varchar(20) NULL DEFAULT NULL COMMENT '保证金冻结结束时间' AFTER `FREEZE_START_TIME`; +ALTER TABLE supplier_order_header ADD COLUMN `IS_DIGITAL_MARKET` varchar(2) NULL DEFAULT NULL COMMENT '是否为数字营销:0-是 1-否' AFTER `FREEZE_END_TIME`; +ALTER TABLE supplier_order_header ADD COLUMN `IS_INNER_PAY` varchar(2) NULL DEFAULT NULL COMMENT '是否为内部员工工资付款:0-是 1-否' AFTER `IS_DIGITAL_MARKET`; +ALTER TABLE supplier_order_header ADD COLUMN `IS_ABROAD_PAY` varchar(2) NULL DEFAULT NULL COMMENT '是否为境内(不包括港澳台地区)公司对境外公司(包括港澳台地区)的付款:0-是 1-否' AFTER `IS_INNER_PAY`; + +ALTER TABLE supplier_order ADD COLUMN `IS_SERVICE_FEE` varchar(2) NULL DEFAULT NULL COMMENT '是否为劳务费:0-是 1-否'; +ALTER TABLE supplier_order ADD COLUMN `CODE_ID` varchar(10) NULL DEFAULT NULL COMMENT 'CODE id'; +ALTER TABLE supplier_order ADD COLUMN `CODE_NAME` varchar(50) NULL DEFAULT NULL COMMENT 'CODE name'; +ALTER TABLE supplier_order ADD COLUMN `GS_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT 'GS项目批号(原项目批号A,限TIC/EIC)'; +ALTER TABLE supplier_order ADD COLUMN `OA_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT 'OA通用项目批号(原项目批号B)'; +ALTER TABLE supplier_order ADD COLUMN `COLLECT_AMOUNT` decimal(20,5) NULL DEFAULT NULL COMMENT '向品牌收取的金额(没有填0)'; + +##### 2023-2-27 +CREATE TABLE `invoke_purchase` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `PURCHASE_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '采购下单流程编号', + `PURCHASE` varchar(200) NULL DEFAULT NULL COMMENT '源引采购下单流程', + `NON_PURCHASE_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '非经营性采购流程编号', + `NON_PURCHASE` varchar(200) NULL DEFAULT NULL COMMENT '源引非经营性采购流程', + `CONTRACT_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '相关合同流程编号', + `CONTRACT` varchar(200) NULL DEFAULT NULL COMMENT '源引相关合同流程', + `ORG_CODE` varchar(50) NULL DEFAULT NULL COMMENT '成本中心Code', + `ORG_NAME` varchar(100) NULL DEFAULT NULL COMMENT '成本中心', + `GS_NUM` varchar(100) NULL DEFAULT NULL COMMENT 'GS项目批号(原项目批号A,限TIC/EIC)', + `OA_NUM` varchar(100) NULL DEFAULT NULL COMMENT 'OA通用项目批号(原项目批号B)', + `OTHER_SIGN_COMPANY` varchar(100) NULL DEFAULT NULL COMMENT '合同流程中对方签约公司名称', + `CONTRACT_START_TIME` varchar(20) NULL DEFAULT NULL COMMENT '合同开始日期', + `CONTRACT_END_TIME` varchar(20) NULL DEFAULT NULL COMMENT '合同结束日期', + `AMOUNT` decimal(20,5) NULL DEFAULT NULL COMMENT '金额', + `FINANCE_TERMS` varchar(255) NULL DEFAULT NULL COMMENT '合同中财务结算条款', + `CHECK_PROCESS` varchar(255) NULL DEFAULT NULL COMMENT '源引收货/验收流程-多流程', + `IS_CHANGE` varchar(2) NULL DEFAULT NULL COMMENT '是否修改明细行成本中心:0-是 1-否', + `HIGH_APPROVER` varchar(20) NULL DEFAULT NULL COMMENT '采购部上级审批人(实习生专用)', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoke_purchase_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '援引采购表'; + +##### 2023-3-1 +CREATE TABLE `sys_emp` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `USER_ID` varchar(20) NOT NULL COMMENT '用户id', + `WORK_CODE` varchar(30) NULL DEFAULT NULL COMMENT '编号-工号', + `LAST_NAME` varchar(50) NULL DEFAULT NULL COMMENT '姓名', + `JOB_LEVEL` varchar(50) NULL DEFAULT NULL COMMENT '职级', + `SUB_COMPANY_ID` varchar(50) NULL DEFAULT NULL COMMENT '分部ID', + `SUB_COMPANY` varchar(100) NULL DEFAULT NULL COMMENT '分部', + `DEPARTMAENT_ID` varchar(50) NULL DEFAULT NULL COMMENT '部门ID', + `DEPARTMAENT` varchar(100) NULL DEFAULT NULL COMMENT '部门', + `SUB_DEPARTMAENT_ID` varchar(50) NULL DEFAULT NULL COMMENT '所属行业ID', + `SUB_DEPARTMAENT` varchar(100) NULL DEFAULT NULL COMMENT '所属行业', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `sys_emp_uindex`(`ID`) USING BTREE, + UNIQUE `sys_emp_WORK_CODE`(`WORK_CODE`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'OA人员信息表'; + +##### 2023-3-6 +ALTER TABLE mt_speaker ADD INDEX mt_speaker_ext06(`EXT06`); +ALTER TABLE t_10_attendee ADD INDEX t_10_attendee_extId(`external_id`); + +##### 2023-3-9 +ALTER TABLE t_10_report_main_extension ADD COLUMN `PROCESSOR` varchar(100) NULL DEFAULT NULL COMMENT '处理人'; +ALTER TABLE t_10_report_main_extension ADD COLUMN `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT ''; +ALTER TABLE t_10_report_main_extension ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE t_10_report_main_extension ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE t_10_report_main_extension ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE t_10_report_main_extension ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE t_10_report_main_extension ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2023-3-22 +CREATE TABLE `mt_spk_rate` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `SPK_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '讲者类型', + `TIME_FROM` varchar(20) NOT NULL COMMENT '开始时长', + `TIME_TO` varchar(20) NOT NULL DEFAULT 0 COMMENT '结束时长', + `AMOUNT` varchar(20) NOT NULL DEFAULT 0 COMMENT '费用', + `RATE` varchar(20) NOT NULL DEFAULT 0 COMMENT '费率', + `TYPE` varchar(20) NULL DEFAULT NULL COMMENT '类型:AMOUTN、RATE', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_spk_rate_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '讲者费用时长对照表'; + + +##### 2023-3-22 +ALTER TABLE corporate_invoice ADD COLUMN `DEDUCTION_AMOUNT` varchar(50) NULL DEFAULT NULL COMMENT '抵扣金额'; +ALTER TABLE corporate_invoice ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2023-3-23 +ALTER TABLE invoke_purchase ADD COLUMN `APPLY_MAN` varchar(50) NULL DEFAULT NULL COMMENT '申请人'; +ALTER TABLE invoke_purchase ADD COLUMN `ABUTMENT_NO` varchar(50) NULL DEFAULT NULL COMMENT '对接单号'; +ALTER TABLE invoke_purchase ADD COLUMN `COMPANY_CODE` varchar(50) NULL DEFAULT NULL COMMENT '所属公司Code'; +ALTER TABLE invoke_purchase ADD COLUMN `COMPANY_NAME` varchar(100) NULL DEFAULT NULL COMMENT '所属公司'; +ALTER TABLE invoke_purchase ADD COLUMN `CURRENCY` varchar(20) NULL DEFAULT NULL COMMENT '币种'; +ALTER TABLE invoke_purchase ADD COLUMN `SUPPLIER_CODE` varchar(50) NULL DEFAULT NULL COMMENT '供应商Code'; +ALTER TABLE invoke_purchase ADD COLUMN `SUPPLIER_NAME` varchar(100) NULL DEFAULT NULL COMMENT '供应商'; +ALTER TABLE invoke_purchase ADD COLUMN `BRANCH_BANK` varchar(100) NULL DEFAULT NULL COMMENT '开户行分行'; +ALTER TABLE invoke_purchase ADD COLUMN `ACCOUNT_INFO` varchar(100) NULL DEFAULT NULL COMMENT '账户信息'; +ALTER TABLE invoke_purchase ADD COLUMN `STAKEHOLDER` varchar(100) NULL DEFAULT NULL COMMENT '抄送干系人ID'; +ALTER TABLE invoke_purchase ADD COLUMN `STAKEHOLDER_NAME` varchar(100) NULL DEFAULT NULL COMMENT '抄送干系人'; +ALTER TABLE invoke_purchase ADD COLUMN `IS_ADVANCE_PAY` varchar(10) NULL DEFAULT '1' COMMENT '是否预付款0是, 1否'; +ALTER TABLE invoke_purchase ADD COLUMN `IS_OTHER_SOURCE` varchar(10) NULL DEFAULT '1' COMMENT '是否外部来源0是, 1否'; +ALTER TABLE invoke_purchase ADD COLUMN `OA_CREATE_TIME` varchar(20) NULL DEFAULT DEFAULT COMMENT 'OA创建时间'; + +##### 2023-3-30 +CREATE TABLE `invoke_receive` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `RECEIVE_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '收货流程编号', + `RECEIVE_TITLE` varchar(200) NULL COMMENT '收货流程标题', + `OA_CREATE_BY` varchar(20) NULL DEFAULT NULL COMMENT 'OA创建人', + `OA_CREATE_TIME` varchar(20) NULL DEFAULT NULL COMMENT 'OA创建时间', + `ABUTMENT_NO` varchar(50) NULL DEFAULT NULL COMMENT '对接单号', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT 'requestId', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoke_receive_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '援引收货验收'; + +##### 2023-4-4 +ALTER TABLE supplier_order_header ADD COLUMN `RECEIVED` varchar(50) NULL DEFAULT NULL COMMENT '援引收货流程'; +ALTER TABLE supplier_order_header ADD COLUMN `HAV_CONTRACT` varchar(2) NULL DEFAULT NULL COMMENT '是否有相关合同流程:0-是 1-否'; +ALTER TABLE supplier_order_header ADD COLUMN `HAV_INVOICE` varchar(2) NULL DEFAULT NULL COMMENT '是否有发票照片:0-是 1-否'; +ALTER TABLE supplier_order_header ADD COLUMN `KOL_NAME` varchar(20) NULL DEFAULT NULL COMMENT 'Kol名字'; +ALTER TABLE supplier_order_header ADD COLUMN `KOL_FULL_NAME` varchar(20) NULL DEFAULT NULL COMMENT '姓名'; +ALTER TABLE supplier_order_header ADD COLUMN `UID` varchar(50) NULL DEFAULT NULL COMMENT '身份证号码'; +ALTER TABLE supplier_order_header ADD COLUMN `SUPPLIER_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '供应商类型:0-企业 1-个人'; +ALTER TABLE supplier_order_header ADD COLUMN `IS_WHITE_LIST` varchar(2) NULL DEFAULT NULL COMMENT '是否白名单:0-是 1-否'; +ALTER TABLE supplier_order_header ADD COLUMN `WHITE_COMPANY` varchar(255) NULL DEFAULT NULL COMMENT '白名单公司'; +ALTER TABLE supplier_order_header ADD COLUMN `OTHER_COMPANY` varchar(255) NULL DEFAULT NULL COMMENT '其他公司'; + +ALTER TABLE supplier_order ADD COLUMN `PLAT_FORM` varchar(50) NULL DEFAULT NULL COMMENT '平台类型'; +ALTER TABLE supplier_order ADD COLUMN `CHARGE_CHANNEL` varchar(50) NULL DEFAULT NULL COMMENT '充值渠道'; +ALTER TABLE supplier_order ADD COLUMN `CHANNEL_REMARK` varchar(255) NULL DEFAULT NULL COMMENT '渠道备注'; +ALTER TABLE supplier_order ADD COLUMN `EXT06` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_order ADD COLUMN `EXT07` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_order ADD COLUMN `EXT08` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_order ADD COLUMN `EXT09` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_order ADD COLUMN `EXT10` varchar(255) NULL DEFAULT NULL; + +CREATE TABLE `invoke_brand` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `FLOW_ID` varchar(50) NULL DEFAULT NULL COMMENT 'flowId', + `MAIN_PROCESS_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '主流程编号-流水号', + `MAIN_PROCESS` varchar(200) NULL DEFAULT NULL COMMENT '主流程(品牌/市场)-标题', + `COMPANY_CODE` varchar(50) NULL DEFAULT NULL COMMENT '所属公司Code', + `COMPANY_NAME` varchar(100) NULL DEFAULT NULL COMMENT '所属公司', + `ORG_CODE` varchar(50) NULL DEFAULT NULL COMMENT '成本中心Code', + `ORG_NAME` varchar(100) NULL DEFAULT NULL COMMENT '成本中心', + `IS_DIGITAL_MARKET` varchar(2) NULL DEFAULT NULL COMMENT '是否为数字营销:0-是 1-否', + `CURRENCY` varchar(20) NULL DEFAULT NULL COMMENT '币种', + `SUPPLIER_CODE` varchar(10) NULL DEFAULT NULL COMMENT '供应商Code', + `SUPPLIER_NAME` varchar(200) NULL DEFAULT NULL COMMENT '供应商名称', + `PAY_TYPE` varchar(50) NULL DEFAULT NULL COMMENT '付款类型', + `APPLY_MAN` varchar(50) NULL DEFAULT NULL COMMENT '申请人', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT 'requestId', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoke_brand_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '援引品牌表'; + +##### 2023-4-6 +CREATE TABLE `sys_oa_dept` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CODE` varchar(200 NULL DEFAULT NULL COMMENT '', + `DEPARTMAENT_ID` varchar(20) NULL DEFAULT NULL COMMENT '类型', + `SUB_COMPANY_ID` varchar(20) NULL DEFAULT NULL COMMENT '用户ID', + `SUB_DEPARTMAENT_ID` varchar(20) NULL DEFAULT '0' COMMENT 'REQ_ID', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `sys_oa_dept_ID_uindex`(`ID`) USING BTREE, + INDEX `sys_oa_dept_DEPARTMAENT_ID_uindex`(`DEPARTMAENT_ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'OA部门表'; + + +##### 2023-4-18 +ALTER TABLE files_config ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE files_config ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE files_config ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE files_config ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE files_config ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2023-4-19 +ALTER TABLE expense_reports ADD COLUMN `INVOICE_ID` varchar(100) NULL DEFAULT NULL COMMENT 'reportTempID'; +ALTER TABLE expense_reports ADD COLUMN `REQ_ID` varchar(50) NULL DEFAULT NULL COMMENT '活动编号'; +ALTER TABLE expense_reports ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_reports ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_reports ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_reports ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_reports ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +ALTER TABLE expense_use ADD COLUMN `MESG` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `MESG_EN` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_use ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + + +##### 2023-5-4 +CREATE TABLE `invoke_internal` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `FLOW_ID` varchar(50) NULL DEFAULT NULL COMMENT 'flowId', + `PROCESS_NUMBER` varchar(100) NULL DEFAULT NULL COMMENT '流程编码', + `PROCESS_TITLE` varchar(200) NULL DEFAULT NULL COMMENT '流程标题', + `COLLECT_ORG_CODE` varchar(50) NULL DEFAULT NULL COMMENT '收款方成本中心Code', + `COLLECT_ORG_NAME` varchar(100) NULL DEFAULT NULL COMMENT '收款方成本中心', + `APPLY_MAN` varchar(50) NULL DEFAULT NULL COMMENT '申请人', + `OA_CREATE_TIME` varchar(20) NULL DEFAULT NULL COMMENT 'OA创建时间', + `PAY_COMPANY_CODE` varchar(50) NULL DEFAULT NULL COMMENT '付款方所属公司Code', + `PAY_COMPANY_NAME` varchar(100) NULL DEFAULT NULL COMMENT '付款方所属公司', + `COLLECT_COMPANY_CODE` varchar(50) NULL DEFAULT NULL COMMENT '收款方所属公司Code', + `COLLECT_COMPANY_NAME` varchar(100) NULL DEFAULT NULL COMMENT '收款方所属公司', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT 'requestId', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoke_internal_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '援引内结流程表'; + +ALTER TABLE invoke_contract ADD COLUMN `OUR_SIGN_COMPANY_NAME` VARCHAR(100) DEFAULT NULL AFTER `OUR_SIGN_COMPANY`; +ALTER TABLE invoke_contract ADD COLUMN `OTHER_SIGN_COMPANY_NAME` VARCHAR(100) DEFAULT NULL AFTER `OTHER_SIGN_COMPANY`; +ALTER TABLE supplier_order_header ADD COLUMN `INTERNAL` varchar(50) NULL DEFAULT NULL COMMENT '援引内结流程' AFTER `RECEIVED`; +ALTER TABLE invoke_internal ADD COLUMN `OWNER` varchar(100) NULL DEFAULT NULL COMMENT 'owner' AFTER `COLLECT_COMPANY_NAME`; + +##### 2023-5-12 +ALTER TABLE supplier_order_item_matching ADD COLUMN `CREATE_BY` varchar(100) NULL DEFAULT NULL COMMENT '操作人'; +ALTER TABLE supplier_order_item_matching ADD COLUMN `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '操作时间'; +ALTER TABLE supplier_order_item_matching ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier_order_item_matching ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier_order_item_matching ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier_order_item_matching ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier_order_item_matching ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2023-5-31 +ALTER TABLE supplier ADD COLUMN `IS_DIGITAL` varchar(2) NULL DEFAULT NULL COMMENT '是否为数字营销:0-否 1-是'; +ALTER TABLE supplier ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE supplier ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + +##### 2023-6-7 +ALTER TABLE mt_checkin ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_checkin ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_checkin ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_checkin ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_checkin ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL; + +##### 2023-6-9 +CREATE TABLE `mt_type` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `VALUE` varchar(200) NULL DEFAULT NULL COMMENT '', + `PID` bigint(20) NULL DEFAULT NULL COMMENT '', + `LANGUAGE` varchar(200) NULL DEFAULT NULL COMMENT '', + `IS_DEL` tinyint(1) NULL DEFAULT 0 COMMENT '', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_type_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会议类型配置表'; + +##### 2023-6-14 +CREATE TABLE `supplier_owner_transfer` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `LAST_ID` bigint(20) NULL DEFAULT NULL COMMENT '上一次转办ID', + `BILL_ID` varchar(50) NULL DEFAULT NULL COMMENT '单据ID', + `OWNER` varchar(100) NULL DEFAULT NULL COMMENT '所有者', + `CREATOR` varchar(10) NULL DEFAULT NULL COMMENT '原始创建者', + `CURRENT` varchar(100) NULL DEFAULT NULL COMMENT '原有审批人from', + `TARGET` varchar(100) NULL DEFAULT NULL COMMENT '目标审批人to', + `STATUS` varchar(2) NULL DEFAULT '1' COMMENT '状态:0-无效 1-有效 2-撤销', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `supplier_owner_transfer_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '申请单转办记录表'; + +##### 2023-6-19 +ALTER TABLE corporate_invoice ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL; +ALTER TABLE corporate_invoice ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL; + +CREATE TABLE `invoice_package` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `PACKAGE_DATE` varchar(20) NULL DEFAULT NULL COMMENT '快递日期', + `PACKAGE_NUMBER` varchar(50) NULL DEFAULT NULL COMMENT '快递编号', + `AMOUNT` varchar(10) NULL DEFAULT NULL COMMENT '发票数量', + `RECEIVER` varchar(10) NULL DEFAULT NULL COMMENT '接收人', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_package_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '发票快递'; + +CREATE TABLE `invoice_package_label` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `PACKAGE_NUMBER` varchar(50) NULL DEFAULT NULL COMMENT '快递编号', + `LABEL_NUMBER` varchar(10) NULL DEFAULT NULL COMMENT '标签号', + `IS_PRINT` varchar(2) NULL DEFAULT '0' COMMENT '是否打印:0否1是', + `PRINT_DATE` varchar(20) NULL DEFAULT NULL COMMENT '打印日期', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_package_label_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '发票快递标签'; + +##### 2023-6-30 +CREATE TABLE `sys_user_approve` ( + `USER_ID` int(11) NOT NULL, + `AUTHORIZED_ORG` varchar(2000) NULL DEFAULT NULL COMMENT '授权组织id集合', + `COR_INV_TYPE` varchar(100) NULL DEFAULT NULL COMMENT '授权的发票类型ID', + `DATA_AUTH_TYPE` tinyint(1) NULL DEFAULT 0 COMMENT '数据权限 0 All,1 by org,2 by owner', + PRIMARY KEY (`USER_ID`) USING BTREE, + UNIQUE INDEX `sys_user_approve_USER_ID_uindex`(`USER_ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '人员组织授权表'; + +##### 2023-7-3 +CREATE TABLE `invoice_sys_image` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `VIEW_PATH` varchar(255) NULL DEFAULT NULL COMMENT '图片view地址', + `FILE_PATH` varchar(255) NULL DEFAULT NULL COMMENT '图片file地址', + `USER_ID` int(11) NOT NULL, + `REMARK` varchar(255) NULL DEFAULT NULL COMMENT '备注', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UPDATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '更新人', + `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '更新时间', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_sys_image_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统图库'; + +##### 2023-8-15 +CREATE TABLE `rule_type` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `CODE` varchar(20) NULL DEFAULT NULL COMMENT 'code', + `NAME` varchar(50) NULL DEFAULT NULL COMMENT 'name', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `rule_type_ID_uindex`(`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '规则类型'; + +##### 2023-8-22 +CREATE VIEW view_t_mdm_dept AS SELECT * FROM ics.t_mdm_dept; + +##### 2023-8-24 +ALTER TABLE mt_pic ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_pic ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_pic ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_pic ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_pic ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL; +ALTER TABLE mt_pic ADD COLUMN `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人'; +ALTER TABLE mt_pic ADD COLUMN `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间'; + +ALTER TABLE mt_checkin ADD COLUMN `CREATE_BY` varchar(10) NULL DEFAULT NULL COMMENT '创建人'; +ALTER TABLE mt_checkin ADD COLUMN `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间'; + +##### 2023-9-6 +ALTER TABLE expense_type_sub ADD COLUMN `NAME_EN` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type_sub ADD COLUMN `EXT01` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type_sub ADD COLUMN `EXT02` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type_sub ADD COLUMN `EXT03` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type_sub ADD COLUMN `EXT04` varchar(100) NULL DEFAULT NULL; +ALTER TABLE expense_type_sub ADD COLUMN `EXT05` varchar(100) NULL DEFAULT NULL; + + +##### 2023-9-20 +ALTER TABLE invoice_library ADD COLUMN `EXT01` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_library ADD COLUMN `EXT02` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_library ADD COLUMN `EXT03` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_library ADD COLUMN `EXT04` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_library ADD COLUMN `EXT05` varchar(255) NULL DEFAULT NULL; + +##### 2023-11-6 +CREATE TABLE `invoice_img` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `ORIGINAL_ID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '源主键', + `SOURCE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源', + `CODE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发票代码', + `NUMBER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发票号码', + `DATE` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开票日期', + `PRETAX_AMOUNT` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `TOTAL` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `TAX` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CHECK_CODE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `SELLER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `SELLER_TAX_ID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `KIND` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '消费类型', + `BUYER_TAX_ID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `BUYER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `ITEM_NAMES` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `PO` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CREATE_DATE` datetime(0) NULL DEFAULT NULL, + `OPERATOR` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '操作人', + `REPORT_ID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `REPORT_OWNER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `REPORT_MONEY` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `STATUS` tinyint(1) NULL DEFAULT 0, + `IMG_URI` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `ORIGINAL_URI` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CURRENCY` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT 'CNY', + `INVOICE_TYPE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `PASSENGER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '乘坐人', + `SEAT_TYPE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '座位等级', + `START_STATION` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '起始站', + `END_STATION` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '终点站', + `DEDUCT_STATUS` tinyint(1) NULL DEFAULT NULL COMMENT '抵扣状态0/1/2/3\n未抵扣/发送抵扣/确认抵扣/抵扣失败', + `TAX_RATE` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `VALID_STATUS` tinyint(1) NULL DEFAULT NULL COMMENT '验真状态 0 未验真 1 已验真', + `EXPENSE_TYPE_ID` int(11) NULL DEFAULT NULL COMMENT '费用类型ID', + `ENTRY_ID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `REIMBURSEMENT_AMOUNT` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `POSTED_AMOUNT` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `DATA_JSON` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'json数据', + `ORG_NAME` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '组织名称', + PRIMARY KEY (`ID`) USING BTREE, + INDEX `num__index`(`NUMBER`) USING BTREE, + INDEX `invoice_img_REPORT_ID_index`(`REPORT_ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '影像查询主表-非App' ROW_FORMAT = Dynamic; + +##### 2023-12-21 +ALTER TABLE invoice_lines ADD COLUMN `DATA_JSON` text DEFAULT null COMMENT'json数据'; + +##### 2023-12-29 +ALTER TABLE t_10_report_main ADD COLUMN `custom11` varchar(100) DEFAULT null COMMENT '' AFTER `custom10`; +ALTER TABLE t_10_report_main ADD COLUMN `custom12` varchar(100) DEFAULT null COMMENT '' AFTER `custom11`; +ALTER TABLE t_10_report_main ADD COLUMN `custom13` varchar(100) DEFAULT null COMMENT '' AFTER `custom12`; +ALTER TABLE t_10_report_main ADD COLUMN `custom14` varchar(100) DEFAULT null COMMENT '' AFTER `custom13`; +ALTER TABLE t_10_report_main ADD COLUMN `custom15` varchar(100) DEFAULT null COMMENT '' AFTER `custom14`; +ALTER TABLE t_10_report_main ADD COLUMN `custom16` varchar(100) DEFAULT null COMMENT '' AFTER `custom15`; +ALTER TABLE t_10_report_main ADD COLUMN `custom17` varchar(100) DEFAULT null COMMENT '' AFTER `custom16`; +ALTER TABLE t_10_report_main ADD COLUMN `custom18` varchar(100) DEFAULT null COMMENT '' AFTER `custom17`; +ALTER TABLE t_10_report_main ADD COLUMN `custom19` varchar(100) DEFAULT null COMMENT '' AFTER `custom18`; +ALTER TABLE t_10_report_main ADD COLUMN `custom20` varchar(100) DEFAULT null COMMENT '' AFTER `custom19`; + +##### 2023-12-29 +ALTER TABLE supplier_po ADD COLUMN `ID` int(11) NOT NULL; +ALTER TABLE supplier_po ADD COLUMN `company_code` varchar(100) DEFAULT null COMMENT '采购公司Code' AFTER `contract_no`; +ALTER TABLE supplier_po ADD COLUMN `supplier_name` varchar(100) DEFAULT null COMMENT '供应商名称' AFTER `supplier_code`; +ALTER TABLE supplier_po ADD COLUMN `net_amount` varchar(50) DEFAULT null COMMENT '金额' AFTER `supplier_name`; +ALTER TABLE supplier_po ADD COLUMN `currency` varchar(20) DEFAULT null COMMENT '币种' AFTER `net_amount`; +ALTER TABLE supplier_po ADD COLUMN `cost_center` varchar(100) DEFAULT null COMMENT '成本中心' AFTER `currency`; +ALTER TABLE supplier_po ADD COLUMN `requesters_name` varchar(50) DEFAULT null COMMENT '下单人' AFTER `cost_center`; + +ALTER TABLE supplier_po_line ADD COLUMN `ID` int(11) NOT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `material_desc` varchar(100) DEFAULT null COMMENT '物料描述' AFTER `material_no`; +ALTER TABLE supplier_po_line ADD COLUMN `discount` varchar(50) DEFAULT null COMMENT '折扣' AFTER `tax`; +ALTER TABLE supplier_po_line ADD COLUMN `EXT01` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `EXT02` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `EXT03` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `EXT04` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `EXT05` varchar(255) NULL DEFAULT NULL; +ALTER TABLE supplier_po_line ADD COLUMN `CREATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人'; +ALTER TABLE supplier_po_line ADD COLUMN `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间'; +ALTER TABLE supplier_po_line ADD COLUMN `UPDATE_BY` varchar(50) NULL DEFAULT NULL COMMENT '创建人'; +ALTER TABLE supplier_po_line ADD COLUMN `UPDATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间'; +ALTER TABLE supplier_po_line ADD COLUMN `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT ''; + +ALTER TABLE supplier_po_line CHANGE price unit_price VARCHAR(20) DEFAULT null COMMENT '单价'; +ALTER TABLE supplier_po_line CHANGE amount net_line_amount VARCHAR(20) DEFAULT null COMMENT 'po行总额'; + + +##### 2024-1-17 +ALTER TABLE invoice_items ADD COLUMN `REPORTS_ID` varchar(50) DEFAULT null COMMENT 'REPORTS_ID'; +ALTER TABLE invoice_items ADD COLUMN `EXT01` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_items ADD COLUMN `EXT02` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_items ADD COLUMN `EXT03` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_items ADD COLUMN `EXT04` varchar(255) NULL DEFAULT NULL; +ALTER TABLE invoice_items ADD COLUMN `EXT05` varchar(255) NULL DEFAULT NULL; + +##### 2024-2-18 +ALTER TABLE rule ADD COLUMN `SORT` varchar(20) DEFAULT null COMMENT '排序'; +ALTER TABLE rule ADD COLUMN `EXT01` varchar(255) NULL DEFAULT NULL; +ALTER TABLE rule ADD COLUMN `EXT02` varchar(255) NULL DEFAULT NULL; +ALTER TABLE rule ADD COLUMN `EXT03` varchar(255) NULL DEFAULT NULL; +ALTER TABLE rule ADD COLUMN `EXT04` varchar(255) NULL DEFAULT NULL; +ALTER TABLE rule ADD COLUMN `EXT05` varchar(255) NULL DEFAULT NULL; + +##### 2024-2-23 +ALTER TABLE mt_list ADD COLUMN `EXT21` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT22` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT23` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT24` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT25` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT26` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT27` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT28` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT29` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE mt_list ADD COLUMN `EXT30` varchar(255) DEFAULT null COMMENT ''; + +##### 2024-2-23 +ALTER TABLE post_box ADD COLUMN `RECEIPT_ID` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `IS_SEND` varchar(2) NULL DEFAULT '0' COMMENT '是否发送concur:0否1是'; +ALTER TABLE post_box ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL; +ALTER TABLE post_box ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL; + +CREATE TABLE `invoice_credit_excel` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `Bayer_Group` varchar(100) NULL DEFAULT NULL COMMENT '', + `Company_Code` varchar(100) NULL DEFAULT NULL COMMENT '', + `Employee` varchar(100) NULL DEFAULT NULL COMMENT '', + `Employee_ID` varchar(100) NULL DEFAULT NULL COMMENT '', + `Name_onCard` varchar(100) NULL DEFAULT NULL COMMENT '', + `Last_FourAccount` varchar(100) NULL DEFAULT NULL COMMENT '', + `Company_Code2` varchar(100) NULL DEFAULT NULL COMMENT '', + `Payment_Type` varchar(100) NULL DEFAULT NULL COMMENT '', + `Card_Type` varchar(100) NULL DEFAULT NULL COMMENT '', + `Transaction_Status` varchar(100) NULL DEFAULT NULL COMMENT '', + `Transaction_Status_Value` varchar(100) NULL DEFAULT NULL COMMENT '', + `Transaction_Type` varchar(100) NULL DEFAULT NULL COMMENT '', + `Merchant` varchar(100) NULL DEFAULT NULL COMMENT '', + `Merchant_Code` varchar(100) NULL DEFAULT NULL COMMENT '', + `Default_Expense_Type` varchar(100) NULL DEFAULT NULL COMMENT '', + `Posted_Date` varchar(100) NULL DEFAULT NULL COMMENT '', + `Transaction_Date` varchar(100) NULL DEFAULT NULL COMMENT '', + `Download_Date` varchar(100) NULL DEFAULT NULL COMMENT '', + `Billing_Date` varchar(100) NULL DEFAULT NULL COMMENT '', + `Posted_Amount` varchar(100) NULL DEFAULT NULL COMMENT '', + `Currency` varchar(100) NULL DEFAULT NULL COMMENT '', + `Reference_Number` varchar(100) NULL DEFAULT NULL COMMENT '', + `Company_Code3` varchar(100) NULL DEFAULT NULL COMMENT '', + `TRAN_DATE` varchar(20) NULL DEFAULT NULL COMMENT 'Transaction_Date转换后的日期', + `VERIFIED_DATA` text NULL DEFAULT NULL COMMENT '', + `IS_DEL` varchar(2) NULL DEFAULT '0' COMMENT '', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `UUID` varchar(100) NULL DEFAULT NULL COMMENT '记录本次的uuid', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `invoice_credit_excel_ID_uindex`(`ID`) USING BTREE, + INDEX `UUID_index`(`UUID`) USING BTREE, + INDEX `Reference_Number_index`(`Reference_Number`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '信用卡excel数据'; + +ALTER TABLE efiles ADD COLUMN `EXT06` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT07` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT08` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT09` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `EXT10` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `Reference_Number` varchar(100) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `Company_Code` varchar(20) DEFAULT null COMMENT ''; +ALTER TABLE efiles ADD COLUMN `CREATE_DATE` varchar(20) DEFAULT null COMMENT ''; + +##### 2024-5-28 +ALTER TABLE invoice_lines ADD COLUMN `VALID_COUNT` int(4) DEFAULT 0 COMMENT '验真次数' AFTER `VALID_STATUS`; +ALTER TABLE invoice_lines ADD COLUMN `VALID_DAY_COUNT` int(4) DEFAULT 0 COMMENT '当日验真次数' AFTER `VALID_COUNT`; +ALTER TABLE invoice_lines ADD COLUMN `CREATE_DATE` datetime DEFAULT null COMMENT '创建时间' AFTER `VALID_DAY_COUNT`; +ALTER TABLE invoice_lines ADD COLUMN `EXT06` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT07` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT08` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT09` varchar(255) DEFAULT null COMMENT ''; +ALTER TABLE invoice_lines ADD COLUMN `EXT10` varchar(255) DEFAULT null COMMENT ''; + +ALTER TABLE t_10_report_main_extension ADD COLUMN `CREATE_DATE` datetime DEFAULT null COMMENT '创建时间'; + + +##### 2024-07-01 +CREATE TABLE `signin_meet` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `SIGNIN_ID` int(11) NULL DEFAULT NULL COMMENT 'SIGNIN表ID', + `REQ_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ReqId', + `MEET_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '会议唯一ID', + `MEET_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '会议号码', + `SUBJECT` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '主题', + `STATR_TIME` datetime NULL DEFAULT NULL COMMENT '预定会议开始时间', + `END_TIME` datetime NULL DEFAULT NULL COMMENT '预定会议结束时间', + `TOTAL_COUNT` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '当前参会总人次', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '腾讯会议信息表'; + +CREATE TABLE `signin_meet_attend` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `PID` int(11) NOT NULL COMMENT 'signin_meet表ID', + `USER_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参会者用户ID', + `MS_OPEN_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '当场会议的用户临时ID', + `UUID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户的身份 ID', + `OPEN_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '已授权用户的 ID', + `USER_NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '入会用户名', + `IS_IN_USER` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否是企业内部成员', + `PHONE` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参会者手机号', + `JOIN_TIME` datetime NULL DEFAULT NULL COMMENT '参会者加入会议时间', + `LEFT_TIME` datetime NULL DEFAULT NULL COMMENT '参会者加入离开时间', + `INSTANCE_ID` int(2) NULL DEFAULT NULL COMMENT '用户的终端设备类型', + `USER_ROLE` int(2) NULL DEFAULT NULL COMMENT '用户角色', + `IP` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户IP', + `LOCATION` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户地理位置', + `LINK_TYPE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户连接方式', + `JOIN_TYPE` int(2) NULL DEFAULT NULL COMMENT '入会方式', + `NET` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '网络类型', + `APP_VERSION` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '客户端版本', + `AUDIO_STATE` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '麦克风状态', + `AVIDEO_STATE` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '摄像头状态', + `SCREEN_SHARED_STATE` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '屏幕共享状态', + `CUSTOMER_DATA` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '专属字段', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `EXT01` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(255) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(255) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '腾讯会议参加人员信息表'; + +##### 2024-9-5 +CREATE TABLE `mt_txuser` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `userid` varchar(50) NULL DEFAULT NULL COMMENT 'userid', + `uuid` varchar(50) NULL DEFAULT NULL COMMENT '用户身份 ID', + `username` varchar(50) NULL DEFAULT NULL COMMENT '用户姓名', + `area` varchar(10) NULL DEFAULT NULL COMMENT '手机区号', + `update_time` varchar(50) NULL DEFAULT NULL COMMENT '更新时间', + `avatar_url` varchar(200) NULL DEFAULT NULL COMMENT '用户图像地址', + `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机号', + `email` varchar(50) NULL DEFAULT NULL COMMENT '邮箱', + `status` varchar(2) NULL DEFAULT NULL COMMENT '账号状态:1:正常2:注销3:未激活4:禁用5:预注册', + `job_title` varchar(50) NULL DEFAULT NULL COMMENT '员工职位', + `staff_id` varchar(50) NULL DEFAULT NULL COMMENT '员工工号', + `entry_time` varchar(50) NULL DEFAULT NULL COMMENT '入职时间', + `role_name` varchar(50) NULL DEFAULT NULL COMMENT '角色名称', + `role_code` varchar(50) NULL DEFAULT NULL COMMENT '角色类型', + `department_list` text NULL DEFAULT NULL COMMENT '部门信息', + `user_account_type` int(2) NULL DEFAULT NULL COMMENT '账号类型', + `account_version` int(2) NULL DEFAULT NULL COMMENT '账号版本', + `enable_ai_account` int(1) NULL DEFAULT NULL COMMENT '是否有 AI 账号能力。true:有 false:无', + `ai_account_type` int(2) NULL DEFAULT NULL COMMENT 'AI 账号类型', + `phone_status` int(2) NULL DEFAULT NULL COMMENT '手机号验证状态', + `CREATE_DATE` datetime NULL DEFAULT NULL COMMENT '创建时间', + `EXT01` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT02` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT03` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT04` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT05` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT06` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT07` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT08` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT09` varchar(100) NULL DEFAULT NULL COMMENT '', + `EXT10` varchar(100) NULL DEFAULT NULL COMMENT '', + PRIMARY KEY (`ID`) USING BTREE, + UNIQUE INDEX `mt_txuser_ID_uindex`(`ID`) USING BTREE, + INDEX `uuid_index`(`uuid`) USING BTREE, + INDEX `staff_id_index`(`staff_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会议-腾讯同步用户'; + +##### 2024-12-9 +ALTER TABLE invoice_library ADD COLUMN `DATA_JSON` text DEFAULT null COMMENT'json数据'; + +ALTER TABLE expense_reports ADD COLUMN `inv_num` int(20) NULL DEFAULT 0 COMMENT '费用行个数'; +ALTER TABLE expense_reports ADD COLUMN `reimburse_json` varchar(500) NULL DEFAULT NULL COMMENT '报销金额json'; +ALTER TABLE expense_reports ADD COLUMN `item_amount_json` varchar(500) NULL DEFAULT NULL COMMENT '个人消费json'; +ALTER TABLE expense_reports ADD COLUMN `inv_send` varchar(2) NULL DEFAULT '0' COMMENT '费用行发送标记'; +ALTER TABLE expense_reports ADD COLUMN `files_send` varchar(2) NULL DEFAULT '0' COMMENT '附件发送标记'; + +##### 2025-5-22 +ALTER TABLE user ADD COLUMN `UNIONID` varchar(50) NULL DEFAULT NULL COMMENT 'UNIONID' AFTER `OPENID`; + +ALTER TABLE mt_list ADD COLUMN `EXPENSE_USE` varchar(300) NULL DEFAULT NULL COMMENT '费用用途'; +ALTER TABLE mt_list ADD COLUMN `OPEN_ID` varchar(50) NULL DEFAULT NULL COMMENT 'OPEN_ID'; +ALTER TABLE mt_list ADD COLUMN `POLICY_ID` int NULL DEFAULT NULL COMMENT 'POLICY_ID'; +ALTER TABLE mt_list ADD COLUMN `POLICY_FIELDS` longtext NULL DEFAULT NULL COMMENT 'POLICY_FIELDS'; + +ALTER TABLE mt_expense ADD COLUMN `OPEN_ID` varchar(50) NULL DEFAULT NULL COMMENT 'OPEN_ID'; +ALTER TABLE mt_expense ADD COLUMN `EXPENSE_TYPE_ID` int NULL DEFAULT NULL COMMENT '费用类型ID'; +ALTER TABLE mt_expense ADD COLUMN `EXPENSE_FIELDS` mediumtext NULL DEFAULT NULL COMMENT '费用类型扩展字段'; +ALTER TABLE mt_expense ADD COLUMN `TRADE_DATE` varchar(30) NULL DEFAULT NULL COMMENT '交易日期'; +ALTER TABLE mt_expense ADD COLUMN `CITY` varchar(30) NULL DEFAULT NULL COMMENT '城市'; + +ALTER TABLE mt_expense ADD COLUMN `EXT01` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_expense ADD COLUMN `EXT02` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_expense ADD COLUMN `EXT03` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_expense ADD COLUMN `EXT04` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_expense ADD COLUMN `EXT05` varchar(200) NULL DEFAULT NULL COMMENT ''; + +##### 2025-7-7 +ALTER TABLE t_10_attendee ADD COLUMN `active` varchar(10) NULL DEFAULT NULL COMMENT '是否激活' AFTER `currency_code`; + +ALTER TABLE files_config ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE files_config ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE files_config ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE files_config ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE files_config ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL COMMENT ''; + +##### 2025-8-5 +ALTER TABLE invoice_img ADD COLUMN `EXT01` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_img ADD COLUMN `EXT02` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_img ADD COLUMN `EXT03` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_img ADD COLUMN `EXT04` varchar(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_img ADD COLUMN `EXT05` varchar(200) NULL DEFAULT NULL COMMENT ''; + +##### 2025-8-28 +ALTER TABLE invoice_image_deduction ADD COLUMN `EXT01` VARCHAR(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_image_deduction ADD COLUMN `EXT02` VARCHAR(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_image_deduction ADD COLUMN `EXT03` VARCHAR(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_image_deduction ADD COLUMN `EXT04` VARCHAR(200) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE invoice_image_deduction ADD COLUMN `EXT05` VARCHAR(200) NULL DEFAULT NULL COMMENT ''; + +##### 2025-9-3 +ALTER TABLE sys_role ADD COLUMN `HOME_PAGE` VARCHAR(200) NULL DEFAULT NULL COMMENT '默认首页' AFTER `ROLE_TYPE`; + +ALTER TABLE t_10_employee MODIFY COLUMN update_by VARCHAR(200); + +##### 2025-9-26 +ALTER TABLE sys_user ADD COLUMN `IN_ACTIVE` int(2) NULL DEFAULT 0 COMMENT '' AFTER `IS_ENABLE`; + +CREATE TABLE `proxy_sys_user` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `PROXY_ID` int(11) NULL DEFAULT NULL, + `PROXY_EMAIL` varchar(100) NULL DEFAULT NULL, + `MAIN_ID` int(11) NULL DEFAULT NULL, + `MAIN_EMAIL` varchar(100) NULL DEFAULT NULL, + `PU_ID` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '代理设置表' + +ALTER TABLE mt_list MODIFY COLUMN REMARK VARCHAR(500); + +ALTER TABLE mt_type ADD COLUMN `EXT06` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_type ADD COLUMN `EXT07` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_type ADD COLUMN `EXT08` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_type ADD COLUMN `EXT09` varchar(100) NULL DEFAULT NULL COMMENT ''; +ALTER TABLE mt_type ADD COLUMN `EXT10` varchar(100) NULL DEFAULT NULL COMMENT ''; + +ALTER TABLE sys_user ADD COLUMN `CLIENT` int(11) NULL DEFAULT 1 COMMENT ''; + +CREATE TABLE `message_mapping` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `MP_SOURCE` varchar(500) NULL DEFAULT NULL, + `MP_DEST` varchar(500) NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'mess映射表' + +#2025-11-3 +ALTER TABLE post_box MODIFY COLUMN EXT08 VARCHAR(1000); + +ALTER TABLE message_mapping ADD COLUMN `MP_DEST_EN` varchar(500) NULL DEFAULT NULL COMMENT ''; + +#2025-11-26 +#签到系统 +ALTER TABLE signin MODIFY COLUMN EVENT_NAME VARCHAR(200); + +#2025-12-1 +DROP TABLE IF EXISTS `invoice_arc`; +CREATE TABLE `invoice_arc` ( + `INVOICE_ID` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '发票自增唯一主键(EXP_ID)(expense)', + `EXPENSE_REPROTS_NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '费用报告名称(对应费用报告表中的费用报告名称)', + `INVOICE_DATE` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开票日期(0代表近一周),1代表发票时间为近一月的范围内,2代表发票时间为近一年的范围内', + `PRE_ACTIVE` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开票日期结束(用来筛选在开票日期区间的发票)', + `INVOICE_MONEY` decimal(20, 2) NULL DEFAULT 0.00 COMMENT '发票金额', + `INVOICE_MONEY_MAX` bigint(20) NULL DEFAULT NULL COMMENT '发票金额最高(用来筛选在金额区间内的发票)', + `INVOICE_TYPE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发票类型(出租车票,飞机票。。。)', + `CONSUME_TYPE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消费类型', + `EXPENSE_TYPE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '费用类型', + `BUSINESS_TYPE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手工发票原因', + `REIMBURSE_MONEY` decimal(20, 5) NULL DEFAULT 0.00000 COMMENT '报销金额', + `CURRENCY` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '币种', + `TRADE_DATE` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '交易日期', + `CITY` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '城市', + `SUPPLIER` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '供应商', + `INVOICE_CODE` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发票代码', + `INVOICE_NUM` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发票号码', + `INVOICE_STATUS` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '发票状态(0代表无票,1代表普票,2代表税票)', + `MILEAGE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '里程 (出租车才有)', + `GET_ON_TIME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上车时间(出租车才有)', + `DEBUS_TIME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '下车时间(出租车才有)', + `PROJECT_NAME` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '项目名称', + `DESCR` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注说明', + `IMG_PATH` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '扫描时所扫描的图片路径', + `EXPENSE_REPROTS_ID` int(11) NULL DEFAULT NULL COMMENT '对应的费用报告id(父id)', + `IS_DEL` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '0为未删除,1为已删除,默认为0', + `IS_SEND` int(1) NULL DEFAULT 1 COMMENT '发票是否发送,0(发送),1(未发送),2(未全部发送)默认未发送(1)', + `OTHER_FIELDS` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '其他的动态字段拼接而成的json格式的值', + `FORM_TYPE` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ticketTypeID', + `OPEN_ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '对应用户的openID', + `CREATE_TIME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间', + `COMPANY_ID` int(11) NULL DEFAULT NULL COMMENT '所属公司ID(每个用户有自己所属的公司)', + `CLIENT` int(11) NULL DEFAULT NULL COMMENT '用户所对应的客户ID(每个用户有自己所属的公司,所属的公司有所属的客户,一个客户下面可以有多个公司)', + `IS_VERIFICATION` int(1) NULL DEFAULT 0 COMMENT '0代表为验真,1代表验真,默认0', + `EXPENSE_FIELDS` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '费用类型扩展字段', + `ENTRY_ID` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'entry id ', + `EXPENSE_TYPE_ID` int(11) NULL DEFAULT NULL COMMENT 'EXPENSE REPORT TYPE ID', + `CHECK_CODE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发票校验码', + `REPORT_FIELDS` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL, + `TAX` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '税', + `ORIGINAL_PATH` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '发票原文件', + `DATA_JSON` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '发票结构化数据', + `PRE_TAX` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '不含税金额', + `TAX_RATE` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '税率', + `USER_ID` int(11) NULL DEFAULT NULL COMMENT '用户ID', + `NEED_VALID` tinyint(1) NULL DEFAULT 0 COMMENT '0 否 1 是 是否需要验真', + `VALID_STATUS` tinyint(1) NULL DEFAULT 0 COMMENT '0 否 1 是 验真状态', + `VALID_COUNT` tinyint(4) NULL DEFAULT 0 COMMENT '验真次数', + `VALID_DAY_COUNT` tinyint(4) NULL DEFAULT 0 COMMENT '当日验真次数', + `EXT40` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '合规检查结果', + `UPDATED_FLAG` tinyint(1) NULL DEFAULT 0 COMMENT '影像传输Flag 0/已传 1/未传', + `LOGIN_ID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `SECOND_INVOICE_ID` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主报销外键', + `expmonth` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `REQ_ID` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'REQ_ID', + `EXT_ID` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '讲者extId', + `TICKET_ID` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ticketId', + `EXT01` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `EXT02` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '记录验真Fail的message', + `EXT03` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建来源:Concur表示从外部认证插入', + `EXT04` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ticket类型', + `EXT05` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手工备注更新到EXT40', + `PAYMENT_TYPE` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支付方式', + PRIMARY KEY (`INVOICE_ID`) USING BTREE, + INDEX `is_del`(`IS_DEL`) USING BTREE, + INDEX `invoice_type`(`INVOICE_TYPE`) USING BTREE, + INDEX `expense_reports_id`(`EXPENSE_REPROTS_ID`) USING BTREE, + INDEX `user_id`(`USER_ID`) USING BTREE, + INDEX `invoice_num`(`INVOICE_NUM`) USING BTREE, + INDEX `entry_id`(`ENTRY_ID`) USING BTREE, + INDEX `invoice_valid_status`(`VALID_STATUS`) USING BTREE, + INDEX `req_id`(`REQ_ID`) USING BTREE, + INDEX `expense_type_id`(`EXPENSE_TYPE_ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + + +DROP TABLE IF EXISTS `invoice_lines_arc`; +CREATE TABLE `invoice_lines_arc` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `PID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `TYPE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `DATE` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `NUMBER` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CODE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `SELLER` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CURRENCY` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `CHECK_CODE` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `PRE_TAX` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `IMG_URI` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `TOTAL` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `VALID_STATUS` tinyint(1) NULL DEFAULT 0, + `VALID_COUNT` int(4) NULL DEFAULT 0 COMMENT '验真次数', + `VALID_DAY_COUNT` int(4) NULL DEFAULT 0 COMMENT '当日验真次数', + `CREATE_DATE` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `KIND` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `ORIGINAL_PATH` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `SELLER_CODE` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `BUYER` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `BUYER_CODE` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `ITEM_NAMES` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL, + `EXT01` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT02` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT03` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT04` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT05` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `DATA_JSON` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'json数据', + `EXT06` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT07` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT08` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT09` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `EXT10` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE, + INDEX `pid`(`PID`) USING BTREE, + INDEX `invoice_lines_arc_number_index`(`NUMBER`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic; + + +#2025-12-03 +CREATE TABLE `t_10_report_receive` ( + `uuid` varchar(64) NOT NULL, + `id` varchar(64) NOT NULL, + `entry_id` varchar(64) DEFAULT NULL, + `login_id` varchar(50) DEFAULT NULL, + `create_by` varchar(255) DEFAULT NULL, + `bz` varchar(500) DEFAULT NULL COMMENT '备注', + `fydl` varchar(100) DEFAULT NULL, + `dd` varchar(100) DEFAULT NULL COMMENT '地点', + `fyxl` varchar(100) DEFAULT NULL, + `report_id` varchar(255) DEFAULT NULL COMMENT '报销单id', + `bsje` varchar(255) DEFAULT NULL COMMENT '报税金额', + `currency` varchar(255) DEFAULT NULL COMMENT '币种', + `gys` varchar(255) DEFAULT NULL COMMENT '供应商', + `tax` varchar(255) DEFAULT NULL COMMENT '税率', + `type` varchar(255) DEFAULT NULL, + `ext01` varchar(1000) DEFAULT NULL, + `ext02` varchar(255) DEFAULT NULL, + `ext03` text, + `ext04` varchar(255) DEFAULT NULL, + `ext05` varchar(255) DEFAULT NULL, + `ext06` varchar(255) DEFAULT NULL, + `ext07` varchar(255) DEFAULT NULL, + `ext08` text, + `ext09` varchar(255) DEFAULT NULL, + `ext10` varchar(255) DEFAULT NULL COMMENT '数据是否成功更新到concur 0否1是', + `ext11` varchar(255) DEFAULT NULL COMMENT 'pdf本地路径', + `ext12` varchar(255) DEFAULT NULL COMMENT 'pdf是否已成功上传concur 0否1是', + `ext13` varchar(255) DEFAULT NULL, + `ext14` varchar(20) DEFAULT NULL, + `ext15` varchar(20) DEFAULT NULL, + `ext16` varchar(20) DEFAULT NULL, + `ext17` varchar(20) DEFAULT NULL, + `ext18` varchar(20) DEFAULT NULL, + `ext19` varchar(20) DEFAULT NULL, + `ext20` varchar(20) DEFAULT NULL, + `ext21` varchar(20) DEFAULT NULL, + `ext22` varchar(20) DEFAULT NULL, + `ext23` varchar(20) DEFAULT NULL, + `ext24` varchar(20) DEFAULT NULL, + `ext25` varchar(20) DEFAULT NULL, + `ext26` varchar(20) DEFAULT NULL, + `ext27` varchar(20) DEFAULT NULL, + `ext28` varchar(20) DEFAULT NULL, + `ext29` varchar(20) DEFAULT NULL, + `ext30` varchar(20) DEFAULT NULL, + `ext31` varchar(20) DEFAULT NULL, + `ext32` varchar(20) DEFAULT NULL, + `ext33` varchar(20) DEFAULT NULL, + `ext34` varchar(20) DEFAULT NULL, + `ext35` varchar(20) DEFAULT NULL, + `ext36` varchar(20) DEFAULT NULL, + `ext37` varchar(20) DEFAULT NULL, + `ext38` varchar(20) DEFAULT NULL, + `ext39` varchar(20) DEFAULT NULL, + `ext40` varchar(20) DEFAULT NULL, + `ext41` varchar(20) DEFAULT NULL, + `ext42` varchar(20) DEFAULT NULL, + `ext43` varchar(20) DEFAULT NULL, + `ext44` varchar(20) DEFAULT NULL, + `ext45` varchar(20) DEFAULT NULL, + `ext46` varchar(20) DEFAULT NULL, + `ext47` varchar(20) DEFAULT NULL, + `ext48` varchar(20) DEFAULT NULL, + `ext49` varchar(200) DEFAULT NULL, + `ext50` varchar(2000) DEFAULT NULL, + `create_date` datetime DEFAULT CURRENT_TIMESTAMP, + `receive_status` varchar(10) DEFAULT NULL COMMENT '接收状态', + `receive_type` varchar(255) DEFAULT '' COMMENT '接收类型 ', + `pdf_to_local` varchar(10) DEFAULT NULL COMMENT 'pdf是否已下载到本地0否1是', + `pdf_local_url` varchar(255) DEFAULT NULL COMMENT 'pdf的本地路径地址', + `fj_to_local` varchar(10) DEFAULT NULL COMMENT 'ext03附件下载', + `fj_local_url` varchar(255) DEFAULT NULL COMMENT 'ext03附件本地地址', + `rebuild_pdf_url` varchar(255) DEFAULT NULL COMMENT 'pdf和fj重组后的pdf路径', + `pdf_to_concur` varchar(10) DEFAULT NULL COMMENT 'pdf是否已上传concur 0否 1是', + `data_to_concur` varchar(10) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `update_by` varchar(60) DEFAULT NULL, + `fyrq` varchar(20) DEFAULT NULL COMMENT '费用日期', + `purpose` varchar(255) DEFAULT NULL, + PRIMARY KEY (`uuid`) USING BTREE, + KEY `data_to_concur` (`data_to_concur`) USING BTREE, + KEY `receive_status` (`receive_status`) USING BTREE, + KEY `login_id` (`login_id`) USING BTREE, + KEY `ext10` (`ext10`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +ALTER TABLE invoice_item_mileage MODIFY COLUMN EXT01 text; + +#2026-03-10 +ALTER TABLE currency ADD COLUMN `CODE` varchar(50) NULL DEFAULT NULL COMMENT ''; + +#2026-07-21 +ALTER TABLE expense_reports ADD COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间'; +ALTER TABLE expense_reports_arc ADD COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间'; +ALTER TABLE invoice ADD COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间'; +ALTER TABLE invoice_arc ADD COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间'; +ALTER TABLE invoice_item_mileage ADD COLUMN `create_time` datetime NULL DEFAULT NULL COMMENT '新建时间'; + +#2026-08-14 +ALTER TABLE invoice_attendees ADD COLUMN `create_date` datetime NULL DEFAULT NULL COMMENT '新建日期'; + +#2026-08-25 +ALTER TABLE expense_reports MODIFY COLUMN EXT05 text; + +#2026-09-03 +ALTER TABLE efiles ADD INDEX idx_efiles_type_refnum (TYPE, Reference_Number) USING BTREE; \ No newline at end of file diff --git a/src/main/java/com/cmsen/ticket/TicketApplication.java b/src/main/java/com/cmsen/ticket/TicketApplication.java new file mode 100644 index 0000000..3d91f0e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/TicketApplication.java @@ -0,0 +1,86 @@ +/** + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket; + +import lombok.extern.log4j.Log4j2; +import net.smarttax.sim.annotation.EnableSmarttaxClient; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryUsage; +import java.nio.charset.Charset; +import java.util.TimeZone; + +//import org.springframework.cloud.openfeign.EnableFeignClients; + +@EnableAsync +@SpringBootApplication +@EnableTransactionManagement(proxyTargetClass = true) +@EnableScheduling +@Log4j2 +@EnableSmarttaxClient(scanPackages = "com.cmsen.ticket.infrastructure.ocr2.listener") +//@EnableFeignClients +public class TicketApplication extends SpringBootServletInitializer { + public static void main(String[] args) { + initPrintln(); + SpringApplication.run(TicketApplication.class, args); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder SpringApplication) { + return SpringApplication.sources(TicketApplication.class); + } + + private static void initPrintln() { + log.info("---------------------------------SYSTEM INFO------------------------------"); + log.info("java sdk version: " + System.getProperty("java.version")); + log.info("java sdk vendor: " + System.getProperty("java.vendor")); + // 打印系统默认字符集 + log.info("System default charset: " + Charset.defaultCharset().name()); + log.info("System Type: " + System.getProperty("os.name")); + log.info("System Arch: " + System.getProperty("os.arch")); + log.info("System User: " + System.getProperty("user.name")); + log.info("System Language: " + System.getProperty("user.language")); + log.info("System default time zone: " + TimeZone.getDefault().getID()); + log.info("--------------------------------------------------------------------------"); + currentMemory(); + log.info("--------------------------------------------------------------------------"); + } + + private static void currentMemory() { + MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); + MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage(); // 椎内存使用情况 + long totalMemorySize = memoryUsage.getInit(); // 初始的总内存 + long maxMemorySize = memoryUsage.getMax(); // 最大可用内存 + long usedMemorySize = memoryUsage.getUsed(); // 已使用的内存 + log.info("Memory detail: " + String.format("Total:%s, Free:%s, Max:%s, Used:%s", + formatByte(totalMemorySize, 2, ""), + formatByte(totalMemorySize - usedMemorySize, 2, ""), + formatByte(maxMemorySize, 2, ""), + formatByte(usedMemorySize, 2, ""))); + } + + public static String formatByte(double length, int precision, String delimiter) { + if (length <= 0.0D) { + return "0" + delimiter + "B"; + } else { + String[] units = new String[]{"B", "KB", "MB", "GB", "TB", "PB"}; + int i = (int) (Math.log10(length) / Math.log10(1024.0D)); + return String.format("%." + precision + "f", length / Math.pow(1024.0D, (double) i)) + delimiter + units[i]; + } + } +} + + diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/InvoiceImageService.java b/src/main/java/com/cmsen/ticket/application/manager/service/InvoiceImageService.java new file mode 100644 index 0000000..fcdeb1e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/InvoiceImageService.java @@ -0,0 +1,40 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.manager.InvoiceImage; + +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/3/3 14:14 + **/ +public interface InvoiceImageService { + RestResponse list(Map params); + + RestResponse selectImg(Integer id); + + RestResponse selectByPrimaryKey(Integer id); + + RestResponse create(InvoiceImage invoiceImage); + + RestResponse update(InvoiceImage invoiceImage); + + RestResponse delete(Integer id); + + RestResponse deleteBatch(String ids); + + RestResponse download(Integer id, HttpServletResponse response); + + RestResponse exportExcel(Map params, HttpServletResponse response); + + RestResponse downloadImages(Map params, HttpServletResponse response); + + RestResponse downloadXmls(Map params, HttpServletResponse response); + + RestResponse downloadXmlsPoc(Map params, HttpServletResponse response); + + RestResponse getUnMatchImg(String reportId); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/JsadapterService.java b/src/main/java/com/cmsen/ticket/application/manager/service/JsadapterService.java new file mode 100644 index 0000000..bd0f796 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/JsadapterService.java @@ -0,0 +1,12 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +public interface JsadapterService { + RestResponse list(Map params); + + + RestResponse delete(Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/MtAgreementService.java b/src/main/java/com/cmsen/ticket/application/manager/service/MtAgreementService.java new file mode 100644 index 0000000..7a07c4f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/MtAgreementService.java @@ -0,0 +1,19 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2022/10/9 16:06 + **/ +public interface MtAgreementService { + + RestResponse getList(Map params); + + RestResponse upload(MultipartFile file); + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/MtListPcService.java b/src/main/java/com/cmsen/ticket/application/manager/service/MtListPcService.java new file mode 100644 index 0000000..a46c3a5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/MtListPcService.java @@ -0,0 +1,54 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2022/11/17 16:06 + **/ +public interface MtListPcService { + + RestResponse listMeetPic(Map params); + + RestResponse deletePic(Long id); + + RestResponse meetPicUpload(MultipartFile file); + + RestResponse insertPic(MultipartFile file, String reqId, String picType, String expenseName, String extId); + + RestResponse reqList2(String reqName); + + RestResponse valueSetList(String category); + + RestResponse meetingSpeakerList(String reqId); + + RestResponse listMeeting(Map params); + + + RestResponse getOrgListByPid(Integer pid, String orgName); + + RestResponse checkinList(Map params); + + + RestResponse getEditFlag(String roleId); + + RestResponse meetingDetails(Long id); + + RestResponse meetRevoke(String reqId); + + RestResponse meetReActive(String reqId); + + RestResponse speakerFallBack(Long id); + + RestResponse checkinReset(String reqId); + + RestResponse checkinDel(Long id); + + RestResponse listSignMeet(Map params); + + RestResponse listSignMeetAttend(Map params); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/PaymentService.java b/src/main/java/com/cmsen/ticket/application/manager/service/PaymentService.java new file mode 100644 index 0000000..3588cc4 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/PaymentService.java @@ -0,0 +1,99 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.dto.SubmitOrderMatchDto; +import com.cmsen.ticket.domain.entity.SupplierOrder; + +import java.util.Map; + + +public interface PaymentService { + + RestResponse list(Map params); + + + + + + + + + + + RestResponse listCompany(String keyword); + + RestResponse listOrg(String keyword); + + RestResponse codeList(); + + RestResponse getCompOrg(String userId); + + RestResponse getUserList(String keyword); + + RestResponse getSupplierList(String orgCode, String keyword, String isDigital); + + + RestResponse deleteHeader(String billId); + + RestResponse orderList(Map params); + + RestResponse createOrder(SupplierOrder supplierOrder); + + RestResponse updateOrder(SupplierOrder supplierOrder); + + RestResponse deleteOrder(String ids, String orderNo); + + RestResponse listItems(Map params); + + RestResponse submitOrderMatchList(SubmitOrderMatchDto dto); + + RestResponse deleteOrderMatch(Long matchId); + + RestResponse submitBill(String billId); + + RestResponse recallBill(String billId); + + RestResponse backBill(String billId); + + RestResponse matchBill(String billId); + + RestResponse getPayTypeList(String keyword); + + RestResponse getMaterialList(String keyword); + + RestResponse getWhiteCompList(String keyword); + + RestResponse listContracts(Map params); + + RestResponse listPurchaces(Map params); + + RestResponse getFlowType(); + + RestResponse listBrands(Map params); + + RestResponse listReceives(Map params); + + RestResponse listInternals(Map params); + + RestResponse valueSetList(String category, Integer pid, String keywords); + + RestResponse getSysConfig(String code); + + RestResponse getBillName(String businessType, String userName); + + RestResponse getMatchFlag(String roleId, String userId, String costCenter); + + RestResponse getMatchFinFlag(String roleId, String userId); + + RestResponse getTransferUser(Map params); + + RestResponse transferBill(String billId, String owner, String toUserId); + + RestResponse listForTransfer(Map params); + + RestResponse transferBatch(Map params, String current, String target); + + RestResponse transferRecallBatch(Map params); + + RestResponse listOwner(String keyword); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/PreferencesService.java b/src/main/java/com/cmsen/ticket/application/manager/service/PreferencesService.java new file mode 100644 index 0000000..8aa438e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/PreferencesService.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + + +/** + * @author OWTS + * @version 1.0.0 + * @date 2023/6/26 16:06 + **/ +public interface PreferencesService { + RestResponse list(Map params); + + RestResponse delete(Integer id); + + RestResponse export(Map params, HttpServletResponse response); + + RestResponse upload(MultipartFile file); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/ProcureOrderService.java b/src/main/java/com/cmsen/ticket/application/manager/service/ProcureOrderService.java new file mode 100644 index 0000000..267c2d3 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/ProcureOrderService.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + + +public interface ProcureOrderService { + + RestResponse list(Map params); + + RestResponse detail(String po); + + + RestResponse deletePo(Integer id); + + RestResponse lineList(Map params); + + RestResponse deleteLine(String ids, String po); + + RestResponse uploadPo(MultipartFile file); + + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/RuleService.java b/src/main/java/com/cmsen/ticket/application/manager/service/RuleService.java new file mode 100644 index 0000000..eb44796 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/RuleService.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2024/2/18 16:23 + **/ +public interface RuleService { + RestResponse list(Map params); + + + RestResponse delete(Integer ids); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SmartImageCheckService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SmartImageCheckService.java new file mode 100644 index 0000000..5211e91 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SmartImageCheckService.java @@ -0,0 +1,54 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.manager.ComplianceCheck; +import com.cmsen.ticket.domain.response.Response; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/9/9 16:20 + **/ +public interface SmartImageCheckService { + + Response> getImages(String id); + + + Response batchCheck(List reportIds); + + Response compliance(String reportId); + + Response uploadImage(MultipartFile file, String reportId); + + Response forcePassed(List ids); + + Response> getComlianceCheckList(String id); + + Response approved(String id); + + Response rejected(String id, String comment); + + + Response deleteErrorReport(String reportId); + + Response updateErrorReport(Long id, String newReportId); + + Response reCheckErrorReport(Long id); + + RestResponse reportLine(String id); + + Response> getLineImageList(String id); + + + RestResponse getLogList(Map params); + + Response> getErrImages(String reportId); + + RestResponse editRemark(String reportId, String ext02); + + Response delPaperImage(String id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SqlDownloadService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SqlDownloadService.java new file mode 100644 index 0000000..01b7c34 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SqlDownloadService.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.ticket.domain.response.Response; + +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * @author OWTS + */ +public interface SqlDownloadService { + //Response exportListData(SqlDownloadDto downloadDto, HttpServletResponse response); + Response exportListData(Map params, HttpServletResponse response); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SupplierMaterialDefineService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierMaterialDefineService.java new file mode 100644 index 0000000..e7bb128 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierMaterialDefineService.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.SupplierMaterialDefine; + +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +public interface SupplierMaterialDefineService { + RestResponse list(Map params); + + RestResponse create(SupplierMaterialDefine record); + + RestResponse update(SupplierMaterialDefine record); + + RestResponse delete(Long id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SupplierService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierService.java new file mode 100644 index 0000000..77e931d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierService.java @@ -0,0 +1,53 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.dto.SubmitLineMatchDto; +import com.cmsen.ticket.domain.entity.SupplierMaterialUom; +import com.cmsen.ticket.domain.response.Response; +import com.cmsen.ticket.interfaces.facade.form.SupplierInvoiceMatchForm; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierUpdatePriceForm; + +import java.util.List; + +public interface SupplierService { + /** + * 提交行匹配列表 + */ + Response submitLineMatchList(SubmitLineMatchDto dto); + /** + * 发票匹配列表
+ * 匹配条件:ticketCode、seller、number、buyer + */ + RestResponse SupplierInvoiceMatchList(SupplierInvoiceMatchForm form); + RestResponse autoSmartMatching(String invoiceId, String directCode); + + RestResponse autoSmartMatchingOld(String invoiceId); + + RestResponse autoSmartMatchingOutIn(String invoiceId, String directCode); + + RestResponse materialAutoMatching(String invoiceId, String directCode); + RestResponse matchInvoices(String numberS, String numberE, Integer invoiceType); + + /** + * 匹配完成 + */ + Response completeMatching(List ids, String invoiceId); + + + RestResponse updatePrice(SupplierUpdatePriceForm form); + + + RestResponse updateUom(String invoiceId, String sellerTaxId); + + Response createSupplierMaterialUom(List supplierMaterialUoms); + + void syncUomFromMapping(String invoiceId, String supplierCode); + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SupplierUomMappingService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierUomMappingService.java new file mode 100644 index 0000000..0b48ee7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SupplierUomMappingService.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.SupplierUomMapping; + +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +public interface SupplierUomMappingService { + RestResponse list(Map params); + + RestResponse create(SupplierUomMapping record); + + RestResponse update(SupplierUomMapping record); + + RestResponse delete(Long id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysConfigService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysConfigService.java new file mode 100644 index 0000000..29796be --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysConfigService.java @@ -0,0 +1,20 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.manager.SysConfig; + +import java.util.Map; + + +/** + * @author OWTS + * @version 1.0.0 + * @date 2023/4/19 15:40 + **/ +public interface SysConfigService { + RestResponse list(Map params); + + RestResponse update(SysConfig sysConfig); + + RestResponse getByCode(String code); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysCorInvoiceService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysCorInvoiceService.java new file mode 100644 index 0000000..2ed0cb1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysCorInvoiceService.java @@ -0,0 +1,9 @@ +package com.cmsen.ticket.application.manager.service; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/19 9:49 + **/ +public interface SysCorInvoiceService { + } diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysExpenseTypeService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysExpenseTypeService.java new file mode 100644 index 0000000..33e616f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysExpenseTypeService.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/3/2 13:22 + **/ +public interface SysExpenseTypeService { + RestResponse list(Map params); + + + RestResponse delete(Integer id); + + RestResponse selectByPaimaryKey(Integer id); + + RestResponse updateIsDel(Integer id, String isDel); + + RestResponse getPidList(Integer pid); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraFieldsService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraFieldsService.java new file mode 100644 index 0000000..6bbcdd1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraFieldsService.java @@ -0,0 +1,19 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/3/2 13:33 + **/ +public interface SysExtraFieldsService { + RestResponse list(Map params); + + + RestResponse delete(Integer id); + + RestResponse selectByPaimaryKey(Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraValueService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraValueService.java new file mode 100644 index 0000000..09d1785 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysExtraValueService.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/3/2 14:19 + **/ +public interface SysExtraValueService { + RestResponse list(Map params); + + RestResponse selectByPrimaryKey(Integer id); + + RestResponse delete(Integer ids); + + RestResponse export(HttpServletResponse response); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysOrgService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysOrgService.java new file mode 100644 index 0000000..5dedbee --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysOrgService.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.manager.SysOrg; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/18 15:40 + **/ +public interface SysOrgService { + RestResponse list(Map params); + + RestResponse create(SysOrg sysOrg); + + RestResponse update(SysOrg sysOrg); + + RestResponse delete(Integer id); + + RestResponse selectByPrimaryKey(Integer id); + RestResponse selectApproveOrgListByUserId(Integer userId); + RestResponse addOrg(String orgStr); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysPolicyService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysPolicyService.java new file mode 100644 index 0000000..71914e0 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysPolicyService.java @@ -0,0 +1,19 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/22 10:11 + **/ +public interface SysPolicyService { + RestResponse list(Map params); + + RestResponse selectByPrimaryKey(Integer id); + + + RestResponse delete(Integer ids); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysProxySetService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysProxySetService.java new file mode 100644 index 0000000..28efb1b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysProxySetService.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +public interface SysProxySetService { + RestResponse list(Map params); + + + RestResponse delete(Integer id); + + + RestResponse selectUserList(String keyword); + + RestResponse getRepresentedList(); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysProxyUserService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysProxyUserService.java new file mode 100644 index 0000000..4c7aee0 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysProxyUserService.java @@ -0,0 +1,19 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +public interface SysProxyUserService { + RestResponse list(Map params); + + +// RestResponse update(ProxyUser proxyUser); + + RestResponse delete(Integer id); + + + RestResponse selectUserList(String name); + +// RestResponse selectByPaimaryKey(Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysRoleService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysRoleService.java new file mode 100644 index 0000000..345a90d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysRoleService.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.manager.SysRole; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/18 15:33 + **/ +public interface SysRoleService { + RestResponse list(Map params); + + RestResponse create(SysRole sysRole); + + RestResponse update(SysRole sysRole); + + RestResponse delete(Integer id); + + RestResponse getMenus(Integer role); + + RestResponse assignPermissions(SysRole sysRole); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysRulesService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysRulesService.java new file mode 100644 index 0000000..13242b4 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysRulesService.java @@ -0,0 +1,20 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; + +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/22 10:56 + **/ +public interface SysRulesService { + RestResponse list(Map params); + + RestResponse selectByPrimaryKey(Integer id); + + RestResponse delete(Integer ids); + + RestResponse getRuleType(); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/SysUserService.java b/src/main/java/com/cmsen/ticket/application/manager/service/SysUserService.java new file mode 100644 index 0000000..a337318 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/SysUserService.java @@ -0,0 +1,50 @@ +package com.cmsen.ticket.application.manager.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.CorporateInvoiceType; +import com.cmsen.ticket.domain.entity.SysUserOrg; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.response.Response; +import com.cmsen.ticket.interfaces.facade.form.ChangePassword; +import com.cmsen.ticket.interfaces.facade.form.LoginForm; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +public interface SysUserService { + RestResponse login(LoginForm loginForm); + RestResponse singleLogin(LoginForm loginForm); + + RestResponse logout(HttpServletRequest request); + + RestResponse list(Map params); + + RestResponse create(SysUser sysUser); + + RestResponse update(SysUser sysUser); + + RestResponse delete(Integer id); + + RestResponse changePassword(ChangePassword changePassword, HttpServletRequest request); + + RestResponse resetPassword(Integer id); + + Response> getInvoiceTypes(Integer userId); + + Response> getUserOrgs(String keyword, Integer userId); + + Response updateDataPermission(SysUserOrg userOrg); + + Response getDataAuth(Integer userId); + + RestResponse uploadOrg(MultipartFile file); + + RestResponse uploadApprove(MultipartFile file); + + RestResponse getVerCode(String tel); + + RestResponse verCodeLogin(String tel, String code); +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierMaterialDefineServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierMaterialDefineServiceImpl.java new file mode 100644 index 0000000..f2e2e02 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierMaterialDefineServiceImpl.java @@ -0,0 +1,47 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SupplierMaterialDefineService; +import com.cmsen.ticket.domain.entity.SupplierMaterialDefine; +import com.cmsen.ticket.domain.mapper.SupplierMaterialDefineMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +@Slf4j +@Service +public class SupplierMaterialDefineServiceImpl implements SupplierMaterialDefineService { + @Resource + private SupplierMaterialDefineMapper mapper; + + + @Override + public RestResponse list(Map params) { + return null; + } + + @Override + public RestResponse create(SupplierMaterialDefine record) { + mapper.insert(record); + return RestResponse.success(); + } + + @Override + public RestResponse update(SupplierMaterialDefine record) { + mapper.updateByPrimaryKeySelective(record); + return RestResponse.success(); + } + + @Override + public RestResponse delete(Long id) { + mapper.deleteByPrimaryKey(id); + return RestResponse.success(); + } +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierServiceImpl.java new file mode 100644 index 0000000..fa119b4 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierServiceImpl.java @@ -0,0 +1,3764 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.application.manager.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.application.manager.service.SupplierService; +import com.cmsen.ticket.application.manager.vo.GetMaterialParamVo; +import com.cmsen.ticket.application.manager.vo.MatterV3ResponseVo; +import com.cmsen.ticket.application.manager.vo.SupplierInvoiceMatchOrderVo; +import com.cmsen.ticket.application.manager.vo.SupplierMaterialDefineVo; +import com.cmsen.ticket.application.service.SupplierOutService; +import com.cmsen.ticket.bestsign.util.InterfaceUtil; +import com.cmsen.ticket.domain.dto.InvoiceItemListDto; +import com.cmsen.ticket.domain.dto.SubmitLineMatchDto; +import com.cmsen.ticket.domain.dto.SupplierPODto; +import com.cmsen.ticket.domain.dto.SupplierUomMappingDTO; +import com.cmsen.ticket.domain.entity.*; +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.entity.manager.SysRole; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.mapper.*; +import com.cmsen.ticket.domain.mapper.manager.*; +import com.cmsen.ticket.domain.response.Response; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.cmsen.ticket.domain.vo.AIMaterialVO; +import com.cmsen.ticket.infrastructure.config.RestTemplateConfig; +import com.cmsen.ticket.infrastructure.ocr2.RuiZhenOCRService; +import com.cmsen.ticket.interfaces.facade.form.SupplierInvoiceMatchForm; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierUpdatePriceForm; +import com.cmsen.ticket.log.service.TInterfaceLogService; +import com.cmsenframework.security.RequestSecurityPolicy; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; + +@Slf4j +@Service +public class SupplierServiceImpl implements SupplierService { + @Resource + private InterfaceUtil interfaceUtil; + @Resource + private RestTemplateConfig restTemplateConfig; + @Resource + private SupplierMapper supplierMapper; + @Resource + private SupplierOutService supplierOutService; + @Resource + private SupplierOrderMapper supplierOrderMapper; + @Resource + private SupplierMaterialDefineMapper supplierMaterialDefineMapper; + @Resource + private SupplierMaterialMapper supplierMaterialMapper; + @Resource + private SupplierMaterialFilterMapper supplierMaterialFilterMapper; + @Resource + private SupplierMaterialUomMapper supplierMaterialUomMapper; + @Resource + private CorporateInvoiceMapper corporateInvoiceMapper; + @Resource + private CorporateInvoiceItemsMapper corporateInvoiceItemsMapper; + @Resource + private SupplierMatchingMapper supplierMatchingMapper; + @Resource + private SupplierMatchingLogMapper supplierMatchingLogMapper; + @Resource + private SupplierStateMapper supplierStateMapper; + @Resource + private SupplierOrderItemMatchingMapper supplierOrderItemMatchingMapper; + @Resource + private SysUserOrgMapper sysUserOrgMapper; + @Resource + private CorporateInvoiceTypeMapper corporateInvoiceTypeMapper; + @Resource + private TInterfaceLogService interfaceLogService; + @Resource + private RuiZhenOCRService ruiZhenOCRService; +// @Resource +// private CorporateInvoiceService corporateInvoiceService; +@Resource +private SysRoleMapper sysRoleMapper; + @Resource + private SysOrgMapper sysOrgMapper; + @Resource + private CompanyMapper companyMapper; + + @Resource + private SysUserMapper sysUserMapper; + @Resource + private SysUserApproveMapper sysUserApproveMapper; + @Resource + private SysConfigMapper sysConfigMapper; + + + @Resource + private SupplierDiffAllowMapper supplierDiffAllowMapper; + + private String PF_GATEWAY_TOKEN = null; + + private final String SPLIT_STR = "::::"; + + public final String PRICE_CN_NAME = "单价:"; + // ---------------发票匹配--------------- + /** + * 税前逻辑处理 20220927 + * + * @param dto + */ + private Response priceBefore(SubmitLineMatchDto dto) { + try { + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(dto.getInvoiceId()); + CorporateInvoiceItems item = corporateInvoiceItemsMapper.selectByPrimaryKey(dto.getItemId()); + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(item.getId()); + Assert.notNull(item, "发票行不存在"); + List orders = dto.getOrders(); + // 20220619匹配只能有一行 + /* if(orders.size()>1 ||supplierOrderItemMatchings.size()>0){ + throw new ServiceException("只允许一个匹配行"); + }*/ + List insertList = new ArrayList<>(); + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + // 0 税前 1 税后 + Integer priceType = corporateInvoice.getPriceType(); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + for (SubmitLineMatchDto.SupplierOrderDto order : orders) { + //判断 supplier_material 是否存在关系 + if (StringUtil.isNotBlank(order.getItemNo())) { + SupplierMaterial supplierMaterial = new SupplierMaterial() {{ + setSupplierNo(order.getSupplierCode()); + //setMaterialNo(order.getItemNo()); + //setMaterial(order.getGoods()); + setSupplierMaterial(item.getName()); + setSpecification(item.getSpecification()); + }}; + // 20220429修改查询条件 + List lsData = supplierMaterialMapper.getList(supplierMaterial); + supplierMaterial.setMaterialNo(order.getItemNo()); + supplierMaterial.setMaterial(order.getGoods()); + supplierMaterial.setUom(order.getUom()); + if (lsData.size() == 0) { + supplierMaterialMapper.insertSelective(supplierMaterial); + } else { + // 20220517id赋值 + supplierMaterial.setId(lsData.get(0).getId()); + supplierMaterialMapper.updateByPrimaryKeySelective(supplierMaterial); + } + } + + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(dto.getInvoiceId()); + matching.setItemId(item.getId()); + matching.setOrderId(order.getId()); + matching.setName(order.getGoods()); + matching.setSpecification(item.getSpecification()); + matching.setUnit(order.getUom()); + matching.setPrice(order.getUnitPrice()); + BigDecimal price = new BigDecimal(item.getPrice()); + if (0 == corporateInvoice.getMatchType()) {//金额 + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount()); + // 20220510修改收货数据 + matching.setQuantity(matching.getTotal().divide(order.getUnitPrice(), 2, BigDecimal.ROUND_HALF_UP).toString()); + matching.setReceivedTotal(matching.getTotal()); + } else {// 数量 + matching.setQuantity(String.valueOf(order.getUnUsedQuantity())); + matching.setTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + matching.setReceivedTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + + } + // 税额赋值 + matching.setTax(BigDecimal.ZERO); + + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(order.getReceiveNo()); + matching.setOrderNo(order.getOrderNo()); + matching.setItemNo(order.getItemNo()); + // 20220712匹配total保留两位小数 + matching.setTotal(matching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + matching.setMatchingId(""); + insertList.add(matching); + } + if (!insertList.isEmpty()) { + supplierOrderItemMatchingMapper.insertBatch(insertList); + } + updateDifference(corporateInvoice, item); + + //插入日志记录 2022/5/28 + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog() {{ + setId(IdUtil.fastUUID()); + setPid(corporateInvoice.getId()); + setModule("InvoiceMatch"); + setMethods("SupplierOrderItemMatch"); + setOperatorUser(sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()).getName()); + setCreateTime(new Date()); + setReason("完成发票行【" + item.getName() + "+" + item.getSpecification() + "】的发票匹配"); + }}; + supplierMatchingLogMapper.insert(supplierMatchingLog); + + return Response.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("提交异常"); + } + } + @Transactional(rollbackFor = Exception.class) + @Override + public Response submitLineMatchList(SubmitLineMatchDto dto) { + try { + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(dto.getInvoiceId()); + CorporateInvoiceItems item = corporateInvoiceItemsMapper.selectByPrimaryKey(dto.getItemId()); + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(item.getId()); + Assert.notNull(item, "发票行不存在"); + List orders = dto.getOrders(); + // 20220619匹配只能有一行 + /* if(orders.size()>1 ||supplierOrderItemMatchings.size()>0){ + throw new ServiceException("只允许一个匹配行"); + }*/ + List insertList = new ArrayList<>(); + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + // // 0 税前 1 税后 + Integer priceType = corporateInvoice.getPriceType(); + // 税前走新逻辑20220927 + if (priceType == 1) { + return priceBefore(dto); + } + // 获取所有已匹配的数量 + BigDecimal matchedNum = BigDecimal.ZERO; + // + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + BigDecimal num = new BigDecimal(supplierOrderItemMatching.getQuantity()); + matchedNum = matchedNum.add(num); + } + + + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + for (SubmitLineMatchDto.SupplierOrderDto order : orders) { + //判断 supplier_material 是否存在关系 + if (StringUtil.isNotBlank(order.getItemNo())) { + SupplierMaterial supplierMaterial = new SupplierMaterial() {{ + setSupplierNo(order.getSupplierCode()); + //setMaterialNo(order.getItemNo()); + //setMaterial(order.getGoods()); + setSupplierMaterial(item.getName()); + setSpecification(item.getSpecification()); + }}; + // 20220429修改查询条件 + List lsData = supplierMaterialMapper.getList(supplierMaterial); + supplierMaterial.setMaterialNo(order.getItemNo()); + supplierMaterial.setMaterial(order.getGoods()); + supplierMaterial.setUom(order.getUom()); + if (lsData.size() == 0) { + supplierMaterialMapper.insertSelective(supplierMaterial); + } else { + // 20220517id赋值 + supplierMaterial.setId(lsData.get(0).getId()); + supplierMaterialMapper.updateByPrimaryKeySelective(supplierMaterial); + } + } + + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(dto.getInvoiceId()); + matching.setItemId(item.getId()); + matching.setOrderId(order.getId()); + matching.setName(order.getGoods()); + matching.setSpecification(item.getSpecification()); + matching.setUnit(order.getUom()); + matching.setPrice(order.getUnitPrice()); + BigDecimal price = new BigDecimal(item.getPrice()); + if (0 == corporateInvoice.getMatchType()) {//金额 + //BigDecimal percent = order.getUnUsedAmount().divide(itemTotal, 10, BigDecimal.ROUND_HALF_UP); + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount()); + /*if (StringUtil.isNotBlank(item.getDeductionAmount())) { + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + }*/ + // 20220508修改收货数据 + //matching.setQuantity(matching.getTotal().divide(price, 2, BigDecimal.ROUND_HALF_UP).intValue()); + //matching.setQuantity(order.getReceivedNum()); + // 20220510修改收货数据 + matching.setQuantity(matching.getTotal().divide(order.getUnitPrice(), 2, BigDecimal.ROUND_HALF_UP).toString()); + } else {// 数量 + BigDecimal itemQuantity = new BigDecimal(item.getQuantity()); + BigDecimal orderQuantity = new BigDecimal(order.getUnUsedQuantity()); + if (itemQuantity.subtract(matchedNum).compareTo(orderQuantity) >= 0) { + matching.setQuantity(String.valueOf(order.getUnUsedQuantity())); + } else { + matching.setQuantity(String.valueOf(itemQuantity.subtract(matchedNum))); + } + matchedNum = matchedNum.add(new BigDecimal(matching.getQuantity())); + matching.setTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + + /*if (StringUtil.isNotBlank(item.getDeductionAmount())) { + BigDecimal percent = matching.getTotal().divide(itemTotal, 10, BigDecimal.ROUND_HALF_UP); + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + }*/ + } + + if (StringUtil.isNotBlank(item.getTax())) { + BigDecimal tot = itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())); + if (tot.compareTo(BigDecimal.ZERO) != 0) { + BigDecimal percent = matching.getTotal().divide(tot, 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent).setScale(2, BigDecimal.ROUND_HALF_UP)); + } else { + matching.setTax(BigDecimal.ZERO); + } + } + // 20220509折后判断 + /*if(priceType==0 && matchType==1){ + matching.setTotal(matching.getTotal().add(matching.getDeductionAmount()== null ? BigDecimal.ZERO : matching.getDeductionAmount())); + matching.setTax(matching.getTax().add(matching.getDeductionTax()== null ? BigDecimal.ZERO : matching.getDeductionTax())); + }*/ + matching.setReceivedTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(order.getReceiveNo()); + matching.setOrderNo(order.getOrderNo()); + matching.setItemNo(order.getItemNo()); + // 20220712匹配total保留两位小数 + matching.setTotal(matching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + matching.setMatchingId(""); + insertList.add(matching); + } + if (!insertList.isEmpty()) { + supplierOrderItemMatchingMapper.insertBatch(insertList); + } + updateDifference(corporateInvoice, item); + + //插入日志记录 2022/5/28 + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog() {{ + setId(IdUtil.fastUUID()); + setPid(corporateInvoice.getId()); + setModule("InvoiceMatch"); + setMethods("SupplierOrderItemMatch"); + setOperatorUser(sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()).getName()); + setCreateTime(new Date()); + setReason("完成发票行【" + item.getName() + "+" + item.getSpecification() + "】的发票匹配"); + }}; + supplierMatchingLogMapper.insert(supplierMatchingLog); + + return Response.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("提交异常"); + } + } + @Override + public RestResponse SupplierInvoiceMatchList(SupplierInvoiceMatchForm form) { + // 1单张发票匹配、2批量发票匹配 + if (form.getMatchMode() == 1) { + // 当前用户角色判断 + SysUser sysUser = sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()); + SysRole sysRole = sysRoleMapper.selectByPrimaryKey(sysUser.getRole()); + SysUserOrg sysUserOrg = null; + if (sysRole != null && sysRole.getRoleType() != null && sysRole.getRoleType().equals("fin")) { + SysUserApprove sysUserApprove = sysUserApproveMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()); + sysUserOrg = new SysUserOrg(); + sysUserOrg.setUserId(sysUserApprove.getUserId()); + sysUserOrg.setAuthorizedOrg(sysUserApprove.getAuthorizedOrg()); + sysUserOrg.setCorInvType(sysUserApprove.getCorInvType()); + sysUserOrg.setDataAuthType(sysUserApprove.getDataAuthType()); + } else { + sysUserOrg = sysUserOrgMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()); + } + if (sysUserOrg != null && !Objects.equals(sysUserOrg.getDataAuthType(), 0)) { + if (Objects.equals(sysUserOrg.getDataAuthType(), 2)) { + form.setSearchOwner((int) RequestSecurityPolicy.getUserId()); + } else { + form.setSearchOrg((int) RequestSecurityPolicy.getUserId()); + } + } + int total = corporateInvoiceMapper.invoiceMatchingCount(form); + List corporateInvoiceList = corporateInvoiceMapper.invoiceMatchingList(form); + for (CorporateInvoice corporateInvoice : corporateInvoiceList) { + if (corporateInvoice.getPriceType() == 0) {// 税前 + BigDecimal percent = corporateInvoiceMapper.calculateMatchingPercent(corporateInvoice.getPriceType(), corporateInvoice.getId()); + corporateInvoice.setPercent(percent.setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); + } else {// 税后 + BigDecimal percent = corporateInvoiceMapper.calculateMatchingPercentPriceType_1(corporateInvoice.getPriceType(), corporateInvoice.getId()); + corporateInvoice.setPercent(percent.setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); + } + } + Object dataResult = PaginationUtil.getPageResult(total, form, corporateInvoiceList); + return RestResponse.success(dataResult); + } else { + List list = supplierOrderMapper.getMatchListForMultiMode(form); + for (SupplierOrder supplierOrder : list) { + supplierOrder.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByOrderId(supplierOrder.getId())); + } + return RestResponse.success(list); + } + } + + @Override + public RestResponse matchInvoices(String numberS, String numberE, Integer invoiceType) { + List list = corporateInvoiceMapper.supplierInvoiceMatchInvoiceList(numberS, numberE, invoiceType); + for (InvoiceItemListDto invoiceItemListDto : list) { + invoiceItemListDto.setUsedMoney(supplierOrderItemMatchingMapper.getUsedAmountByItemId(invoiceItemListDto.getId())); + } + return RestResponse.success(list); + } +// @Transactional + @Override + public RestResponse materialAutoMatching(String invoiceId, String directSuppierCode) { + try { + if (StringUtil.isBlank(invoiceId)) { + return RestResponse.failure("非法参数"); + } + Supplier supplier = null; + String supplierCode = null; + log.info("directSuppierCode===>{}", directSuppierCode); + String sellerNo = null; + if (null == directSuppierCode) { + supplierCode = corporateInvoiceMapper.selectSupplierCode(invoiceId); + log.info("supplierCode===>{}", supplierCode); + if (StringUtil.isBlank(supplierCode)) { + return RestResponse.failure("供应商不存在"); + } + supplier = supplierMapper.selectCodeByNameAndCode2("", supplierCode); + log.info("supplier===>{}", supplier); + if (supplier == null) { + return RestResponse.failure("供应商不存在"); + } + } else { + supplier = supplierMapper.selectCodeByNameAndCode2("", directSuppierCode); + log.info("supplier===>{}", supplier); + if (supplier == null) { + return RestResponse.failure("供应商不存在"); + } + supplierCode = supplier.getCode(); + } + sellerNo = supplier.getTaxNo(); + Map params = new HashMap(); + params.put("supplierCode", supplierCode); + params.put("invoiceId", invoiceId); + + SysConfig matAutoMapConfig = null; + matAutoMapConfig = sysConfigMapper.selectByCode("matAutoMap"); + if (null == matAutoMapConfig || "1".equals(matAutoMapConfig.getValue())) { + // matAutoMap 不存在或者= 1 走原来的逻辑 + + // invoice是否是鹏飞发票 确认是否传递参数给 supplierOrderMapper.selectOrderForMaterial(params); + CorporateInvoice invoice = corporateInvoiceMapper.selectById(invoiceId); + String billCode = invoice.getExt10(); + // 获取Item数据 + List corpItems = null; + // 获取Item数据 + if (StringUtil.isEmpty(billCode)) { + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial(params); + } else { + // params.put("billCode", billCode); + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial2(params); + } + // 获取Order数据 + List orderMater = supplierOrderMapper.selectOrderForMaterial(params); + + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + JSONObject forObject = null; + int maxTry = 0; + while (!orderMater.isEmpty() && !corpItems.isEmpty() && maxTry <= 5) { + log.info("AI-token{}", token); + maxTry++; + // 发送数据 + if (corpItems.size() > 0 && orderMater.size() > 0) { + SysConfig aiGetMaterialUrl = sysConfigMapper.selectByCode("AI_GET_MATERIAL_URL"); + SysConfig aiAutoMat = sysConfigMapper.selectByCode("AI_AUTO_MAT"); + // 拼接数据 + String[] c = new String[orderMater.size()]; + String[] d = new String[orderMater.size()]; + String[] e = new String[corpItems.size()]; + String[] f = new String[corpItems.size()]; + String[] g = new String[corpItems.size()]; + // 20230812新增单位 + String[] h = new String[orderMater.size()]; + SysConfig additionSpec = sysConfigMapper.selectByCode("addition_spec"); + if (null == additionSpec || "0".equals(additionSpec.getValue())) { + for (int j = 0; j < orderMater.size(); j++) { + SupplierOrder order = orderMater.get(j); + c[j] = order.getItemNo(); + d[j] = order.getGoods(); + h[j] = order.getUom(); + } + for (int i = 0; i < corpItems.size(); i++) { + CorporateInvoiceItems item = corpItems.get(i); + e[i] = item.getUnit(); + f[i] = item.getName(); + g[i] = item.getSpecification(); + } + } else { + for (int j = 0; j < orderMater.size(); j++) { + SupplierOrder order = orderMater.get(j); + c[j] = order.getItemNo(); + d[j] = order.getGoods() + SPLIT_STR + order.getExt01() + SPLIT_STR + order.getUnitPrice().setScale(2, RoundingMode.HALF_UP); + h[j] = order.getUom(); + } + for (int i = 0; i < corpItems.size(); i++) { + CorporateInvoiceItems item = corpItems.get(i); + e[i] = item.getUnit(); + // 由于出现四舍五入导致无法完全匹配 + log.info("item.getSpecification():{}", item.getSpecification()); + String[] specs = item.getSpecification().split(SPLIT_STR); + String uPrice = specs[1]; + if ("null".equals(uPrice)) { + continue; + } + BigDecimal decimal = new BigDecimal(uPrice); + decimal = decimal.setScale(2, RoundingMode.HALF_UP); + String uPrice4 = decimal.toString(); + f[i] = item.getName() + SPLIT_STR + item.getSpecification().replace(uPrice, uPrice4); + g[i] = item.getSpecification(); + } + } + + // 设置请求参数 + headers.add("session", token); + Map body = new HashMap(); + Map lineparams = new TreeMap(); + lineparams.put("supplierCode", supplierCode); + lineparams.put("listC", c); + lineparams.put("listD", d); + lineparams.put("listE", e); + lineparams.put("listF", f); + lineparams.put("listG", g); + lineparams.put("listH", h); + body.put("data", lineparams); + body.put("DfindFG", "False"); + String bodyJsonData = JSON.toJSONString(body); + log.info("AI-mater请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + + // 开始调用 + // 参数1:目标请求地址 + // 参数2:请求体 + // 参数3:目标请求接口的返回值类型(execute接口的返回值类型) + try { + forObject = client.postForObject(aiGetMaterialUrl.getValue(), request, JSONObject.class); + } catch (Exception ee) { + log.error("forObject eroor:" + ee.getMessage()); + continue; + } + forObject.put("isAutoMat", aiAutoMat == null ? "0" : aiAutoMat.getValue()); + log.info("AI-token获取{}", forObject); + if (aiAutoMat != null && aiAutoMat.getValue() != null && aiAutoMat.getValue().equals("1")) {// supplier_material + Object result = forObject.get("result"); + if (result != null && result.toString().equals("1")) { + JSONArray resMat = forObject.getJSONObject("response").getJSONArray("resFormat"); + JSONArray canInsertData = new JSONArray(); + log.info("resMat获取{}", resMat.toJSONString()); + if (resMat.size() > 0) { + + for (int i = 0; i < resMat.size(); i++) { + // 判断是否 物料号一致 + JSONObject matVal = resMat.getJSONObject(i); + double score = (double) matVal.get("score"); + if (score > 0.8) { + if (null == additionSpec || "0".equals(additionSpec.getValue())) { + SupplierMaterial temMat = new SupplierMaterial(); + temMat.setSupplierNo(matVal.get("supplierCode").toString()); + temMat.setMaterialNo(matVal.get("C").toString()); + temMat.setMaterial(matVal.get("D").toString()); + //temMat.setUom(matVal.get("E").toString()); + temMat.setUom(matVal.get("H").toString()); + temMat.setSupplierMaterial(matVal.get("F").toString()); + temMat.setSpecification(matVal.get("G").toString()); + supplierMaterialMapper.insertSelective(temMat); + } else { + log.info("成功返回物料{}===========>{}", matVal.get("C").toString(), matVal.get("D").toString().split(SPLIT_STR)[0]); + SupplierMaterial temMat = new SupplierMaterial(); + temMat.setSupplierNo(matVal.get("supplierCode").toString()); + temMat.setMaterialNo(matVal.get("C").toString()); + temMat.setMaterial(matVal.get("D").toString().split(SPLIT_STR)[0]); + //temMat.setUom(matVal.get("E").toString()); + temMat.setUom(matVal.get("H").toString()); + temMat.setSupplierMaterial(matVal.get("F").toString().split(SPLIT_STR)[0]); + temMat.setSpecification(matVal.get("G").toString()); + supplierMaterialMapper.insertSelective(temMat); + log.info("成功插入物料{}===========>{}", matVal.get("C").toString(), matVal.get("D").toString().split(SPLIT_STR)[0]); + } + } else { + // 判断返回的 名称 规格型号 和单价 拆分匹配是否一致。 + String resD = matVal.get("D").toString(); + String resF = matVal.get("F").toString(); + if (resD.indexOf(SPLIT_STR) > -1 && resF.indexOf(SPLIT_STR) > -1 + && resD.split(SPLIT_STR).length == 3 && resF.split(SPLIT_STR).length == 3) { + String resDs[] = resD.split(SPLIT_STR); + String resFs[] = resF.split(SPLIT_STR); + + String name1 = resDs[0].toLowerCase().replace(" ", ""); + String name2 = resFs[0].toLowerCase().replace(" ", ""); + + String spec1 = resDs[1].toLowerCase().replace(" ", ""); + String spec2 = resFs[1].toLowerCase().replace(" ", ""); + + String price1 = resDs[2]; + String price2 = resFs[2]; + + double score1 = similarity(name1, name2); + double score2 = similarity(spec1, spec2); + double score3 = similarity(price1, price2); + + double score4 = 0.0; + String sub1 = name2.substring(0, 1); + if (sub1.equals("*")) { + String name2splits[] = name2.split("\\*"); + String name3 = name2splits[2]; + score4 = similarity(name1, name3); + } + + if ((name2.indexOf(name1) > -1 || score4 >= 0.8) && (spec1.indexOf(spec2) > -1 || spec2.indexOf(spec1) > -1 || score2 > 0.8) && score3 > 0.9) { + log.info("成功返回物料{}===========>{}", matVal.get("C").toString(), matVal.get("D").toString().split(SPLIT_STR)[0]); + SupplierMaterial temMat = new SupplierMaterial(); + temMat.setSupplierNo(matVal.get("supplierCode").toString()); + temMat.setMaterialNo(matVal.get("C").toString()); + temMat.setMaterial(matVal.get("D").toString().split(SPLIT_STR)[0]); + //temMat.setUom(matVal.get("E").toString()); + temMat.setUom(matVal.get("H").toString()); + temMat.setSupplierMaterial(matVal.get("F").toString().split(SPLIT_STR)[0]); + temMat.setSpecification(matVal.get("G").toString()); + supplierMaterialMapper.insertSelective(temMat); + log.info("成功插入物料{}===========>{}", matVal.get("C").toString(), matVal.get("D").toString().split(SPLIT_STR)[0]); + } + } + } +// String originalMaterialNo =null; +// if(orderMater.size()>i){ +// originalMaterialNo = orderMater.get(i).getItemNo(); +// } +// if(returnMaterialNo.equals(originalMaterialNo)){ +// //物料号匹配则 进入 待插入系列 +// canInsertData.add(matVal); +// break; +// }else{ +// // 若物料号不匹配 认为是匹配错误,则进入下次请求 +// for (SupplierOrder supplierOrder : orderMater) { +// String soItemNo = supplierOrder.getItemNo(); +// if(soItemNo.equals(returnMaterialNo)){ +// canInsertData.add(matVal); +// break; +// } +// } +// break; +// } + } +// for(int i=0;i corpItems = null; + // 获取Item数据 + // params.put("billCode", billCode); + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial2(params); + // 获取Order数据 + List orderMater = supplierOrderMapper.selectOrderForMaterial2(params); + + JSONArray textsArr = new JSONArray(); + if (orderMater.isEmpty()) { + return RestResponse.failure("采购表数据未查到"); + } + for (SupplierOrder supplierOrder : orderMater) { + String name = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + BigDecimal unitPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP); +// // textsArr.add(name+SPLIT_STR+ext01+SPLIT_STR+unitPrice.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { + textsArr.add(unitPrice + name + ext01); + } else { + textsArr.add(unitPrice + name); + } + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + headers.add("session", token); + // corpItems 遍历 查找评分 + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + JSONObject paramsAi = new JSONObject(); + paramsAi.put("scores_method", scores_method); + JSONArray jsa = JSONArray.parseArray(scores_weights); + paramsAi.put("scores_weights", jsa); + requestBody.put("params", paramsAi); + for (CorporateInvoiceItems corpItem : corpItems) { + String name = corpItem.getName(); + String specification = corpItem.getSpecification(); + String uprice = corpItem.getPrice(); + BigDecimal priceDecimal = new BigDecimal(uprice).setScale(2, RoundingMode.HALF_UP); + requestBody.put("text", priceDecimal.toString() + name + specification); +// requestBody.put("text", name); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater new 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + log.error("AI 匹配物料异常:{}", e.getMessage()); + e.printStackTrace(); + return RestResponse.failure("AI 匹配物料异常"); + } + log.info("AI-mater new 结果{}", JSONObject.toJSONString(resultVo)); + if ("1".equals(picktype)) { + // 取 匹配最大值结果 仅一条 + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + continue; + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + // 抽出插入方法 + SupplierOrder supplierOrder = orderMater.get(indexId); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } + } else { + // 0 取最大值和最大值-pickVar之间的所有数据 + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + continue; + } else { + // 抽出插入方法 + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + Double minScore = maxScore - pickBD.doubleValue(); + for (int i = 0; i < scores.size(); i++) { + Double score = scores.get(i); + if (score >= minScore) { + int scoreIndex = ids.get(i); + SupplierOrder supplierOrder = orderMater.get(scoreIndex); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } else { + break; + } + } + } + } + } + } else if ("2".equals(autoMapType)) { + // 开关B + // B 开关autoMapType 2 + //text: + //发票行 - 》 查询 material 表 ,已存在的过滤 ,只保存不存在的。 存在条件=》name+规格型号 + //texts: (大过滤条件:该发票对应的PO下的收货数据) + //发票供应商下对应的所有PO 的 materialNo,物料匹配 全部查询 存在条件=》materialNo。 + //返回结果根据参数:picktype插入material表。 + // invoice是否是鹏飞发票 确认是否传递参数给 supplierOrderMapper.selectOrderForMaterial(params); + + // 获取Item数据 + List corpItems = null; + // 获取Item数据 + // params.put("billCode", billCode); + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial2(params); + // 获取Order数据 + params.put("type", "ALL"); + + List orderMater = supplierOrderMapper.selectOrderForMaterial2(params); + + JSONArray textsArr = new JSONArray(); + for (SupplierOrder supplierOrder : orderMater) { + String name = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + BigDecimal unitPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP); + // textsArr.add(name+SPLIT_STR+ext01+SPLIT_STR+unitPrice.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { + textsArr.add(unitPrice + name + ext01); + } else { + textsArr.add(unitPrice + name); + } + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + headers.add("session", token); + // corpItems 遍历 查找评分 + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + JSONObject paramsAi = new JSONObject(); + paramsAi.put("scores_method", scores_method); + JSONArray jsa = JSONArray.parseArray(scores_weights); + paramsAi.put("scores_weights", jsa); + requestBody.put("params", paramsAi); + for (CorporateInvoiceItems corpItem : corpItems) { + String name = corpItem.getName(); + String specification = corpItem.getSpecification(); + String uprice = corpItem.getPrice(); + BigDecimal priceDecimal = new BigDecimal(uprice).setScale(2, RoundingMode.HALF_UP); + requestBody.put("text", priceDecimal.toString() + name + specification); +// requestBody.put("text", name); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater new 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + log.error("AI 匹配物料异常:{}", e.getMessage()); + e.printStackTrace(); + return RestResponse.failure("AI 匹配物料异常"); + } + log.info("AI-mater new 结果{}", JSONObject.toJSONString(resultVo)); + if ("1".equals(picktype)) { + // 取 匹配最大值结果 仅一条 + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + continue; + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + // 抽出插入方法 + SupplierOrder supplierOrder = orderMater.get(indexId); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } + } else { + // 0 取最大值和最大值-pickVar之间的所有数据 + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + continue; + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + Double minScore = maxScore - pickBD.doubleValue(); + for (int i = 0; i < scores.size(); i++) { + Double score = scores.get(i); + if (score >= minScore) { + int scoreIndex = ids.get(i); + SupplierOrder supplierOrder = orderMater.get(scoreIndex); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } else { + break; + } + } + } + } + + + } + } else if ("3".equals(autoMapType)) { + //C 开关autoMapType 3 + //text: + //发票行 - 》 发票明细 表 -》material 。 + //texts: (大过滤条件:该发票对应的PO下的收货数据) + //发票供应商下对应的所有PO 的 materialNo,物料匹配 全部查询 存在条件=》materialNo。 + //返回结果 + //name + 规格型号 不存在 返回结果根据参数:picktype插入material表。 + //name + 规格型号 已存在 返回结果根据参数:picktype + // 如果name + 规格型 + materail number 组合存在,不处理 + // 如果name + 规格型 + materail number 组合不存在,插入这条记录或多条记录。 (譬如表里是%拖鞋* + 123 红拖鞋, 返回是%拖鞋* + 124 蓝拖鞋,系统里就插入变为两条) + // invoice是否是鹏飞发票 确认是否传递参数给 supplierOrderMapper.selectOrderForMaterial(params); + // 获取Item数据 + List corpItems = null; + // 获取Item数据 + // params.put("billCode", billCode); + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial(params); + // 获取Order数据 + params.put("type", "ALL"); + // ORDERNo 范围 + if (null == supplierMatching) { + + } else { + orderNos = supplierMatching.getOrderNo(); + } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderNos)) { + params.put("orderNos", orderNos); + } + List orderMater = supplierOrderMapper.selectOrderForMaterial2(params); + + JSONArray textsArr = new JSONArray(); + for (SupplierOrder supplierOrder : orderMater) { + String name = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + BigDecimal unitPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP); + // textsArr.add(name+SPLIT_STR+ext01+SPLIT_STR+unitPrice.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { + if (ext01.indexOf(PRICE_CN_NAME) > -1) { + textsArr.add(name + ext01); + } else { + textsArr.add(name + PRICE_CN_NAME + unitPrice.toString() + " " + ext01); + } + } else { + textsArr.add(name + PRICE_CN_NAME + unitPrice.toString()); + } + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + headers.add("session", token); + // corpItems 遍历 查找评分 + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + JSONObject paramsAi = new JSONObject(); + paramsAi.put("scores_method", scores_method); + JSONArray jsa = JSONArray.parseArray(scores_weights); + paramsAi.put("scores_weights", jsa); + requestBody.put("params", paramsAi); + for (CorporateInvoiceItems corpItem : corpItems) { + String name = corpItem.getName(); + String specification = corpItem.getSpecification(); + String uprice = corpItem.getPrice(); + BigDecimal priceDecimal = new BigDecimal(uprice).setScale(2, RoundingMode.HALF_UP); + requestBody.put("text", priceDecimal.toString() + name + specification); +// requestBody.put("text", name); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater new 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + log.error("AI 匹配物料异常:{}", e.getMessage()); + e.printStackTrace(); + return RestResponse.failure("AI 匹配物料异常"); + } + log.info("AI-mater new 结果{}", JSONObject.toJSONString(resultVo)); + if ("1".equals(picktype)) { + // 取 匹配最大值结果 仅一条 + List scores = resultVo.getScores(); + List ids = resultVo.getIds(); + if (ids.isEmpty()) { + continue; + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + // 抽出插入方法 + SupplierOrder supplierOrder = orderMater.get(indexId); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } + } else { + // 0 取最大值和最大值-pickVar之间的所有数据 + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + continue; + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore < matMatchScoreLimit) { + continue; + } + Double minScore = maxScore - pickBD.doubleValue(); + for (int i = 0; i < scores.size(); i++) { + Double score = scores.get(i); + if (score >= minScore) { + int scoreIndex = ids.get(i); + SupplierOrder supplierOrder = orderMater.get(scoreIndex); + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + } else { + break; + } + } + } + } + } + } + } else if ("3".equals(matAutoMapConfig.getValue())) { + // 拼接数据 + SysConfig additionSpec = sysConfigMapper.selectByCode("addition_spec"); + String additionSpecValue = null; + if (null == additionSpec) { + log.warn("未匹配值 additionSpec,默认不采用 拼接"); + additionSpecValue = "0"; + } else { + additionSpecValue = additionSpec.getValue(); + } + // 开关A autoMapType + SysConfig autoMapTypeConfig = sysConfigMapper.selectByCode("autoMapType"); + String autoMapType = ""; + if (null == autoMapTypeConfig) { + log.warn("未匹配值 autoMapType"); + } else { + autoMapType = autoMapTypeConfig.getValue(); + } + // pick1method + SysConfig pick1methodConfig = sysConfigMapper.selectByCode("pick1method"); + String pick1method = "OCR"; + if (null == pick1methodConfig) { + log.warn("未匹配值 pick1method"); + } else { + pick1method = pick1methodConfig.getValue(); + } + + SysConfig ND_STRING_MATCH_URL_CONFIG = sysConfigMapper.selectByCode("ND_STRING_MATCH_MODEL_NAME"); + String ndStringMatchModelName = null; + if (null == ND_STRING_MATCH_URL_CONFIG) { + log.warn("未匹配值 ND_STRING_MATCH_MODEL_NAME"); + } else { + ndStringMatchModelName = ND_STRING_MATCH_URL_CONFIG.getValue(); + } + CorporateInvoice invoice = corporateInvoiceMapper.selectById(invoiceId); +// String billCode = invoice.getExt10(); + // 获取Item数据 + List corpItems = null; + // 获取Item数据 + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial(params); + // ORDERNo 范围 + String orderNos = null; + SupplierMatching supplierMatching = supplierMatchingMapper.selectByPrimaryKey(invoiceId); + if (null == supplierMatching) { + + } else { + orderNos = supplierMatching.getOrderNo(); + } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderNos)) { + params.put("orderNos", orderNos); + } + // 获取Order数据 + List orderMater = supplierOrderMapper.selectOrderForMaterial2(params); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + if (corpItems.size() > 0 && orderMater.size() > 0) { + SysConfig AIMatchAPIConfig = sysConfigMapper.selectByCode("AI_MATERIAL_MATCH_API"); + if (null == AIMatchAPIConfig) { + log.error("未匹配值 AIMatchAPI"); + return RestResponse.failure("未匹配值 AIMatchAPI"); + } + String AIMatchAPIValue = AIMatchAPIConfig.getValue(); + // 先匹配出前5条匹配率较高的 物料 + + // 获取Item数据 + JSONArray textsArr = new JSONArray(); + if (orderMater.isEmpty()) { + return RestResponse.failure("无物料信息"); + } + log.info("orderMater.size=>{}", orderMater.size()); + for (SupplierOrder supplierOrder : orderMater) { + String name = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + String itemNo = supplierOrder.getItemNo(); + BigDecimal unitPrice = supplierOrder.getUnitPrice(); + // textsArr.add(name+SPLIT_STR+ext01+SPLIT_STR+unitPrice.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + if ("0".equals(additionSpecValue)) { + textsArr.add(name); + } else if ("2".equals(additionSpecValue)) { + textsArr.add(itemNo); + } else if ("1".equals(additionSpecValue)) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { +// if(ext01.indexOf(PRICE_CN_NAME)>-1){ +// textsArr.add(name+" "+ext01); +// }else{ +// textsArr.add(name+ext01+" "+PRICE_CN_NAME+unitPrice.toString()); +// } + textsArr.add(name + " " + ext01); + } else { +// textsArr.add(name+PRICE_CN_NAME+unitPrice.toString()); + textsArr.add(name); + } + } + } + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.add("session", token); + // corpItems 遍历 查找评分 + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + // 取前五 + for (CorporateInvoiceItems corpItem : corpItems) { + List top5Index = new ArrayList<>(); + int i = 0; + String name = corpItem.getName(); + String specification = null == corpItem.getSpecification() ? "" : corpItem.getSpecification(); + String price = new BigDecimal(corpItem.getPrice()).setScale(2, RoundingMode.HALF_UP).toString(); + ; + if ("0".equals(additionSpecValue)) { + requestBody.put("text", name); + } else if ("2".equals(additionSpecValue)) { + requestBody.put("text", specification); + } else if ("1".equals(additionSpecValue)) { +// if(specification.indexOf(PRICE_CN_NAME)>-1){ +// requestBody.put("text", name+specification); +// }else{ +// requestBody.put("text",name+specification+" "+PRICE_CN_NAME+price); +// } + requestBody.put("text", name + specification); + } +// requestBody.put("text", name); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater new 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + log.error("AI 匹配物料异常:{}", e.getMessage()); + e.printStackTrace(); + } + log.info("AI-mater new 结果{}", JSONObject.toJSONString(resultVo)); + SysConfig STRING_MATCH_LIMIT_CONFIG = sysConfigMapper.selectByCode("STRING_MATCH_LIMIT"); + String STRING_MATCH_LIMIT_VALUE = "5"; + if (null == STRING_MATCH_LIMIT_CONFIG) { + log.warn("STRING_MATCH_LIMIT 未配置,采用默认5"); + } else { + STRING_MATCH_LIMIT_VALUE = STRING_MATCH_LIMIT_CONFIG.getValue(); + } + for (Integer id : resultVo.getIds()) { + top5Index.add(id); + i = i + 1; + if (i >= Integer.valueOf(STRING_MATCH_LIMIT_VALUE)) { + break; + } + } + List orderMaterSelected = new ArrayList<>(); + for (Integer index : top5Index) { + orderMaterSelected.add(orderMater.get(index)); + } + List orderMaterStringSelected = new ArrayList<>(); + for (SupplierOrder supplierOrder : orderMaterSelected) { + String name2 = supplierOrder.getGoods(); + String ext01 = null == supplierOrder.getExt01() ? "" : supplierOrder.getExt01(); + String itemNo = supplierOrder.getItemNo(); + BigDecimal unitPrice = supplierOrder.getUnitPrice(); + if ("0".equals(additionSpecValue)) { + orderMaterStringSelected.add(name2); + } else if ("2".equals(additionSpecValue)) { + orderMaterStringSelected.add(itemNo); + } else if ("1".equals(additionSpecValue)) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { +// if(ext01.indexOf(PRICE_CN_NAME)>-1){ +// orderMaterStringSelected.add(name2+" "+ext01); +// }else{ +// orderMaterStringSelected.add(name2+ext01+" "+PRICE_CN_NAME+unitPrice.toString()); +// } + orderMaterStringSelected.add(name2 + " " + ext01); + } else { +// orderMaterStringSelected.add(name2+PRICE_CN_NAME+unitPrice.toString()); + orderMaterStringSelected.add(name2); + } + } + } + + if ("OCR".equals(pick1method)) { + SysConfig aiGetMaterialUrlConfig = sysConfigMapper.selectByCode("AI_GET_MATERIAL_URL_V3"); + if (null == aiGetMaterialUrlConfig) { + log.error("未匹配值 AI_GET_MATERIAL_URL_V3"); + } + String v3Url = aiGetMaterialUrlConfig.getValue(); + // 拼接数据 + SysConfig modelNameConfig = sysConfigMapper.selectByCode("AI_MATERIAL_MODEL_NAME"); + String modelName = "Qwen2-72BVL"; + if (null == modelNameConfig) { + log.warn("未匹配值 AI_MATERIAL_MODEL_NAME,默认 Qwen2-72BVL"); + } else { + modelName = modelNameConfig.getValue(); + } + GetMaterialParamVo paramVo = new GetMaterialParamVo(); + paramVo.setModel_name(modelName); + // 不要 拼接规格单价 + CorporateInvoiceItems item = corpItem; + String itemName = item.getName(); + String spec = null == item.getSpecification() ? "" : item.getSpecification(); + String priceP = new BigDecimal(item.getPrice()).setScale(2, RoundingMode.HALF_UP).toString(); + String dataName = itemName + spec; + log.info("物料匹配 itemName:{}", itemName); + log.info("物料匹配 spec:{}", spec); + log.info("物料匹配 priceP:{}", priceP); + log.info("物料匹配 dataName:{}", dataName); + if (spec.indexOf(PRICE_CN_NAME) > -1) { + dataName = itemName + " " + spec; + } else { + dataName = itemName + spec + " " + PRICE_CN_NAME + priceP; + } + if ("0".equals(additionSpecValue)) { + paramVo.setData_base(itemName); + } else if ("1".equals(additionSpecValue)) { + paramVo.setData_base(dataName); + } else if ("2".equals(additionSpecValue)) { + paramVo.setData_base(spec); + } + List dataList = new ArrayList<>(); + for (SupplierOrder supplierOrder : orderMaterSelected) { + String orderName = supplierOrder.getGoods(); + String orderPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP).toString(); + String orderSpec = supplierOrder.getExt01() == null ? "" : supplierOrder.getExt01(); + String ListName = null; + String itemNo = supplierOrder.getItemNo(); + if (orderSpec.indexOf(PRICE_CN_NAME) > -1) { + ListName = orderName + " " + orderSpec; + } else { + ListName = orderName + orderSpec + " " + PRICE_CN_NAME + orderPrice; + } +// ListName = orderName+" "+orderSpec; + if ("0".equals(additionSpecValue)) { + dataList.add(orderName); + } else if ("1".equals(additionSpecValue)) { + dataList.add(ListName); + } else if ("2".equals(additionSpecValue)) { + dataList.add(itemNo); + } + } + paramVo.setData_list(dataList); + headers.add("session", token); + bodyJsonData = JSON.toJSONString(paramVo); + log.info("AI-mater v3 v3Url =>{}", v3Url); + log.info("AI-mater v3请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + request = new HttpEntity<>(bodyJsonData, headers); + MatterV3ResponseVo v3Response = null; + try { + v3Response = client.postForObject(v3Url, request, MatterV3ResponseVo.class); + } catch (Exception eee) { + log.error(eee.getMessage()); + eee.printStackTrace(); + continue; + } + // 抽出插入方法 + String data = v3Response.getData(); + log.info("物料匹配 data:{}", data); + for (SupplierOrder supplierOrder : orderMaterSelected) { + String orderName = supplierOrder.getGoods(); + String orderPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP).toString(); + String orderSpec = supplierOrder.getExt01() == null ? "" : supplierOrder.getExt01(); + String itemNo = supplierOrder.getItemNo(); + String ListName = null; + if (orderSpec.indexOf(PRICE_CN_NAME) > -1) { + ListName = orderName + " " + orderSpec; + } else { + ListName = orderName + orderSpec + " " + PRICE_CN_NAME + orderPrice; + } +// ListName = orderName+" "+orderSpec; + if ("0".equals(additionSpecValue)) { + if (orderName.equals(data)) { + log.info("物料匹配价格判断price:{}", price); + log.info("物料匹配价格判断orderPrice:{}", orderPrice); +// if(price.equals(orderPrice)){ + saveSupplierMaterial(item, supplierOrder, autoMapType); + break; +// } + } + } else if ("1".equals(additionSpecValue)) { + if (ListName.equals(data)) { + saveSupplierMaterial(item, supplierOrder, autoMapType); + break; + } + } else if ("2".equals(additionSpecValue)) { + if (itemNo.equals(data)) { + saveSupplierMaterial(item, supplierOrder, autoMapType); + supplierMaterialMapper.deleteHBHS(); + break; + } + } + } + } else { + String itemName1 = null; + + if ("0".equals(additionSpecValue)) { + itemName1 = name; + } else if ("1".equals(additionSpecValue)) { + if (specification.indexOf(PRICE_CN_NAME) > -1) { + itemName1 = name + specification; + } else { + itemName1 = name + specification + " " + PRICE_CN_NAME + price; + } + } else if ("2".equals(additionSpecValue)) { + itemName1 = specification; + } + JSONObject lastBody = new JSONObject(); + lastBody.put("target", itemName1); + JSONObject sources = new JSONObject(); + for (int o = 0; o < orderMaterStringSelected.size(); o++) { + String tar = orderMaterStringSelected.get(o); + sources.put(String.valueOf(o), tar); + } + lastBody.put("source", sources); + JSONObject asset = new JSONObject(); + JSONObject json_data = new JSONObject(); + json_data.put("content", lastBody.toJSONString()); + asset.put("type", "json"); + asset.put("json_data", json_data); + JSONObject body = new JSONObject(); + body.put("asset", asset); + + Map paramBody = new HashMap(); + paramBody.put("body", body.toJSONString()); + log.info("json.toJSONString()=>{}", body.toJSONString()); + paramBody.put("Content-Type", "application/json"); + paramBody.put("Authorization", ""); + Map resultEntity = null; + try { + resultEntity = ruiZhenOCRService.billsCropFHByNd(ndStringMatchModelName, body); + } catch (Exception e) { + log.error(e.getMessage()); + e.printStackTrace(); + } + JSONObject jsonDataResult = (JSONObject) resultEntity.get("result"); + String sourceId = jsonDataResult.getString("source_id"); + String targetResult = orderMaterStringSelected.get(Integer.valueOf(sourceId)); + log.info("targetResult=>{}", targetResult); + for (SupplierOrder supplierOrder : orderMater) { + String nameO = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + BigDecimal unitPrice = supplierOrder.getUnitPrice(); + String itemNo = supplierOrder.getItemNo(); + String orderName = null; + if ("0".equals(additionSpecValue)) { + orderName = nameO; + } else if ("1".equals(additionSpecValue)) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { +// if(ext01.indexOf(PRICE_CN_NAME)>-1){ +// orderName =nameO+" "+ext01; +// }else{ +// orderName =nameO+ext01+" "+PRICE_CN_NAME+unitPrice; +// } + orderName = nameO + " " + ext01; + } else { +// orderName =nameO+PRICE_CN_NAME+unitPrice; + orderName = nameO; + } + } else if ("2".equals(additionSpecValue)) { + orderName = itemNo; + } + if (orderName.equals(targetResult)) { + String orderPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP).toString(); + log.info("物料匹配价格判断 vector price:{}", price); + log.info("物料匹配价格判断 vector orderPrice:{}", orderPrice); + +// if(price.equals(orderPrice)){ + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + // 如果是 + if ("2".equals(additionSpecValue)) { + // 执行一个删除语句 + supplierMaterialMapper.deleteHBHS(); + } + break; +// } + } + } + } + } + } + } else if ("4".equals(matAutoMapConfig.getValue())) { + //ND baseUrl + SysConfig ND_BASE_URL_CONFIG = sysConfigMapper.selectByCode("ND_OCR_BASE_PATH"); + String ndBaseUrl = null; + if (null == ND_BASE_URL_CONFIG) { + log.warn("未匹配值 ND_BASE_URL_CONFIG"); + } else { + ndBaseUrl = ND_BASE_URL_CONFIG.getValue(); + } + + SysConfig ND_STRING_MATCH_URL_CONFIG = sysConfigMapper.selectByCode("ND_STRING_MATCH_MODEL_NAME"); + String ndStringMatchModelName = null; + if (null == ND_STRING_MATCH_URL_CONFIG) { + log.warn("未匹配值 ND_BASE_URL_CONFIG"); + } else { + ndStringMatchModelName = ND_STRING_MATCH_URL_CONFIG.getValue(); + } + + + // 拼接数据 + SysConfig additionSpec = sysConfigMapper.selectByCode("addition_spec"); + String additionSpecValue = "0"; + if (null == additionSpec) { + log.warn("未匹配值 additionSpec,默认不采用 拼接"); + } else { + additionSpecValue = additionSpec.getValue(); + } + // 开关A autoMapType + SysConfig autoMapTypeConfig = sysConfigMapper.selectByCode("autoMapType"); + String autoMapType = ""; + if (null == autoMapTypeConfig) { + log.warn("未匹配值 autoMapType"); + } else { + autoMapType = autoMapTypeConfig.getValue(); + } + CorporateInvoice invoice = corporateInvoiceMapper.selectById(invoiceId); + String billCode = invoice.getExt10(); + // 获取Item数据 + List corpItems = null; + // 获取Item数据 + if (StringUtil.isEmpty(billCode)) { + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial(params); + } else { + // params.put("billCode", billCode); + corpItems = corporateInvoiceItemsMapper.selectItemsForMaterial2(params); + } + // ORDERNo 范围 + String orderNos = null; + SupplierMatching supplierMatching = supplierMatchingMapper.selectByPrimaryKey(invoiceId); + if (null == supplierMatching) { + + } else { + orderNos = supplierMatching.getOrderNo(); + } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderNos)) { + params.put("orderNos", orderNos); + } + // 获取Order数据 +// String lastItemNameAndSpecification= COUNTER_MAP.getOrDefault(bpmNo,""); +// if(org.apache.commons.lang3.StringUtils.isNotBlank(lastItemNameAndSpecification)){ +// String lastName = lastItemNameAndSpecification.split("####")[0]; +// String lasSpecification = lastItemNameAndSpecification.split("####")[1]; +// params.put("lastName",lastName); +// params.put("lastSpec",lastItemNameAndSpecification); +// } + List orderMater = supplierOrderMapper.selectOrderForMaterial2(params); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + + SysConfig EMBEDDING_API_PATH_config = sysConfigMapper.selectByCode("EMBEDDING_API_PATH"); + String embeddingApiPath = "http://110.42.101.165:8103/ai/vector/"; + if (null == EMBEDDING_API_PATH_config) { + log.warn("未匹配值 EMBEDDING_API_PATH"); + } else { + embeddingApiPath = EMBEDDING_API_PATH_config.getValue(); + } + String embeddingSaveApiPath = embeddingApiPath + "save"; + SysConfig AIMatchAPIConfig = sysConfigMapper.selectByCode("AI_MATERIAL_MATCH_API"); + if (null == AIMatchAPIConfig) { + log.error("未匹配值 AIMatchAPI"); + return RestResponse.failure("未匹配值 AIMatchAPI"); + } + String AIMatchAPIValue = AIMatchAPIConfig.getValue(); + if (corpItems.size() > 0 && orderMater.size() > 0) { + // 获取Item数据 + if (orderMater.isEmpty()) { + return RestResponse.failure("无物料信息"); + } + for (SupplierOrder supplierOrder : orderMater) { + String name = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + BigDecimal unitPrice = supplierOrder.getUnitPrice(); + String itemNo = supplierOrder.getItemNo(); + String orderName = null; + if ("0".equals(additionSpecValue)) { + orderName = name; + } else if ("1".equals(additionSpecValue)) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { + if (ext01.indexOf(PRICE_CN_NAME) > -1) { + orderName = name + " " + ext01; + } else { + orderName = name + PRICE_CN_NAME + unitPrice + " " + ext01; + } + } else { + orderName = name + PRICE_CN_NAME + unitPrice; + } + } else if ("2".equals(additionSpecValue)) { + orderName = itemNo; + } + + + // 调用向量接口 2表示收货 + String embeddingResult = saveVector(embeddingSaveApiPath, supplierOrder, orderName, "2"); + if (null == embeddingResult) { + log.warn("向量保存接口异常"); + } + } + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.add("session", token); + // corpItems 向量取前配置数量1 + SysConfig EMBEDDING_LIMIT_CONFIG = sysConfigMapper.selectByCode("EMBEDDING_LIMIT"); + String EMBEDDING_LIMIT_VALUE = "20"; + if (null == EMBEDDING_LIMIT_CONFIG) { + log.warn("EMBEDDING_LIMIT 未配置,采用默认20"); + } else { + EMBEDDING_LIMIT_VALUE = EMBEDDING_LIMIT_CONFIG.getValue(); + } + + SysConfig STRING_MATCH_LIMIT_CONFIG = sysConfigMapper.selectByCode("STRING_MATCH_LIMIT"); + String STRING_MATCH_LIMIT_VALUE = "5"; + if (null == STRING_MATCH_LIMIT_CONFIG) { + log.warn("STRING_MATCH_LIMIT 未配置,采用默认5"); + } else { + STRING_MATCH_LIMIT_VALUE = STRING_MATCH_LIMIT_CONFIG.getValue(); + } + + for (CorporateInvoiceItems corpItem : corpItems) { + JSONArray textsArr = new JSONArray(); + List top5Index = new ArrayList<>(); + List topNString = new ArrayList<>(); + String name = corpItem.getName(); + String specification = corpItem.getSpecification(); + String price = new BigDecimal(corpItem.getPrice()).setScale(2, RoundingMode.HALF_UP).toString(); + String itemName1 = null; + if ("0".equals(additionSpecValue)) { + itemName1 = name; + } else if ("1".equals(additionSpecValue)) { + if (specification.indexOf(PRICE_CN_NAME) > -1) { + itemName1 = name + specification; + } else { + itemName1 = name + PRICE_CN_NAME + price + specification; + } + } else if ("2".equals(additionSpecValue)) { + itemName1 = specification; + } + + String embeddingResult = saveVector(embeddingSaveApiPath, null, itemName1, "1"); + if (null == embeddingResult) { + log.warn("向量保存接口异常"); + } + client = restTemplateConfig.restTemplate(); +// HttpEntity request = new HttpEntity<>("", headers); + String embeddingGetNeighborsApi = embeddingApiPath + "getNearestNeighbors?limit=" + EMBEDDING_LIMIT_VALUE; + log.info("embeddingGetNeighborsApi=>{}", embeddingGetNeighborsApi); + Map params2 = new HashMap(); + params2.put("name", itemName1); + params2.put("excludeType", "1"); + params2.put("supplierCode", supplierCode); + params2.put("orderNo", orderNos); + + JSONObject getNearestNeighborsResult = client.postForObject(embeddingGetNeighborsApi, params2, JSONObject.class); + if (getNearestNeighborsResult.getIntValue("code") != 0) { + log.error("getNearestNeighborsResult=>{}", getNearestNeighborsResult.getString("msg")); + continue; + + } + JSONArray dataJsonArray = getNearestNeighborsResult.getJSONArray("data"); + for (int i1 = 0; i1 < dataJsonArray.size(); i1++) { + JSONObject dataEntity = dataJsonArray.getJSONObject(i1); + String name1 = dataEntity.getString("name"); + topNString.add(name1); + + textsArr.add(name1); + } + List orderMaterStringSelected = new ArrayList<>(); + if (topNString.size() > Integer.valueOf(STRING_MATCH_LIMIT_VALUE)) { + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + requestBody.put("text", itemName1); +// requestBody.put("text", name); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater new 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + log.error("AI 匹配物料异常:{}", e.getMessage()); + e.printStackTrace(); + } + int i = 0; + log.info("AI-mater new 结果{}", JSONObject.toJSONString(resultVo)); + for (Integer id : resultVo.getIds()) { + top5Index.add(id); + i = i + 1; + if (i >= Integer.valueOf(STRING_MATCH_LIMIT_VALUE)) { + break; + } + } + for (Integer index : top5Index) { + orderMaterStringSelected.add(topNString.get(index)); + } + } + if (orderMaterStringSelected.isEmpty()) { + orderMaterStringSelected = topNString; + } + + //{ + // "target": "4 Shu No Bifidobacterium 90packs FOD22S 单价 7484 90packs", + // "sources": { + // "0": "POLA/宝丽2022版本+美白丸+180粒单价:11761.0000", + // "1": "宝丽+4种比菲德氏乳酸菌益生菌单价:7484.0000", + // "2": "抗皱30g单价:12117.0000", + // "3": "POLA/宝丽+黑谷膳食纤维养生茶+90包/盒单价:7484.0000", + // "4": "POLA+抗糖丸+黑BA抗糖180粒+新版单价:12830.0000" + // } + //} + JSONObject lastBody = new JSONObject(); + lastBody.put("target", itemName1); + JSONObject sources = new JSONObject(); + for (int i = 0; i < orderMaterStringSelected.size(); i++) { + String tar = orderMaterStringSelected.get(i); + sources.put(String.valueOf(i), tar); + } + lastBody.put("source", sources); + JSONObject asset = new JSONObject(); + JSONObject json_data = new JSONObject(); + json_data.put("content", lastBody.toJSONString()); + asset.put("type", "json"); + asset.put("json_data", json_data); + JSONObject body = new JSONObject(); + body.put("asset", asset); + + Map paramBody = new HashMap(); + paramBody.put("body", body.toJSONString()); + log.info("json.toJSONString()=>{}", body.toJSONString()); + paramBody.put("Content-Type", "application/json"); + paramBody.put("Authorization", ""); + Map resultEntity = null; + try { + resultEntity = ruiZhenOCRService.billsCropFHByNd(ndStringMatchModelName, body); + } catch (Exception e) { + log.error(e.getMessage()); + e.printStackTrace(); + } + JSONObject jsonDataResult = (JSONObject) resultEntity.get("result"); + String sourceId = jsonDataResult.getString("source_id"); + String targetResult = orderMaterStringSelected.get(Integer.valueOf(sourceId)); + log.info("targetResult=>{}", targetResult); + for (SupplierOrder supplierOrder : orderMater) { + String nameO = supplierOrder.getGoods(); + String ext01 = supplierOrder.getExt01(); + String itemNo = supplierOrder.getItemNo(); + BigDecimal unitPrice = supplierOrder.getUnitPrice(); + String orderName = null; + if ("0".equals(additionSpecValue)) { + orderName = nameO; + } else if ("1".equals(additionSpecValue)) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(ext01)) { + if (ext01.indexOf(PRICE_CN_NAME) > -1) { + orderName = nameO + " " + ext01; + } else { + orderName = nameO + PRICE_CN_NAME + unitPrice + " " + ext01; + } + } else { + orderName = nameO + PRICE_CN_NAME + unitPrice; + } + } else if ("2".equals(additionSpecValue)) { + orderName = itemNo; + } + if (orderName.equals(targetResult)) { + String orderPrice = supplierOrder.getUnitPrice().setScale(2, RoundingMode.HALF_UP).toString(); + log.info("物料匹配价格判断 vector price:{}", price); + log.info("物料匹配价格判断 vector orderPrice:{}", orderPrice); +// if(price.equals(orderPrice)){ + +// if(null!=bpmNo){ +// COUNTER_MAP.put(bpmNo,corpItem.getName()+"####"+corpItem.getSpecification()); +// } + + saveSupplierMaterial(corpItem, supplierOrder, autoMapType); + // 如果是 + if ("2".equals(additionSpecValue)) { + // 执行一个删除语句 + supplierMaterialMapper.deleteHBHS(); + } + + + break; +// } + } + } + } + } + } + return RestResponse.success(); + } catch (Exception e) { + log.error("==============================》物料处理异常", e); + throw new ServiceException("处理异常"); + } + } + + private String saveVector(String embeddingSaveApiPath, SupplierOrder supplierOrder, String orderName, String type) { + String url = embeddingSaveApiPath + "?name=" + orderName + "&type=" + type; + Map paramBody = new HashMap(); + com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject(); + params.put("name", orderName); + params.put("vectorType", type); + if (null != supplierOrder) { + params.put("supplierCode", supplierOrder.getSupplierCode()); + params.put("orderNo", supplierOrder.getOrderNo()); + params.put("itemNo", supplierOrder.getItemNo()); + } + log.info("saveVector body=>{}", params.toJSONString()); + paramBody.put("body", params.toJSONString()); + paramBody.put("Content-Type", "application/json"); + paramBody.put("Authorization", ""); + String[] response = interfaceUtil.httpPostMan2(url, paramBody); + if (Integer.parseInt(response[1]) != 200) { + log.error("保存向量响应状态异常:" + response[1] + ",响应体为:" + response[0]); + return null; + } + String res = response[0]; + return res; + } + + private void saveSupplierMaterial(CorporateInvoiceItems corpItem, SupplierOrder supplierOrder, String autoMapType) { + // 判断是否插入 + if ("3".equals(autoMapType)) { + //name + 规格型号 不存在 返回结果根据参数:picktype插入material表。 + //name + 规格型号 已存在 返回结果根据参数:picktype + + //> 如果name + 规格型 + materail number 组合不存在,插入这条记录或多条记录。 (譬如表里是%拖鞋* + 123 红拖鞋, 返回是%拖鞋* + 124 蓝拖鞋,系统里就插入变为两条) + String goods = supplierOrder.getGoods(); + String specification = corpItem.getSpecification(); + String itemNo = supplierOrder.getItemNo(); + + List exist = null; + Map params = new HashMap<>(); + params.put("name", goods); + params.put("itemName", corpItem.getName()); + params.put("specification", specification); + params.put("supplierCode", supplierOrder.getSupplierCode()); + exist = supplierMaterialMapper.selectByParams(params); + if (exist.isEmpty()) { + + } else { + params.put("itemNo", itemNo); + exist = supplierMaterialMapper.selectByParams(params); + if (exist.isEmpty()) { + + } else { + log.warn("物料已存在,不处理"); + return; + } + } + } + log.info("新接口成功返回物料 {}===========>{}", supplierOrder.getItemNo(), supplierOrder.getGoods()); + SupplierMaterial temMat = new SupplierMaterial(); + temMat.setSupplierNo(supplierOrder.getSupplierCode()); + temMat.setMaterialNo(supplierOrder.getItemNo()); + temMat.setMaterial(supplierOrder.getGoods()); + //temMat.setUom(matVal.get("E").toString()); + temMat.setUom(supplierOrder.getUom()); + temMat.setSupplierMaterial(corpItem.getName()); + temMat.setSpecification(corpItem.getSpecification()); + supplierMaterialMapper.insertSelective(temMat); + log.info("新接口成功返回物料{}===========>{}", supplierOrder.getItemNo(), supplierOrder.getGoods()); + // 是否有相似物料。 通过一次匹配 获取 根据收获里的 名称 supplierOrder.getGoods() + supplierOrder.getSupplierCode() + supplierOrder.getPrice()也一样 + // 此处可能要 追加supplierOrder.getExt01(); + // 并且 supplierOrder.getItemNo() != 上述物料号的 + // 这里先做一个开关是否开启 + SysConfig similar_material_config = sysConfigMapper.selectByCode("SIMILAR_MATERIAL_CONFIG"); + if (null != similar_material_config && "1".equals(similar_material_config.getValue())) { + // 先判断 物料号在不在相似物料表 supplier_material_define 里有 + Map params = new HashMap<>(); + params.put("similarItemNo", supplierOrder.getItemNo()); + params.put("supplierCode", supplierOrder.getSupplierCode()); + List supplierMaterialDefineList = supplierMaterialDefineMapper.listByParams(params); + if (supplierMaterialDefineList.isEmpty()) { + Map queryMap = new HashMap<>(); + queryMap.put("supplierCode", supplierOrder.getSupplierCode()); + queryMap.put("goods", supplierOrder.getGoods()); + queryMap.put("price", supplierOrder.getUnitPrice()); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(supplierOrder.getExt01())) { + queryMap.put("ext01", supplierOrder.getExt01()); + } + if (org.apache.commons.lang3.StringUtils.isNotEmpty(supplierOrder.getItemNo())) { + queryMap.put("itemNo", supplierOrder.getItemNo()); + } + //and supplier_code = #{supplierCode} + // and goods = #{goods} + // and unit_price= #{price} + List supplierOrderList = supplierOrderMapper.selectListByParams(queryMap); + if (!supplierOrderList.isEmpty()) { + String itemNo = supplierOrder.getItemNo(); + StringBuffer similarItemNos = new StringBuffer(); + similarItemNos.append(itemNo); + similarItemNos.append(","); + for (SupplierOrder order : supplierOrderList) { + similarItemNos.append(order.getItemNo()); + similarItemNos.append(","); + } + SupplierMaterialDefine smd = new SupplierMaterialDefine(); + smd.setItemNo(itemNo); + smd.setItemType("0"); + smd.setSimilarItemNo(similarItemNos.toString()); + smd.setExt01(supplierOrder.getSupplierCode()); + supplierMaterialDefineMapper.insert(smd); + } + +// for (SupplierOrder order : supplierOrderList) { +// log.info("ITEM NO {} 相似物料 {} 插入=> supplier order id ",supplierOrder.getItemNo(),order.getItemNo(),order.getId()); +// temMat.setMaterialNo(order.getItemNo()); +// supplierMaterialMapper.insertSelective(temMat); +// } + } + } + } + + @Override + public RestResponse autoSmartMatching(String invoiceId, String directSupplierCode) { + // 判断是否先进先出 + SysConfig configOi = sysConfigMapper.selectByCode("IS_OUT_IN"); + if (configOi != null && configOi.getValue().equals("0")) { + return autoSmartMatchingOld(invoiceId); + } else if (configOi != null && configOi.getValue().equals("1")) { + return autoSmartMatchingOutIn(invoiceId, directSupplierCode); + + } + // 默认调用原始方案 + return autoSmartMatchingOld(invoiceId); + } + + @Transactional + @Override + public RestResponse autoSmartMatchingOld(String invoiceId) { + try { + if (StringUtil.isBlank(invoiceId)) { + return RestResponse.failure("非法参数"); + } + String supplierCode = corporateInvoiceMapper.selectSupplierCode(invoiceId); + if (StringUtil.isBlank(supplierCode)) { + return RestResponse.failure("供应商不存在"); + } + Supplier supplier = supplierMapper.selectCodeByNameAndCode2("", supplierCode); + if (supplier == null) { + return RestResponse.failure("供应商不存在"); + } + SupplierMatching supplierMatching = supplierMatchingMapper.selectByPrimaryKey(invoiceId); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + // 0 折后 1 折前 + Integer priceType = corporateInvoice.getPriceType(); + List result = null; + + SysConfig qty_match_inc_unit = sysConfigMapper.selectByCode("QTY_MATCH_INC_UNIT"); + // 数量匹配包含UOM + Integer qtyUnitType = 0; + if (qty_match_inc_unit != null) { + qtyUnitType = Integer.parseInt(qty_match_inc_unit.getValue()); + } + // 20220517智能匹配组织添加 + SysConfig sysConfig = sysConfigMapper.selectByCode("MATCH_INC_ORG"); + + // 20220425修改查询参数 + Map params = new HashMap<>(); + if (!supplier.getSupplierSpecial()) { + params.put("supplierCode", supplierCode); + } + params.put("all", 0); + params.put("invoiceId", invoiceId); + params.put("matchType", matchType); + params.put("priceType", priceType); + params.put("qtyUnitType", qtyUnitType); + if (sysConfig != null && sysConfig.getValue().equals("1")) { + params.put("sysOrg", corporateInvoice.getOrgId()); + } + if (supplierMatching != null && StringUtil.isNotBlank(supplierMatching.getOrderNo())) { + String[] orderNos = supplierMatching.getOrderNo().split(","); + params.put("orderNos", orderNos); + //result = supplierOrderMapper.matchOrderByOrderNos(orderNos); + result = supplierOrderMapper.matchOrderBySupplierCode2(params); + } + if (result == null || result.isEmpty()) { + result = supplierOrderMapper.matchOrderBySupplierCode2(params); + /*Set materialSet = supplierMaterialMapper.selectMaterialsByInvoiceId(invoiceId, supplierCode); + if (matchType.equals(0)) { + Set invoiceMoneyList = supplierOrderItemMatchingMapper.calculateInvoiceSurplus(invoiceId); + result = dataResult.stream().filter(supplierInvoiceMatchOrderVo -> invoiceMoneyList.contains(supplierInvoiceMatchOrderVo.getUnUsedAmount().setScale(0, BigDecimal.ROUND_DOWN).intValue()) + && materialSet.contains(supplierInvoiceMatchOrderVo.getItemNo())).collect(Collectors.toList()); + } else { + Set quantity = supplierOrderItemMatchingMapper.calculateInvoiceSurplusQuantity(invoiceId); + result = dataResult.stream().filter(supplierInvoiceMatchOrderVo -> quantity.contains(supplierInvoiceMatchOrderVo.getUnUsedQuantity().toString() + supplierInvoiceMatchOrderVo.getUom()) + && materialSet.contains(supplierInvoiceMatchOrderVo.getItemNo())).collect(Collectors.toList()); + }*/ + } + if (supplierMatching == null) { + supplierMatching = new SupplierMatching(); + supplierMatching.setSupplierCode(supplierCode); + supplierMatching.setOrderNo(""); + supplierMatching.setInvoiceId(invoiceId); + supplierMatching.setOperationTime(new Date()); + supplierMatchingMapper.insert(supplierMatching); + } + List insertList = new ArrayList<>(); + Map matchMap = new HashMap<>(); + StringBuffer poStr = new StringBuffer(); + for (SupplierInvoiceMatchOrderVo supplierInvoiceMatchOrderVo : result) { + // 判断itemNo是否已出现过 + String tmpKey = supplierInvoiceMatchOrderVo.getItemNo() + supplierInvoiceMatchOrderVo.getUnUsedQuantity(); + if (matchMap.get(tmpKey) != null) {// 保留最早数据 + if ((matchMap.get(tmpKey).getId() > supplierInvoiceMatchOrderVo.getId())) { + matchMap.put(tmpKey, supplierInvoiceMatchOrderVo); + } + } else { + matchMap.put(tmpKey, supplierInvoiceMatchOrderVo); + } + } + List items = new ArrayList<>(); + for (SupplierInvoiceMatchOrderVo supplierInvoiceMatchOrderVo : matchMap.values()) { + + CorporateInvoiceItems item = corporateInvoiceItemsMapper.selectForAutoSmartMatchingMulti(invoiceId, supplierInvoiceMatchOrderVo.getGoods(), supplierInvoiceMatchOrderVo.getItemNo(), supplierInvoiceMatchOrderVo.getUsedAmount().setScale(0, BigDecimal.ROUND_HALF_UP).intValue(), matchType, null); + SupplierOrder order = supplierOrderMapper.selectForAutoSmartMatching(supplierInvoiceMatchOrderVo.getId()); + if (null != item && null != order) { + items.add(item); + /*if (!supplierMatching.getOrderNo().contains(order.getOrderNo())) { + if (supplierMatching.getOrderNo().equals("")) { + supplierMatching.setOrderNo(order.getOrderNo()); + } else { + supplierMatching.setOrderNo(supplierMatching.getOrderNo() + "," + order.getOrderNo()); + } + }*/ + order.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByOrderId(order.getId())); + order.setUsedQuantity(supplierOrderItemMatchingMapper.getUsedQuantityByOrderId(order.getId())); + + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + + //插入supplier_order_item_matching + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(invoiceId); + matching.setItemId(item.getId()); + matching.setOrderId(order.getId()); + matching.setName(order.getGoods()); + matching.setSpecification(item.getSpecification()); + matching.setUnit(order.getUom()); + BigDecimal price = order.getUnitPrice(); + // 20220510price取值修改 + matching.setPrice(order.getUnitPrice()); + log.info("corporateInvoice.getMatchType()=>{}", corporateInvoice.getMatchType()); + if (0 == corporateInvoice.getMatchType()) { + // 20220508price取值修改 + //matching.setPrice(order.getUnitPrice()); + BigDecimal percent = order.getUnUsedAmount().divide(itemTotal, 5, BigDecimal.ROUND_HALF_UP); + log.info("corporateInvoice.percent=>{}", percent); + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount()); + if (StringUtil.isNotBlank(item.getDeductionAmount())) { + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + } + // 20220510单价修改 + //matching.setQuantity(matching.getTotal().divide(price, 2, BigDecimal.ROUND_HALF_UP).intValue()); + matching.setQuantity(matching.getTotal().divide(order.getUnitPrice(), 2, BigDecimal.ROUND_HALF_UP).toString()); + } else { + // 20220508price取值修改 + //matching.setPrice(price.setScale(6, BigDecimal.ROUND_HALF_UP)); + matching.setQuantity(String.valueOf(order.getUnUsedQuantity())); + matching.setTotal(price.multiply(new BigDecimal(matching.getQuantity()))); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + + /* if (StringUtil.isNotBlank(item.getDeductionAmount())) { + BigDecimal percent = matching.getTotal().divide(itemTotal, 5, BigDecimal.ROUND_HALF_UP); + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + }*/ + } + + if (StringUtil.isNotBlank(item.getTax())) { + BigDecimal percent = matching.getTotal().divide(itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())), 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent)); + + } + // 20220509折后判断 + /* if(priceType==0){ + matching.setTotal(matching.getTotal().add(new BigDecimal(item.getDeductionAmount()== null ? "0" : item.getDeductionAmount()))); + matching.setTax(matching.getTax().add(new BigDecimal(item.getDeductionTax()== null ? "0" : item.getDeductionTax()))); + }*/ + + matching.setReceivedTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(order.getReceiveNo()); + matching.setOrderNo(order.getOrderNo()); + matching.setItemNo(order.getItemNo()); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(matching.getTaxRate())) { + matching.setTax(matching.getTotal().multiply(new BigDecimal(matching.getTaxRate()).divide(new BigDecimal("100")))); + } + if (new BigDecimal(matching.getQuantity()).compareTo(BigDecimal.ZERO) == 0) continue; + insertList.add(matching); + // 拼接orderNo + if (poStr.toString().indexOf(matching.getOrderNo()) == -1) { + if (poStr.length() > 0) { + poStr.append(","); + } + poStr.append(matching.getOrderNo()); + } + } + + } + + if (!insertList.isEmpty()) { + supplierOrderItemMatchingMapper.insertBatch(insertList); + if (supplierMatching.getOrderNo() == null || supplierMatching.getOrderNo().length() == 0) { + supplierMatching.setOrderNo(poStr.toString()); + supplierMatchingMapper.updateByPrimaryKey(supplierMatching); + } + }/*else{// 未匹配到数据删除 + supplierMatchingMapper.deleteByPrimaryKey(supplierMatching.getInvoiceId()); + }*/ + // 20220430更新diff + for (CorporateInvoiceItems tmpItem : items) { + updateDifference(corporateInvoice, tmpItem); + } + + //插入日志记录 2022/5/28 + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog() {{ + setId(IdUtil.fastUUID()); + setPid(corporateInvoice.getId()); + setModule("InvoiceMatch"); + setMethods("SmartMatch"); + setOperatorUser(sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()).getName()); + setCreateTime(new Date()); + setReason("操作了一键智能匹配"); + }}; + supplierMatchingLogMapper.insert(supplierMatchingLog); + + } catch (Exception e) { + log.error("", e); + throw new ServiceException("处理异常"); + } + return RestResponse.success(); + } + + @Transactional + @Override + public RestResponse autoSmartMatchingOutIn(String invoiceId, String directSuppierCode) { + try { + if (StringUtil.isBlank(invoiceId)) { + return RestResponse.failure("非法参数"); + } + Supplier supplier = null; + String supplierCode = null; + if (null == directSuppierCode) { + //!!!国内发票-含公司 || ext01=CN + //关联单据 & 一键智能匹配+ 供应商税号。 + 金龙 + //向量方式查找供应商名称 匹配 没找到 提示未找到供应商 + //匹配成功 则 调用税号查询ai接口。税号插入supplier表的taxno 。 + + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + + // 原先逻辑 + supplierCode = corporateInvoiceMapper.selectSupplierCode(invoiceId); + boolean oldSupplierNotExistFlag = false; + if (StringUtil.isBlank(supplierCode)) { + oldSupplierNotExistFlag = true; + //return RestResponse.failure("供应商不存在"); + } + supplier = supplierMapper.selectByTaxNoCode("", supplierCode); + if (supplier == null) { + oldSupplierNotExistFlag = true; + //return RestResponse.failure("供应商不存在"); + } + supplier = supplierIsExist(oldSupplierNotExistFlag, corporateInvoice, supplier); + if (null == supplier) { + return RestResponse.failure("供应商不存在"); + } + } else { + // 鹏飞的逻辑 + supplier = supplierMapper.selectCodeByNameAndCode2("", directSuppierCode); + if (supplier == null) { + return RestResponse.failure("供应商不存在"); + } + supplierCode = directSuppierCode; + } + // 单位换算映射 + this.syncUomFromMapping(invoiceId, supplierCode); + // 单位换算处理 + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + RestResponse uomResponse = this.updateUom(invoiceId, corporateInvoice.getSellerNo()); + SupplierMatching supplierMatching = supplierMatchingMapper.selectByPrimaryKey(invoiceId); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + // 0 税前 1 税后 + Integer priceType = corporateInvoice.getPriceType(); + List resultBefore = null; + int invoiceType = corporateInvoice.getInvoiceType(); + SysConfig qty_match_inc_unit = sysConfigMapper.selectByCode("QTY_MATCH_INC_UNIT"); + // 数量匹配包含UOM + Integer qtyUnitType = 0; + if (qty_match_inc_unit != null) { + qtyUnitType = Integer.parseInt(qty_match_inc_unit.getValue()); + } else { + if (1 == invoiceType) { + qtyUnitType = 1; + } + } + // 20220517智能匹配组织添加 + SysConfig sysConfig = sysConfigMapper.selectByCode("MATCH_INC_ORG"); + + // 20220425修改查询参数 + Map params = new HashMap<>(); + if (!supplier.getSupplierSpecial()) { + params.put("supplierCode", supplierCode); + } + params.put("all", 0); + params.put("isOutIn", 1); + params.put("invoiceId", invoiceId); + params.put("matchType", matchType); + params.put("priceType", priceType); + params.put("qtyUnitType", qtyUnitType); + boolean isOutIn = true; + if (sysConfig != null && sysConfig.getValue().equals("1")) { + params.put("sysOrg", corporateInvoice.getOrgId()); + } + if (supplierMatching != null && StringUtil.isNotBlank(supplierMatching.getOrderNo())) { + String[] orderNos = supplierMatching.getOrderNo().split(","); + params.put("orderNos", orderNos); + //result = supplierOrderMapper.matchOrderByOrderNos(orderNos); + resultBefore = supplierOrderMapper.matchOrderBySupplierCode2(params); + } + if (null == resultBefore || resultBefore.isEmpty()) { + params.put("isOutIn", 0); + params.put("orderNos", null); + isOutIn = false; + resultBefore = supplierOrderMapper.matchOrderBySupplierCode2(params); + } + // 数据单位不匹配查询 + params.put("qtyUnitType", 0); + params.put("uomEquel", 2); + params.put("isOutIn", 1); + if (supplierMatching != null && StringUtil.isNotBlank(supplierMatching.getOrderNo())) { + String[] orderNos = supplierMatching.getOrderNo().split(","); + params.put("orderNos", orderNos); + } + List result2 = supplierOrderMapper.matchOrderBySupplierCode2(params); + + // 添加相似物料的order + List result = new ArrayList<>(); + if (isOutIn) { + result.addAll(resultBefore); + } + log.info("result=>{}", JSONObject.toJSONString(result)); + for (SupplierInvoiceMatchOrderVo supplierInvoiceMatchOrderVo : resultBefore) { + String matchOrderItemNo = supplierInvoiceMatchOrderVo.getItemNo(); + String unitPrice = supplierInvoiceMatchOrderVo.getPrice().toString(); + + SupplierMaterialDefineVo similarItemNo = supplierMaterialMapper.getSimilarMaterialNo(matchOrderItemNo, supplierCode, unitPrice); + log.info("similarItemNo=>{}", JSONObject.toJSONString(similarItemNo)); + if (null != similarItemNo) { + if (!org.apache.commons.lang3.StringUtils.isEmpty(similarItemNo.getSimilarItemNo())) { + String[] similarItemNos = similarItemNo.getSimilarItemNo().split(","); + for (String itemNo : similarItemNos) { + if (itemNo.equals(matchOrderItemNo)) continue; + List resultTemp = supplierOrderMapper.getMatchSimilarOrders(params); + result.addAll(resultTemp); + } + } + } + } + log.info("result=>{}", JSONObject.toJSONString(result)); + + if (!result2.isEmpty()) { + // 单位不一致 + // 发送信息倒协同平台 + String ncBillCode = corporateInvoice.getExt07(); + String number = corporateInvoice.getNumber(); + log.info("nc发票{}存在单位不匹配数据:发票号:{}", ncBillCode, number); + String method = null; + SysConfig uomUnitUnmatchApi = sysConfigMapper.selectByCode("PENGFEI_XTPT_UOM_UNIT_API"); + if (null != uomUnitUnmatchApi) { + method = uomUnitUnmatchApi.getValue(); + for (SupplierInvoiceMatchOrderVo supplierInvoiceMatchOrderVo : result2) { + JSONObject uomUnitParams = new JSONObject(); + String uom = supplierInvoiceMatchOrderVo.getUom(); + String invoice_unit = supplierInvoiceMatchOrderVo.getUnit(); + String materialNo = supplierInvoiceMatchOrderVo.getItemNo(); + SupplierMaterialUom smu = supplierMaterialUomMapper.selectByMaterialNo(materialNo); + if (null != smu) { + log.info("materialNo 物料已存在 单位换算:{}", ncBillCode, number); + continue; + } + String title = "填写" + ncBillCode + "-" + number + "单位换算系数表"; + JSONObject fields = new JSONObject(); + fields.put("title", title); + fields.put("NC_invoice_number", ncBillCode); + fields.put("invoice_number", number); + fields.put("invoice_unit", invoice_unit); + fields.put("material_no", materialNo); + fields.put("material_unit", uom); + uomUnitParams.put("matter_id", "SD24020001"); + uomUnitParams.put("form_template_id", 5); + uomUnitParams.put("smart_processes_id", 18); + uomUnitParams.put("fields", fields); +// sendDataToXTPT(method, uomUnitParams); + } + } else { + log.warn("invoice warn ===============》未配置单位不匹配发送的地址"); + } + } + + + if (supplierMatching == null) { + supplierMatching = new SupplierMatching(); + supplierMatching.setSupplierCode(supplierCode); + supplierMatching.setOrderNo(""); + supplierMatching.setInvoiceId(invoiceId); + supplierMatching.setOperationTime(new Date()); + supplierMatchingMapper.insert(supplierMatching); + } + String invoiceNumber = corporateInvoice.getNumber(); + + // 2025-05-27 + List stateList = supplierStateMapper.listByNumber(invoiceNumber); + List stateItems = new ArrayList<>();//supplierInvoiceMatchOrderVo + if (!stateList.isEmpty()) { + // 对账单逻辑 supplier_state 优先匹配原则 + List itemList = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + for (SupplierState supplierState : stateList) { + String receiveNo = supplierState.getExt01(); + String orderNo = supplierState.getPo(); + String stateItemNo = supplierState.getItemNo(); + String desc = supplierState.getDesc(); + BigDecimal amount = new BigDecimal(supplierState.getAmount()); + BigDecimal quantity = new BigDecimal(supplierState.getQuantity()); + BigDecimal price = amount.divide(quantity).setScale(2, BigDecimal.ROUND_HALF_UP); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(receiveNo)) { + //4. 取这个发票的state第一行,如果有receive number(放在ext01上), + // 则取这个receive number的值去查收货表,获取相关信息,只有数量从state上取,金额计算。 + SupplierOrder stateOrder = supplierOrderMapper.selectByState(receiveNo, orderNo, stateItemNo); + if (null != stateOrder) { + // 可以匹配 查找items的name TODO 目前简单点是否包含 state的des描述 + boolean matchedFlag = false; + for (CorporateInvoiceItems item : itemList) { + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + String name = item.getName(); + if (name.indexOf(desc) > -1) { + stateItems.add(item); + matchedFlag = true; + // 简单的表示匹配成功 + //插入supplier_order_item_matching + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(invoiceId); + matching.setItemId(item.getId()); + matching.setOrderId(stateOrder.getId()); + matching.setName(desc); + matching.setSpecification(item.getSpecification()); + matching.setUnit(supplierState.getUom()); + // 20220510price取值修改 + matching.setPrice(price); + // 20220508price取值修改 + //matching.setPrice(price.setScale(6, BigDecimal.ROUND_HALF_UP)); + matching.setQuantity(supplierState.getQuantity()); + log.info(matching.getQuantity()); + matching.setTotal(amount); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + // tax 不是空并且 tax和deduction_tax + if (StringUtil.isNotBlank(item.getTax())) { + if (itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())).compareTo(BigDecimal.ZERO) == 1) { + BigDecimal percent = matching.getTotal().divide(itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())), 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent)); + } else { + matching.setTax(BigDecimal.ZERO); + } + } + + matching.setReceivedTotal(amount); + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(supplierState.getExt01()); + matching.setOrderNo(supplierState.getPo()); + matching.setItemNo(supplierState.getItemNo()); + if (new BigDecimal(matching.getQuantity()).compareTo(BigDecimal.ZERO) == 0) { + break; + } + // 插入匹配数据 + supplierOrderItemMatchingMapper.insert(matching); + } + } + if (!matchedFlag) { + CorporateInvoiceItems item = itemList.get(0); + stateItems.add(item); + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + String name = item.getName(); + matchedFlag = true; + // 简单的表示匹配成功 + //插入supplier_order_item_matching + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(invoiceId); + matching.setItemId(item.getId()); + matching.setOrderId(stateOrder.getId()); + matching.setName(desc); + matching.setSpecification(item.getSpecification()); + matching.setUnit(supplierState.getUom()); + // 20220510price取值修改 + matching.setPrice(price); + // 20220508price取值修改 + //matching.setPrice(price.setScale(6, BigDecimal.ROUND_HALF_UP)); + matching.setQuantity(supplierState.getQuantity()); + log.info(matching.getQuantity()); + matching.setTotal(amount); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + // tax 不是空并且 tax和deduction_tax + if (StringUtil.isNotBlank(item.getTax())) { + if (itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())).compareTo(BigDecimal.ZERO) == 1) { + BigDecimal percent = matching.getTotal().divide(itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())), 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent)); + } else { + matching.setTax(BigDecimal.ZERO); + } + } + + matching.setReceivedTotal(amount); + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(supplierState.getExt01()); + matching.setOrderNo(supplierState.getPo()); + matching.setItemNo(supplierState.getItemNo()); + if (new BigDecimal(matching.getQuantity()).compareTo(BigDecimal.ZERO) == 0) { + break; + } + // 插入匹配数据 + supplierOrderItemMatchingMapper.insert(matching); + } + } + // 20220430更新diff + for (CorporateInvoiceItems tmpItem : stateItems) { + updateDifference(corporateInvoice, tmpItem); + } + + } else { + //如果没有receive,先根据PO订单号 + 料号获取收货表的可匹配数量,先找下是否有同样的数量, + // 如果有就匹配这一行,没有就按照先进先出来匹配,插入supplier order item matching + + + } + } + + + } + // 2025-05-29 如果是服务类行 按金额匹配 根据po查询永远匹配到第一个item上面。 + // 根据PO 查询 supplierOrder + if (0 == matchType && corporateInvoice.getInvoiceType() == 1) { + List insertList2 = new ArrayList<>(); + Map mapParams = new HashMap<>(); + if (!supplier.getSupplierSpecial()) { + mapParams.put("supplierCode", supplierCode); + } + mapParams.put("all", 0); + mapParams.put("isOutIn", 1); + String[] orderNos = supplierMatching.getOrderNo().split(","); + mapParams.put("pos", orderNos); + List orderList = supplierOrderMapper.listByPOs(mapParams); + List items = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + if (!items.isEmpty()) { + CorporateInvoiceItems item = items.get(0); + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + for (SupplierOrder order : orderList) { + log.info("order.getUnusedDquantity:{}", order.getUnUsedQuantity()); + order.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByOrderId(order.getId())); + order.setUsedQuantity(supplierOrderItemMatchingMapper.getUsedQuantityByOrderId(order.getId())); + //插入supplier_order_item_matching + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(invoiceId); + matching.setItemId(item.getId()); + matching.setOrderId(order.getId()); + matching.setName(order.getGoods()); + matching.setSpecification(item.getSpecification()); + matching.setUnit(order.getUom()); + BigDecimal price = order.getUnitPrice(); + // 20220510price取值修改 + matching.setPrice(order.getUnitPrice()); + if (0 == corporateInvoice.getMatchType()) { + BigDecimal percent = order.getUnUsedAmount().divide(itemTotal, 5, BigDecimal.ROUND_HALF_UP); + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount()); + if (StringUtil.isNotBlank(item.getDeductionAmount())) { + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + } + // 20220510单价修改 + //matching.setQuantity(matching.getTotal().divide(price, 2, BigDecimal.ROUND_HALF_UP).intValue()); + matching.setQuantity(matching.getTotal().divide(order.getUnitPrice(), 2, BigDecimal.ROUND_HALF_UP).toString()); + } + // tax 不是空并且 tax和deduction_tax + if (1 == priceType) { + matching.setTax(BigDecimal.ZERO); + } else { + if (StringUtil.isNotBlank(item.getTax())) { + if (itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())).compareTo(BigDecimal.ZERO) == 1) { + BigDecimal percent = matching.getTotal().divide(itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())), 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent)); + } else { + matching.setTax(BigDecimal.ZERO); + } + } + } + + matching.setReceivedTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(order.getReceiveNo()); + matching.setOrderNo(order.getOrderNo()); + matching.setItemNo(order.getItemNo()); + if (new BigDecimal(matching.getQuantity()).compareTo(BigDecimal.ZERO) == 0) { + break; + } + insertList2.add(matching); + // 插入匹配数据 + supplierOrderItemMatchingMapper.insert(matching); + } + updateDifference(corporateInvoice, item); + } + + } else { + // 待插入数据 + List insertList = new ArrayList<>(); + Map matchMap = new HashMap<>(); + // 已使用数据 + Map matchMapNum = new HashMap<>(); + // 数据分组 + Map> matchList = new HashMap<>(); + StringBuffer poStr = new StringBuffer(); + for (SupplierInvoiceMatchOrderVo supplierInvoiceMatchOrderVo : result) { + // 判断itemNo是否已出现过 + String tmpKey = supplierInvoiceMatchOrderVo.getItemNo(); + int temId = supplierInvoiceMatchOrderVo.getId(); + if (tmpKey.equals("D07-1SN_8_450_BL10-BL10")) { + log.info("======================="); + } + if (matchList.get(tmpKey) != null) { + List tmp = matchList.get(tmpKey); + boolean existFlag1 = true; + for (SupplierInvoiceMatchOrderVo invoiceMatchOrderVo : tmp) { + if (invoiceMatchOrderVo.getId() == temId) { + existFlag1 = false; + } + } + if (existFlag1) { + tmp.add(supplierInvoiceMatchOrderVo); + matchList.put(tmpKey, tmp); + } + } else { + List tmp = new ArrayList<>(); + tmp.add(supplierInvoiceMatchOrderVo); + matchList.put(tmpKey, tmp); + } + } + // 新增物料和收货单价是否需要匹配 + SysConfig AUTO_MATCHING_NEED_PRICE_EQUAL_CONIG = sysConfigMapper.selectByCode("AUTO_MATCHING_NEED_PRICE_EQUAL"); + log.info("matchList=>{}", JSONObject.toJSONString(matchList)); + List items = new ArrayList<>();//supplierInvoiceMatchOrderVo + for (String itemNo : matchList.keySet()) { + List items2 = null; + String unitPrice = null; + List simovs = matchList.get(itemNo); + if (simovs.isEmpty()) { + + } else { + unitPrice = simovs.get(0).getPrice().toString(); + } +// String needPriceRight = supplierMaterialMapper.selectItemTypeFromMaterialDefine(itemNo); + SupplierMaterialDefineVo supplierMaterialDefineVo = supplierMaterialMapper.getSimilarMaterialNo(itemNo, supplierCode, unitPrice); + log.info("supplierMaterialDefineVo=>{}", JSONObject.toJSONString(supplierMaterialDefineVo)); + String needPriceRight = null; + + if (null != supplierMaterialDefineVo) { +// needPriceRight = supplierMaterialDefineVo.getItemType(); + items2 = corporateInvoiceItemsMapper.selectForAutoSmartMatchingMulti3(invoiceId, supplierMaterialDefineVo.getSimilarItemNo()); + } else { + items2 = corporateInvoiceItemsMapper.selectForAutoSmartMatchingMulti2(invoiceId, itemNo); + } + int startIndex = 0; + BigDecimal useQty = BigDecimal.ZERO; + List lsMa = matchList.get(itemNo); + if (null != supplierMaterialDefineVo) { + if (!org.apache.commons.lang3.StringUtils.isEmpty(supplierMaterialDefineVo.getSimilarItemNo())) { + String[] similarItemNos = supplierMaterialDefineVo.getSimilarItemNo().split(","); + for (String no : similarItemNos) { + if (no.equals(itemNo)) continue; + if (null != matchList.get(no)) { + lsMa.addAll(matchList.get(no)); + } + } + } + } + int temp = 0; + for (CorporateInvoiceItems item : items2) { + temp++; + // 发票信息 + BigDecimal itemTotal = new BigDecimal(item.getTotal()); + BigDecimal itemQty = item.getUnUsedQuantity(); + BigDecimal itemQty2 = item.getUnUsedQuantity(); + BigDecimal lineQty = new BigDecimal("0"); + boolean isEnough = false; + // 2025 04 28 这里会存在多个物料匹配同一个行数据的情况。 这就使得这2个物料都匹配了同一个名称的明细行 + // 判断 是否有无剩余 / 或者超配 也同样需要从 items这里确保。 + String qtt = item.getQuantity(); + BigDecimal qt = new BigDecimal(qtt); + // 通过itemId去 supplier_order_item_matching查询匹配的数量。 + String itemId = item.getId(); + + BigDecimal matchedQt = supplierOrderItemMatchingMapper.getUsedQuantityByItemId(itemId); + if (matchedQt.compareTo(qt) >= 0) continue; + // 是否有完全匹配数据 + boolean isOk = false; + Integer isId = 0; + SupplierInvoiceMatchOrderVo isOkInvoice = null; + startIndex = 0; + for (int i = startIndex; i < lsMa.size(); i++) { + SupplierInvoiceMatchOrderVo so = lsMa.get(i); + if (null != AUTO_MATCHING_NEED_PRICE_EQUAL_CONIG && "1".equals(AUTO_MATCHING_NEED_PRICE_EQUAL_CONIG.getValue())) { + // 判断单价是否相等 + String price1 = item.getPrice(); + BigDecimal priceOne = new BigDecimal(price1).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal priceTwo = so.getPrice().setScale(2, BigDecimal.ROUND_HALF_UP); + if (priceOne.compareTo(priceTwo) != 0) { + continue; + } + } + if (useQty.compareTo(BigDecimal.ZERO) > 0) continue; + if (itemQty.compareTo(so.getUsedQuantity()) == 0) { + isOk = true; + if (isOkInvoice != null && isId > 0) { + if (isOkInvoice.getReceiveDate().after(so.getReceiveDate())) { + isOkInvoice = so; + isId = isOkInvoice.getId(); + } + } else { + isOkInvoice = so; + isId = so.getId(); + } + } + } + int tryed = 0; + int maxTry = 50; + while (!lsMa.isEmpty() && tryed <= maxTry) { + tryed++; + int j = startIndex; + if (startIndex >= lsMa.size()) { + break; + } +// for (int j=startIndex;j 0) { + qtyFlag = true; + } + + order.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByOrderId(order.getId())); + order.setUsedQuantity(supplierOrderItemMatchingMapper.getUsedQuantityByOrderId(order.getId())); + + //插入supplier_order_item_matching + SupplierOrderItemMatching matching = new SupplierOrderItemMatching(); + matching.setInvoiceId(invoiceId); + matching.setItemId(item.getId()); + matching.setOrderId(order.getId()); + matching.setName(order.getGoods()); + matching.setSpecification(item.getSpecification()); + matching.setUnit(order.getUom()); + BigDecimal price = order.getUnitPrice(); + // 20220510price取值修改 + matching.setPrice(order.getUnitPrice()); + if (0 == corporateInvoice.getMatchType()) { + BigDecimal percent = order.getUnUsedAmount().divide(itemTotal, 5, BigDecimal.ROUND_HALF_UP); + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount()); + if (qtyFlag) { + percent = itemQty2.divide(itemQty, 5, BigDecimal.ROUND_HALF_UP); + matching.setTotal(order.getUnUsedAmount() == null ? BigDecimal.ZERO : order.getUnUsedAmount().multiply(percent)); + } + if (StringUtil.isNotBlank(item.getDeductionAmount())) { + matching.setDeductionAmount(new BigDecimal(item.getDeductionAmount()).multiply(percent)); + if (StringUtil.isNotBlank(item.getDeductionTax())) { + matching.setDeductionTax(new BigDecimal(item.getDeductionTax()).multiply(percent)); + } + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + } + // 20220510单价修改 + //matching.setQuantity(matching.getTotal().divide(price, 2, BigDecimal.ROUND_HALF_UP).intValue()); + matching.setQuantity(matching.getTotal().divide(order.getUnitPrice(), 2, BigDecimal.ROUND_HALF_UP).toString()); + } else { + // 20220508pricsee取值修改 + //matching.setPrice(price.setScale(6, BigDecimal.ROUND_HALF_UP)); + if (new BigDecimal(order.getUnUsedQuantity()).compareTo(itemQty2) > 0) { + matching.setQuantity(itemQty2.toString()); + } else { + matching.setQuantity(order.getUnUsedQuantity()); + } + if (matching.getQuantity().indexOf("-") > -1) { + log.info(matching.getQuantity()); + } + + if (qtyFlag) { + matching.setQuantity(itemQty2.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + } + matching.setTotal(price.multiply(new BigDecimal(matching.getQuantity()))); + matching.setDeductionAmount(BigDecimal.ZERO); + matching.setDeductionTax(BigDecimal.ZERO); + matching.setDeductionTaxRate(item.getDeductionTaxRate()); + } + // tax 不是空并且 tax和deduction_tax + if (StringUtil.isNotBlank(item.getTax())) { + if (itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())).compareTo(BigDecimal.ZERO) == 1) { + BigDecimal percent = matching.getTotal().divide(itemTotal.add(new BigDecimal(item.getDeductionAmount() == null ? "0" : item.getDeductionAmount())), 10, BigDecimal.ROUND_HALF_UP); + matching.setTax(new BigDecimal(item.getTax()).add(new BigDecimal(item.getDeductionTax() == null ? "0" : item.getDeductionTax())).multiply(percent)); + } else { + matching.setTax(BigDecimal.ZERO); + } + } + + matching.setReceivedTotal(order.getUnitPrice().multiply(new BigDecimal(matching.getQuantity()))); + + matching.setTaxRate(item.getTaxRate()); + matching.setMatchingStatus(0); + matching.setReceiveNo(order.getReceiveNo()); + matching.setOrderNo(order.getOrderNo()); + matching.setItemNo(order.getItemNo()); + if (new BigDecimal(matching.getQuantity()).compareTo(BigDecimal.ZERO) == 0) { + break; + } + + insertList.add(matching); + // 插入匹配数据 + if (matching.getQuantity().indexOf("-") > -1) { + log.error("================="); + } + supplierOrderItemMatchingMapper.insert(matching); + // 拼接orderNo + if (poStr.toString().indexOf(matching.getOrderNo()) == -1) { + if (poStr.length() > 0) { + poStr.append(","); + } + poStr.append(matching.getOrderNo()); + } + // 判断数据是否足够 + lineQty = lineQty.add(supplierInvoiceMatchOrderVo.getUsedQuantity().subtract(useQty)); + itemQty2 = itemQty2.subtract(supplierInvoiceMatchOrderVo.getUsedQuantity().subtract(useQty)); + // 足够则跳出 + startIndex = 0; + + if (lineQty.compareTo(itemQty) > 0) { + useQty = useQty.add(new BigDecimal(matching.getQuantity())); +// isEnough = true; + break; + } else if (lineQty.compareTo(itemQty) == 0) { +// startIndex++; + useQty = BigDecimal.ZERO; + lsMa.remove(supplierInvoiceMatchOrderVo); +// isEnough = true; + break; + } +// startIndex--; + useQty = BigDecimal.ZERO; + lsMa.remove(supplierInvoiceMatchOrderVo); + continue; +// log.info("==:"+j); +// log.info("==:"+startIndex); +// log.info("==:{}",j{}", item.getId()); + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(item.getId()); + SysConfig config = sysConfigMapper.selectByCode("VIRTUAL_CODE"); + BigDecimal orderTotal = BigDecimal.ZERO; + // ReceivedTotal合计 + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + orderTotal = orderTotal.add(supplierOrderItemMatching.getTotal()).add(supplierOrderItemMatching.getTax()); + /* // 折前+数量 + if (corporateInvoice.getPriceType().equals(1) && corporateInvoice.getMatchType().equals(1)&& null != supplierOrderItemMatching.getDeductionAmount()) { + orderTotal = orderTotal.add(supplierOrderItemMatching.getDeductionAmount()); + } + // 折前+金额 + if (corporateInvoice.getPriceType().equals(1) && corporateInvoice.getMatchType().equals(0)&& null != supplierOrderItemMatching.getDeductionAmount()) { + orderTotal = orderTotal.add(supplierOrderItemMatching.getDeductionAmount()); + } + // 折前虚拟物料需要加deduction + if (corporateInvoice.getPriceType().equals(1)){ + if(item.getDeductionAmount()!=null && supplierOrderItemMatching.getItemNo().equals(config.getValue())) { + orderTotal = orderTotal.subtract(new BigDecimal(item.getDeductionAmount())); + } + }*/ + } + // 发票金额 + BigDecimal invoiceMoney = new BigDecimal(item.getTotal()); + if (StringUtil.isNotEmpty(item.getDeductionAmount())) { + invoiceMoney = invoiceMoney.add(new BigDecimal(item.getDeductionAmount())); + } + if (StringUtil.isNotEmpty(item.getTax())) { + invoiceMoney = invoiceMoney.add(new BigDecimal(item.getTax())); + } + if (StringUtil.isNotEmpty(item.getDeductionTax())) { + invoiceMoney = invoiceMoney.add(new BigDecimal(item.getDeductionTax())); + } + + BigDecimal difference = invoiceMoney.subtract(orderTotal).setScale(2, BigDecimal.ROUND_HALF_UP); + log.info("invoiceMoney=>{} ,difference=>{}", invoiceMoney.toString(), difference.toString()); + BigDecimal absDiff = difference.abs(); + if (absDiff.compareTo(BigDecimal.ZERO) > 0) { + item.setDifference(difference.toString()); + } else { + item.setDifference("0"); + } +// item.setPrice(null); + corporateInvoiceItemsMapper.updateByPrimaryKeySelective(item); + } + + + /** + * 服务类型发票处理20220928 + * + * @param ids + * @param invoiceId + * @return + */ + public Response completeInvoiceType1(List ids, String invoiceId) { + + try { + Assert.notEmpty(ids, "ID不为空"); + Assert.notNull(invoiceId, "发票ID不为空"); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + Assert.notNull(corporateInvoice, "发票不存在"); + List corporateInvoiceItems = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + + Boolean b = supplierDiffAllowMapper.selectDiffAllowByOrgAndCorType(corporateInvoice.getOrgId(), corporateInvoice.getInvoiceType()); + // 20220521根据配置判断 + SysConfig config = sysConfigMapper.selectByCode("ALLOW_SERV_PARTIAL"); + if (config == null) { + throw new ServiceException("否是允许差额匹配配置缺失,请联系管理员!"); + } + BigDecimal sumItem = new BigDecimal("0"); + List lsItem = new ArrayList<>(); + List supplierOrderItemMatchingsAll = new ArrayList<>(); + for (CorporateInvoiceItems corporateInvoiceItem : corporateInvoiceItems) { + // 计算变量获取 + BigDecimal sumItemMatching = new BigDecimal("0"); + BigDecimal sumItemMatchingTax = new BigDecimal("0"); + BigDecimal matchingCount = supplierOrderItemMatchingMapper.sumMatchingCountByItemId(corporateInvoiceItem.getId()); + BigDecimal total = new BigDecimal(corporateInvoiceItem.getTotal() == null ? "0" : corporateInvoiceItem.getTotal()); + BigDecimal deductionAmount = new BigDecimal(corporateInvoiceItem.getDeductionAmount() == null ? "0" : corporateInvoiceItem.getDeductionAmount()); + BigDecimal totalTax = new BigDecimal(corporateInvoiceItem.getTax() == null ? "0" : corporateInvoiceItem.getTax()); + BigDecimal deductionTax = new BigDecimal(corporateInvoiceItem.getDeductionTax() == null ? "0" : corporateInvoiceItem.getDeductionTax()); + BigDecimal sumItemMoney = total.add(deductionAmount); + BigDecimal sumItemTaxMoney = totalTax.add(deductionTax); + // 金额、税额检查 + + BigDecimal checkSumTotal = new BigDecimal("0"); + BigDecimal checkSumTotalTax = new BigDecimal("0"); + if (matchingCount.equals(BigDecimal.ZERO)) { + // 20220517数量为0不可通过 + //continue; + if (config.getValue().equals("0") && total.add(deductionAmount).compareTo(BigDecimal.ZERO) != 0) { + throw new ServiceException("金额匹配有差异,请检查匹配数据再提交! "); + } + } + boolean hasDiff = false; + /*if (matchingCount.equals(BigDecimal.ZERO)) { + hasDiff = false; + }else{ + hasDiff = new BigDecimal(corporateInvoiceItem.getDifference()).divide(matchingCount, 4, BigDecimal.ROUND_HALF_UP).abs().compareTo(new BigDecimal("0.01")) > 0; + + } + if (hasDiff) { + if(config.getValue().equals("0") && total.add(deductionAmount).compareTo(BigDecimal.ZERO)!=0) { + throw new ServiceException("金额匹配有差异,请检查匹配数据再提交! "); + } + }*/ + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(corporateInvoiceItem.getId()); + if (!supplierOrderItemMatchings.isEmpty()) { + + + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + // 金额、税额处理 + checkSumTotal = checkSumTotal.add(supplierOrderItemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + checkSumTotalTax = checkSumTotalTax.add(supplierOrderItemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP)); + + } + // 金额、税额判断 + boolean isTotal = false; + boolean isTotalTax = false; + isTotal = sumItemMoney.subtract(checkSumTotal).abs().compareTo(new BigDecimal("1.5")) > 0;//0.5 + isTotalTax = sumItemTaxMoney.subtract(checkSumTotalTax).abs().compareTo(new BigDecimal("0.4")) > 0;//0.1 + // 20220908服务的不考虑匹配差异 + /*if (config.getValue().equals("0")&&(isTotal || isTotalTax)) { + throw new ServiceException("发票金额和匹配金额不相符,请检查匹配数据再提交! "); + }*/ + + if (corporateInvoice.getPriceType() == 1) {// 税前 + if (checkSumTotal.compareTo(sumItemMoney.add(sumItemTaxMoney)) > 0) { + throw new ServiceException("匹配金额不能大于发票金额! "); + } + + } else {// 税后 + if (checkSumTotal.compareTo(sumItemMoney) > 0) { + throw new ServiceException("匹配金额不能大于发票金额! "); + } + + } + if (config.getValue().equals("1")) {// 允许多次匹配 + + + } else {// 不允许多次 + + } + + + } + } + CorporateInvoiceType corporateInvoiceType = corporateInvoiceTypeMapper.selectByPrimaryKey(corporateInvoice.getInvoiceType()); + if (corporateInvoiceType != null) { + if (1 == corporateInvoiceType.getReview()) { + corporateInvoice.setMatchStatus(1); + } else if (0 == corporateInvoiceType.getReview()) { + corporateInvoice.setMatchStatus(2); + supplierOutService.sendMatchingData(ids, invoiceId); + } + corporateInvoiceMapper.updateByPrimaryKeySelective(new CorporateInvoice() {{ + setId(invoiceId); + setMatchStatus(corporateInvoice.getMatchStatus()); + }}); + } + + + //插入日志记录 2022/5/28 + String name = "自动匹配"; + long userId = RequestSecurityPolicy.getUserId(); + if(0l!=userId){ + name =sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()).getName(); + } + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog() {{ + setId(IdUtil.fastUUID()); + setPid(corporateInvoice.getId()); + setModule("InvoiceMatch"); + setMethods("MatchSubmit"); + setCreateTime(new Date()); + setReason("完成发票【" + corporateInvoice.getNumber() + "】的所有发票行的匹配"); + }}; + supplierMatchingLog.setOperatorUser(name); + supplierMatchingLogMapper.insert(supplierMatchingLog); + + return Response.success(); + } catch (ServiceException e1) { + throw e1; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("操作失败"); + } + } + + @Transactional + @Override + public Response completeMatching(List ids, String invoiceId) { + try { + Assert.notEmpty(ids, "ID不为空"); + Assert.notNull(invoiceId, "发票ID不为空"); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + Assert.notNull(corporateInvoice, "发票不存在"); + List corporateInvoiceItems = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + + boolean isAfterPrice = corporateInvoice.getPriceType().equals(0); + + +// 检查超配问题 +// 1、在发票匹配 - 》匹配完成按钮的时候 物料超配校验 +// orderID item matching 数量总和 和 supplier_order 表里的数量总和 是否超过> 如果大于就返回。终止 +// 返回前端 XXX 物料 超配多少个 + boolean checkFlag = true; + SysConfig ignoreQuantityFlag = sysConfigMapper.selectByCode("IGNORE_QUANTITY_MATCH_CHECK"); + if (null != ignoreQuantityFlag && "1".equals(ignoreQuantityFlag.getValue())) { + checkFlag = false; + } + if (checkFlag) { + List soimList = supplierOrderItemMatchingMapper.selectListGroupByInvoiceId(invoiceId); + for (SupplierOrderItemMatching soim : soimList) { + int soimOrderId = soim.getOrderId(); + String quantityStr = soim.getQuantity(); + String name = soim.getName(); + BigDecimal quantity = new BigDecimal(quantityStr); + SupplierOrder order = supplierOrderMapper.selectByPrimaryKey(soimOrderId); + String orderQuantityStr = order.getReceivedNum(); + BigDecimal orderQuantity = new BigDecimal(orderQuantityStr); + if (quantity.subtract(orderQuantity).compareTo(new BigDecimal("0.01")) >= 0) { + int bigger = quantity.subtract(orderQuantity).intValue(); + throw new ServiceException("物料:【" + name + "】存在超额匹配,超额匹配: " + bigger); + } + } + } + + //开关 + SysConfig config2 = null; + config2 = sysConfigMapper.selectByCode("attach_files"); + if (null != config2 && "1".equals(config2.getValue())) { + // 2023-10-16 添加PO 匹配 invoiceId + String orderNo = supplierMatchingMapper.getOrderNoByInvoiceId(invoiceId); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderNo)) { + String[] pos = orderNo.split(","); + // 需要确认所有的PO 都在文件中找到 + for (String po1 : pos) { + SupplierPODto supplierPODto = supplierMatchingMapper.getSupplierPoByNo(po1); + if (null == supplierPODto) { + throw new ServiceException("未找到supplierNo表数据" + orderNo); + } else { + String path = supplierPODto.getPath(); + if (org.apache.commons.lang3.StringUtils.isNotEmpty(path)) { + // 处理附件逻辑 + } else { + throw new ServiceException("未上传supplierNo的po文件" + orderNo); + } + } + } + } + + // 以上是验证是否存在数据问题 + if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderNo)) { + String[] pos = orderNo.split(","); + // 需要确认所有的PO 都在文件中找到 + for (String po1 : pos) { + SupplierPODto supplierPODto = supplierMatchingMapper.getSupplierPoByNo(po1); + String path = supplierPODto.getPath(); + String uri = supplierPODto.getUri(); + //找到 将url =》存到 file 表。 + File file = new File(); + file.setPath(path); + file.setUri(uri); + file.setType("订单"); + file.setPid(invoiceId); + file.setDescription(""); + file.setUploadTime(supplierPODto.getCreateDate()); +// fileMapper.insert(file); + } + } + } + Boolean b = supplierDiffAllowMapper.selectDiffAllowByOrgAndCorType(corporateInvoice.getOrgId(), corporateInvoice.getInvoiceType()); + boolean diffAllow = b != null && b; + // 20220521根据配置判断 + SysConfig config = null; + if (corporateInvoice.getInvoiceType() == 1) {// 服务类处理 + return completeInvoiceType1(ids, invoiceId); + } else if (corporateInvoice.getInvoiceType() == 2) { + config = sysConfigMapper.selectByCode("ALLOW_GOODS_PARTIAL"); + } + if (config == null) { + throw new ServiceException("否是允许差额匹配配置缺失,请联系管理员!"); + } + + + SysConfig configBz = sysConfigMapper.selectByCode("VIRTUAL_CODE"); + // 尾差计算 + BigDecimal sumItem = new BigDecimal("0"); + List lsItem = new ArrayList<>(); + List supplierOrderItemMatchingsAll = new ArrayList<>(); + for (CorporateInvoiceItems corporateInvoiceItem : corporateInvoiceItems) { + // 0 折后 1 折前 + Integer priceType = corporateInvoice.getPriceType(); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + // 尾差计算 + BigDecimal sumItemMatching = new BigDecimal("0"); + BigDecimal sumItemMatchingTax = new BigDecimal("0"); + corporateInvoiceItem.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByItemId(corporateInvoiceItem.getId())); + BigDecimal matchingCount = supplierOrderItemMatchingMapper.sumMatchingCountByItemId(corporateInvoiceItem.getId()); + BigDecimal total = new BigDecimal(corporateInvoiceItem.getTotal() == null ? "0" : corporateInvoiceItem.getTotal()); + BigDecimal deductionAmount = new BigDecimal(corporateInvoiceItem.getDeductionAmount() == null ? "0" : corporateInvoiceItem.getDeductionAmount()); + BigDecimal totalTax = new BigDecimal(corporateInvoiceItem.getTax() == null ? "0" : corporateInvoiceItem.getTax()); + BigDecimal deductionTax = new BigDecimal(corporateInvoiceItem.getDeductionTax() == null ? "0" : corporateInvoiceItem.getDeductionTax()); + BigDecimal sumItemMoney = total.add(deductionAmount); + BigDecimal sumItemTaxMoney = totalTax.add(deductionTax); + // 金额、税额检查 + + BigDecimal checkSumTotal = new BigDecimal("0"); + BigDecimal checkSumTotalTax = new BigDecimal("0"); + if (matchingCount.compareTo(BigDecimal.ZERO) == 0) { + // 20220517数量为0不可通过 + //continue; + if (config.getValue().equals("0") && total.add(deductionAmount).compareTo(BigDecimal.ZERO) != 0) { + throw new ServiceException("金额匹配有差异,请检查匹配数据再提交! "); + } + } + boolean hasDiff = false; + if (matchingCount.compareTo(BigDecimal.ZERO) == 0) { + hasDiff = false; + } else { + hasDiff = new BigDecimal(corporateInvoiceItem.getDifference()).divide(matchingCount, 4, BigDecimal.ROUND_HALF_UP).abs().compareTo(new BigDecimal("0.01")) > 0; + + } + if (hasDiff && !diffAllow) { + if (config.getValue().equals("0") && total.add(deductionAmount).compareTo(BigDecimal.ZERO) != 0) { + throw new ServiceException("金额匹配有差异,请检查匹配数据再提交! "); + } + } + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(corporateInvoiceItem.getId()); + if (!supplierOrderItemMatchings.isEmpty()) { + BigDecimal invoiceMoney = new BigDecimal(corporateInvoiceItem.getTotal()); + if (StringUtil.isNotEmpty(corporateInvoiceItem.getDeductionAmount())) { + invoiceMoney = invoiceMoney.add(new BigDecimal(corporateInvoiceItem.getDeductionAmount())); + } + + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + // 金额、税额处理 + checkSumTotal = checkSumTotal.add(supplierOrderItemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + checkSumTotalTax = checkSumTotalTax.add(supplierOrderItemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP)); + // 尾差计算 + //sumItem=sumItem.add(supplierOrderItemMatching.getTotal().setScale(2,BigDecimal.ROUND_HALF_UP)); + sumItemMatching = sumItemMatching.add(supplierOrderItemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + sumItemMatchingTax = sumItemMatchingTax.add(supplierOrderItemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP)); + + + //supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(supplierOrderItemMatching); + lsItem.add(supplierOrderItemMatching); + // 记录正常行 + if (supplierOrderItemMatching.getTotal().compareTo(BigDecimal.ZERO) != 0 && !supplierOrderItemMatching.getItemNo().equals(configBz.getValue())) { + supplierOrderItemMatchingsAll.add(supplierOrderItemMatching); + } + } + // 金额、税额判断 + boolean isTotal = false; + boolean isTotalTax = false; + isTotal = sumItemMoney.subtract(checkSumTotal).abs().compareTo(new BigDecimal("1.5")) > 0;//0.5 + isTotalTax = sumItemTaxMoney.subtract(checkSumTotalTax).abs().compareTo(new BigDecimal("0.4")) > 0;//0.1 + // 20220908服务的不考虑匹配差异 + if (config.getValue().equals("0") && (isTotal || isTotalTax)) { + throw new ServiceException("发票金额和匹配金额不相符,请检查匹配数据再提交! "); + } + + + } + } + // 不验证处理税差合并之类的问题 + for (CorporateInvoiceItems corporateInvoiceItem : corporateInvoiceItems) { + // 0 折后 1 折前 + Integer priceType = corporateInvoice.getPriceType(); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + // 尾差计算 + BigDecimal sumItemMatching = new BigDecimal("0"); + BigDecimal sumItemMatchingTax = new BigDecimal("0"); + corporateInvoiceItem.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByItemId(corporateInvoiceItem.getId())); + BigDecimal matchingCount = supplierOrderItemMatchingMapper.sumMatchingCountByItemId(corporateInvoiceItem.getId()); + BigDecimal total = new BigDecimal(corporateInvoiceItem.getTotal() == null ? "0" : corporateInvoiceItem.getTotal()); + log.info("total=>{}", total); + BigDecimal deductionAmount = new BigDecimal(corporateInvoiceItem.getDeductionAmount() == null ? "0" : corporateInvoiceItem.getDeductionAmount()); + log.info("deductionAmount=>{}", deductionAmount); + BigDecimal totalTax = new BigDecimal(corporateInvoiceItem.getTax() == null ? "0" : corporateInvoiceItem.getTax()); + BigDecimal deductionTax = new BigDecimal(corporateInvoiceItem.getDeductionTax() == null ? "0" : corporateInvoiceItem.getDeductionTax()); + BigDecimal sumItemMoney = total.add(deductionAmount); + log.info("sumItemMoney=>{}", sumItemMoney); + BigDecimal sumItemTaxMoney = totalTax.add(deductionTax); + // 金额、税额检查 + + BigDecimal checkSumTotal = new BigDecimal("0"); + BigDecimal checkSumTotalTax = new BigDecimal("0"); + + + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(corporateInvoiceItem.getId()); + if (!supplierOrderItemMatchings.isEmpty()) { + BigDecimal invoiceMoney = new BigDecimal(corporateInvoiceItem.getTotal()); + if (StringUtil.isNotEmpty(corporateInvoiceItem.getDeductionAmount())) { + invoiceMoney = invoiceMoney.add(new BigDecimal(corporateInvoiceItem.getDeductionAmount())); + } + BigDecimal receivedAmount = BigDecimal.ZERO; + BigDecimal quantity = BigDecimal.ZERO; + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + receivedAmount = receivedAmount.add(supplierOrderItemMatching.getReceivedTotal()); + if (!isAfterPrice && null != supplierOrderItemMatching.getDeductionAmount()) { + receivedAmount = receivedAmount.add(supplierOrderItemMatching.getDeductionAmount()); + } + quantity = quantity.add(new BigDecimal(supplierOrderItemMatching.getQuantity())); + } + BigDecimal difference = invoiceMoney.subtract(receivedAmount).setScale(5, BigDecimal.ROUND_HALF_UP); + + for (SupplierOrderItemMatching supplierOrderItemMatching : supplierOrderItemMatchings) { + // 金额、税额处理 + checkSumTotal = checkSumTotal.add(supplierOrderItemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + checkSumTotalTax = checkSumTotalTax.add(supplierOrderItemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP)); + // 尾差计算 + //sumItem=sumItem.add(supplierOrderItemMatching.getTotal().setScale(2,BigDecimal.ROUND_HALF_UP)); + sumItemMatching = sumItemMatching.add(supplierOrderItemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + sumItemMatchingTax = sumItemMatchingTax.add(supplierOrderItemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP)); + + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog(); + supplierMatchingLog.setId(IdUtil.fastUUID()); + supplierMatchingLog.setPid(invoiceId); + supplierMatchingLog.setPreValue(supplierOrderItemMatching.getPrice().toString()); + supplierMatchingLog.setModule("updatePrice"); + + //BigDecimal diff = difference.divide(new BigDecimal(quantity), 4, BigDecimal.ROUND_HALF_UP); + // 20220523差异分摊 + //supplierOrderItemMatching.setPrice(supplierOrderItemMatching.getPrice().add(diff)); + //supplierOrderItemMatching.setReceivedTotal(supplierOrderItemMatching.getPrice().multiply(new BigDecimal(supplierOrderItemMatching.getQuantity()))); + + + supplierMatchingLog.setMethods(supplierOrderItemMatching.getOrderId().toString()); + supplierMatchingLog.setCreateTime(new Date()); + supplierMatchingLog.setOperatorUser("system"); + supplierMatchingLog.setAfterValue(supplierOrderItemMatching.getPrice().toString()); + supplierMatchingLogMapper.insert(supplierMatchingLog); + // 20220613状态判断 + if (supplierOrderItemMatching.getMatchingStatus() != 2) { + supplierOrderItemMatching.setMatchingStatus(1); + } + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(supplierOrderItemMatching); + lsItem.add(supplierOrderItemMatching); + } + if (config.getValue().equals("0")) { + // 20220622金额修改 + if (sumItemMatching.compareTo(sumItemMoney) != 0) { + int di = 0; + if (supplierOrderItemMatchings.get(0).getItemNo().equals(configBz.getValue())) di++; + SupplierOrderItemMatching itemMatching = supplierOrderItemMatchings.get(di); + // 20220905需要数据大于零才处理 + BigDecimal qty = new BigDecimal(itemMatching.getQuantity()); + if (qty.compareTo(BigDecimal.ZERO) > 0) { + log.info("sumItemMoney=>{}", sumItemMoney); + log.info("sumItemMatching=>{}", sumItemMatching); + log.info("itemMatching.getTotal()=>{}", itemMatching.getTotal()); + itemMatching.setTotal(sumItemMoney.subtract(sumItemMatching).add(itemMatching.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP))); + itemMatching.setPrice(itemMatching.getTotal().divide(qty, 6, BigDecimal.ROUND_HALF_UP)); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(itemMatching); + } + } + // 20220622税额修改 + if (sumItemMatchingTax.compareTo(sumItemTaxMoney) != 0) { + int di = 0; + if (supplierOrderItemMatchings.get(0).getItemNo().equals(configBz.getValue())) di++; + SupplierOrderItemMatching itemMatching = supplierOrderItemMatchings.get(di); + itemMatching.setTax(sumItemTaxMoney.subtract(sumItemMatchingTax).add(itemMatching.getTax().setScale(2, BigDecimal.ROUND_HALF_UP))); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(itemMatching); + } + } + + + } + } + // 税额清0单独运行 + for (CorporateInvoiceItems corporateInvoiceItem : corporateInvoiceItems) { + // 0 折后 1 折前 + Integer priceType = corporateInvoice.getPriceType(); + // 0 金额 1 数量 + Integer matchType = corporateInvoice.getMatchType(); + // 尾差计算 + BigDecimal sumItemMatching = new BigDecimal("0"); + BigDecimal sumItemMatchingTax = new BigDecimal("0"); + corporateInvoiceItem.setUsedAmount(supplierOrderItemMatchingMapper.getUsedAmountByItemId(corporateInvoiceItem.getId())); + BigDecimal matchingCount = supplierOrderItemMatchingMapper.sumMatchingCountByItemId(corporateInvoiceItem.getId()); + BigDecimal total = new BigDecimal(corporateInvoiceItem.getTotal() == null ? "0" : corporateInvoiceItem.getTotal()); + BigDecimal deductionAmount = new BigDecimal(corporateInvoiceItem.getDeductionAmount() == null ? "0" : corporateInvoiceItem.getDeductionAmount()); + BigDecimal totalTax = new BigDecimal(corporateInvoiceItem.getTax() == null ? "0" : corporateInvoiceItem.getTax()); + BigDecimal deductionTax = new BigDecimal(corporateInvoiceItem.getDeductionTax() == null ? "0" : corporateInvoiceItem.getDeductionTax()); + BigDecimal sumItemMoney = total.add(deductionAmount); + BigDecimal sumItemTaxMoney = totalTax.add(deductionTax); + // 金额、税额检查 + + BigDecimal checkSumTotal = new BigDecimal("0"); + BigDecimal checkSumTotalTax = new BigDecimal("0"); + + + List supplierOrderItemMatchings = supplierOrderItemMatchingMapper.selectListByItemId(corporateInvoiceItem.getId()); + if (!supplierOrderItemMatchings.isEmpty()) { + + // 添加虚拟物料税额清0 + for (int i = 0; i < supplierOrderItemMatchings.size(); i++) { + SupplierOrderItemMatching supplierOrderItemMatching2 = supplierOrderItemMatchings.get(i); + // 尾差计算 + sumItem = sumItem.add(supplierOrderItemMatching2.getTotal().setScale(2, BigDecimal.ROUND_HALF_UP)); + if (supplierOrderItemMatching2.getItemNo().equals(configBz.getValue()) && supplierOrderItemMatching2.getTax() != null) { + boolean upFlag = true; + SupplierOrderItemMatching tmp = supplierOrderItemMatchingMapper.selectByPrimaryKey(Long.parseLong(supplierOrderItemMatching2.getMatchingId())); + //log.info(">>>>>>>>>>>>>>>"+tmp.getTotal()); + if (tmp.getTotal().compareTo(BigDecimal.ZERO) != 0) { + //log.info(">>>>>>>>>>>>>>>tmp"+tmp.getTax()); + //log.info(">>>>>>>>>>>>>>>Matching2"+supplierOrderItemMatching2.getTax()); + tmp.setTax(tmp.getTax().add(supplierOrderItemMatching2.getTax())); + //log.info(">>>>>>>>>>>>>>>tmp2"+tmp.getTax()); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(tmp); + } else { + upFlag = false; + /* if(supplierOrderItemMatching2.getTax().compareTo(BigDecimal.ZERO)<0){ + throw new ServiceException("虚拟行税额不可为负数!"); + }*/ + // 税额不可放在0行,从第一个Item开始查找 + for (SupplierOrderItemMatching qTmp : supplierOrderItemMatchingsAll) { + qTmp = supplierOrderItemMatchingMapper.selectByPrimaryKey(qTmp.getId()); + if (qTmp.getTotal().compareTo(BigDecimal.ZERO) != 0 && !supplierOrderItemMatching2.getItemNo().equals(configBz.getValue())) { + //log.info(qTmp.getTax()+"<>"+supplierOrderItemMatching2.getTax()); + qTmp.setTax(qTmp.getTax().add(supplierOrderItemMatching2.getTax())); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(qTmp); + supplierOrderItemMatching2.setItemId(qTmp.getItemId()); + log.info(supplierOrderItemMatching2.getOrderNo()); + log.info(qTmp.getOrderNo()); + if (!supplierOrderItemMatching2.getOrderNo().equals(qTmp.getOrderNo())) { + log.info("================================================================"); + } + supplierOrderItemMatching2.setOrderNo(qTmp.getOrderNo()); + supplierOrderItemMatching2.setTax(BigDecimal.ZERO); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(supplierOrderItemMatching2); + break; + } + } + } + if (upFlag) { + supplierOrderItemMatching2.setTax(BigDecimal.ZERO); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(supplierOrderItemMatching2); + } + } + } + + } + } + if (config.getValue().equals("0")) { + // 需要进行尾差计算20220616 + if (corporateInvoice.getPriceType() == 0) { + BigDecimal invoiceMoney = new BigDecimal(corporateInvoice.getPretaxAmount()); + if (sumItem.compareTo(invoiceMoney) != 0) { + int di = 0; + if (lsItem.get(0).getItemNo().equals(configBz.getValue())) di++; + // 20230517取最新数据 + SupplierOrderItemMatching itemMatching = supplierOrderItemMatchingMapper.selectByPrimaryKey(lsItem.get(di).getId()); + BigDecimal qty = new BigDecimal(itemMatching.getQuantity()); + //if(qty.compareTo(BigDecimal.ZERO)==0)qty = new BigDecimal("1"); + + // 20220905需要数据大于零才处理 + if (qty.compareTo(BigDecimal.ZERO) > 0) { + String hl = corporateInvoice.getExt04(); + BigDecimal hlDecimal = null; + try { + hlDecimal = new BigDecimal(hl); + invoiceMoney = invoiceMoney.divide(hlDecimal, 2, BigDecimal.ROUND_HALF_UP); + } catch (Exception e) { + e.printStackTrace(); + } + itemMatching.setTotal(invoiceMoney.subtract(sumItem).add(itemMatching.getTotal()).setScale(2, BigDecimal.ROUND_HALF_UP)); + log.info(itemMatching.getTotal().toString()); + itemMatching.setPrice(itemMatching.getTotal().divide(qty, 6, BigDecimal.ROUND_HALF_UP)); + log.info(itemMatching.getPrice().toString()); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(itemMatching); + } + } + } + } + int i = supplierOrderItemMatchingMapper.completeMatching(ids); + CorporateInvoiceType corporateInvoiceType = corporateInvoiceTypeMapper.selectByPrimaryKey(corporateInvoice.getInvoiceType()); + if (corporateInvoiceType != null) { + if (1 == corporateInvoiceType.getReview()) { + corporateInvoice.setMatchStatus(1); + } else if (0 == corporateInvoiceType.getReview()) { + corporateInvoice.setMatchStatus(2); + supplierOutService.sendMatchingData(ids, invoiceId); + } + corporateInvoiceMapper.updateByPrimaryKeySelective(new CorporateInvoice() {{ + setId(invoiceId); + setMatchStatus(corporateInvoice.getMatchStatus()); + }}); + } + + //插入日志记录 2022/5/28 + try { + long userId = RequestSecurityPolicy.getUserId(); + String name = "任务"; + if (userId != 0l) { + name = sysUserMapper.selectByPrimaryKey((int) userId).getName(); + } + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog() {{ + setId(IdUtil.fastUUID()); + setPid(corporateInvoice.getId()); + setModule("InvoiceMatch"); + setMethods("MatchSubmit"); + setCreateTime(new Date()); + setReason("完成发票【" + corporateInvoice.getNumber() + "】的所有发票行的匹配"); + }}; + supplierMatchingLog.setOperatorUser(name); + supplierMatchingLogMapper.insert(supplierMatchingLog); + } catch (Exception e) { + e.printStackTrace(); + } + + + return Response.success(); + } catch (ServiceException e1) { + throw e1; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("操作失败"); + } + } + + + @Transactional + @Override + public RestResponse updatePrice(SupplierUpdatePriceForm form) { + try { + SupplierMatchingLog supplierMatchingLog = new SupplierMatchingLog(); + supplierMatchingLog.setId(IdUtil.fastUUID()); + supplierMatchingLog.setPid(form.getInvoiceId()); + supplierMatchingLog.setPreValue(form.getPrePrice().toString()); + supplierMatchingLog.setModule("updatePrice"); + supplierMatchingLog.setMethods(form.getItemId()); + supplierMatchingLog.setCreateTime(new Date()); + supplierMatchingLog.setOperatorUser(sysUserMapper.selectByPrimaryKey((int) RequestSecurityPolicy.getUserId()).getName()); + supplierMatchingLog.setReason(form.getReason()); + if (form.getContainsTax()) { + BigDecimal taxRate = new BigDecimal(form.getTaxRate().replace("%", "")).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); + BigDecimal preTaxRate = BigDecimal.ONE.subtract(taxRate); + BigDecimal subtract = form.getAfterPrice().divide(preTaxRate, 3, BigDecimal.ROUND_HALF_UP); + form.setAfterPrice(subtract); + } + supplierMatchingLog.setAfterValue(form.getAfterPrice().toString()); + SupplierOrderItemMatching supplierOrderItemMatching = supplierOrderItemMatchingMapper.selectByPrimaryKey(form.getId()); + supplierOrderItemMatching.setPrice(form.getAfterPrice()); + supplierOrderItemMatching.setReceivedTotal(supplierOrderItemMatching.getPrice().multiply(new BigDecimal(supplierOrderItemMatching.getQuantity()))); + // 20220905修改单价后更新匹配金额 + supplierOrderItemMatching.setTotal(supplierOrderItemMatching.getPrice().multiply(new BigDecimal(supplierOrderItemMatching.getQuantity()))); + // 20221011单价修改后税额跟着变 + if (supplierOrderItemMatching.getTax().compareTo(BigDecimal.ZERO) > 0) { + BigDecimal taxRate = new BigDecimal(form.getTaxRate().replace("%", "")).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); + supplierOrderItemMatching.setTax(supplierOrderItemMatching.getTotal().multiply(taxRate)); + } + supplierOrderItemMatching.setPriceHasUpdated(true); + int i = supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(supplierOrderItemMatching); + if (i > 0) { + SupplierOrder order = supplierOrderMapper.selectByPrimaryKey(supplierOrderItemMatching.getOrderId()); + order.setUnitPrice(supplierOrderItemMatching.getPrice()); + //supplierOrderMapper.updateByPrimaryKeySelective(order); + supplierMatchingLogMapper.insert(supplierMatchingLog); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(form.getInvoiceId()); + CorporateInvoiceItems items = corporateInvoiceItemsMapper.selectByPrimaryKey(form.getItemId()); + updateDifference(corporateInvoice, items); + return RestResponse.success(); + } + return RestResponse.failure("更新失败"); + } catch (Exception e) { + log.error("", e); + throw new ServiceException("更新失败"); + } + } + + @Transactional + @Override + public RestResponse updateUom(String invoiceId, String sellerTaxId) { + try { + String supplier = supplierMapper.selectSupplierCode(sellerTaxId); + List corporateInvoiceItems = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + SysConfig ispf = sysConfigMapper.selectByCode("IS_PF"); + if (StringUtil.isNotEmpty(supplier) || (null != ispf && "1".equals(ispf.getValue()))) { + for (CorporateInvoiceItems corporateInvoiceItem : corporateInvoiceItems) { + log.info("corporateInvoiceItem.getId()=>{}", corporateInvoiceItem.getId()); + if (StringUtil.isNotBlank(corporateInvoiceItem.getOriginPrice()) && StringUtil.isNotBlank(corporateInvoiceItem.getOriginUnit()) && StringUtil.isNotBlank(corporateInvoiceItem.getOriginQuantity())) { + log.info("corporateInvoiceItem.getSpecification()=>{}", corporateInvoiceItem.getSpecification()); + log.info("corporateInvoiceItem.getName()=>{}", corporateInvoiceItem.getName()); + SupplierMaterialUom uom = supplierMaterialUomMapper.selectByItem(supplier, corporateInvoiceItem.getSpecification(), corporateInvoiceItem.getName(), + corporateInvoiceItem.getUnit());//getOriginUnit-->unit + log.info("uom====>{}", uom); + if (null != uom) { + corporateInvoiceItem.setUnit(uom.getVersUnit()); + corporateInvoiceItem.setQuantity(String.valueOf(Double.parseDouble(corporateInvoiceItem.getOriginQuantity()) * Double.parseDouble(uom.getVersNum()))); + BigDecimal price = new BigDecimal(corporateInvoiceItem.getPrice()).divide(new BigDecimal(uom.getVersNum()), 10, BigDecimal.ROUND_HALF_UP); + corporateInvoiceItem.setPrice(price.toString()); + corporateInvoiceItemsMapper.updateByPrimaryKeySelective(corporateInvoiceItem); + } + } + } + } + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("操作失败"); + } + } + + + @Override + public Response createSupplierMaterialUom(List supplierMaterialUoms) { + Response res = Response.success(); + res.setMessage("success"); + res.setStatus(200); + try { + for (SupplierMaterialUom supplierMaterialUom : supplierMaterialUoms) { + String materialNo = supplierMaterialUom.getMaterialNo(); + SupplierMaterialUom exist = supplierMaterialUomMapper.selectByMaterialNo(materialNo); + if (null == exist) { + supplierMaterialUom.setStatus(true); + supplierMaterialUomMapper.insertSelective(supplierMaterialUom); + } + } + } catch (Exception e) { + log.info("插入单位换算异常:{}", e.getMessage()); + res.setMessage("数据异常"); + res.setStatus(500); + } + return res; + } + + + @Override + public void syncUomFromMapping(String invoiceId, String supplierCode) { + List listDtos = supplierMapper.selectUomMapping(supplierCode); + List items = corporateInvoiceItemsMapper.selectItemsByPid(invoiceId); + for (SupplierUomMappingDTO listDto : listDtos) { + String uom = listDto.getUnit(); + for (CorporateInvoiceItems item : items) { + log.info("item id =>{}", item.getId()); + String unit = item.getUnit(); + String name = item.getName(); + String spec = item.getSpecification(); + log.info("unit=>{}", unit); + log.info("uom=>{}", uom); + log.info("uom.equals(unit)=>{}", uom.equals(unit)); + if (uom.equals(unit)) { + List sms = null; + sms = supplierMaterialMapper.selectBySupplierMaterial(name, spec); + if (sms.isEmpty()) { + continue; + } + for (SupplierMaterial sm : sms) { + // 单位相等后 将 插入 supplierMaterialUom表 + String vers_unit = listDto.getVersUnit(); + BigDecimal vers_num = listDto.getVersNum(); + String remark = listDto.getRemark(); + SupplierMaterialUom smu = new SupplierMaterialUom(); + smu.setStatus(true); + smu.setMaterialNo(sm.getMaterialNo()); + smu.setUnit(unit); + smu.setVersNum(vers_num.toString()); + smu.setVersUnit(vers_unit); + smu.setVStatusName("启用"); + smu.setRemark(remark); + // 重复判断 + SupplierMaterialUom exists = supplierMaterialUomMapper.selectByMaterialNo(sm.getMaterialNo()); + if (null == exists) { + supplierMaterialUomMapper.insertSelective(smu); + } else { +// smu.setId(exists.getId()); +// supplierMaterialUomMapper.updateByPrimaryKeySelective(smu); + } + } + } + } + } + } + + + + public static void main(String asd[]) { + + String itemTaxCode = "1080126000000000000"; + String orderTaxCode = "1080124020000000000"; + if (itemTaxCode.length() >= 5 && orderTaxCode.length() >= 5 && itemTaxCode.substring(0, 5).equals(orderTaxCode.substring(0, 5))) { + log.info(itemTaxCode.substring(0, 5)); + log.info(orderTaxCode.substring(0, 5)); + } + } + + public static double similarity(String str1, String str2) { + int maxLength = Math.max(str1.length(), str2.length()); + return 1 - (double) levenshteinDistance(str1, str2) / maxLength; + } + public static int levenshteinDistance(String str1, String str2) { + int[][] distance = new int[str1.length() + 1][str2.length() + 1]; + + for (int i = 0; i <= str1.length(); i++) + distance[i][0] = i; + for (int j = 0; j <= str2.length(); j++) + distance[0][j] = j; + + for (int i = 1; i <= str1.length(); i++) + for (int j = 1; j <= str2.length(); j++) + distance[i][j] = Math.min(Math.min(distance[i - 1][j] + 1, distance[i][j - 1] + 1), distance[i - 1][j - 1] + (str1.charAt(i - 1) == str2.charAt(j - 1) ? 0 : 1)); + + return distance[str1.length()][str2.length()]; + } + + public Supplier supplierIsExist(boolean oldSupplierNotExistFlag, CorporateInvoice corporateInvoice, Supplier supplier) { + SysConfig config = sysConfigMapper.selectByCode("OCR_INTERFACE_GET_SELLER_NO_URL"); + if (oldSupplierNotExistFlag && (null != config && org.apache.commons.lang3.StringUtils.isNotEmpty(config.getValue()))) { + // 发票类型 + String ticketCode = corporateInvoice.getTicketCode(); + if (!"60100".equals(ticketCode)) { + // 国内发票 + // 如果以税号的形式不存在,则以供应商名称匹配 + String sellerName = corporateInvoice.getSeller(); + Map params = new HashMap<>(); + List suppliers = supplierMapper.selectCNCompanyTaxNoEmpty(params); + Supplier matchSupplier = runTextsText(suppliers, sellerName); + if (null == matchSupplier) { + return null; + } else { + String sellerNo = interfaceUtil.getSellerNoFromAI(sysConfigMapper, sellerName); + if (org.apache.commons.lang3.StringUtils.isEmpty(sellerNo)) { + //向量方式查找供应商名称 匹配 没找到 提示未找到供应商 + return null; + } else { + //匹配成功 则 调用税号查询ai接口。税号插入supplier表的taxno 。 + matchSupplier.setTaxNo(sellerNo); + supplierMapper.updateByPrimaryKey(matchSupplier); + supplier = matchSupplier; + return supplier; + } + } + } + } + return supplier; + } + + + private Supplier runTextsText(List suppliers, String sellerName) { + if (suppliers.isEmpty()) { + return null; + } + SysConfig AIMatchAPIConfig = sysConfigMapper.selectByCode("AI_MATERIAL_MATCH_API"); + if (null == AIMatchAPIConfig) { + log.error("未匹配值 AIMatchAPI"); + } + String AIMatchAPIValue = AIMatchAPIConfig.getValue(); + + SysConfig matMatchScoreConfig = sysConfigMapper.selectByCode("matMatchScore"); + if (null == matMatchScoreConfig) { + log.error("未匹配值 matMatchScore"); + } + String matMatchScore = matMatchScoreConfig.getValue(); + double matMatchScoreLimit = Double.parseDouble(matMatchScore); + + SysConfig scores_methodConfig = sysConfigMapper.selectByCode("scores_method"); + String scores_method = "dense+sparse"; + SysConfig scores_weightsConfig = sysConfigMapper.selectByCode("scores_weights"); + String scores_weights = "[0.4,0.2]"; + if (null != scores_methodConfig) { + scores_method = scores_methodConfig.getValue(); + } + if (null != scores_weightsConfig) { + scores_weights = scores_weightsConfig.getValue(); + } + + JSONArray textsArr = new JSONArray(); + for (Supplier supplier : suppliers) { + String name = supplier.getName(); + textsArr.add(name); + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + String token = interfaceUtil.getAiToken(sysConfigMapper, headers, client); + headers.add("session", token); + // corpItems 遍历 查找评分 + JSONObject requestBody = new JSONObject(); + requestBody.put("texts", textsArr); + JSONObject paramsAi = new JSONObject(); + paramsAi.put("scores_method", scores_method); + JSONArray jsa = JSONArray.parseArray(scores_weights); + paramsAi.put("scores_weights", jsa); + requestBody.put("params", paramsAi); + requestBody.put("text", sellerName); + String bodyJsonData = JSON.toJSONString(requestBody); + log.info("AI-mater supplier 请求数据{}", bodyJsonData); + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + AIMaterialVO resultVo = null; + try { + resultVo = client.postForObject(AIMatchAPIValue, request, AIMaterialVO.class); + } catch (Exception e) { + e.printStackTrace(); + } + log.info("AI-mater supplier 结果{}", JSONObject.toJSONString(resultVo)); + List ids = resultVo.getIds(); + List scores = resultVo.getScores(); + if (ids.isEmpty()) { + + } else { + int indexId = ids.get(0); + double maxScore = scores.get(0); + if (maxScore >= matMatchScoreLimit) { + return suppliers.get(indexId); + } + } + return null; + } + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierUomMappingServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierUomMappingServiceImpl.java new file mode 100644 index 0000000..18ca2e1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SupplierUomMappingServiceImpl.java @@ -0,0 +1,51 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SupplierUomMappingService; +import com.cmsen.ticket.domain.entity.SupplierUomMapping; +import com.cmsen.ticket.domain.mapper.SupplierUomMappingMapper; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +@Slf4j +@Service +public class SupplierUomMappingServiceImpl implements SupplierUomMappingService { + @Resource + private SupplierUomMappingMapper mapper; + @Override + public RestResponse list(Map params) { + PageHelper.startPage(Integer.parseInt(params.get("pageNum").toString()),Integer.parseInt(params.get("pageSize").toString())); + + List list = mapper.listByParams(params); + int total = mapper.countByParams(params); + return RestResponse.success(PaginationUtil.getPageResult(total, params, list)); + } + @Override + public RestResponse create(SupplierUomMapping record) { + mapper.insert(record); + return RestResponse.success(); + } + + @Override + public RestResponse update(SupplierUomMapping record) { + mapper.updateByPrimaryKeySelective(record); + return RestResponse.success(); + } + + @Override + public RestResponse delete(Long id) { + mapper.deleteByPrimaryKey(id); + return RestResponse.success(); + } +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysConfigServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..217b403 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,55 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SysConfigService; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2023/4/19 16:06 + **/ +@Slf4j +@Service +public class SysConfigServiceImpl implements SysConfigService { + + @Value("${manager-file.uploadPath}") + private String uploadPath; + @Override + public RestResponse list(Map params) { + //PaginationUtil.paginationInit(params); + params.put("pageNum",params.get("pageNo").toString()); + PageHelper.startPage(Integer.parseInt(params.get("pageNum").toString()),Integer.parseInt(params.get("pageSize").toString())); + + List list = sysConfigMapper.list2(params); + int count = sysConfigMapper.count(params); + + return RestResponse.success(PaginationUtil.getPageResult(count, params, list)); + } + @Resource + private SysConfigMapper sysConfigMapper; + + + @Override + public RestResponse update(SysConfig sysConfig) { + sysConfigMapper.updateByPrimaryKeySelective(sysConfig); + return RestResponse.success(); + } + + @Override + public RestResponse getByCode(String code) { + SysConfig config = sysConfigMapper.selectByCode(code); + return RestResponse.success(config); + } + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysCorInvoiceServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysCorInvoiceServiceImpl.java new file mode 100644 index 0000000..9bbfee7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysCorInvoiceServiceImpl.java @@ -0,0 +1,18 @@ +package com.cmsen.ticket.application.manager.service.impl; + + +import com.cmsen.ticket.application.manager.service.SysCorInvoiceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/19 9:54 + **/ +@Slf4j +@Service +public class SysCorInvoiceServiceImpl implements SysCorInvoiceService { + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysOrgServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysOrgServiceImpl.java new file mode 100644 index 0000000..ebb2d1f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysOrgServiceImpl.java @@ -0,0 +1,124 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SysOrgService; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.mapper.manager.SysOrgMapper; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/18 16:06 + **/ +@Slf4j +@Service +public class SysOrgServiceImpl implements SysOrgService { + @Resource + private SysOrgMapper mapper; + + @Override + public RestResponse list(Map params) { + PaginationUtil.paginationInit(params); + if(null!=params.get("pageNo")){ + params.put("pageNum",params.get("pageNo").toString()); + PageHelper.startPage(Integer.parseInt(params.get("pageNum").toString()),Integer.parseInt(params.get("pageSize").toString())); + } + List list = mapper.list(params); + int total = mapper.count(params); + return RestResponse.success(PaginationUtil.getPageResult(total, params, list)); + } + + @Override + public RestResponse selectByPrimaryKey(Integer id) { + return RestResponse.success(mapper.selectByPrimaryKey(id)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse create(SysOrg sysOrg) { + try { + mapper.insertSelective(sysOrg); + return RestResponse.success(sysOrg); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse update(SysOrg sysOrg) { + try { + mapper.updateByPrimaryKeySelective(sysOrg); + return RestResponse.success(sysOrg); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse delete(Integer id) { + try { + mapper.deleteByPrimaryKey(id); + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + /** + * 添加组织信息 + * + * @param orgStr + * @return + */ + @Transactional + @Override + public RestResponse addOrg(String orgStr) { + try { + JSONArray ls = JSONArray.parseArray(orgStr); + log.info("orgStr=>{}",orgStr); + Map params = new HashMap<>(); + // 处理json + for (int i = 0; i < ls.size(); i++) { + JSONObject obj = JSONObject.parseObject(ls.get(i).toString()); + SysOrg org = JSONObject.parseObject(obj.toString(), SysOrg.class); + params.put("code",org.getCode()); + SysOrg tmp = mapper.selectByCode(org.getCode()); + if (null == tmp) { + org.setCreateTime(new Date()); + mapper.insertSelective(org); + }else{// 20240809添加修改 + SysOrg tmp1 = mapper.selectByCode(org.getCode()); + org.setId(tmp1.getId()); + mapper.updateByPrimaryKeySelective(org); + } + } + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("操作失败"); + } + } + + @Override + public RestResponse selectApproveOrgListByUserId(Integer userId) { + return RestResponse.success(mapper.selectApproveOrgListByUserId(userId)); + } +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysRoleServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..9bd76a5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,137 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SysRoleService; +import com.cmsen.ticket.domain.entity.manager.SysMenu; +import com.cmsen.ticket.domain.entity.manager.SysRole; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.mapper.manager.SysMenuMapper; +import com.cmsen.ticket.domain.mapper.manager.SysRoleMapper; +import com.cmsen.ticket.domain.mapper.manager.SysUserMapper; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/18 16:00 + **/ +@Slf4j +@Service +public class SysRoleServiceImpl implements SysRoleService { + + @Resource + private SysRoleMapper mapper; + + @Resource + private SysMenuMapper sysMenuMapper; + + @Resource + private SysUserMapper sysUserMapper; + + @Override + public RestResponse list(Map params) { + PaginationUtil.paginationInit(params); + if(null!=params.get("pageNo")){ + params.put("pageNum",params.get("pageNo").toString()); + PageHelper.startPage(Integer.parseInt(params.get("pageNum").toString()),Integer.parseInt(params.get("pageSize").toString())); + } + List list = mapper.list(params); + int total = mapper.count(params); + return RestResponse.success(PaginationUtil.getPageResult(total, params, list)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse create(SysRole sysRole) { + try { + mapper.insertSelective(sysRole); + return RestResponse.success(sysRole); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse update(SysRole sysRole) { + try { + mapper.updateByPrimaryKeySelective(sysRole); + return RestResponse.success(sysRole); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse delete(Integer id) { + try { + mapper.deleteByPrimaryKey(id); + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Override + public RestResponse getMenus(Integer role) { + List list = sysMenuMapper.queryAll(); + List idList = new ArrayList<>(); + if (!role.equals(1)) { + List ids = sysMenuMapper.selectAllMenus(role); + idList.addAll(ids); + } else { + for (SysMenu menu : list) { + idList.add(menu.getId()); + } + } + List menus = generateTree(list, 0); + Map result = new HashMap<>(); + result.put("idList", idList); + result.put("menuTree", menus); + return RestResponse.success(result); + } + + @Transactional + @Override + public RestResponse assignPermissions(SysRole sysRole) { + try { + mapper.deleteMenusByRole(sysRole.getId()); + sysRole.getMenus().forEach(menu -> { + mapper.insertRoleAndMenu(sysRole.getId(), menu); + }); + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + public List generateTree(List list, int parentId) { + List result = new ArrayList<>(); + for (SysMenu sysMenu : list) { + int parent = sysMenu.getPid(); + int id = sysMenu.getId(); + if (parent == parentId) { + List sysMenus = generateTree(list, id); + sysMenu.setMenu(sysMenus); + result.add(sysMenu); + } + } + return result; + } +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysUserServiceImpl.java b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..36e1e67 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/service/impl/SysUserServiceImpl.java @@ -0,0 +1,639 @@ +package com.cmsen.ticket.application.manager.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.ClientHttp; +import com.cmsen.common.http.ClientHttpRequest; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.http.ContentEnctype; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.util.DateFormat; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.common.util.StorageCache; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.application.manager.service.SysUserService; +import com.cmsen.ticket.application.service.UserService; +import com.cmsen.ticket.domain.entity.CorporateInvoiceType; +import com.cmsen.ticket.domain.entity.SysUserApprove; +import com.cmsen.ticket.domain.entity.SysUserOrg; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.entity.manager.SysMenu; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.mapper.CorporateInvoiceTypeMapper; +import com.cmsen.ticket.domain.mapper.SysUserApproveMapper; +import com.cmsen.ticket.domain.mapper.SysUserOrgMapper; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.domain.mapper.manager.SysMenuMapper; +import com.cmsen.ticket.domain.mapper.manager.SysOrgMapper; +import com.cmsen.ticket.domain.mapper.manager.SysUserMapper; +import com.cmsen.ticket.domain.response.Response; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.cmsen.ticket.interfaces.facade.form.ChangePassword; +import com.cmsen.ticket.interfaces.facade.form.LoginForm; +import com.cmsenframework.security.RequestSecurityPolicy; +import com.cmsenframework.security.UserDetail; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + +@Slf4j +@Service +public class SysUserServiceImpl implements SysUserService { + private static final Base64.Decoder DECODER = Base64.getDecoder(); + @Resource + private UserService userService; + @Resource + private UserDetailsService userDetailService; + @Resource + private SysUserMapper sysUserMapper; + @Resource + private SysMenuMapper sysMenuMapper; + @Resource + private CorporateInvoiceTypeMapper corporateInvoiceTypeMapper; + @Resource + private SysOrgMapper sysOrgMapper; + @Resource + private SysUserOrgMapper sysUserOrgMapper; + @Resource + private SysConfigMapper sysConfigMapper; + @Resource + private SysUserApproveMapper sysUserApproveMapper; + + @Override + public RestResponse login(LoginForm loginForm) { + //获取RequestAttributes + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + //从获取RequestAttributes中获取HttpServletRequest的信息 + HttpSession session = (HttpSession)requestAttributes.resolveReference(RequestAttributes.REFERENCE_SESSION); + // add-sso-login + if(loginForm.getSsoId()!=null && loginForm.getSsoId().length()>0){ + List> ls = sysUserMapper.execSelectSql("select login_id from sso_user where id='"+loginForm.getSsoId()+"'"); + if(ls.size()>0){ + loginForm.setUsername(ls.get(0).get("login_id").toString()); + sysUserMapper.execSelectSql("delete from sso_user where id='"+loginForm.getSsoId()+"'"); + }else { + return RestResponse.failure("无效的用户名。"); + } + }else { + // 如果存进session的count变量为null + if (session.getAttribute("count") == null) { + // 初始化count + session.setAttribute("count", 0); + } + log.info(session.getAttribute("count").toString()); + // 密码错误5次 则限制登陆一段时间 + if ((Integer) session.getAttribute("count") >= 5) { + // 如果当前时间大于session设置的时间则清楚session + if (new Date().after((Date) session.getAttribute("time"))) { + // 清除session + session.invalidate(); + } + return RestResponse.failure("登录错误次数过多,请半小时后再试"); + } + } + + // 创建日历对象,方便对时间做操作 + Calendar instance = Calendar.getInstance(); + // 为日历对象设置当前时间 + instance.setTime(new Date()); + // 给当前时间加时 + instance.add(Calendar.MINUTE, 120); + // 在获取当前时间加时 + Date time = instance.getTime(); + // 将当前时间设置到session中 + session.setAttribute("time", time); + + + SysUser user = sysUserMapper.selectByUserName(loginForm.getUsername()); + if (user == null) { + session.setAttribute("count", (Integer) session.getAttribute("count") + 1); + return RestResponse.failure("无效的用户名。"); + } + if (user.getInActive().equals(1)) { + return RestResponse.failure("账号异常,请联系管理员。"); + } + String userDetail = StringUtil.UUID(); + // add-sso-login + if(loginForm.getSsoId()==null || loginForm.getSsoId().length()==0) { + loginForm.setPassword(new String(DECODER.decode(loginForm.getPassword()))); + if (!RequestSecurityPolicy.passwordVerify(loginForm.getPassword(), user.getPwd())) { + session.setAttribute("count", (Integer) session.getAttribute("count") + 1); + return RestResponse.failure("用户名或密码错误。"); + } + userDetail = userService.getUserDetail(loginForm.getUsername(), loginForm.getPassword()); + }else{ + try { + UserDetail userDetails = (UserDetail) userDetailService.loadUserByUsername(user.getName()); + StorageCache.write("Auth:Bearer " + userDetail, "Bearer " + userDetails.getToken(), 1000 * 60 * 60 * 4); + }catch (Exception e){ + e.printStackTrace(); + } + } + String userDetail2 = userDetail; + List menus; + List menuList; + List button; + if (user.getRole().equals(1)) { + menuList = sysMenuMapper.list(1); + button = sysMenuMapper.list(2); + } else { + menuList = sysMenuMapper.selectMenuButtonsByRole(user.getRole(), 1); + button = sysMenuMapper.selectMenuButtonsByRole(user.getRole(), 2); + } + + List sysOrgList = sysOrgMapper.selectOrgListByUserId(user.getId()); + + menus = generateTree(menuList, 0); + String loginCode="0"; + // 判断是否需要二次短信认证 + SysConfig sysConfig = sysConfigMapper.selectByCode("LoginCodeNeed"); + if(sysConfig != null){ + loginCode=sysConfig.getValue(); + } + String loginCode2=loginCode; + return RestResponse.success(new LoginForm() {{ + setToken(userDetail2); + setUserId(user.getId()); + setUsername(user.getName()); + setRoleId(user.getRole()); + setMenu(menus); + setUser(user); + setButton(button); + setOrgList(sysOrgList); + setLoginCodeNeed(loginCode2); + setHomePage(user.getHomePage()); + setLanguage(StringUtil.isNotBlank(user.getNote()) ? user.getNote() : "zh"); + setRoleType(user.getRoleType()); + }}); + } + + + + @Override + public RestResponse singleLogin(LoginForm loginForm) { + if(loginForm.getUsername()==null || loginForm.getUsername().length()==0){ + + return RestResponse.failure("无效的登录信息"); + } + // 验证Code信息 + String code = loginForm.getUsername(); + // 获取token + + SysConfig urlConfig = sysConfigMapper.selectByCode("BZ_SINGLE_LOGIN_URL"); + SysConfig keyConfig = sysConfigMapper.selectByCode("BZ_SINGLE_APP_KEY"); + SysConfig secretConfig = sysConfigMapper.selectByCode("BZ_SINGLE_SECRET"); + log.info("baozun single login code >>" + code ); + ClientHttpResponse post = ClientHttp.post(new ClientHttpRequest() + .setUrl(urlConfig.getValue() + "/oauth/token") + .setHeaders("Content-Type", ContentEnctype.URLENCODED) + .setParams("code",code) + .setParams("appKey",keyConfig.getValue()) + .setParams("secret",secretConfig.getValue()) + ); + log.info("baozun single login code >> " + post); + + //判断token是否 + log.info("baozun single login >>" + post.getStatus()); + if(post.getStatus()!=200){//重新获取下token + return RestResponse.failure("获取token失败,请重新登录"); + } + log.info("baozun single login 成功 >> "); + String accessToken = JsonUtil.toObject(post.toString()).get("accessToken").toString(); + if(accessToken.equals("get_cache_token_error")) return RestResponse.failure("获取用户失败,请重新登录"); + + log.info("baozun single login 成功Token >> "+accessToken); + ClientHttpResponse postUser = ClientHttp.post(new ClientHttpRequest() + .setUrl(urlConfig.getValue() + "/oauth/user-info") + .setHeaders("Content-Type", ContentEnctype.URLENCODED) + .setParams("access_token",accessToken) + ); + log.info("baozun single login userMesg >> " + postUser); + // 获取用户具体信息 + log.info("baozun single getUser >>" + postUser.getStatus()); + if(postUser.getStatus()!=200){ + return RestResponse.failure("获取用户失败,请重新登录"); + } + + log.info("baozun single user 成功 >> "); + String loginName = JsonUtil.toObject(postUser.toString()).get("jobNumber").toString(); + + log.info("baozun single user 成功>> "+loginName); + if(loginName.equals("apinvoice")) loginName = "today"; + SysUser user = sysUserMapper.selectByUserName(loginName); + if (user == null) { + return RestResponse.failure("无效的用户名。"); + } + if (user.getInActive().equals(1)) { + return RestResponse.failure("账号异常,请联系管理员。"); + } + String userDetail =StringUtil.UUID(); + try { + UserDetail userDetails = (UserDetail) userDetailService.loadUserByUsername(user.getName()); + StorageCache.write("Auth:Bearer " + userDetail, "Bearer " + userDetails.getToken(), 1000 * 60 * 60 * 4); + }catch (Exception e){ + e.printStackTrace(); + } + + List menus; + List menuList; + List button; + if (user.getRole().equals(1)) { + menuList = sysMenuMapper.list(1); + button = sysMenuMapper.list(2); + } else { + Integer roleNum = user.getRole(); + menuList = sysMenuMapper.selectMenuButtonsByRole(roleNum, 1); + button = sysMenuMapper.selectMenuButtonsByRole(roleNum, 2); + } + + List sysOrgList = sysOrgMapper.selectOrgListByUserId(user.getId()); + + menus = generateTree(menuList, 0); + + return RestResponse.success(new LoginForm() {{ + setToken(userDetail); + setUserId(user.getId()); + setUsername(user.getName()); + setRoleId(user.getRole()); + setMenu(menus); + setUser(user); + setButton(button); + setOrgList(sysOrgList); + setHomePage(user.getHomePage()); + setLanguage(StringUtil.isNotBlank(user.getNote()) ? user.getNote() : "zh"); + setRoleType(user.getRoleType()); + }}); + } + + @Override + public RestResponse logout(HttpServletRequest request) { + RequestSecurityPolicy.setSecurityContext(new UserDetail(), request); + SysConfig sysConfig = sysConfigMapper.selectByCode("SSO_URL"); + Map sso = new HashMap<>(); + if(sysConfig != null){ + sso.put("SSO_URL",sysConfig.getValue()); + } + // add-sso-out + SysConfig sysConfigOut = sysConfigMapper.selectByCode("SSO_OUT_URL"); + if(sysConfigOut != null){ + sso.put("SSO_OUT_URL",sysConfigOut.getValue()); + } + return RestResponse.success(sso); + } + + @Override + public RestResponse list(Map params) { + //PaginationUtil.paginationInit(params); + params.put("pageNum",params.get("pageNo").toString()); + PageHelper.startPage(Integer.parseInt(params.get("pageNum").toString()),Integer.parseInt(params.get("pageSize").toString())); + + List list = sysUserMapper.list(params); + int total = sysUserMapper.count(params); + return RestResponse.success(PaginationUtil.getPageResult(total, params, list)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse create(SysUser sysUser) { + try { + SysUser sysUser1 = sysUserMapper.selectByUserName(sysUser.getName()); + if (sysUser1 != null) { + return RestResponse.failure("该用户已存在,请直接登录"); + } + if (StringUtil.isEmpty(sysUser.getPwd())) { + //默认初始密码-从config中获取 2022/5/13 + SysConfig sysConfig = sysConfigMapper.selectByCode("DefaultPwd"); + if(sysConfig != null){ + sysUser.setPwd(sysConfig.getValue()); + }else{ + sysUser.setPwd("123456"); + } + } + sysUser.setPwd(RequestSecurityPolicy.encodedPassword(sysUser.getPwd())); + sysUser.setCreateTime(DateFormat.format(new Date(), DateFormat.DatePatternType.FORMAT_yyyy_MM_dd_HH_mm_ss)); + sysUserMapper.insertSelective(sysUser); + return RestResponse.success(sysUser); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse update(SysUser sysUser) { + sysUser.setName(null); + sysUser.setPwd(null); + try { + sysUserMapper.updateByPrimaryKeySelective(sysUser); + return RestResponse.success(sysUser); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse delete(Integer id) { + try { + sysUserMapper.deleteByPrimaryKey(id); + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统错误"); + } + } + + public List generateTree(List list, int parentId) { + List result = new ArrayList<>(); + for (SysMenu sysMenu : list) { + int parent = sysMenu.getPid(); + int id = sysMenu.getId(); + if (parent == parentId) { + List sysMenus = generateTree(list, id); + sysMenu.setMenu(sysMenus); + result.add(sysMenu); + } + } + return result; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse changePassword(ChangePassword changePassword, HttpServletRequest request) { + try { + changePassword.setOldPassword(new String(DECODER.decode(changePassword.getOldPassword()))); + changePassword.setNewPassword(new String(DECODER.decode(changePassword.getNewPassword()))); + Integer userId = Integer.valueOf(String.valueOf(RequestSecurityPolicy.getUserId())); + SysUser sysUser = sysUserMapper.selectByPrimaryKey(userId); + if (RequestSecurityPolicy.passwordVerify(changePassword.getOldPassword(), sysUser.getPwd())) { + sysUser.setPwd(RequestSecurityPolicy.encodedPassword(changePassword.getNewPassword())); + // 添加密码最后修改日期 + sysUser.setLastUpdateTime(DateFormat.format(new Date(), DateFormat.DatePatternType.FORMAT_yyyy_MM_dd_HH_mm_ss)); + sysUserMapper.updateByPrimaryKeySelective(sysUser); + RequestSecurityPolicy.setSecurityContext(new UserDetail(), request); + return RestResponse.success(); + } + return RestResponse.failure("用户名或密码错误。"); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统异常"); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public RestResponse resetPassword(Integer id) { + try { + SysUser sysUser = sysUserMapper.selectByPrimaryKey(id); + if (sysUser != null) { + //默认初始密码-从config中获取 2022/5/13 + SysConfig sysConfig = sysConfigMapper.selectByCode("DefaultPwd"); + if(sysConfig != null){ + sysUser.setPwd(sysConfig.getValue()); + }else{ + sysUser.setPwd("123456"); + } + sysUser.setPwd(RequestSecurityPolicy.encodedPassword(sysUser.getPwd())); + sysUserMapper.updateByPrimaryKeySelective(sysUser); + return RestResponse.success(); + } + return RestResponse.failure("用户异常"); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("系统异常"); + } + } + + @Override + public Response getDataAuth(Integer userId) { + SysUserOrg result = sysUserOrgMapper.selectByPrimaryKey(userId); + if (result == null) { + result = new SysUserOrg(); + result.setUserId(userId); + } + return Response.success(result); + } + + @Override + public Response> getInvoiceTypes(Integer userId) { + List corporateInvoiceTypes = corporateInvoiceTypeMapper.selectByRecord(new CorporateInvoiceType() {{ + setActive(true); + }}); + return Response.success(corporateInvoiceTypes); + } + + @Override + public Response> getUserOrgs(String keyword, Integer userId) { + List list = sysOrgMapper.list(new HashMap() {{ + put("name", keyword); + }}); + List sysOrgs = generateTreeForOrg(list, 0); + return Response.success(sysOrgs); + } + + @Transactional + @Override + public Response updateDataPermission(SysUserOrg userOrg) { + try { + SysUserOrg sysUserOrg = sysUserOrgMapper.selectByPrimaryKey(userOrg.getUserId()); + if (sysUserOrg == null) { + sysUserOrgMapper.insert(userOrg); + } else { + sysUserOrgMapper.updateByPrimaryKeySelective(userOrg); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("提交失败"); + } + return Response.success(); + } + + @Transactional + @Override + public RestResponse uploadOrg(MultipartFile file) { + try { + InputStream inputStream = file.getInputStream(); + List> sheetRowData = EasyExcel.read(inputStream).sheet(0).doReadSync(); + + Map> mapList = new HashMap<>(); + + //数据处理 + for (int i = 0; i < sheetRowData.size(); i++) { + Map sheetRowDatum = sheetRowData.get(i); + String org = StringUtil.trim(String.valueOf(sheetRowDatum.get(1))); + String jobNo = StringUtil.trim(String.valueOf(sheetRowDatum.get(2))); + + if(StringUtil.isEmpty(org) || StringUtil.isEmpty(jobNo)){ + continue; + } + + if (mapList.containsKey(jobNo)) { + mapList.get(jobNo).add(org); + } else { + mapList.put(jobNo, new ArrayList() {{ + add(org); + }}); + } + } + + for (String key : mapList.keySet()) { + SysUser sysUser = sysUserMapper.selectByJobNo(key); + if(sysUser == null ){ + continue; + } + SysOrg sysOrg = sysOrgMapper.selectByCostcenter2(String.join(",", mapList.get(key))); + + SysUserOrg bean = sysUserOrgMapper.selectByPrimaryKey(sysUser.getId()); + if(bean == null){//插入 + SysUserOrg sysUserOrg = new SysUserOrg(){{ + setUserId(sysUser.getId()); + setAuthorizedOrg(sysOrg.getRemark()); + setCorInvType("1"); + setDataAuthType(1); + }}; + sysUserOrgMapper.insert(sysUserOrg); + }else{//更新 + bean.setAuthorizedOrg(sysOrg.getRemark()); + sysUserOrgMapper.updateByPrimaryKeySelective(bean); + } + } + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("授权导入失败"); + } + + } + + @Transactional + @Override + public RestResponse uploadApprove(MultipartFile file) { + try { + InputStream inputStream = file.getInputStream(); + List> sheetRowData = EasyExcel.read(inputStream).sheet(0).doReadSync(); + + Map> mapList = new HashMap<>(); + + //数据处理 + for (int i = 0; i < sheetRowData.size(); i++) { + Map sheetRowDatum = sheetRowData.get(i); + String org = StringUtil.trim(String.valueOf(sheetRowDatum.get(1))); + String jobNo = StringUtil.trim(String.valueOf(sheetRowDatum.get(2))); + + if(StringUtil.isEmpty(org) || StringUtil.isEmpty(jobNo)){ + continue; + } + + if (mapList.containsKey(jobNo)) { + mapList.get(jobNo).add(org); + } else { + mapList.put(jobNo, new ArrayList() {{ + add(org); + }}); + } + } + + for (String key : mapList.keySet()) { + SysUser sysUser = sysUserMapper.selectByJobNo(key); + if(sysUser == null ){ + continue; + } + SysOrg sysOrg = sysOrgMapper.selectByCostcenter2(String.join(",", mapList.get(key))); + + SysUserApprove bean = sysUserApproveMapper.selectByPrimaryKey(sysUser.getId()); + if(bean == null){//插入 + SysUserApprove sysUserApprove = new SysUserApprove(){{ + setUserId(sysUser.getId()); + setAuthorizedOrg(sysOrg.getRemark()); + setCorInvType("1"); + setDataAuthType(1); + }}; + sysUserApproveMapper.insert(sysUserApprove); + }else{//更新 + bean.setAuthorizedOrg(sysOrg.getRemark()); + sysUserApproveMapper.updateByPrimaryKeySelective(bean); + } + } + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("授权导入失败"); + } + } + + public List generateTreeForOrg(List list, int parentId) { + List result = new ArrayList<>(); + for (SysOrg org : list) { + int parent = org.getPid(); + int id = org.getId(); + if (parent == parentId) { + List orgs = generateTreeForOrg(list, id); + org.setChild(orgs); + result.add(org); + } + } + return result; + } + + public static void main(String[] args) throws IOException { +// String url = "http://110.42.101.165:8103/ai/vector/save"+"?name="+"测试"+"&type="+2; +// log.info(WebUtils.doGet(url,null)); +// byte[] as = new String("Ab1234").getBytes(); +// System.out.println(Base64Util.encodeToString(as)); +// BigDecimal pretaxAmountDecimal = new BigDecimal("263.39"); + + } + + @Override + public RestResponse getVerCode(String tel) { + SysUser sysUser = sysUserMapper.selectByTelAndCode(tel, null); + if(sysUser == null){ + return RestResponse.failure("该手机号用户不存在"); + } + + log.info("getVerCode {}", tel); + int code = (int) ((Math.random() * 9 + 1) * 100000); + + String sendSmsUrl = ""; + SysConfig sysConfig = sysConfigMapper.selectByCode("sendSmsUrl"); + if(sysConfig != null){ + sendSmsUrl = sysConfig.getValue(); + } + String sendSmsSign = "发票助手"; + sysConfig = sysConfigMapper.selectByCode("sendSmsSign"); + if(sysConfig != null){ + sendSmsSign = sysConfig.getValue(); + } +// SmsUtil.sendSms(tel, code, sendSmsUrl, sendSmsSign); + + sysUser.setAge(code); + sysUserMapper.updateByPrimaryKeySelective(sysUser); + + return RestResponse.success(); + } + + @Override + public RestResponse verCodeLogin(String tel, String code) { + SysUser sysUser = sysUserMapper.selectByTelAndCode(tel, code); + if(sysUser == null){ + return RestResponse.failure("手机号、验证码不正确"); + } + return RestResponse.success(); + } + +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/vo/ElementTreeNodes.java b/src/main/java/com/cmsen/ticket/application/manager/vo/ElementTreeNodes.java new file mode 100644 index 0000000..b343b1b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/vo/ElementTreeNodes.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.application.manager.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ElementTreeNodes { + private int id; + private String label; + + private List children; + + @JsonIgnore + private String parent; + + private String filterPath; +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/vo/GetMaterialParamVo.java b/src/main/java/com/cmsen/ticket/application/manager/vo/GetMaterialParamVo.java new file mode 100644 index 0000000..64cb85b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/vo/GetMaterialParamVo.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.application.manager.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor + +public class GetMaterialParamVo { + private String data_base; + private List data_list; + private String model_name; +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/vo/MatterV3ResponseVo.java b/src/main/java/com/cmsen/ticket/application/manager/vo/MatterV3ResponseVo.java new file mode 100644 index 0000000..32b43a7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/vo/MatterV3ResponseVo.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.application.manager.vo; + +import com.alibaba.fastjson2.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MatterV3ResponseVo { + private String data; + private JSONObject info; +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierInvoiceMatchOrderVo.java b/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierInvoiceMatchOrderVo.java new file mode 100644 index 0000000..c770af9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierInvoiceMatchOrderVo.java @@ -0,0 +1,64 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.application.manager.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class SupplierInvoiceMatchOrderVo { + private Integer id; + private String orderNo; + private String supplierCode; + private String orgName; + private BigDecimal amount; + private BigDecimal unUsedAmount; + private BigDecimal usedAmount; + private BigDecimal price; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date orderDate; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date receiveDate; + + private String goods; + private String itemNo; + + private BigDecimal quantity; + private BigDecimal usedQuantity; + private BigDecimal unUsedQuantity; + + private String uom; + private String unit; + + + public BigDecimal getUnUsedAmount() { + if (usedAmount == null) return this.amount; + if (amount == null) return new BigDecimal("0"); + return amount.subtract(usedAmount); + } + + public BigDecimal getUsedAmount() { + return usedAmount == null ? BigDecimal.ZERO : usedAmount; + } + + public BigDecimal getUsedQuantity() { + return usedQuantity == null ? BigDecimal.ZERO : usedQuantity; + } + + public BigDecimal getUnUsedQuantity() { + if (usedQuantity == null) return this.quantity; + if (quantity == null) return BigDecimal.ZERO; + return quantity.subtract(usedQuantity); + } +} diff --git a/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierMaterialDefineVo.java b/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierMaterialDefineVo.java new file mode 100644 index 0000000..1af9419 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/manager/vo/SupplierMaterialDefineVo.java @@ -0,0 +1,10 @@ +package com.cmsen.ticket.application.manager.vo; + +import lombok.Data; + +@Data +public class SupplierMaterialDefineVo { + + private String itemType; + private String similarItemNo; +} diff --git a/src/main/java/com/cmsen/ticket/application/service/CompanyService.java b/src/main/java/com/cmsen/ticket/application/service/CompanyService.java new file mode 100644 index 0000000..ae7224c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/CompanyService.java @@ -0,0 +1,73 @@ +package com.cmsen.ticket.application.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.Company; + +import java.util.List; + +/** + * (Company)表服务接口 + * + * @author ran hao yu + * @since 2020-09-18 14:11:43 + */ +public interface CompanyService { + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + Company queryById(Integer id); + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + List queryAllByLimit(String code,String name,String taxNo); + + List queryAll(Company company); + + /** + * 新增数据 + * + * @param company 实例对象 + * @return 实例对象 + */ + RestResponse insert(Company company); + + /** + * 修改数据 + * + * @param company 实例对象 + * @return 实例对象 + */ + Company update(Company company); + + /** + * 通过主键删除数据 + * + * @param id 主键 + * @return 是否成功 + */ + boolean deleteById(Integer id); + + /** + * 停用 + * + * @param id + * @return + */ + RestResponse clock(Integer id); + + /** + * 启用 + * + * @param id + * @return + */ + RestResponse active(Integer id); + +} diff --git a/src/main/java/com/cmsen/ticket/application/service/CorporateInvoiceService.java b/src/main/java/com/cmsen/ticket/application/service/CorporateInvoiceService.java new file mode 100644 index 0000000..69d7518 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/CorporateInvoiceService.java @@ -0,0 +1,10 @@ +package com.cmsen.ticket.application.service; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/1/16 16:35 + **/ +public interface CorporateInvoiceService { + +} diff --git a/src/main/java/com/cmsen/ticket/application/service/SupplierOutService.java b/src/main/java/com/cmsen/ticket/application/service/SupplierOutService.java new file mode 100644 index 0000000..915221d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/SupplierOutService.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.application.service; + +import com.cmsen.ticket.domain.entity.CorporateInvoice; + +import java.util.List; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/11/3 14:26 + **/ +public interface SupplierOutService { + + void sendInvoice(CorporateInvoice invoice, String type, String status); + + void sendMainDataToBaozun(CorporateInvoice invoice, String izt, String iid); + + int sendMatchingDataCustom(Long matchItemId, String type); + + void sendMatchingData(List ids, String invoiceId); + + String getBodyByMatchItemForBaozun(Long itemMatchingId); + + String getXmlBodyByMatchItemForBaozun(Long itemMatchingId); + + String getBodyByMatchItemForBaozunXml(Long itemMatchingId); + + String getXmlBodyByCorporateInvoiceForBaozun(CorporateInvoice invoice, String izt, String iid); + +} diff --git a/src/main/java/com/cmsen/ticket/application/service/UserService.java b/src/main/java/com/cmsen/ticket/application/service/UserService.java new file mode 100644 index 0000000..701b0ab --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/UserService.java @@ -0,0 +1,38 @@ +package com.cmsen.ticket.application.service; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.entity.User; +import org.springframework.security.authentication.AuthenticationManager; + +import java.util.List; + +/** + * @author ran hao yu + * @date 2020/7/31 9:31 + * @description 用户业务层接口 + */ +public interface UserService { + RestResponse insert(User record); + + RestResponse appAuth(String jscode, String corCode, int type); + + RestResponse getMessagesCode(String jsCode, String tel); + + RestResponse verifyMessages(String jsCode, Integer verificationCode, String tel); + + RestResponse updateLanguageType(User user); + + RestResponse selectUser(String openID); + + String getUserDetail(String tel, String password); + + AuthenticationManager getAuthManager(); + + RestResponse addSendEmails(List emails); + + RestResponse selectSendEmails(); + + RestResponse updateValidType(User user); + + RestResponse checkGps(); +} diff --git a/src/main/java/com/cmsen/ticket/application/service/impl/CompanyServiceImpl.java b/src/main/java/com/cmsen/ticket/application/service/impl/CompanyServiceImpl.java new file mode 100644 index 0000000..f59afa1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/impl/CompanyServiceImpl.java @@ -0,0 +1,134 @@ +package com.cmsen.ticket.application.service.impl; + +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.service.CompanyService; +import com.cmsen.ticket.domain.entity.Company; +import com.cmsen.ticket.domain.mapper.CompanyMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * (Company)表服务实现类 + * + * @author ran hao yu + * @since 2020-09-18 14:11:43 + */ +@Service("companyService") +public class CompanyServiceImpl implements CompanyService { + @Resource + private CompanyMapper companyMapper; + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + @Override + public Company queryById(Integer id) { + return this.companyMapper.queryById(id); + } + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + @Override + public List queryAllByLimit(String code,String name,String taxNo) { + return this.companyMapper.queryAllByLimit(code,name,taxNo); + } + + @Override + public List queryAll(Company company) { + return this.companyMapper.queryAll(company); + } + + /** + * 新增数据 + * + * @param company 实例对象 + * @return 实例对象 + */ + @Override + public RestResponse insert(Company company) { + try { + SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd"); + company.setIsDel("0"); + company.setCustomerId(1); + company.setCreateTime(sim.format(new Date())); + this.companyMapper.insert(company); + return RestResponse.success("添加成功"); + } catch (ServiceException e) { + throw new ServiceException(e); + } + } + + /** + * 修改数据 + * + * @param company 实例对象 + * @return 实例对象 + */ + @Override + public Company update(Company company) { + this.companyMapper.update(company); + return this.queryById(company.getId()); + } + + /** + * 通过主键删除数据 + * + * @param id 主键 + * @return 是否成功 + */ + @Override + public boolean deleteById(Integer id) { + return this.companyMapper.deleteById(id) > 0; + } + + /** + * 启用 + * + * @param id + * @return + */ + @Override + public RestResponse active(Integer id) { + try { + Company company = queryById(id); + if (company == null) { + throw new ServiceException("id无效", 0001); + } + companyMapper.active(id); + return RestResponse.success(); + } catch (ServiceException e) { + throw new ServiceException(e); + } + } + + /** + * 停用 + * + * @param id + * @return + */ + @Override + public RestResponse clock(Integer id) { + try { + Company company = queryById(id); + if (company == null) { + throw new ServiceException("id无效", 0001); + } + companyMapper.clock(id); + return RestResponse.success(); + } catch (ServiceException e) { + throw new ServiceException(e); + } + } +} diff --git a/src/main/java/com/cmsen/ticket/application/service/impl/CorporateInvoiceServiceImpl.java b/src/main/java/com/cmsen/ticket/application/service/impl/CorporateInvoiceServiceImpl.java new file mode 100644 index 0000000..62a3c0c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/impl/CorporateInvoiceServiceImpl.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.application.service.impl; + +import com.cmsen.ticket.application.service.CorporateInvoiceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/1/16 16:38 + **/ +@Slf4j +@Service +public class CorporateInvoiceServiceImpl implements CorporateInvoiceService { + +} diff --git a/src/main/java/com/cmsen/ticket/application/service/impl/SupplierOutServiceImpl.java b/src/main/java/com/cmsen/ticket/application/service/impl/SupplierOutServiceImpl.java new file mode 100644 index 0000000..a94cb6d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/impl/SupplierOutServiceImpl.java @@ -0,0 +1,1166 @@ +package com.cmsen.ticket.application.service.impl; + +import cn.hutool.core.text.StrBuilder; +import com.cmsen.common.http.ClientHttp; +import com.cmsen.common.http.ClientHttpRequest; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.http.ContentEnctype; +import com.cmsen.common.util.DateFormat; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.application.service.SupplierOutService; +import com.cmsen.ticket.domain.entity.*; +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.entity.weitai.LineDOCUP; +import com.cmsen.ticket.domain.entity.weitai.OCREXPRESS; +import com.cmsen.ticket.domain.mapper.*; +import com.cmsen.ticket.domain.mapper.manager.SupplierOrderItemMatchingMapper; +import com.cmsen.ticket.domain.mapper.manager.SysOrgMapper; +import com.cmsen.ticket.domain.mapper.manager.SysUserMapper; +import lombok.Cleanup; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/11/3 14:28 + **/ +@Slf4j +@Service +public class SupplierOutServiceImpl implements SupplierOutService { + + @Resource + private SysOrgMapper sysOrgMapper; + + @Resource + private CorporateInvoiceItemsMapper corporateInvoiceItemsMapper; + + @Resource + private CorporateInvoiceMapper corporateInvoiceMapper; + + @Value("${spring.application.name}") + private String applicationName; + + @Resource + private SupplierMapper supplierMapper; + + @Resource + private SupplierOrderItemMatchingMapper supplierOrderItemMatchingMapper; + + @Resource + private SupplierOrderMapper supplierOrderMapper; + + @Resource + private SysUserMapper sysUserMapper; + + @Resource + private CorporateInvoiceTypeMapper corporateInvoiceTypeMapper; + + + private static List> groupByList(List sourceDatas, + int pageSize) { + // 分组集合 + List> groupLists = new ArrayList<>(); + // 分组数据 + List tempDatas = new ArrayList<>(); + if (sourceDatas != null && pageSize > 0) { + for (int i = 0; i < sourceDatas.size(); i++) { + if (i % pageSize == 0) { + if (!tempDatas.isEmpty()) { + groupLists.add(tempDatas); + } + tempDatas = new ArrayList<>(); + tempDatas.add(sourceDatas.get(i)); + } else { + tempDatas.add(sourceDatas.get(i)); + } + } + } + if (!tempDatas.isEmpty()) { + groupLists.add(tempDatas); + } + return groupLists; + } + + @Override + public void sendInvoice(CorporateInvoice invoice, String type, String status) { + switch (type) { + case "baozun": + sendMainDataToBaozun(invoice, "0", null); + break; + case "sironax": + sendInvoiceToWeitai(invoice); + break; + case "baozun:update": + sendMainDataToBaozun(invoice, status, invoice.getEntryId()); + break; + default: + invoice.setIsSend(1); + invoice.setUseStatus(0); + } + } + + private void sendInvoiceToWeitai(CorporateInvoice invoice) { + try { + OCREXPRESS ocrexpress = new OCREXPRESS(); + ocrexpress.setInvoiceNo(invoice.getNumber()); +// ocrexpress.setCardName(invoice.getSeller()); + ocrexpress.setDocDate(DateFormat.parse(invoice.getDate())); + ocrexpress.setDocTotal(invoice.getTotal()); + ocrexpress.setPayDate(invoice.getPayDate()); + List expenseFields = JsonUtil.toArray(invoice.getExtraFields()); + boolean isNext =true; + for(Object expenseField:expenseFields){ + + Map of = (Map) expenseField; + String selectName = String.valueOf(of.get("selectName")); + String defaultValue = String.valueOf(of.get("defaultValue")); + /*if ("ReqNum".equals(selectName)) { + ocrexpress.setOcrDocEntry(defaultValue); + } else if ("PurType".equals(selectName)) { + if ("服务采购".equals(defaultValue) || "Service".equals(defaultValue)) { + ocrexpress.setExpenseType("S"); + } else { + ocrexpress.setExpenseType("I"); + } + } else */ + if(invoice.getInvoiceType()==1){ + ocrexpress.setExpenseType("S"); + + }else{ + ocrexpress.setExpenseType("I"); + } + ocrexpress.setOcrDocEntry(""); + // 根据ID获取org + SysOrg org = sysOrgMapper.selectByPrimaryKey(invoice.getOrgId()); + if(org!=null) { + ocrexpress.setCompany(org.getCostcenter()); + }else{// 20221013没有Org直接返回 + return; + } + if ("PayCom".equals(selectName)) { + //String category = String.valueOf(of.get("category")); + String payCom = "";//expenseTypeActiveMapper.geCodeByIdAndValue(category, defaultValue); + // 20221013 + if(org!=null) { + payCom = org.getCostcenter(); + } + //ocrexpress.setCompany(payCom); + Supplier supplier = supplierMapper.selectCodeByNameAndCode(invoice.getSellerNo(), payCom); + if (supplier != null) { + ocrexpress.setCardCode(supplier.getCode()); + ocrexpress.setCardName(supplier.getName()); + }else{ + isNext = false; + } + + ocrexpress.setCardName(invoice.getTitle()); + } + + } + // false就返回不执行 + if(!isNext) return; + List lines = new ArrayList<>(); + List items = invoice.getItems(); + if (items.isEmpty()) { + items.add(new CorporateInvoiceItems() {{ + setName("ITEM"); + setTotal(invoice.getTotal()); + }}); + } + items.forEach(item -> { + OCREXPRESS.LineDetial lineDetail = new OCREXPRESS.LineDetial(); + lineDetail.setLineId(0); + lineDetail.setItemName(item.getName()); + lineDetail.setDesc(item.getSpecification()); + lineDetail.setUint(item.getUnit()); + lineDetail.setQuantity(item.getQuantity()); + lineDetail.setPrice(item.getPrice()); + lineDetail.setLineTotal(item.getTotal()); + lineDetail.setTax(item.getTaxRate()); + lineDetail.setTaxAmount(item.getTax()); + lines.add(lineDetail); + }); + ocrexpress.setLineDetial(lines); + // 20221012添加头图 + ocrexpress.setOcrURL(invoice.getImgPath()); + log.info("Send To WeiTai>>>>{}", JsonUtil.toString(ocrexpress)); + StringBuilder postInvoice = ClientHttp.post(new ClientHttpRequest() {{ + setUrl("http://39.99.225.37:4100/api/OCR/PstInvoice"); + setHeaders("Content-Type", ContentEnctype.JSON); + setHeaders("Authorization", "Bearer 455F0C5396C851E24F54AE143BFDAF66"); + setParams(JsonUtil.toString(ocrexpress)); + }}).getBody(); + log.info("Send To WeiTai Result>>>>{}", postInvoice); + String resStr = String.valueOf(postInvoice); + int verifyCode = Integer.parseInt(String.valueOf(JsonUtil.toObject(resStr).get("verifyCode"))); + if (verifyCode != 0) { + invoice.setIsSend(0); + invoice.setStatus(0); + invoice.setMessage(resStr); + } + List files = invoice.getFiles(); + try { + if (verifyCode == 0 && (StringUtil.isNotEmpty(invoice.getImgPath()) || !files.isEmpty())) { + if (StringUtil.isNotEmpty(invoice.getImgPath())) { + List lineDOCUPS = new ArrayList<>(); + String imgPath = invoice.getImgPath(); + String ext = imgPath.substring(imgPath.lastIndexOf(".") + 1); + String fileName = imgPath.substring(imgPath.lastIndexOf("/") + 1); + LineDOCUP lineDOCUP = new LineDOCUP(); + lineDOCUP.setFileExt(ext); + lineDOCUP.setFileName(fileName); + lineDOCUP.setInvoiceNo(invoice.getNumber()); + lineDOCUP.setDOCUP(netImageToBytes(imgPath)); + lineDOCUP.setInvoiceType("I"); + lineDOCUPS.add(lineDOCUP); + if (!lineDOCUPS.isEmpty()) { + log.info("Send to WeiTai Img>>"); + ClientHttpResponse postImg = ClientHttp.post(new ClientHttpRequest() {{ + setUrl("http://39.99.225.37:4100/api/OCR/PstOcrExDocs"); + setHeaders("Content-Type", ContentEnctype.JSON); + setHeaders("Authorization", "Bearer 455F0C5396C851E24F54AE143BFDAF66"); + setParams(JsonUtil.toString(lineDOCUPS)); + }}); + log.info("Send to WeiTai Img Result>>{}", postImg); + } + } + if (!files.isEmpty()) { + List> lists = groupByList(files, 5); + for (List list : lists) { + List lineDOCUPS = new ArrayList<>(); + for (File file : list) { + String imgPath = file.getUri(); + String ext = imgPath.substring(imgPath.lastIndexOf(".") + 1); + String fileName = imgPath.substring(imgPath.lastIndexOf("/") + 1); + LineDOCUP lineDOCUP = new LineDOCUP(); + lineDOCUP.setFileExt(ext); + lineDOCUP.setFileName(fileName); + lineDOCUP.setInvoiceNo(invoice.getNumber()); + lineDOCUP.setDOCUP(netImageToBytes(imgPath)); + lineDOCUP.setInvoiceType("P"); + lineDOCUPS.add(lineDOCUP); + } + if (!lineDOCUPS.isEmpty()) { + log.info("Send to WeiTai Img>>"); + ClientHttpResponse postImg = ClientHttp.post(new ClientHttpRequest() {{ + setUrl("http://39.99.225.37:4100/api/OCR/PstOcrExDocs"); + setHeaders("Content-Type", ContentEnctype.JSON); + setHeaders("Authorization", "Bearer 455F0C5396C851E24F54AE143BFDAF66"); + setParams(JsonUtil.toString(lineDOCUPS)); + }}); + log.info("Send to WeiTai Img Result>>{}", postImg); + } + } + } + } + invoice.setIsSend(1); + invoice.setStatus(0); + } catch (Exception e) { + log.error("Send to WeiTai Img Error, {}", e.getMessage()); + } + } catch (Exception e) { + invoice.setIsSend(0); + invoice.setStatus(0); + invoice.setMessage("接口异常"); + log.error(e.getMessage(), e); + } + } + + @Override + public void sendMainDataToBaozun(CorporateInvoice invoice, String izt, String iid) { + try { + log.info("sendMainDataToBaozun >> {} >> {} >> {}", invoice.getId(), iid, izt); + String xmlBody = getXmlBodyByCorporateInvoiceForBaozun(invoice, izt, iid); + log.info("sendMainDataToBaozun Body >> {}", xmlBody); + StringBuilder body = ClientHttp.post(new ClientHttpRequest() {{ + setUrl("https://oauat.baozun.com/services/ModeDateService"); + setHeaders("Content-Type", "application/xml"); + setParams(xmlBody); + }}).getBody(); + log.info("sendMainDataToBaozun Res >> {}", body); + if (body == null) { + invoice.setIsSend(0); + invoice.setStatus(0); + invoice.setUseStatus(9); + invoice.setMessage("发送异常"); + } else { + String bodyStr = body.toString(); + int idS = bodyStr.indexOf("<id>"); + int idE = bodyStr.lastIndexOf("</id>"); + String entryId = bodyStr.substring(idS + 10, idE); + invoice.setEntryId(entryId); + invoice.setIsSend(1); + invoice.setStatus(0); + invoice.setMessage(""); + invoice.setUseStatus(0); + } + } catch (Exception e) { + log.error("sendMainDataToBaozun Error >> {}", e.getMessage()); + log.error(e.getMessage(), e); + invoice.setIsSend(0); + invoice.setStatus(0); + invoice.setUseStatus(9); + invoice.setMessage("发送异常"); + } + } + + @Override + public int sendMatchingDataCustom(Long matchItemId, String type) { + int result; + try { + switch (type) { + case "baozun": + String itemForBaozun = getBodyByMatchItemForBaozun(matchItemId);//修改为xml方式 2022/5/30 + log.info("sendMatchingDataCustom Data >> {}", itemForBaozun); + StringBuilder body = ClientHttp.post(new ClientHttpRequest() {{ + setUrl("https://oauat.baozun.com/weaver/SubmitWorkflowService"); + //setUrl("https://oauat.baozun.com/services/WorkflowService?wsdl"); + setHeaders("Content-Type", "application/json"); + setParams(itemForBaozun); + }}).getBody(); + log.info("sendMatchingDataCustom Res >> {}", body); + result = body.toString().contains("true") ? 2 : 4; + break; + default: + result = 2; + break; + } + } catch (Exception e) { + log.error("sendMatchingDataCustom Error >> {}", e.getMessage()); + log.error(e.getMessage(), e); + result = 4; + } + //result = 4; + return result; + } + + @Async(value = "SystemPool") + @Override + public void sendMatchingData(List ids, String invoiceId) { + // InvoiceType为2不走OA + String appType = applicationName; + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(invoiceId); + //log.info("corporateInvoice值查看{}", corporateInvoice); + if(corporateInvoice.getInvoiceType()==2){ + appType="bzx"; + } + // oa数据发送 + for (Long id : ids) { + try { + int b = sendMatchingDataCustom(id, appType); + supplierOrderItemMatchingMapper.updateByPrimaryKeySelective(new SupplierOrderItemMatching() {{ + setId(id); + setMatchingStatus(b); + }}); + } catch (Exception e) { + log.error(e.getMessage(), e); + log.error("sendMatchingData Error >> {}", id); + } + } + // 计算百分比 + BigDecimal percent = BigDecimal.ZERO; + if(corporateInvoice.getPriceType()==0){ + percent =corporateInvoiceMapper.calculateMatchingPercent(corporateInvoice.getPriceType(), corporateInvoice.getId()); + }else{ + percent =corporateInvoiceMapper.calculateMatchingPercentPriceType_1(corporateInvoice.getPriceType(), corporateInvoice.getId()); + } + if (percent.setScale(0,BigDecimal.ROUND_HALF_UP).intValue() == 100) { + corporateInvoiceMapper.updateByPrimaryKeySelective(new CorporateInvoice() {{ + setId(invoiceId); + setMatchStatus(3); + setIsSend(1); + setStatus(1); + }}); + log.info("sendMatchingData 设置重新发送=》{}",invoiceId); + } else { + corporateInvoiceMapper.updateByPrimaryKeySelective(new CorporateInvoice() {{ + setId(invoiceId); + setMatchStatus(0); + }}); + } + } + + @Override + public String getXmlBodyByCorporateInvoiceForBaozun(CorporateInvoice invoice, String izt, String iid) { + + SysOrg sysOrg = sysOrgMapper.selectByPrimaryKey(invoice.getOrgId()); + List items = invoice.getItems(); + //发票税率 + String fpsl = items == null || items.isEmpty() ? "" : items.get(0).getTaxRate(); + //发票所属部门编码 + String bmbm = sysOrg == null ? "" : sysOrg.getCode(); + //发票代码 + String fpdm = invoice.getCode(); + //发票号码 + String fphm = invoice.getNumber(); + //发票税额 + String fpse = invoice.getTax(); + //发票ID + String fpid = invoice.getId(); + //供应商名称 + String gysmc = invoice.getSeller(); + //供应商税号 + String gyssh = invoice.getSellerNo(); + //购买方名称 + String gmfmc = invoice.getBuyer(); + //购买方税号 + String gmfsh = invoice.getBuyerNo(); + //状态 + String zt = izt == null ? "0" : izt; + + String id = iid == null ? "" : iid; + //发票总金额 + String fpzje = invoice.getTotal(); + //税前金额 + String sqje = invoice.getPretaxAmount(); + + String fileContent = invoice.getImgPath(); + String fileName = StringUtil.isBlank(fileContent) ? "" : fileContent.substring(fileContent.lastIndexOf("/") + 1); + + + StrBuilder xml = new StrBuilder(); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + xml.append("
"); + xml.append("1"); + xml.append("2381"); + //有则更新 无则新增 + xml.append("").append(id).append(""); + xml.append("
"); + + xml.append(""); + xml.append(""); + xml.append("Y"); + xml.append(""); + + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("bmbm").append(""); + xml.append("").append("发票所属部门编码").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(bmbm).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fpdm").append(""); + xml.append("").append("发票代码").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(fpdm).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fphm").append(""); + xml.append("").append("发票号码").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(fphm).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fpsl").append(""); + xml.append("").append("发票税率").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append("").append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fpse").append(""); + xml.append("").append("发票税额").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(fpse).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fpzje").append(""); + xml.append("").append("发票总金额").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(fpzje).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("sqje").append(""); + xml.append("").append("税前金额").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(sqje).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("fpid").append(""); + xml.append("").append("发票ID").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(fpid).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("gysmc").append(""); + xml.append("").append("供应商名称").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(gysmc).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("gyssh").append(""); + xml.append("").append("供应商税号").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(gyssh).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("gmfmc").append(""); + xml.append("").append("购买方名称").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(gmfmc).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("gmfsh").append(""); + xml.append("").append("购买方税号").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(gmfsh).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("zt").append(""); + xml.append("").append("状态").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(zt).append(""); + xml.append(""); + xml.append(""); + // 20220824添加三个字段xm-USER_NAME,gh-note,yx-EMAIL + SysUser user = sysUserMapper.selectByPrimaryKey(invoice.getOwner()); + if(user!=null) { + xml.append(""); + xml.append("").append("xm").append(""); + xml.append("").append("姓名").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(user.getUserName()).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("gh").append(""); + xml.append("").append("工号").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(user.getNote()).append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + xml.append("").append("yx").append(""); + xml.append("").append("邮箱").append(""); + xml.append("").append("varchar(999)").append(""); + xml.append("").append(user.getEmail()).append(""); + xml.append(""); + xml.append(""); + } + + if (!"".equals(fileName)) { + xml.append(""); + xml.append("fptp"); + xml.append(""); + xml.append("").append(fileName).append(""); + xml.append("").append(fileContent).append(""); + xml.append(""); + xml.append(""); + } + + xml.append(""); + xml.append(""); + + xml.append("
"); + + xml.append("]]>"); + xml.append("
"); + xml.append("
"); + xml.append("
"); + xml.append("
"); + return xml.toString(); + } + + @Override + public String getBodyByMatchItemForBaozun(Long itemMatchingId) { + SupplierOrderItemMatching supplierOrderItemMatching = supplierOrderItemMatchingMapper.selectByPrimaryKey(itemMatchingId); + SupplierOrder supplierOrder = supplierOrderMapper.selectByPrimaryKey(supplierOrderItemMatching.getOrderId()); + //List lsItem = supplierOrderItemMatchingMapper.selectBySupplierOrderId(supplierOrder.getOrderNo()); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(supplierOrderItemMatching.getInvoiceId()); + + /*//明细ID + String mainId = supplierOrder.getLineNum().toString(); + //OCR ID + *//*String ocrid = itemMatchingId.toString(); + //发票ID + String fpid = corporateInvoice.getId(); + //发票号码 + String fphm = corporateInvoice.getNumber(); + //发票代码 + String fpdm = corporateInvoice.getCode(); + //金额 + String je = supplierOrderItemMatching.getTotal().toString(); + //发票税率 + String sl = taxMapping == null ? "" : taxMapping.getCode(); + //发票税额 + String s = supplierOrderItemMatching.getTax().toString();*//* + + //Requestid + String requestid = supplierOrder.getReceiveNo(); + + String czr = supplierOrder.getExt01(); + + String workflowId = supplierOrder.getExt02(); + + BaoZunSubmitWorkFlow baoZunSubmitWorkFlow = new BaoZunSubmitWorkFlow(); + baoZunSubmitWorkFlow.setRequestid(requestid); + baoZunSubmitWorkFlow.setWorkflow(workflowId); + baoZunSubmitWorkFlow.setUserid(czr); + baoZunSubmitWorkFlow.setFpsfyfkjeyy("0"); + List list = new ArrayList<>(); + for(SupplierOrderItemMatching item:lsItem){ + BaoZunSubmitWorkFlowDetail detail = new BaoZunSubmitWorkFlowDetail(); + detail.setMxid(mainId); + detail.setOcrid(item.getId().toString()); + detail.setFpid(item.getCId()); + detail.setFphm(item.getCNumber()); + detail.setFpdm(item.getCCode()); + detail.setJe(item.getTotal().toString()); + detail.setSl(item.getTCode()); + detail.setS(item.getTax().toString()); + list.add(detail); + }*/ + //明细ID + String mainId = supplierOrder.getLineNum().toString(); + //OCR ID + String ocrid = itemMatchingId.toString(); + //发票ID + String fpid = corporateInvoice.getId(); + //发票号码 + String fphm = corporateInvoice.getNumber(); + //发票代码 + String fpdm = corporateInvoice.getCode(); + //金额 + String je = supplierOrderItemMatching.getTotal().toString(); + //发票税率 + //发票税额 + String s = supplierOrderItemMatching.getTax().toString(); + // 20220905添加含税金额 + BigDecimal totalMoney = new BigDecimal(je).add(new BigDecimal(s)); + + //Requestid + String requestid = supplierOrder.getReceiveNo(); + + String czr = supplierOrder.getExt01(); + + String workflowId = supplierOrder.getExt02(); + + BaoZunSubmitWorkFlow baoZunSubmitWorkFlow = new BaoZunSubmitWorkFlow(); + baoZunSubmitWorkFlow.setRequestid(requestid); + baoZunSubmitWorkFlow.setWorkflow(workflowId); + baoZunSubmitWorkFlow.setUserid(czr); + baoZunSubmitWorkFlow.setZzfp("0"); + // 20220711计算比率100%为0 + BigDecimal percent = corporateInvoiceMapper.calculateMatchingPercent(corporateInvoice.getPriceType(), corporateInvoice.getId()); + corporateInvoice.setPercent(percent.setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); + baoZunSubmitWorkFlow.setFpsfyfkjeyy("1"); + if(corporateInvoice.getPercent()==100){ + baoZunSubmitWorkFlow.setFpsfyfkjeyy("0"); + + } + + BaoZunSubmitWorkFlowDetail detail = new BaoZunSubmitWorkFlowDetail(); + detail.setMxid(mainId); + detail.setOcrid(ocrid); + detail.setFpid(fpid); + detail.setFphm(fphm); + detail.setFpdm(fpdm); + detail.setJe(je); + detail.setSl(""); + detail.setS(s); + detail.setHszje(totalMoney.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + + List list = new ArrayList<>(); + list.add(detail); + + + baoZunSubmitWorkFlow.setDetail(list); + + return JsonUtil.toString(baoZunSubmitWorkFlow); + } + + /** + * 返回XML + * @param itemMatchingId + * @return + */ + @Override + public String getBodyByMatchItemForBaozunXml(Long itemMatchingId) { + SupplierOrderItemMatching supplierOrderItemMatching = supplierOrderItemMatchingMapper.selectByPrimaryKey(itemMatchingId); + SupplierOrder supplierOrder = supplierOrderMapper.selectByPrimaryKey(supplierOrderItemMatching.getOrderId()); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(supplierOrderItemMatching.getInvoiceId()); + + //明细ID + String mainId = supplierOrder.getLineNum().toString(); + //OCR ID + String ocrid = itemMatchingId.toString(); + //发票ID + String fpid = corporateInvoice.getId(); + //发票号码 + String fphm = corporateInvoice.getNumber(); + //发票代码 + String fpdm = corporateInvoice.getCode(); + //金额 + String je = supplierOrderItemMatching.getTotal().toString(); + //发票税率 + //发票税额 + String s = supplierOrderItemMatching.getTax().toString(); + + //Requestid + String requestid = supplierOrder.getReceiveNo(); + + String czr = supplierOrder.getExt01(); + + String workflowId = "9964";//supplierOrder.getExt02(); + + BaoZunSubmitWorkFlow baoZunSubmitWorkFlow = new BaoZunSubmitWorkFlow(); + baoZunSubmitWorkFlow.setRequestid(requestid); + baoZunSubmitWorkFlow.setWorkflow(workflowId); + baoZunSubmitWorkFlow.setUserid(czr); + baoZunSubmitWorkFlow.setFpsfyfkjeyy("0"); + + BaoZunSubmitWorkFlowDetail detail = new BaoZunSubmitWorkFlowDetail(); + detail.setMxid(mainId); + detail.setOcrid(ocrid); + detail.setFpid(fpid); + detail.setFphm(fphm); + detail.setFpdm(fpdm); + detail.setJe(je); + detail.setSl(""); + detail.setS(s); + + List list = new ArrayList<>(); + list.add(detail); + + baoZunSubmitWorkFlow.setDetail(list); + + //return JsonUtil.toString(baoZunSubmitWorkFlow); + StrBuilder xml = new StrBuilder(); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + + xml.append(""); + // + xml.append("").append(workflowId).append(""); + xml.append(""); + // + xml.append(""+czr+""); + // + xml.append(""+requestid+""); + // + xml.append("0"); + // !-- 流程请求标题 supplier_order-ext03--> + xml.append(""+supplierOrder.getExt03()+""); + + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + + + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + + + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append("1"); + xml.append(""); + + xml.append(""); + xml.append("").append("mxid").append(""); + xml.append("").append(mainId).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("ocrid").append(""); + xml.append("").append(ocrid).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fpid").append(""); + xml.append("").append(fpid).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fphm").append(""); + xml.append("").append(fphm).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fpdm").append(""); + xml.append("").append(fpdm).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("je").append(""); + xml.append("").append(je).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("sl").append(""); + xml.append("").append("").append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("s").append(""); + xml.append("").append(s).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + + xml.append(""); + xml.append(requestid); + xml.append(""); + + xml.append(""); + xml.append(czr); + xml.append(""); + + xml.append(""); + xml.append("submit"); + xml.append(""); + + xml.append(""); + xml.append("同意"); + xml.append(""); + + xml.append(""); + xml.append(""); + + xml.append(""); + return xml.toString(); + } + + @Override + public String getXmlBodyByMatchItemForBaozun(Long itemMatchingId) { + + SupplierOrderItemMatching supplierOrderItemMatching = supplierOrderItemMatchingMapper.selectByPrimaryKey(itemMatchingId); + SupplierOrder supplierOrder = supplierOrderMapper.selectByPrimaryKey(supplierOrderItemMatching.getOrderId()); + CorporateInvoice corporateInvoice = corporateInvoiceMapper.selectByPrimaryKey(supplierOrderItemMatching.getInvoiceId()); + + //明细ID + String mainId = supplierOrder.getLineNum().toString(); + //OCR ID + String ocrid = itemMatchingId.toString(); + //发票ID + String fpid = corporateInvoice.getId(); + //发票号码 + String fphm = corporateInvoice.getNumber(); + //发票代码 + String fpdm = corporateInvoice.getCode(); + //金额 + String je = supplierOrderItemMatching.getTotal().toString(); + //发票税率 + //发票税额 + String s = supplierOrderItemMatching.getTax().toString(); + + //Requestid + String requestid = supplierOrder.getReceiveNo(); + + String czr = supplierOrder.getExt01(); + + String workflowId = supplierOrder.getExt02(); + + StrBuilder xml = new StrBuilder(); + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + + xml.append(""); + xml.append("").append(workflowId).append(""); + xml.append(""); + + xml.append(""); + + xml.append(""); + xml.append("formtable_main_615_dt6"); + xml.append(""); + xml.append(""); + + xml.append("1"); + + xml.append(""); + + xml.append(""); + xml.append("").append("mxid").append(""); + xml.append("").append(mainId).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("ocrid").append(""); + xml.append("").append(ocrid).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fpid").append(""); + xml.append("").append(fpid).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fphm").append(""); + xml.append("").append(fphm).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("fpdm").append(""); + xml.append("").append(fpdm).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("je").append(""); + xml.append("").append(je).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("sl").append(""); + xml.append("").append("").append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + xml.append("").append("s").append(""); + xml.append("").append(s).append(""); + xml.append("true"); + xml.append("true"); + xml.append(""); + + xml.append(""); + + xml.append(""); + xml.append(""); + xml.append(""); + xml.append(""); + + xml.append(""); + + xml.append(""); + xml.append(requestid); + xml.append(""); + + xml.append(""); + xml.append(czr); + xml.append(""); + + xml.append(""); + xml.append("submit"); + xml.append(""); + + xml.append(""); + xml.append("同意"); + xml.append(""); + + xml.append(""); + xml.append(""); + + xml.append(""); + + return xml.toString(); + } + + private byte[] netImageToBytes(String netPath) { + try { + @Cleanup + ByteArrayOutputStream os = new ByteArrayOutputStream(); + URL url = new URL(netPath); + byte[] bytes = new byte[1024]; + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5000); + @Cleanup + InputStream is = conn.getInputStream(); + int len = -1; + while ((len = is.read(bytes)) != -1) { + os.write(bytes, 0, len); + } + return os.toByteArray(); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + + @Data + public static class BaoZunSubmitWorkFlow { + private String requestid; + private String workflow; + private String userid; + private String fpsfyfkjeyy; + private String zzfp; + private List detail; + + } + + @Data + public static class BaoZunSubmitWorkFlowDetail { + private String mxid;//明细ID + private String ocrid; + private String fpid;//发票Id + private String fphm;//发票号码 + private String fpdm;//发票代码 + private String je;//不含税金额 + private String sl; + private String s; + private String hszje; + + } + + @Data + public static class BaoZunSubmitWorkFlow2 { + private String requestid; + private String workflow; + private String userid; + private String fpsfyfkjeyy; + private String zzfp; + private String fujian; + private List detail; + + } + + @Data + public static class BaoZunSubmitWorkFlowDetail2 { + private String mxid;//明细ID + private String fpid;//发票Id + private String fphm;//发票号码 + private String fpdm;//发票代码 + private String je;//不含税金额 + + private String fptp;//发票图片 + private String fylx;//费用类型 + private String fkje1;//付款金额 + private String cbzx;//成本中心 + private String xiangmupihao;//GS项目编号 + private String xiangmupihao1;//OA项目编号 + private String fphsje;//发票含税金额 + private String fpsekdk;//发票税额(可抵扣) + private String sfl;//税分类 + private String fkyybz;//付款缘由备注 + private String ocrid;//匹配表ID + + } + + @Data + public static class BaoZunSubmitWorkFlow3 { + private String requestid; + private String workflow; + private String userid; + private String fpsfyfkjeyy; + private String zzfp; + private String fujian; + private List detail; + } + + @Data + public static class BaoZunSubmitWorkFlowDetail3 { + private String mxid;//明细ID + private String fpid;//发票Id + private String fphm;//发票号码 + private String fpdm;//发票代码 + private String je;//不含税金额 + + private String fptp;//发票图片 + private String fylx;//费用类型 + private String fkje1;//付款金额 + private String cbzx;//成本中心 + private String xiangmupihao;//GS项目编号 + private String xiangmupihao1;//OA项目编号 + private String fphsje;//发票含税金额 + private String fpsekdk;//发票税额(可抵扣) + private String sfl;//税分类 + private String fkyybz;//付款缘由备注 + private String ocrid;//匹配表ID + + } +} diff --git a/src/main/java/com/cmsen/ticket/application/service/impl/UserServiceImpl.java b/src/main/java/com/cmsen/ticket/application/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..3b22203 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/application/service/impl/UserServiceImpl.java @@ -0,0 +1,867 @@ +package com.cmsen.ticket.application.service.impl; + +import cn.hutool.http.HttpUtil; +import com.cmsen.common.exception.DataException; +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.ClientHttp; +import com.cmsen.common.http.ClientHttpRequest; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.http.ContentEnctype; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.util.DateFormat; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.common.util.StorageCache; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.application.service.UserService; +import com.cmsen.ticket.domain.entity.Customer; +import com.cmsen.ticket.domain.entity.User; +import com.cmsen.ticket.domain.entity.VerifiedUser; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.mapper.CustomerMapper; +import com.cmsen.ticket.domain.mapper.UserMapper; +import com.cmsen.ticket.domain.mapper.VerifiedUserMapper; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.domain.mapper.manager.SysUserMapper; +import com.cmsenframework.security.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +/** + * @author ran hao yu + * @date 2020/7/31 9:32 + * @description + */ +@Slf4j +@Service +public class UserServiceImpl implements UserService, UserDetailService { + private static final long EXPIRE_IN = 24 * 60 * 60; + private static final int CODE_EXPIRE_TIME = 10 * 60 * 1000; + @Resource + private UserMapper userMapper; + @Value("${wechat.appId}") + private String appId; + @Value("${wechat.appSecret}") + private String appSecret; + @Value("${wechat.corAppId}") + private String corAppId; + @Value("${wechat.corSecret}") + private String corAppSecret; + @Value("${spring.jwt.password}") + private String defaultPassword; + @Value("${spring.jwt.en_password}") + private String enPassword; + @Resource + private VerifiedUserMapper verifiedUserMapper; + @Resource + private AuthenticationManager authenticationManager; + @Resource + private SysUserMapper sysUserMapper; + @Resource + private CustomerMapper customerMapper; + @Resource + private SysConfigMapper sysConfigMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public RestResponse insert(User record) { + try { + int i = userMapper.insert(record); + if (i > 0) { + return RestResponse.success("添加成功"); + } else { + throw new ServiceException("添加失败", 11); + } + } catch (ServiceException e) { + throw new ServiceException(e); + } + } + + @Override + public RestResponse appAuth(String jscode, String corCode, int type) { + // 20240202特殊要求企业 + SysConfig authType = sysConfigMapper.selectByCode("Wechat_Auth_type"); + if(authType!=null && authType.getValue()!=null && authType.getValue().length()>0){ + if(authType.getValue().equals("bayer")){ + return corWechatAuthBayer(jscode,corCode); + } + } + //企业微信授权 + if (type == 1) { + return corWechatAuth(jscode, corCode); + } + //微信授权 + String url = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + appId + + "&secret=" + appSecret + + "&js_code=" + jscode + + "&grant_type=authorization_code"; + String openId = ""; + try { + String result = HttpUtil.get(url); + log.info("GET OPENID >> {}", result); + openId = String.valueOf(JsonUtil.toObject(result).get("openid")); + } catch (Exception e) { + log.error(e.getMessage(), e); + return RestResponse.failure("Get OpenId Failure"); + } + //获得openID + if (StringUtil.isEmpty(openId) || "null".equals(openId)) { + return RestResponse.failure("Get OpenId Failure"); + } + User user = new User(); + user.setOpenid(openId); + User user1 = userMapper.selectByUser(user); + if (user1 == null || user1.getChecked().equals(0)) { + return RestResponse.success("请先验证手机号", 301); + } + VerifiedUser verifiedUser = verifiedUserMapper.checkByTelOrEmail(user1.getTel()); + if(verifiedUser != null){ + user1.setVUserExt05(verifiedUser.getExt05()); + } + + Map data = new HashMap<>(); + // 用户已绑定电话,生成 Token 返回 + String userDetail = getUserDetail("wechat" + user1.getTel(), null); + Customer customer = customerMapper.queryById(user1.getClient()); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("openId", user1.getOpenid()); + data.put("tel", user1.getTel()); + data.put("client", user1.getClient()); + data.put("userInfo", user1); + data.put("manual", user1.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user1.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + return RestResponse.success(data); + } + + private RestResponse corWechatAuth(String jsCode, String corCode) { + try { + //获取 微信openId + String url = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + appId + + "&secret=" + appSecret + + "&js_code=" + jsCode + + "&grant_type=authorization_code"; + String openId = ""; + try { + String result = HttpUtil.get(url); + log.info("GET OPENID >> {}", result); + openId = String.valueOf(JsonUtil.toObject(result).get("openid")); + } catch (Exception e) { + log.error(e.getMessage(), e); + return RestResponse.failure("Get OpenId Failure"); + } + if (StringUtil.isEmpty(openId) || "null".equals(openId)) { + return RestResponse.failure("Get OpenId Failure"); + } + //比较数据库用户 + User userSearch = new User(); + userSearch.setOpenid(openId); + User user1 = userMapper.selectByUser(userSearch); + //有 登录 + if (user1 != null) { + Map data = new HashMap<>(); + String userDetail = getUserDetail("wechat" + user1.getTel(), null); + Customer customer = customerMapper.queryById(1); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("openId", user1.getOpenid()); + data.put("tel", user1.getTel()); + data.put("client", user1.getClient()); + data.put("userInfo", user1); + data.put("manual", user1.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user1.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + return RestResponse.success(data); + } + //无 获取企业微信userId + String result = HttpUtil.get("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + + corAppId + "&corpsecret=" + corAppSecret); + String access_token = String.valueOf(JsonUtil.toObject(result).get("access_token")); + log.info("Access Token >> {}", result); + if (StringUtil.isEmpty(access_token) || "null".equals(access_token)) { + return RestResponse.failure("获取Access Token失败"); + } + String userResult = HttpUtil.get("https://qyapi.weixin.qq.com/cgi-bin/miniprogram/jscode2session?grant_type=authorization_code" + + "&access_token=" + access_token + "&js_code=" + corCode); + String userid = String.valueOf(JsonUtil.toObject(userResult).get("userid")); + log.info("Cor User Info >> {}", userResult); + if (StringUtil.isEmpty(userid) || "null".equals(userid)) { + return RestResponse.failure("获取UserId失败"); + } + //比对verifyUser + VerifiedUser verifiedUser = verifiedUserMapper.checkByTel(userid); + // 无 无使用权限 + if (verifiedUser == null) { + return RestResponse.failure("用户无使用权限"); + } + // 有创建用户 并登录 + User user2 = new User(); + user2.setUsername(verifiedUser.getName()); + user2.setEmail(verifiedUser.getLoginId()); + user2.setIsDel("0"); + user2.setCreateTime(DateFormat.format(new Date(), DateFormat.DatePatternType.FORMAT_yyyy_MM_dd_HH_mm_ss)); + user2.setUpdateTime(user2.getCreateTime()); + user2.setLanguageType("cn"); + user2.setClient(1); + user2.setChecked(1); + user2.setTel(userid); + user2.setOpenid(openId); + userMapper.insert(user2); + User user = userMapper.selectByUser(user2); + Map data = new HashMap<>(); + String userDetail = getUserDetail("wechat" + user2.getTel(), null); + Customer customer = customerMapper.queryById(1); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("openId", user.getOpenid()); + data.put("tel", user.getTel()); + data.put("client", user.getClient()); + data.put("userInfo", user); + data.put("manual", user.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + return RestResponse.success(data); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("授权失败"); + } + } + + /** + * bayer企微单独接口 + * @param jsCode + * @param corCode + * @return + */ + private RestResponse corWechatAuthBayer(String jsCode, String corCode) { + try { + SysConfig sid = sysConfigMapper.selectByCode("Bayer_Wechat_Auth_Sid"); + + if (sid==null ||sid.getValue()==null || sid.getValue().length()==0) { + return RestResponse.failure("Get Bayer Sid Failure"); + } + if(corCode==null || corCode.length()==0){ + corCode = jsCode; + } + //获取 微信openId + String url = "https://apigetaway-bayerwechat.bayer.cn/connector-service/mini_login" ; + /*"?code=" + corCode + + "&sid=" + sid.getValue() ;*/ + String openId = ""; + String result =""; + Map params = new HashMap<>(); + params.put("code",corCode); + params.put("sid",sid.getValue()); + Map mapUser = null; + Map mapUserCwid = null; + try { + /*HttpRequest reqPost = HttpUtil.createPost(url); + reqPost.form("code",corCode); + reqPost.form("sid",sid.getValue()); + result = reqPost.execute().body();*/ + ClientHttpResponse postReq = ClientHttp.post(new ClientHttpRequest() {{ + setUrl(url); + setHeaders("Content-Type", ContentEnctype.JSON); + setParams(JsonUtil.toString(params)); + }}); + result = postReq.getBody().toString(); + log.info("GET BAYER OPENID >> {}", result); + mapUser = (Map)JsonUtil.toObject(result); + mapUserCwid = (Map)mapUser.get("user"); + openId = mapUserCwid.get("UserIdentity").toString(); + } catch (Exception e) { + log.error(e.getMessage(), e); + return RestResponse.failure("无法获得对应的Concur账号,请联系IT热线"); + } + if (StringUtil.isEmpty(openId) || "null".equals(openId)) { + return RestResponse.failure("无法获得对应的Concur账号,请联系IT热线"); + } + //比较数据库用户 + User userSearch = new User(); + userSearch.setOpenid(openId); + User user1 = userMapper.selectByUser(userSearch); + //有 登录 + if (user1 != null) { + Map data = new HashMap<>(); + String userDetail = getUserDetail("wechat" + user1.getTel(), null); + Customer customer = customerMapper.queryById(1); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("openId", user1.getOpenid()); + data.put("tel", user1.getTel()); + data.put("client", user1.getClient()); + data.put("userInfo", user1); + data.put("manual", user1.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user1.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + return RestResponse.success(data); + } + Map mapBag = (Map)mapUserCwid.get("PropertyBag"); + List lsBag = (List)mapBag.get("TUSR_EX_bayer_ext_data"); + String userEmail=""; + for(int i=0; i tmpObj = lsBag.get(i); + if(tmpObj.get("PropertyDisplayName").toString().equals("邮箱")){//邮箱对象 + userEmail =tmpObj.get("PropertyValue").toString(); + } + + } + //比对verifyUser + VerifiedUser verifiedUser = verifiedUserMapper.checkByTelOrEmail(userEmail); + // 无 无使用权限 + if (verifiedUser == null) { + return RestResponse.failure("用户无使用权限"); + } + // CWID回写到verfiedUser + if(verifiedUser.getTel()==null || verifiedUser.getTel().length()==0){ + verifiedUser.setTel(openId); + verifiedUserMapper.updateByPrimaryKeySelective(verifiedUser); + } + // 创建用户 并登录 + User user2 = new User(); + user2.setUsername(verifiedUser.getName()); + user2.setEmail(verifiedUser.getLoginId()); + user2.setIsDel("0"); + user2.setCreateTime(DateFormat.format(new Date(), DateFormat.DatePatternType.FORMAT_yyyy_MM_dd_HH_mm_ss)); + user2.setUpdateTime(user2.getCreateTime()); + user2.setLanguageType("cn"); + user2.setClient(1); + user2.setChecked(1); + user2.setTel(userEmail); + user2.setOpenid(openId); + userMapper.insert(user2); + User user = userMapper.selectByUser(user2); + Map data = new HashMap<>(); + String userDetail = getUserDetail("wechat" + user2.getTel(), null); + Customer customer = customerMapper.queryById(1); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("openId", user.getOpenid()); + data.put("tel", user.getTel()); + data.put("client", user.getClient()); + data.put("userInfo", user); + data.put("manual", user.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + return RestResponse.success(data); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("授权失败"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public RestResponse getMessagesCode(String jsCode, String tel) { + + //错误返回 + Map failMess = new HashMap<>(); + failMess.put("cn","账号不存在,请联系管理员"); + failMess.put("en","Login ID is invalid,Please contact administrator!"); + SysConfig config = sysConfigMapper.selectByCode("no_account_mesg"); + if(config != null){ + failMess.put("cn",config.getValue()); + failMess.put("en",config.getDesc()); + } + + log.info("Get Message Code >> {}", tel); + if (StringUtils.isEmpty(jsCode)) { + throw new DataException("jsCode required"); + } + + //判断手机号登录 or 邮箱登录 + boolean isTel = com.cmsen.ticket.domain.util.StringUtils.isInteger(tel); + + //根据手机号验证是否已存在用户,然后发送短信 + User user1 = new User(); + if (isTel) { + user1.setTel(tel); + } else { + user1.setEmail(tel); + } + User user2 = userMapper.selectByUser(user1); + + int code = (int) ((Math.random() * 9 + 1) * 100000); + User user = new User(); + if (isTel) { + user.setTel(tel); + } else { + user.setEmail(tel); + } + + if(user2 == null){//不存在用户 + //查询验证表单验证是否存在该使用者 + VerifiedUser verifiedUser = verifiedUserMapper.checkByTelOrEmail(tel); + if (verifiedUser == null) { + //return RestResponse.failure("账号未验证,请联系管理员进行认证。", 402); + return RestResponse.failure(String.valueOf(failMess), 402); + } + String url = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + appId + + "&secret=" + appSecret + + "&js_code=" + jsCode + + "&grant_type=authorization_code"; + String openId = ""; + String unionId = ""; + try { + String result = HttpUtil.get(url); + log.info("GET OPENID >> {}", result); + openId = String.valueOf(JsonUtil.toObject(result).get("openid")); + unionId = String.valueOf(JsonUtil.toObject(result).get("unionid")); + } catch (Exception e) { + log.error(e.getMessage(), e); + //return RestResponse.failure("Get OpenId Failure"); + return RestResponse.failure(String.valueOf(failMess)); + } + //获得openID + if (StringUtil.isEmpty(openId) || "null".equals(openId)) { + //return RestResponse.failure("Get OpenId Failure"); + return RestResponse.failure(String.valueOf(failMess)); + } + //判断openId 是否存在 + User userOpenId = userMapper.selectByOpenId(openId, "0"); + if(null == userOpenId){ + user.setOpenid(openId); + user.setUnionid(unionId); + user.setClient(verifiedUser.getClientId()); + user.setUsername(verifiedUser.getName()); + user.setEmail(verifiedUser.getLoginId()); + user.setTel(verifiedUser.getTel()); + user.setChecked(0); + userMapper.insert(user); +// proxyUserMapper.insert(new ProxyUser() {{ +// setMainId(user.getUserId()); +// setProxyId(user.getUserId()); +// }}); + }else{//存在 + if(StringUtil.isBlank(userOpenId.getUnionid())){ + userMapper.updateUnionId(unionId, userOpenId.getUserId()); + } + } + } + + //发送验证码 + if (isTel) { + + String sendSmsUrl = ""; + SysConfig sysConfig = sysConfigMapper.selectByCode("sendSmsUrl"); + if(sysConfig != null){ + sendSmsUrl = sysConfig.getValue(); + } + + String sendSmsSign = "发票助手"; + sysConfig = sysConfigMapper.selectByCode("sendSmsSign"); + if(sysConfig != null){ + sendSmsSign = sysConfig.getValue(); + } + +// SmsUtil.sendSms(tel, code, sendSmsUrl, sendSmsSign); + } else { +// Boolean sendResult = sendMailService.sendVerifiedCode(tel, String.valueOf(code)); +// if (!sendResult) { +// return RestResponse.failure("验证码发送失败"); +// } + } + StorageCache.write(tel, code, CODE_EXPIRE_TIME); + return RestResponse.success(code); + + + /*if (user2 != null) { + //发送验证码 + if (isTel) { + + String sendSmsUrl = ""; + SysConfig sysConfig = sysConfigMapper.selectByCode("sendSmsUrl"); + if(sysConfig != null){ + sendSmsUrl = sysConfig.getValue(); + } + SmsUtil.sendSms(tel, code, sendSmsUrl); + } else { + Boolean sendResult = sendMailService.sendVerifiedCode(tel, String.valueOf(code)); + if (!sendResult) { + return RestResponse.failure("验证码发送失败"); + } + } + StorageCache.write(tel, code, CODE_EXPIRE_TIME); + return RestResponse.success(code); + } else { + //查询验证表单验证是否存在该使用者 + VerifiedUser verifiedUser = verifiedUserMapper.checkByTelOrEmail(tel); + if (verifiedUser == null) { + return RestResponse.failure("账号未验证,请联系管理员进行认证。", 402); + } + String url = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + appId + + "&secret=" + appSecret + + "&js_code=" + jsCode + + "&grant_type=authorization_code"; + String openId = ""; + try { + String result = HttpUtil.get(url); + log.info("GET OPENID >> {}", result); + openId = String.valueOf(JsonUtil.toObject(result).get("openid")); + } catch (Exception e) { + log.error(e.getMessage(), e); + return RestResponse.failure("Get OpenId Failure"); + } + //获得openID + if (StringUtil.isEmpty(openId) || "null".equals(openId)) { + return RestResponse.failure("Get OpenId Failure"); + } + user.setOpenid(openId); + user.setClient(verifiedUser.getClientId()); + user.setUsername(verifiedUser.getName()); + user.setEmail(verifiedUser.getLoginId()); + user.setTel(verifiedUser.getTel()); + user.setChecked(0); + int insert = userMapper.insert(user); + if (insert > 0) { + //发送验证码 + proxyUserMapper.insert(new ProxyUser() {{ + setMainId(user.getUserId()); + setProxyId(user.getUserId()); + }}); + if (isTel) { + String sendSmsUrl = ""; + SysConfig sysConfig = sysConfigMapper.selectByCode("sendSmsUrl"); + if(sysConfig != null){ + sendSmsUrl = sysConfig.getValue(); + } + SmsUtil.sendSms(tel, code, sendSmsUrl); + } else { + Boolean sendResult = sendMailService.sendVerifiedCode(tel, String.valueOf(code)); + if (!sendResult) { + return RestResponse.failure("验证码发送失败"); + } + } + StorageCache.write(tel, code, CODE_EXPIRE_TIME); + return RestResponse.success(code); + } else { + return RestResponse.failure("获取验证码失败"); + } + }*/ + } + + @Override + public RestResponse verifyMessages(String jsCode, Integer verificationCode, String tel) { + log.info("verifyMessages {} {}", tel, verificationCode); + if (!StorageCache.containsKey(tel) || !Integer.valueOf(StorageCache.read(tel).toString()).equals(verificationCode)) { + return RestResponse.failure("验证码错误"); + } + boolean isTel = com.cmsen.ticket.domain.util.StringUtils.isInteger(tel); + User user1 = new User(); + if (isTel) { + user1.setTel(tel); + } else { + user1.setEmail(tel); + } + User user2 = userMapper.selectByUser(user1); + if (user2 != null) { + Map data = new HashMap<>(); + // 用户已绑定电话,生成 Token 返回 + String userDetail = getUserDetail("wechat" + tel, null); + Customer customer = customerMapper.queryById(user2.getClient()); + Map tokenInfo = new HashMap<>(); + tokenInfo.put("token", userDetail); + data.put("tokenInfo", tokenInfo); + data.put("code", verificationCode); + data.put("openId", user2.getOpenid()); + data.put("tel", user2.getTel()); + data.put("client", user2.getClient()); + data.put("userInfo", user2); + data.put("manual", user2.isManual()); + data.put("multiInv", customer.getMultiInv()); + data.put("manualFieldConfig", customer.getManualFieldConfig()); + data.put("userType", user2.getType()); + data.put("forceValid", customer.getForceValid()); + data.put("expenseTypeActive", customer.getExpenseTypeActive()); + data.put("locationMandantory",sysConfigMapper.selectByCode("LOCATION_MANDANTORY").getValue()); + data.put("bpmUrl",sysConfigMapper.selectByCode("BPM_URL").getValue()); + data.put("otherWechatAppId",sysConfigMapper.selectByCode("OTHER_WECHAT_APP_ID").getValue()); + + String titleCn = "智能发票助手"; + SysConfig sysConfig = sysConfigMapper.selectByCode("appletTitle_Cn"); + if(sysConfig != null){ + titleCn = sysConfig.getValue(); + } + + String titleEn = "Smart Invoice"; + sysConfig = sysConfigMapper.selectByCode("appletTitle_En"); + if(sysConfig != null){ + titleEn = sysConfig.getValue(); + } + data.put("titleCn",titleCn); + data.put("titleEn",titleEn); + + //新增GPS权限 2023/5/10 + VerifiedUser verifiedUser = verifiedUserMapper.checkByTel(user2.getTel()); + if(verifiedUser != null){ + data.put("isGPS",verifiedUser.getExt02()); + }else{ + data.put("isGPS","0"); + } + + String single_ai = ""; + sysConfig = sysConfigMapper.selectByCode("single_ai"); + if(sysConfig != null){ + single_ai = sysConfig.getValue(); + } + String multi_ai = ""; + sysConfig = sysConfigMapper.selectByCode("multi_ai"); + if(sysConfig != null){ + multi_ai = sysConfig.getValue(); + } + data.put("single_ai",single_ai); + data.put("multi_ai",multi_ai); + + user2.setChecked(1); + userMapper.updateByPrimaryKey(user2); + + return RestResponse.success(data); + } else { + return RestResponse.failure("验证码错误或已过期"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public RestResponse updateLanguageType(User user) { + try { + if (user.getLanguageType() == null) { + throw new ServiceException("语言类型为空"); + } + int i = userMapper.updateByPrimaryKeySelective(user); + if (i > 0) { + return RestResponse.success("修改语言类型成功"); + } else { + throw new ServiceException("修改语言类型失败"); + } + } catch (ServiceException e) { + throw new ServiceException(e); + } + } + + @Override + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public RestResponse selectUser(String openID) { + if (openID == null) { + throw new DataException("用户openID为空"); + } else { + User user1 = new User(); + user1.setOpenid(openID); + User user = userMapper.selectByUser(user1); + if (user == null) { + return RestResponse.success(""); + } else { + VerifiedUser verifiedUser = verifiedUserMapper.checkByTelOrEmail(user.getTel()); + if(verifiedUser != null){ + user.setVUserExt05(verifiedUser.getExt05()); + } + + return RestResponse.success(user); + } + } + } + + + //授权 + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + if (username.startsWith("wechat")) { + String wechat = username.replace("wechat", ""); + boolean isTel = com.cmsen.ticket.domain.util.StringUtils.isInteger(wechat); + User user = userMapper.selectByUser(new User() {{ + if (isTel) { + setTel(wechat); + } else { + if(wechat.contains("@")) { + setEmail(wechat); + }else{ + setTel(wechat); + } + } + }}); + if (user == null) { + throw new ServiceException("Wrong Tel or Wrong Email"); + } + List permissions = new ArrayList<>(); + for (RequestContextMap.Context value : RequestContextMap.get().values()) { + if (value.getPath().contains("mini")) { + permissions.add(value.getPermission()); + } + } + UserDetail userDetail = new UserDetail(); + userDetail.setUserId(Long.valueOf(user.getUserId().toString())); + userDetail.setUsername(user.getTel()); + userDetail.setPassword(enPassword); + userDetail.setPermissions(permissions); + JsonWebTokenUtil.setClaims("userId", user.getUserId()); + JsonWebTokenUtil.setClaims("username", user.getTel()); + JsonWebTokenUtil.setClaims("permissions", permissions); + userDetail.setToken(JsonWebTokenUtil.builder(user.getTel(), EXPIRE_IN)); + return userDetail; + } + + SysUser sysUser = sysUserMapper.selectByUserName(username); + if (sysUser == null) { + throw new ServiceException("wrong username or password"); + } + + List permissions = new ArrayList<>(); +// if (sysUser.getRole().equals(1)) { + for (RequestContextMap.Context value : RequestContextMap.get().values()) { + if (value.getPath().contains("manager")) { + permissions.add(value.getPermission()); + } + } + UserDetail userDetail = new UserDetail(); + userDetail.setUserId(Long.valueOf(sysUser.getId())); + userDetail.setUsername(sysUser.getName()); + userDetail.setPassword(sysUser.getPwd()); + userDetail.setPermissions(permissions); + JsonWebTokenUtil.setExpireIn(EXPIRE_IN); + JsonWebTokenUtil.setClaims("userId", sysUser.getId()); + JsonWebTokenUtil.setClaims("username", sysUser.getName()); + JsonWebTokenUtil.setClaims("permissions", permissions); + userDetail.setToken(JsonWebTokenUtil.builder(sysUser.getName())); + return userDetail; + } + + @Override + public String getUserDetail(String tel, String password) { + if (password == null) { + password = defaultPassword; + } + UsernamePasswordAuthenticationToken authenticate1 = RequestSecurityPolicy.authenticate(tel, password); + Authentication authenticate = authenticationManager.authenticate(authenticate1); + RequestSecurityPolicy.setAuthentication(authenticate); + UserDetail userDetail = RequestSecurityPolicy.getPrincipal(); + String uuid = StringUtil.UUID(); + StorageCache.write("Auth:Bearer " + uuid, "Bearer " + userDetail.getToken(), 1000 * 60 * 60 * 4); +// userDetail.setToken(uuid); + return uuid; + } + + @Transactional + @Override + public RestResponse addSendEmails(List emails) { +// try { +// Integer userId = Integer.valueOf(String.valueOf(RequestSecurityPolicy.getUserId())); +// userConfigListMapper.deleteByUserIdAndType(userId, "EMAIL"); +// StringBuilder params = new StringBuilder(); +// emails.forEach(email -> params.append(email).append(";")); +// if (StringUtil.isNotEmpty(params.toString())) { +// userConfigListMapper.insert(new UserConfigList() {{ +// setUserId(userId); +// setParams1(params.toString()); +// setType("EMAIL"); +// }}); +// } +// return RestResponse.success(); +// } catch (Exception e) { +// log.error(e.getMessage(), e); +// throw new ServiceException("系统错误"); +// } + return null; + } + + @Override + public RestResponse selectSendEmails() { +// Integer userId = Integer.valueOf(String.valueOf(RequestSecurityPolicy.getUserId())); +// UserConfigList email = userConfigListMapper.selectByUserAndType(userId, "EMAIL"); +// if (email != null && StringUtil.isNotEmpty(email.getParams1())) { +// return RestResponse.success(Arrays.stream(email.getParams1().split(";")).collect(Collectors.toList())); +// } + return RestResponse.success(new ArrayList<>()); + } + + @Transactional + @Override + public RestResponse updateValidType(User user) { + try { + userMapper.updateByPrimaryKeySelective(user); + return RestResponse.success(); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("更新失败"); + } + } + + @Override + public AuthenticationManager getAuthManager() { + return authenticationManager; + } + + @Override + public RestResponse checkGps() { + try { + String isGPS = "0"; + User user = userMapper.selectByUser(new User() {{ + setUserId((int) RequestSecurityPolicy.getUserId()); + }}); + VerifiedUser verifiedUser = verifiedUserMapper.checkByTel(user.getTel()); + if(verifiedUser != null){ + isGPS = verifiedUser.getExt02(); + } + return RestResponse.success(isGPS); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ServiceException("获取失败"); + } + } +} diff --git a/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtil.java b/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtil.java new file mode 100644 index 0000000..d54c35c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtil.java @@ -0,0 +1,378 @@ +package com.cmsen.ticket.bestsign.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONArray; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.common.util.StorageCache; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.infrastructure.config.OkHttpMonitorInterceptor; +import com.cmsen.ticket.infrastructure.config.RestTemplateConfig; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.DigestUtils; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +/** + * 接口类 + * @author xp + * @date 2018年8月23日 14:57:10 + */ +@Slf4j +@Component +public class InterfaceUtil { + + @Resource + private OkHttpMonitorInterceptor okHttpMonitorInterceptor; + @Resource + private RestTemplateConfig restTemplateConfig; + public OkHttpClient buildBasicAuthClient(final String name, final String password) { + return new OkHttpClient.Builder().authenticator(new Authenticator() { + @Override + public Request authenticate(Route route, Response response) throws IOException { + String credential = Credentials.basic(name, password); + return response.request().newBuilder().header("Authorization", credential).build(); + } + }).build(); + } + + /** + * 获取列表数据 + * @param url2 + * @param params + * @return + * @throws IOException + */ + public String[] httpMainGetBasicAuth(String url2, String userName, String password) throws IOException{ + OkHttpClient client = buildBasicAuthClient(userName,password); +// String traceId = MDC.get("traceId"); +// if(StringUtils.isEmpty(traceId)){ +// traceId = UUID.randomUUID().toString(); +// } + Request request = new Request.Builder() + .url(url2) + .get() + .addHeader("Content-Type", "application/json") +// .addHeader("X-Trace-Id", traceId) + .build(); + Response response ; + String content =""; + int code=200; + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e) { + System.out.println(e.getMessage()); + } + String[] arr = {content,String.valueOf(code)}; + return arr; + } + + + public String[] httpPostMan2(String url2, Map params){ + + + OkHttpClient client = OKHttpClientBuilder.buildOKHttpClient() + .addInterceptor(okHttpMonitorInterceptor) + .connectTimeout(60, TimeUnit.SECONDS) + .readTimeout(100, TimeUnit.SECONDS) + .build(); + MediaType mediaType = MediaType.parse(params.get("Content-Type"));//application/x-www-form-urlencoded + RequestBody body = RequestBody.create(mediaType, params.get("body")); + String traceId = MDC.get("traceId"); + if(StringUtils.isEmpty(traceId)){ + traceId = UUID.randomUUID().toString(); + } + Request request = new Request.Builder() + .url(url2) + .post(body) + .addHeader("Authorization", params.get("Authorization")) + .addHeader("Content-Type", params.get("Content-Type")) + .addHeader("cache-control", "no-cache") +// .addHeader("X-Trace-Id", traceId) +// .addHeader("Postman-Token", "d0b912ca-ddda-4287-ad15-54d6ce95e181") + .build(); + /*Response response = client.newCall(request).execute(); + String content = response.body().string();*/ + Response response ; + String content =""; + int code=200; + int count = 4; + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e){ + log.error(e.getMessage()); + while (getMesg(e.getMessage()).equals("error") && count>0){ + log.info("失败重试》》》》》》》httpPostMan2"+count); + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e2) { + log.error(e2.getMessage()); + } + if(!getMesg(content).equals("error")){ + break; + } + count--; + } + } + + if(getMesg(content).equals("error")){ + log.error(content+url2+params.toString()); + } + String[] arr = {content,String.valueOf(code)}; + return arr; + } + + public String getMesg(String result){ + String returnMsg="success"; + Map errorsMsg = new HashMap<>(); + errorsMsg.put("401","401 Authorization Required"); + errorsMsg.put("timeOut","timed out"); + errorsMsg.put("timeOut2","timeout"); + errorsMsg.put("toekn","token is expired"); + errorsMsg.put("Service_unavailable","Service Unavailable"); + for (String msg :errorsMsg.values()){ + if(msg.length()<3)continue; + if(result.indexOf(msg) !=-1){ + returnMsg="error"; + break; + } + } + return returnMsg; + } + + /** + * 获取AiToken + * @param sysConfigMapper + * @return + */ + public String getAiToken(SysConfigMapper sysConfigMapper, HttpHeaders headers,RestTemplate client ){ + String token=""; + + SysConfig proxyConfig = sysConfigMapper.selectByCode("PF_PROXY"); + if(null==proxyConfig){ + + }else{ + SysConfig proxyIP = sysConfigMapper.selectByCode("PF_PROXY_IP"); + SysConfig proxyPort = sysConfigMapper.selectByCode("PF_PROXY_PORT"); + if(null!=proxyIP&&null!=proxyPort){ + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + requestFactory.setProxy( + new Proxy( + Proxy.Type.HTTP, + new InetSocketAddress(proxyIP.getValue(), Integer.parseInt(proxyPort.getValue())) //设置代理服务 + ) + ); + client.setRequestFactory(requestFactory); + } + } + // 获取token + // 设置请求头,请求类型为json + // 判断token是否有效 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Object tokenObj = StorageCache.read("AITOKEN"); + if(tokenObj!=null) { + return tokenObj.toString(); + }else { + // url + SysConfig aiTokenURl = sysConfigMapper.selectByCode("AI_TOKEN_URL"); + if(aiTokenURl==null){ + return null; + } + SysConfig aiUserName = sysConfigMapper.selectByCode("AI_USER_NAME"); + SysConfig aiPassowrd = sysConfigMapper.selectByCode("AI_PASSWORD"); + // 设置请求参数 + Map body = new HashMap(); + Map loginParms = new HashMap(); + loginParms.put("username", aiUserName.getValue()); + loginParms.put("password", aiPassowrd.getValue()); + body.put("jsonrpc", "2.0"); + body.put("method", "/account/login"); + body.put("params", loginParms); + + // 将map转为json串,放入restTemplate的参数对象中 + String bodyJsonData = JSON.toJSONString(body); + + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + + // 开始调用 + // 参数1:目标请求地址 + // 参数2:请求体 + // 参数3:目标请求接口的返回值类型(execute接口的返回值类型) + JSONObject forObject = client.postForObject(aiTokenURl.getValue(), request, JSONObject.class); + log.info("token获取:{}",forObject); + token = forObject.getJSONObject("result").get("token").toString(); + StorageCache.write("AITOKEN", token, 1000 * 60 * 30); + return token; + } + } + + + /** + * 获取 供应商税号 AI方式 + * @param sysConfigMapper + * @return + */ + public String getSellerNoFromAI(SysConfigMapper sysConfigMapper,String sellerName ){ + String token = ""; + SysConfig config = null; + config =sysConfigMapper.selectByCode("OCR_INTERFACE_GET_SELLER_NO_URL"); + SysConfig isToken =sysConfigMapper.selectByCode("OCR_INTERFACE_TOKEN"); + if(config==null){ + log.error("OCR_INTERFACE_GET_SELLER_NO_URL为空"); + return null; + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = restTemplateConfig.restTemplate(); + if(isToken!=null && isToken.getValue().equals("true")){ + token = getAiToken(sysConfigMapper,headers,client); + log.info("AI-token{}",token); + } + HashMap params = new HashMap<>(); + params.put("query", sellerName+"统一社会信用代码"); + String field = "[{\"title\":\"taxNo\",\"type\":\"str\"}]"; + JSONArray jsonArray = JSONArray.parseArray(field); + params.put("fields", jsonArray); +// ClientHttpResponse response = ClientHttps.post( +// new ClientHttpRequest() +// .setTimeOut(60000) +// .setUrl(config.getValue()) +// .setHeaders("Content-Type", ContentEnctype.JSON) +// .setHeaders("session", token) +// .setParams(JsonUtil.toString(params)) +// ); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.set("session", token); + HttpEntity entity = new HttpEntity<>(JsonUtil.toString(params), headers); + try { + ResponseEntity responseEntity = client.exchange( + config.getValue(), + HttpMethod.POST, + entity, + String.class + ); + + // 封装返回对象 + ClientHttpResponse response = new ClientHttpResponse(); + response.setStatus(responseEntity.getStatusCodeValue()); + if(null!=responseEntity.getBody()){ + response.setBody(new StringBuilder(responseEntity.getBody())); + } + log.error("FH-AI SELLER_NO 参数 =>{}",JsonUtil.toString(params)); + + if(null==response.getBody()){ + log.error("FH-AI SELLER_NO MESSAGE status>>{}",response.getStatus()); + log.error("FH-AI SELLER_NO MESSAGE body>>{}",response.getBody()); + log.error("FH-AI SELLER_NO MESSAGE message>>{}",response.getMessage()); + } + log.info("FH-AI-GET_SELLER_NO Result>>" + response); + + JSONObject res = JSONObject.parseObject(response.toString()); + if(null!=res.get("json_data")){ + JSONObject json_data = res.getJSONObject("json_data"); + if(null==json_data){ + log.error("AI SELLER_NO JSON_DATA is uncomfortable "); + } + return json_data.getString("taxNo"); + } + }catch (Exception e){ + log.error("AI SELLER_NO Response ParseJson 异常:{}",e.getMessage()); + } + return null; + } + + /** + * 获取CDKToken + * @param appKey + * @param appSecret + * @return + */ + public String getCDKToken(String url,String appKey,String appSecret,String cdkType){ + String token=""; + // 获取token + Object tokenObj = StorageCache.read("CDKTOKEN"); + if(tokenObj!=null) { + return tokenObj.toString(); + }else { + // url + // 设置请求参数 + Map body = new HashMap(); + body.put("akString", appKey); + String keySecret = appKey+appSecret; + String keySecretMd5 = DigestUtils.md5DigestAsHex(keySecret.getBytes()); + body.put("secretString",keySecretMd5); + body.put("forceUpdate", 1); + body.put("type", cdkType); + +// ClientHttpResponse response = ClientHttps.post( +// new ClientHttpRequest() +// .setUrl(url) +// .setHeaders("Content-Type", ContentEnctype.JSON) +// .setHeaders("session", token) +// .setParams(JsonUtil.toString(body)) +// ); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + headers.set("session", token); + HttpEntity entity = new HttpEntity<>(JsonUtil.toString(body), headers); + RestTemplate client = restTemplateConfig.restTemplate(); + try { + ResponseEntity responseEntity = client.exchange( + url, + HttpMethod.POST, + entity, + String.class + ); + + // 封装返回对象 + ClientHttpResponse response = new ClientHttpResponse(); + response.setStatus(responseEntity.getStatusCodeValue()); + if(null!=responseEntity.getBody()){ + response.setBody(new StringBuilder(responseEntity.getBody())); + } + + log.info("CDK-token获取{}",response); + JSONObject forObject = JSONObject.parseObject(response.toString()); + token = forObject.get("data").toString(); + StorageCache.write("CDKTOKEN", token, 1000 * 60 * 100); + return token; + }catch (Exception e){ + e.printStackTrace(); + } + return null; + } + } + public void main(String[] args){ + //String token = getCDKToken("https://huisuiyun.com/api/v2/agent/common/cdk/getToken","bafe201d2fc77e71","c35e9b7cabf695c2","2"); + String token = getCDKToken("https://huisuiyun.com/api/v2/agent/common/cdk/getToken","9cc03ce2c8ecabb4","b6bf5723d68e3d7e","1"); + System.out.println(token); + } + +} diff --git a/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtils.java b/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtils.java new file mode 100644 index 0000000..43037f1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/bestsign/util/InterfaceUtils.java @@ -0,0 +1,428 @@ +package com.cmsen.ticket.bestsign.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSONArray; +import com.cmsen.common.http.ClientHttpRequest; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.http.ClientHttps; +import com.cmsen.common.http.ContentEnctype; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.common.util.StorageCache; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.util.DigestUtils; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 接口类 + * @author xp + * @date 2018年8月23日 14:57:10 + */ +@Slf4j +public class InterfaceUtils { + + public static OkHttpClient buildBasicAuthClient(final String name, final String password) { + return new OkHttpClient.Builder().authenticator(new Authenticator() { + @Override + public Request authenticate(Route route, Response response) throws IOException { + String credential = Credentials.basic(name, password); + return response.request().newBuilder().header("Authorization", credential).build(); + } + }).build(); + } + + /** + * 获取列表数据 + * @param url2 + * @param params + * @return + * @throws IOException + */ + public static String[] httpMainGetBasicAuth(String url2, String userName, String password) throws IOException{ + OkHttpClient client = buildBasicAuthClient(userName,password); + + Request request = new Request.Builder() + .url(url2) + .get() + .addHeader("Content-Type", "application/json") + .build(); + Response response ; + String content =""; + int code=200; + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e) { + System.out.println(e.getMessage()); + } + String[] arr = {content,String.valueOf(code)}; + return arr; + } + + + public static String[] httpPostMan2(String url2, Map params){ + + + OkHttpClient client = OKHttpClientBuilder.buildOKHttpClient() + .connectTimeout(60, TimeUnit.SECONDS) + .readTimeout(100, TimeUnit.SECONDS) + .build(); + MediaType mediaType = MediaType.parse(params.get("Content-Type"));//application/x-www-form-urlencoded + RequestBody body = RequestBody.create(mediaType, params.get("body")); + Request request = new Request.Builder() + .url(url2) + .post(body) + .addHeader("Authorization", params.get("Authorization")) + .addHeader("Content-Type", params.get("Content-Type")) + .addHeader("cache-control", "no-cache") +// .addHeader("Postman-Token", "d0b912ca-ddda-4287-ad15-54d6ce95e181") + .build(); + /*Response response = client.newCall(request).execute(); + String content = response.body().string();*/ + Response response ; + String content =""; + int code=200; + int count = 4; + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e){ + log.error(e.getMessage()); + while (getMesg(e.getMessage()).equals("error") && count>0){ + log.info("失败重试》》》》》》》httpPostMan2"+count); + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e2) { + log.error(e2.getMessage()); + } + if(!getMesg(content).equals("error")){ + break; + } + count--; + } + } + + if(getMesg(content).equals("error")){ + log.error(content+url2+params.toString()); + } + String[] arr = {content,String.valueOf(code)}; + return arr; + } + + public static String getMesg(String result){ + String returnMsg="success"; + Map errorsMsg = new HashMap<>(); + errorsMsg.put("401","401 Authorization Required"); + errorsMsg.put("timeOut","timed out"); + errorsMsg.put("timeOut2","timeout"); + errorsMsg.put("toekn","token is expired"); + errorsMsg.put("Service_unavailable","Service Unavailable"); + for (String msg :errorsMsg.values()){ + if(msg.length()<3)continue; + if(result.indexOf(msg) !=-1){ + returnMsg="error"; + break; + } + } + return returnMsg; + } + + /** + * 获取AiToken + * @param sysConfigMapper + * @return + */ + public static String getAiToken(SysConfigMapper sysConfigMapper, HttpHeaders headers,RestTemplate client ){ + String token=""; + + SysConfig proxyConfig = sysConfigMapper.selectByCode("PF_PROXY"); + if(null==proxyConfig){ + + }else{ + SysConfig proxyIP = sysConfigMapper.selectByCode("PF_PROXY_IP"); + SysConfig proxyPort = sysConfigMapper.selectByCode("PF_PROXY_PORT"); + if(null!=proxyIP&&null!=proxyPort){ + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + requestFactory.setProxy( + new Proxy( + Proxy.Type.HTTP, + new InetSocketAddress(proxyIP.getValue(), Integer.parseInt(proxyPort.getValue())) //设置代理服务 + ) + ); + client.setRequestFactory(requestFactory); + } + } + // 获取token + // 设置请求头,请求类型为json + // 判断token是否有效 + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Object tokenObj = StorageCache.read("AITOKEN"); + if(tokenObj!=null) { + return tokenObj.toString(); + }else { + // url + SysConfig aiTokenURl = sysConfigMapper.selectByCode("AI_TOKEN_URL"); + if(aiTokenURl==null){ + return null; + } + SysConfig aiUserName = sysConfigMapper.selectByCode("AI_USER_NAME"); + SysConfig aiPassowrd = sysConfigMapper.selectByCode("AI_PASSWORD"); + // 设置请求参数 + Map body = new HashMap(); + Map loginParms = new HashMap(); + loginParms.put("username", aiUserName.getValue()); + loginParms.put("password", aiPassowrd.getValue()); + body.put("jsonrpc", "2.0"); + body.put("method", "/account/login"); + body.put("params", loginParms); + + // 将map转为json串,放入restTemplate的参数对象中 + String bodyJsonData = JSON.toJSONString(body); + + //用HttpEntity封装整个请求报文 + HttpEntity request = new HttpEntity<>(bodyJsonData, headers); + + // 开始调用 + // 参数1:目标请求地址 + // 参数2:请求体 + // 参数3:目标请求接口的返回值类型(execute接口的返回值类型) + JSONObject forObject = client.postForObject(aiTokenURl.getValue(), request, JSONObject.class); + log.info("token获取{}",forObject); + token = forObject.getJSONObject("result").get("token").toString(); + StorageCache.write("AITOKEN", token, 1000 * 60 * 30); + return token; + } + } + + /** + * 获取 备注中 PO号 + * @param sysConfigMapper + * @return + */ + public static String getPOFromRemark(SysConfigMapper sysConfigMapper,String remark ){ + String token = ""; + SysConfig config = null; + config =sysConfigMapper.selectByCode("OCR_INTERFACE_GETPO_URL"); + SysConfig isToken =sysConfigMapper.selectByCode("OCR_INTERFACE_TOKEN"); + if(config==null){ + log.error("OCR_INTERFACE_GETPO_URL为空"); + return null; + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = new RestTemplate(); + if(isToken!=null && isToken.getValue().equals("true")){ + token = getAiToken(sysConfigMapper,headers,client); + log.info("AI-token{}",token); + } + HashMap params = new HashMap<>(); + params.put("data", remark); + // 添加配置项 + ClientHttpResponse response = ClientHttps.post( + new ClientHttpRequest() + .setTimeOut(60000) + .setUrl(config.getValue()) + .setHeaders("Content-Type", ContentEnctype.JSON) + .setHeaders("session", token) + .setParams(JsonUtil.toString(params)) + ); + if(null==response.getBody()){ + log.info("FH-OCR MESSAGE status>>{}",response.getStatus()); + log.info("FH-OCR MESSAGE body>>{}",response.getBody()); + log.info("FH-OCR MESSAGE message>>{}",response.getMessage()); + } + log.info("FH-OCR-GET_PO Result>>" + response); + try { + JSONObject res = JSONObject.parseObject(response.toString()); + if(null!=res.getString("PO_code")){ + return res.getString("PO_code"); + } + }catch (Exception e){ + log.info("PO Response ParseJson 异常:{}",e.getMessage()); + } + return null; + } + + + /** + * 获取 供应商税号 AI方式 + * @param sysConfigMapper + * @return + */ + public static String getSellerNoFromAI(SysConfigMapper sysConfigMapper,String sellerName ){ + String token = ""; + SysConfig config = null; + config =sysConfigMapper.selectByCode("OCR_INTERFACE_GET_SELLER_NO_URL"); + SysConfig isToken =sysConfigMapper.selectByCode("OCR_INTERFACE_TOKEN"); + if(config==null){ + log.error("OCR_INTERFACE_GET_SELLER_NO_URL为空"); + return null; + } + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON); + RestTemplate client = new RestTemplate(); + if(isToken!=null && isToken.getValue().equals("true")){ + token = getAiToken(sysConfigMapper,headers,client); + log.info("AI-token{}",token); + } + HashMap params = new HashMap<>(); + params.put("query", sellerName+"统一社会信用代码"); + String field = "[{\"title\":\"taxNo\",\"type\":\"str\"}]"; + JSONArray jsonArray = JSONArray.parseArray(field); + params.put("fields", jsonArray); + ClientHttpResponse response = ClientHttps.post( + new ClientHttpRequest() + .setTimeOut(60000) + .setUrl(config.getValue()) + .setHeaders("Content-Type", ContentEnctype.JSON) + .setHeaders("session", token) + .setParams(JsonUtil.toString(params)) + ); + + + log.error("FH-AI SELLER_NO 参数 =>{}",JsonUtil.toString(params)); + + if(null==response.getBody()){ + log.error("FH-AI SELLER_NO MESSAGE status>>{}",response.getStatus()); + log.error("FH-AI SELLER_NO MESSAGE body>>{}",response.getBody()); + log.error("FH-AI SELLER_NO MESSAGE message>>{}",response.getMessage()); + } + log.info("FH-AI-GET_SELLER_NO Result>>" + response); + try { + JSONObject res = JSONObject.parseObject(response.toString()); + if(null!=res.get("json_data")){ + JSONObject json_data = res.getJSONObject("json_data"); + if(null==json_data){ + log.error("AI SELLER_NO JSON_DATA is uncomfortable "); + } + return json_data.getString("taxNo"); + } + }catch (Exception e){ + log.error("AI SELLER_NO Response ParseJson 异常:{}",e.getMessage()); + } + return null; + } + + /** + * 获取CDKToken + * @param appKey + * @param appSecret + * @return + */ + public static String getCDKToken(String url,String appKey,String appSecret,String cdkType){ + String token=""; + // 获取token + Object tokenObj = StorageCache.read("CDKTOKEN"); + if(tokenObj!=null) { + return tokenObj.toString(); + }else { + // url + // 设置请求参数 + Map body = new HashMap(); + body.put("akString", appKey); + String keySecret = appKey+appSecret; + String keySecretMd5 = DigestUtils.md5DigestAsHex(keySecret.getBytes()); + body.put("secretString",keySecretMd5); + body.put("forceUpdate", 1); + body.put("type", cdkType); + + ClientHttpResponse response = ClientHttps.post( + new ClientHttpRequest() + .setUrl(url) + .setHeaders("Content-Type", ContentEnctype.JSON) + .setHeaders("session", token) + .setParams(JsonUtil.toString(body)) + ); + log.info("CDK-token获取{}",response); + JSONObject forObject = JSONObject.parseObject(response.toString()); + token = forObject.get("data").toString(); + StorageCache.write("CDKTOKEN", token, 1000 * 60 * 100); + return token; + } + } + public static String[] httpPostMan3(String url2, Map params, SysConfigMapper sysConfigMapper) { + SysConfig proxyConfig = sysConfigMapper.selectByCode("PF_PROXY"); + OkHttpClient client = null; + if(null==proxyConfig){ + client = OKHttpClientBuilder.buildOKHttpClient() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(100, TimeUnit.SECONDS) + .build(); + }else{ + SysConfig proxyIP = sysConfigMapper.selectByCode("PF_PROXY_IP"); + SysConfig proxyPort = sysConfigMapper.selectByCode("PF_PROXY_PORT"); + if(null!=proxyIP&&null!=proxyPort){ + Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(proxyIP.getValue(),Integer.parseInt(proxyPort.getValue()))); + client = OKHttpClientBuilder.buildOKHttpClient() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(100, TimeUnit.SECONDS) + .proxy(proxy) + .build(); + } + } + + MediaType mediaType = MediaType.parse(params.get("Content-Type"));//application/x-www-form-urlencoded + RequestBody body = RequestBody.create(mediaType, params.get("body")); + Request request = new Request.Builder() + .url(url2) + .post(body) + .addHeader("Authorization", params.get("Authorization")) + .addHeader("Content-Type", params.get("Content-Type")) + .addHeader("cache-control", "no-cache") + .addHeader("Postman-Token", "d0b912ca-ddda-4287-ad15-54d6ce95e181") + .build(); + /*Response response = client.newCall(request).execute(); + String content = response.body().string();*/ + Response response ; + String content =""; + int code=200; + int count = 4; + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e){ + log.error(e.getMessage()); + while (getMesg(e.getMessage()).equals("error") && count>0){ + log.info("失败重试》》》》》》》httpPostMan3"+count); + try { + response = client.newCall(request).execute(); + content = response.body().string(); + code = response.code(); + }catch (Exception e2) { + log.error(e2.getMessage()); + } + if(!getMesg(content).equals("error")){ + break; + } + count--; + } + } + + if(getMesg(content).equals("error")){ + log.error(content+url2+params.toString()); + } + String[] arr = {content,String.valueOf(code)}; + return arr; + + } +} + diff --git a/src/main/java/com/cmsen/ticket/bestsign/util/OKHttpClientBuilder.java b/src/main/java/com/cmsen/ticket/bestsign/util/OKHttpClientBuilder.java new file mode 100644 index 0000000..b4e8e64 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/bestsign/util/OKHttpClientBuilder.java @@ -0,0 +1,51 @@ +package com.cmsen.ticket.bestsign.util; + +import okhttp3.OkHttpClient; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + +/** + * 忽略SSL + */ +public class OKHttpClientBuilder { + public static OkHttpClient.Builder buildOKHttpClient() { + try { + TrustManager[] trustAllCerts = buildTrustManagers(); + final SSLContext sslContext = SSLContext.getInstance("SSL"); + sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); + + final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]); + builder.hostnameVerifier((hostname, session) -> true); + return builder; + } catch (NoSuchAlgorithmException | KeyManagementException e) { + e.printStackTrace(); + return new OkHttpClient.Builder(); + } + } + + private static TrustManager[] buildTrustManagers() { + return new TrustManager[]{ + new X509TrustManager() { + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) { + } + + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; + } + } + }; + } +} diff --git a/src/main/java/com/cmsen/ticket/common/AjaxJson.java b/src/main/java/com/cmsen/ticket/common/AjaxJson.java new file mode 100644 index 0000000..5168ade --- /dev/null +++ b/src/main/java/com/cmsen/ticket/common/AjaxJson.java @@ -0,0 +1,90 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.http.HttpStatus; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + + +/** + * $.ajax后需要接受的JSON + * + * @author + * + */ +public class AjaxJson extends HashMap implements Serializable { + + + public AjaxJson(){ + this.put("success", true); + this.put("code", HttpStatus.OK.value()); + this.put("msg", "操作成功"); + } + + public String getMsg() { + return (String)this.get("msg"); + } + + public void setMsg(String msg) {//向json中添加属性,在js中访问,请调用data.msg + this.put("msg", msg); + } + + + public boolean isSuccess() { + return (boolean)this.get("success"); + } + + public void setSuccess(boolean success) { + this.put("success", success); + } + + @JsonIgnore//返回对象时忽略此属性 + public static AjaxJson success(String msg) { + AjaxJson j = new AjaxJson(); + j.setMsg(msg); + return j; + } + @JsonIgnore//返回对象时忽略此属性 + public static AjaxJson error(String msg) { + AjaxJson j = new AjaxJson(); + j.setSuccess(false); + j.setMsg(msg); + return j; + } + + public static AjaxJson success(Map map) { + AjaxJson restResponse = new AjaxJson(); + restResponse.putAll(map); + return restResponse; + } + + public static AjaxJson success() { + return new AjaxJson(); + } + + + @Override + public AjaxJson put(String key, Object value) { + super.put(key, value); + return this; + } + + public AjaxJson putMap(Map m) { + super.putAll(m); + return this; + } + + public int getCode() { + return (int)this.get("code"); + } + + public void setCode(int code) { + this.put("code", code); + } + +} diff --git a/src/main/java/com/cmsen/ticket/common/SpringContextHolder.java b/src/main/java/com/cmsen/ticket/common/SpringContextHolder.java new file mode 100644 index 0000000..0698445 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/common/SpringContextHolder.java @@ -0,0 +1,89 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.common; + +import org.apache.commons.lang3.Validate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +/** + * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. + * + * @author Zaric + * @date 2016-5-29 下午1:25:40 + */ +@Service +@Lazy(false) +public class SpringContextHolder implements ApplicationContextAware, DisposableBean { + + private static ApplicationContext applicationContext = null; + + private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); + + /** + * 取得存储在静态变量中的ApplicationContext. + */ + public static ApplicationContext getApplicationContext() { + assertContextInjected(); + return applicationContext; + } + + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) { + assertContextInjected(); + return (T) applicationContext.getBean(name); + } + + /** + * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(Class requiredType) { + assertContextInjected(); + return applicationContext.getBean(requiredType); + } + + /** + * 清除SpringContextHolder中的ApplicationContext为Null. + */ + public static void clearHolder() { + if (logger.isDebugEnabled()){ + logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); + } + applicationContext = null; + } + + /** + * 实现ApplicationContextAware接口, 注入Context到静态变量中. + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) { + SpringContextHolder.applicationContext = applicationContext; + } + + public static String getStatic(){ + return SpringContextHolder.getApplicationContext().getApplicationName()+ "/static"; + } + /** + * 实现DisposableBean接口, 在Context关闭时清理静态变量. + */ + @Override + public void destroy() throws Exception { + SpringContextHolder.clearHolder(); + } + + /** + * 检查ApplicationContext不为空. + */ + private static void assertContextInjected() { + Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请勿启动成功之前调用SpringContextHolder."); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/CorporateInvoiceItemsDto.java b/src/main/java/com/cmsen/ticket/domain/dto/CorporateInvoiceItemsDto.java new file mode 100644 index 0000000..d62367b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/CorporateInvoiceItemsDto.java @@ -0,0 +1,29 @@ +package com.cmsen.ticket.domain.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class CorporateInvoiceItemsDto { + + @ExcelProperty(value = "发票号", index = 0) + private String invoiceNumber; + @ExcelProperty(value = "产品名称", index = 1) + private String name; + + @ExcelProperty(value = "规格型号", index = 2) + private String specification; + @ExcelProperty(value = "单位", index = 3) + private String unit; + @ExcelProperty(value = "数量", index = 4) + private String quantity; + @ExcelProperty(value = "单价", index = 5) + private String price; + @ExcelProperty(value = "发票金额", index = 6) + private String total; + @ExcelProperty(value = "税额", index = 7) + private String tax; + @ExcelProperty(value = "PO号码", index = 8) + private String po; +} + diff --git a/src/main/java/com/cmsen/ticket/domain/dto/InvoiceItemListDto.java b/src/main/java/com/cmsen/ticket/domain/dto/InvoiceItemListDto.java new file mode 100644 index 0000000..4d0cc9d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/InvoiceItemListDto.java @@ -0,0 +1,35 @@ +package com.cmsen.ticket.domain.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author OWTS + */ +@Data +public class InvoiceItemListDto { + private String id; + private String supplier; + private String number; + private String invoiceMoney; + private BigDecimal usedMoney; + private BigDecimal unUsedMoney; + private String imgUrl; + + private BigDecimal matchedAmount; + + + public BigDecimal getUnUsedMoney() { + if (usedMoney == null) return new BigDecimal(invoiceMoney); + return new BigDecimal(invoiceMoney).subtract(usedMoney); + } + + public BigDecimal getMatchedAmount() { + return matchedAmount == null ? getUnUsedMoney() : matchedAmount; + } + + public BigDecimal getUsedMoney() { + return usedMoney == null ? BigDecimal.ZERO : usedMoney; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/LineMatchListDto.java b/src/main/java/com/cmsen/ticket/domain/dto/LineMatchListDto.java new file mode 100644 index 0000000..0ad8932 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/LineMatchListDto.java @@ -0,0 +1,43 @@ +package com.cmsen.ticket.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/10/26 16:02 + **/ +@Data +public class LineMatchListDto { + @NotEmpty(message = "发票ID 不为空") + @ApiModelProperty("发票ID") + private String invoiceId; + @NotEmpty(message = "发票行ID 不为空") + @ApiModelProperty("发票行ID") + private String itemId; + // @ApiModelProperty("筛选级别 0 默认 1 订单下所有") + @ApiModelProperty("筛选级别 1 物料 2 金额 3 金额+物料 4 所有") + private Integer level = 0; + + @ApiModelProperty(value = "订单号", hidden = true) + private List orders = new ArrayList<>(); + + @ApiModelProperty(value = "供应商代码", hidden = true) + private String supplierCode; + + @ApiModelProperty("发票未匹配金额") + private BigDecimal unUsedAmount; + + @ApiModelProperty("发票未匹配数量") + private String unUsedQuantity; + + private String uom; + private String prdMateName; + private String qtyAmount; +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/SubmitLineMatchDto.java b/src/main/java/com/cmsen/ticket/domain/dto/SubmitLineMatchDto.java new file mode 100644 index 0000000..7b5fa1a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/SubmitLineMatchDto.java @@ -0,0 +1,75 @@ +package com.cmsen.ticket.domain.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/10/27 9:27 + **/ +@Data +public class SubmitLineMatchDto { + @NotEmpty(message = "发票 ID 不为空") + @ApiModelProperty("发票 ID") + private String invoiceId; + @NotEmpty(message = "发票行 ID 不为空") + @ApiModelProperty("发票行 ID") + private String itemId; + @NotBlank(message = "订单列表不为空") + @ApiModelProperty("已选订单列表") + private List orders; + + @Data + public static class SupplierOrderDto { + private Integer id; + private String receiveNo; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date receiveTime; + private String supplierCode; + private String orderNo; + private String lineNum; + private String goods; + private String uom; + private String goodsNum; + private String receivedNum; + private String currency; + private BigDecimal unitPrice; + private BigDecimal amount; + private String companyName; + private String source; + private Boolean status; + private String vStatusName; + private String companyCode; + private String costCenter; + private String orgCode; + private String itemNo; + private String taxRate; + private String owner; + private String description; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date creationTime; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date orderDate; + + private BigDecimal usedAmount; + private BigDecimal unUsedAmount; + + private String usedQuantity; + private String unUsedQuantity; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/SubmitOrderMatchDto.java b/src/main/java/com/cmsen/ticket/domain/dto/SubmitOrderMatchDto.java new file mode 100644 index 0000000..29533a9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/SubmitOrderMatchDto.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.dto; + +import com.cmsen.ticket.domain.entity.CorporateInvoice; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @version 1.0.0 + * @date 2023/01/30 17:27 + **/ +@Data +public class SubmitOrderMatchDto { + @NotEmpty(message = "付款单ID 不为空") + @ApiModelProperty("付款单ID") + private String orderNo; + @NotEmpty(message = "付款行 ID 不为空") + @ApiModelProperty("付款行 ID") + private Integer id; + @NotBlank(message = "发票列表不为空") + @ApiModelProperty("已选发票列表") + //private List items; + private List invoices; +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/SupplierPODto.java b/src/main/java/com/cmsen/ticket/domain/dto/SupplierPODto.java new file mode 100644 index 0000000..30586ea --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/SupplierPODto.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class SupplierPODto { + + private String po; + private String versionNo; + private String orderDate; + private String contractNo; + private String supplierCode; + private String poType; + private String process; + private String contacts; + private String eMail; + private String path; + private String uri; + private Integer isDel; + private String createBy; + private Date createDate; + private String updateBy; + private Date updateDate; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/dto/SupplierUomMappingDTO.java b/src/main/java/com/cmsen/ticket/domain/dto/SupplierUomMappingDTO.java new file mode 100644 index 0000000..66a5ddb --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/dto/SupplierUomMappingDTO.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SupplierUomMappingDTO { + private int id; + private String supplierCode; + private String unit; + private String versUnit; + private BigDecimal versNum; + private String remark; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/Company.java b/src/main/java/com/cmsen/ticket/domain/entity/Company.java new file mode 100644 index 0000000..8e4cd2c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/Company.java @@ -0,0 +1,61 @@ +package com.cmsen.ticket.domain.entity; + +import com.cmsen.ticket.domain.util.StringUtils; +import lombok.Data; + +import java.io.Serializable; + +/** + * (Company)实体类 + * + * @author ran hao yu + * @since 2020-09-18 11:13:27 + */ +@Data +public class Company implements Serializable { + private static final long serialVersionUID = 635970988319484350L; + /** + * 公司表主键id + */ + private Integer id; + /** + * 公司名称 + */ + private String name; + /** + * 税号 + */ + private String dutyParagraph; + /** + * 公司code(每个公司的代码) + */ + private String companyCode; + /** + * 客户ID,每家公司所对应的客户ID + */ + private Integer customerId; + /** + * 0为未删除,1为已删除,默认为0 + */ + private String isDel; + /** + * 创建时间 + */ + private String createTime; + private Integer validMode; + + private String fullName; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + + public String getName() { + return StringUtils.getStringWithOutSpecialCode2(name); + } + + public void setName(String name) { + this.name = StringUtils.getStringWithOutSpecialCode2(name); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoice.java b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoice.java new file mode 100644 index 0000000..58d1a0c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoice.java @@ -0,0 +1,420 @@ +package com.cmsen.ticket.domain.entity; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.common.http.response.Validation; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.domain.util.StringUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @TableName corporate_invoice + */ +@Data +public class CorporateInvoice implements Serializable { + + @ExcelProperty(value = "ID", index = 0) + @NotNull(message = "required", groups = {Validation.Update.class}) + private String id; + + @ExcelIgnore + private Integer orgId; + +// @ExcelProperty(value = "销售方", index = 3) + @ExcelIgnore + private String title; + + @ExcelIgnore + private Integer invoiceType; + + @ExcelProperty(value = "发票代码", index = 4) + private String code; + + //供应商代码 + @ExcelIgnore + private String supplierCode; + + @ExcelProperty(value = "发票号码", index = 5) + private String number; + + @ExcelProperty(value = "发票日期", index = 6) + private String date; + + @ExcelProperty(value = "总金额", index = 9) + private String total; + + @ExcelIgnore + private String imgPath; + + @ExcelIgnore + private String extraFields; + + @ExcelProperty(value = "备注", index = 15) + private String remark; + + @ExcelIgnore + private String loginId; + + @ExcelProperty(value = "发送状态", index = 21) + private String isSendName; + @ExcelIgnore + private Integer isSend; + + @ExcelIgnore + private String entryId; + + @ExcelProperty(value = "更新日期", index = 12) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date updateDate; + + @ExcelIgnore + private List items = new ArrayList<>(); + + @ExcelProperty(value = "销售方", index = 3) + private String seller; + private String vendor; + + @ExcelIgnore + private String sellerNo; + + @ExcelProperty(value = "购买方", index = 1) + private String buyer; + +// @ExcelProperty(value = "购买方", index = 1) + @ExcelIgnore + private String fullBuyer; + + @ExcelIgnore + private String buyerNo; + + @ExcelIgnore + private String originalFilePath; + + @ExcelProperty(value = "NPO", index = 13) + private String po; + + @ExcelIgnore + private String ticketCode; + + @ExcelProperty(value = "发票类型", index = 2) + private String ticketCodeStr; + + @ExcelIgnore + private String kind; + + /* 0 未处理 1 已处理 2 异常 3 pending */ + @ExcelIgnore + private Integer status; + + /** + * 0 待处理 1 待审核 2 未发送 3 已发送 + */ + @ExcelIgnore + private Integer matchStatus; + + @ExcelIgnore + private String verifiedCode; + + @ExcelIgnore + private String fileName; + + @ExcelProperty(value = "金额", index = 7) + private String pretaxAmount; + + @ExcelProperty(value = "税额", index = 8) + private String tax; + + @ExcelProperty(value = "发票内容", index = 14) + private String details; + + @ExcelProperty(value = "操作人", index = 10) + private String operator; + + @ExcelIgnore + private Integer operatorId; + + @ExcelProperty(value = "创建日期", index = 11) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date createDate; + + @ExcelIgnore + private String currency; + + @ExcelIgnore + private Integer checked; + + @ExcelIgnore + private String desc; + + @ExcelProperty(value = "异常信息", index = 20) + private String message; + + @ExcelIgnore + private String showTitle; + + @ExcelIgnore + private String payDate; + + @ExcelIgnore + private List base64 = new ArrayList<>(); + + @ExcelIgnore + private List files = new ArrayList<>(); + // New filed added + + @ExcelProperty(value = "入账日期", index = 17) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date postingDate; + + @ExcelProperty(value = "抵扣日期", index = 19) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date deductTime; + + @ExcelProperty(value = "抵扣状态", index = 18) + private String deductStatus; + + @ExcelIgnore + private String downloadUri; + + /** + * 0 未验真 1已验真 + */ + @ExcelIgnore + private Byte validStatus; + + /** + * 总验真次数 + */ + @ExcelIgnore + private Integer validCount; + + /** + * 当日验真次数 + */ + @ExcelIgnore + private Integer validDayCount; + + @ExcelProperty(value = "状态", index = 16) + private String statusStr; + + @ExcelIgnore + private Integer owner; + + @ExcelIgnore + private String ownerName; + @ExcelIgnore + private String invoiceTypeName; + @ExcelIgnore + private String orgName; + + /** + * 使用状态 0 未使用 1 已使用 2 后票 + */ + @ExcelIgnore + private Integer useStatus; + + @ExcelIgnore + private int percent; + + @ExcelIgnore + private Integer subject; + + // 0 金额 1 数量 + @ExcelIgnore + private Integer matchType; + + // 0 折后 1 折前 + @ExcelIgnore + private Integer priceType; + + @ExcelIgnore + private String period; //增加字段 + @ExcelIgnore + private String received; + + @ExcelIgnore + private String numberBackup; + @ExcelIgnore + private String numberConfirm; + @ExcelIgnore + private String companySeal; + @ExcelIgnore + private String deductionAmount;//抵扣金额 + @ExcelIgnore + private String ext01; + @ExcelIgnore + private String ext02; + @ExcelIgnore + private String ext03; + @ExcelIgnore + private String ext04; + @ExcelIgnore + private String ext05; + + @ExcelIgnore + private String ext06; + @ExcelIgnore + private String ext07; + @ExcelIgnore + private String ext08; + @ExcelIgnore + private String ext09; + @ExcelIgnore + private String ext10; + + private String different;//差异金额 total - deductionAmount + private String taxRate;//税率 + @ExcelIgnore + private String ticketType; + @ExcelIgnore + private String docName; + + @ExcelIgnore + private String citName; + + @ExcelIgnore + private String costCenter; + + @ExcelIgnore + private String refund; + + @ExcelIgnore + private String dataJson; + + @ExcelIgnore + private String invoiceTypeStr; + + public static Integer statusStrToNumber(String str) { + if (str == null) return null; + switch (str.toLowerCase()) { + case "已处理": + return 1; + case "异常": + return 2; + case "pending": + return 3; + case "未处理": + return 0; + case "退票": + return 4; + case "暂挂": + return 5; + default: + return null; + } + } + + public String getDownloadUri() { + if (StringUtil.isNotEmpty(this.originalFilePath)) { + return this.originalFilePath; + } + return this.imgPath; + } + + public String getFileName() { + if (StringUtil.isNotEmpty(this.originalFilePath)) { + return this.number + this.originalFilePath.substring(this.originalFilePath.lastIndexOf(".")); + } + if (StringUtil.isNotEmpty(this.imgPath)) { + return this.number + this.imgPath.substring(this.imgPath.lastIndexOf(".")); + } + return "null"; + } + + public String getShowTitle() { + return this.message; + } + + public String getDeductStatus() { + return StringUtil.isEmpty(deductStatus) ? "未抵扣" : deductStatus; + } + +// public String getTicketCodeStr() { +// if (ticketCode == null) return ""; +// switch (ticketCode) { +// case "10101":s +// return "增值税普通发票"; +// case "10100": +// return "增值税专用发票"; +// case "10107": +// return "增值税电子专用发票"; +// case "10102": +// return "增值税电子普通发票"; +// case "30100": +// return "形式发票"; +// case "30101": +// return "收据"; +// default: +// return ""; +// } +// } + + public String getStatusStr() { + if (status == null) return ""; + switch (status) { + case 1: + return "已处理"; + case 2: + return "异常"; + case 3: + return "Pending"; + case 0: + return "未处理"; + case 4: + return "退票"; + case 5: + return "暂挂"; + default: + return ""; + } + } + + public String getImgPath() { + return imgPath == null ? null : StringUtils.formatUrl(imgPath, "/"); + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath == null ? null : StringUtils.formatUrl(imgPath, "/"); + } + + public String getOriginalFilePath() { + return originalFilePath == null ? null : StringUtils.formatUrl(originalFilePath, "/"); + } + + public void setOriginalFilePath(String originalFilePath) { + this.originalFilePath = originalFilePath == null ? null : StringUtils.formatUrl(originalFilePath, "/"); + } + + public String getSeller() { + return null==seller ? null:seller.replace("(","(").replace(")",")"); +// return StringUtils.getStringWithOutSpecialCode2(seller); + } + + public void setSeller(String seller) { + this.seller = seller; +// this.seller = StringUtils.getStringWithOutSpecialCode2(seller); + } + + public String getBuyer() { + return null==buyer? null:buyer.replace("(","(").replace(")",")"); +// return StringUtils.getStringWithOutSpecialCode2(buyer); + } + + public void setBuyer(String buyer) { + this.buyer = buyer; +// this.buyer = StringUtils.getStringWithOutSpecialCode2(buyer); + } + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceItems.java b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceItems.java new file mode 100644 index 0000000..0f98448 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceItems.java @@ -0,0 +1,102 @@ +package com.cmsen.ticket.domain.entity; + +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * corporate_invoice_items + */ +@Data +@Slf4j +public class CorporateInvoiceItems implements Serializable { + + private String id; + + private String pid; + + private String name; + + private String unit; + + private String quantity; + + private String price; + + private String total; + + private String extraFields; + + private String specification; + + private String tax; + + private String taxRate; + + private String deductionAmount; + + private String deductionTaxRate; + + private String deductionTax; + + private BigDecimal usedAmount; + + private BigDecimal unUsedAmount; + + private BigDecimal usedQuantity; + + private BigDecimal unUsedQuantity; + + private String difference; + + private String originUnit; + private String invoiceNumber; + + private String originQuantity; + private String originPrice; + private List itemMatchingList; + private int priceType; + + + private String itemNo; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + + + public BigDecimal getUnUsedAmount() { + if(priceType==0) { + total = total.replace("¥",""); + if (usedAmount == null) return new BigDecimal(total==null?"0":total); +// log.info("total=>{}",total); +// log.info("deductionAmount=>{}",deductionAmount); +// log.info("usedAmount=>{}",usedAmount); + return new BigDecimal(total).add(new BigDecimal(deductionAmount == null ? "0" : deductionAmount)).subtract(usedAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + }else{ + total = total.replace("¥",""); + if (usedAmount == null) usedAmount=BigDecimal.ZERO; + return new BigDecimal(total).add(new BigDecimal(deductionAmount == null ? "0" : deductionAmount)).add(new BigDecimal(tax == null ? "0" : tax)) + .add(new BigDecimal(deductionTax == null ? "0" : deductionTax)).subtract(usedAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + } + } + + public BigDecimal getUnUsedQuantity() { +// log.info("quantity ====={} usedQuantity ======{}",quantity,usedQuantity); + if(StringUtils.isEmpty(quantity)) quantity = "0"; + if (usedQuantity == null) return new BigDecimal(quantity).setScale(2, BigDecimal.ROUND_HALF_UP); + return new BigDecimal(quantity).setScale(2, BigDecimal.ROUND_HALF_UP).subtract(usedQuantity); + } + + public String getDifference() { + if (difference == null) return total; + if (difference.equals("")) return "0"; + return difference; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceType.java b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceType.java new file mode 100644 index 0000000..83f95e1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/CorporateInvoiceType.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * corporate_invoice_type + * + * @author + */ +@Data +public class CorporateInvoiceType implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String name; + private String code; + private String desc; + private Boolean active; + private Integer review; + private Integer sendType; + private Integer matchType; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/Customer.java b/src/main/java/com/cmsen/ticket/domain/entity/Customer.java new file mode 100644 index 0000000..7f70980 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/Customer.java @@ -0,0 +1,72 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * (Customer)实体类 + * + * @author ran hao yu + * @since 2020-09-18 11:13:28 + */ +@Data +public class Customer implements Serializable { + private static final long serialVersionUID = -87372310697814000L; + /** + * 客户表主键ID + */ + private Integer id; + /** + * 客户(客户名称) + */ + private String customer; + /** + * 0为未删除,1为已删除,默认为0 + */ + private String isDel; + /** + * 创建时间 + */ + private String createTime; + + + private String orgUnitWord; + + private String companyWord; + + private Integer sendType; + + private Boolean multiInv; + + /** + * 手工发票可编辑 0、是 1、否 + */ + private Byte manualFieldConfig; + + /** + * 供应商发票最大验真次数 + */ + private Integer corMaxValid; + + /** + * 是否开启智能附件 0 关闭 1 开启 + */ + private Boolean smartAttachment; + + /** + * 是否开启强制验真 0 关闭 1 开启 + */ + private Byte forceValid; + + /** + * 是否开启未验真发送 0 关闭 1 开启 + */ + private Boolean unValidSend; + + /** + * 费用类型能否修改 0 不可以 1 可以 + */ + private Boolean expenseTypeActive; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/File.java b/src/main/java/com/cmsen/ticket/domain/entity/File.java new file mode 100644 index 0000000..b22ca4e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/File.java @@ -0,0 +1,34 @@ +package com.cmsen.ticket.domain.entity; + +import com.cmsen.ticket.domain.util.StringUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * file + * + * @author + */ +@Data +public class File implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String path; + private String uri; + private String type; + private String pid; + private String description; + private Integer uploadUser; + private String uploadUserName; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date uploadTime; + + public String getUri() { + return uri == null ? null : StringUtils.formatUrl(uri, "/"); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/Supplier.java b/src/main/java/com/cmsen/ticket/domain/entity/Supplier.java new file mode 100644 index 0000000..1461830 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/Supplier.java @@ -0,0 +1,47 @@ +package com.cmsen.ticket.domain.entity; + +import com.cmsen.common.http.response.Validation; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * supplier + * + * @author + */ +@Data +public class Supplier implements Serializable { + private static final long serialVersionUID = 1L; + @NotNull(message = "required", groups = {Validation.Update.class}) + private Integer id; + @NotBlank(message = "required", groups = {Validation.Create.class}) + private String code; + @NotBlank(message = "required", groups = {Validation.Create.class}) + private String name; + @NotBlank(message = "required", groups = {Validation.Create.class}) + private String taxNo; + private String orgCode; + private Integer status; + private String supplierCode; + private Boolean supplierSpecial; + + /** + * 开户行分行 + */ + private String branchBank; + + /** + * 账户信息 + */ + private String accountInfo; + + private String isDigital; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatching.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatching.java new file mode 100644 index 0000000..9f86629 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatching.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Data +public class SupplierMatching implements Serializable { + private static final long serialVersionUID = 1L; + private String invoiceId; + private String supplierCode; + private String orderNo; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date operationTime; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatchingLog.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatchingLog.java new file mode 100644 index 0000000..4e580b2 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMatchingLog.java @@ -0,0 +1,33 @@ +package com.cmsen.ticket.domain.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * supplier_matching_log + * + * @author + */ +@Data +public class SupplierMatchingLog implements Serializable { + private static final long serialVersionUID = 1L; + private String id; + private String pid; + private String invoiceNo; + private String module; + private String methods; + private String operatorUser; + private String operatorUserName; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + private String preValue; + private String afterValue; + + private String reason; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterial.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterial.java new file mode 100644 index 0000000..33cce60 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterial.java @@ -0,0 +1,20 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Data +public class SupplierMaterial implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String supplierNo; + private String materialNo; + private String material; + private String uom; + private String supplierMaterial; + private String specification; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialDefine.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialDefine.java new file mode 100644 index 0000000..47987cd --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialDefine.java @@ -0,0 +1,26 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SupplierMaterialDefine implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键ID + */ + private Integer id; + + private String itemNo; + + private String similarItemNo; + + private String itemType; + private String remark; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialFilter.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialFilter.java new file mode 100644 index 0000000..0267a6b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialFilter.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Data +public class SupplierMaterialFilter implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String name; + private String remark; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialUom.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialUom.java new file mode 100644 index 0000000..f6018ca --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierMaterialUom.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Data +public class SupplierMaterialUom implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String materialNo; + private String unit; + private String versUnit; + private String versNum; + private Boolean status; + private String remark; + private String vStatusName; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierOrder.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierOrder.java new file mode 100644 index 0000000..71c73ec --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierOrder.java @@ -0,0 +1,198 @@ +package com.cmsen.ticket.domain.entity; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Data +public class SupplierOrder implements Serializable { + + private static final long serialVersionUID = 1L; + @ExcelProperty(value = "ID", index = 1) + private Integer id; + @ExcelIgnore + private String receiveNo; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date receiveTime; + @ExcelProperty(value = "供应商代码", index = 0) + private String supplierCode; + @ExcelProperty(value = "订单编号", index = 2) + private String orderNo; + @ExcelProperty(value = "行", index = 3) + private String lineNum; + @ExcelProperty(value = "货物", index = 5) + private String goods; + @ExcelIgnore + private String uom; + @ExcelProperty(value = "数量", index = 7) + private String goodsNum; + @ExcelProperty(value = "收货", index = 8) + private String receivedNum; + @ExcelIgnore + private String currency; + @ExcelProperty(value = "单价", index = 10) + private BigDecimal unitPrice; + @ExcelProperty(value = "金额", index = 11) + private BigDecimal amount; + @ExcelProperty(value = "匹配金额", index = 6) + private BigDecimal matchAmount; + @ExcelIgnore + private String companyName; + @ExcelProperty(value = "来源", index = 12) + private String source; + @ExcelProperty(value = "状态", index = 13) + private Boolean status; + @ExcelIgnore + private String vStatusName; + @ExcelIgnore + private String companyCode; + @ExcelIgnore + private String costCenter; + @ExcelIgnore + private String orgCode; + @ExcelProperty(value = "ITEM", index = 4) + private String itemNo; + @ExcelIgnore + private String taxRate; + @ExcelIgnore + private String owner; + @ExcelIgnore + private String description; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @ExcelIgnore + private Date creationTime; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @ExcelIgnore + private Date updateTime; + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ExcelIgnore + private Date orderDate; + @ExcelIgnore + private BigDecimal usedAmount; + @ExcelIgnore + private BigDecimal unUsedAmount; + + @ExcelIgnore + private String ext01; + @ExcelIgnore + private String ext02; + @ExcelIgnore + private String ext03; + @ExcelIgnore + private String ext04; + @ExcelIgnore + private String ext05;//剩余匹配金额 + @ExcelIgnore + private String supplierName; + @ExcelProperty(value = "可匹配", index = 9) + private String matchNum; + @ExcelIgnore + private String usedQuantity; + @ExcelIgnore + private String unUsedQuantity; + + // 冻结数量 + @ExcelIgnore + private String refundNum; + + public String getUnUsedQuantity() { + if (usedQuantity == null) return receivedNum; + return new BigDecimal(receivedNum).subtract(new BigDecimal(usedQuantity)).setScale(4, BigDecimal.ROUND_HALF_UP).toEngineeringString(); + } + + public String getvStatusName() { + return status == null || status ? "关闭" : "正常"; + } + + public BigDecimal getUnUsedAmount() { + if (usedAmount == null) return amount; + return amount == null ? null : amount.subtract(usedAmount); + } + + @ExcelIgnore + List matchList; + + /** + * 是否为劳务费:0-是 1-否 + */ + @ExcelIgnore + private String isServiceFee; + + /** + * CODE id + */ + @ExcelIgnore + private String codeId; + + /** + * CODE name + */ + @ExcelIgnore + private String codeName; + + /** + * GS项目批号(原项目批号A,限TIC/EIC) + */ + @ExcelIgnore + private String gsNum; + + /** + * OA通用项目批号(原项目批号B) + */ + @ExcelIgnore + private String oaNum; + + /** + * 向品牌收取的金额(没有填0) + */ + @ExcelIgnore + private BigDecimal collectAmount; + + /** + * 平台类型 + */ + @ExcelIgnore + private String platForm; + + /** + * 充值渠道 + */ + @ExcelIgnore + private String chargeChannel; + + /** + * 渠道备注 + */ + @ExcelIgnore + private String channelRemark; + @ExcelIgnore + private String ext06; + @ExcelIgnore + private String ext07; + @ExcelIgnore + private String ext08; + @ExcelIgnore + private String ext09; + @ExcelIgnore + private String ext10; + @ExcelIgnore + private String goodsStr;//费用类型str + @ExcelIgnore + private String costCenterStr;//成本中心str +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierState.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierState.java new file mode 100644 index 0000000..14596d8 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierState.java @@ -0,0 +1,70 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 对账单表 + */ +@Data +public class SupplierState implements Serializable { + + private long id; + + private String po; + + private String lineNo; + + private String itemNo; + + private String desc; + + private String quantity; + + private String uom; + + private String unitPrice; + + private String amount; + + private String code; + + private String number; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + + private String ext06; + + private String ext07; + + private String ext08; + + private String ext09; + + private String ext10; + + private String status; + + private Date createDate; + + private Date updateDate; + + private String createBy; + + private String updateBy; + + private String isDel; + + private String currency; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SupplierUomMapping.java b/src/main/java/com/cmsen/ticket/domain/entity/SupplierUomMapping.java new file mode 100644 index 0000000..bdd7a3f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SupplierUomMapping.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class SupplierUomMapping implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键ID + */ + private Integer id; + + private String supplierCode; + private String unit; + private String versUnit; + private BigDecimal versNum; + private String remark; + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SysUserApprove.java b/src/main/java/com/cmsen/ticket/domain/entity/SysUserApprove.java new file mode 100644 index 0000000..2f5ea78 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SysUserApprove.java @@ -0,0 +1,32 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_user_approve + * @author + */ +@Data +public class SysUserApprove implements Serializable { + private Integer userId; + + /** + * 授权组织id集合 + */ + private String authorizedOrg; + + /** + * 授权的发票类型ID + */ + private String corInvType; + + /** + * 数据权限 0 All,1 by org,2 by owner + */ + private Integer dataAuthType; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/SysUserOrg.java b/src/main/java/com/cmsen/ticket/domain/entity/SysUserOrg.java new file mode 100644 index 0000000..595778e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/SysUserOrg.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.domain.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_user_org + * + * @author + */ +@Data +public class SysUserOrg implements Serializable { + private static final long serialVersionUID = 1L; + @ApiModelProperty("用户id") + private Integer userId; + /** + * 授权组织id集合 + */ + @ApiModelProperty("授权组织id集合(示例 1,2)") + private String authorizedOrg; + @ApiModelProperty("授权发票类型id集合(示例 1,2)") + private String corInvType; + /** + * 数据权限 0 All,1 by org,2 by owner + */ + @ApiModelProperty("数据权限 0 All,1 by org,2 by owner") + private Integer dataAuthType; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/User.java b/src/main/java/com/cmsen/ticket/domain/entity/User.java new file mode 100644 index 0000000..38349d7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/User.java @@ -0,0 +1,40 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class User implements Serializable { + private static final long serialVersionUID = 1L; + private Integer userId; + private String openid; + private String unionid; + private String username; + private String pwd; + private String age; + private String email; + private String tel; + private String isDel; + private String createTime; + private String updateTime; + private String languageType; + private Integer verificationCode; + private String verifyTime; + /** + * 所属公司ID(每个用户有自己所属的公司) + */ + private Integer companyId; + /** + * 用户所对应的客户ID(每个用户有自己所属的公司,所属的公司有所属的客户,一个客户下面可以有多个公司) + */ + private Integer client; + private Integer checked; // 0/N 1/Y + private boolean corInvSubmit; + private boolean manual; + private String type; + + private Integer validMode; + + private String vUserExt05; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/UserCompany.java b/src/main/java/com/cmsen/ticket/domain/entity/UserCompany.java new file mode 100644 index 0000000..2d08d02 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/UserCompany.java @@ -0,0 +1,18 @@ +package com.cmsen.ticket.domain.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * user_company + * + * @author + */ +@Data +public class UserCompany implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private Integer user; + private Integer company; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/VerifiedUser.java b/src/main/java/com/cmsen/ticket/domain/entity/VerifiedUser.java new file mode 100644 index 0000000..1d869da --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/VerifiedUser.java @@ -0,0 +1,67 @@ +package com.cmsen.ticket.domain.entity; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.common.http.response.Validation; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * verified_user + * + * @author + */ +@Data +public class VerifiedUser implements Serializable { + private static final long serialVersionUID = 1L; + @ExcelProperty(value = "ID", index = 0) + private Integer id; + @NotBlank(message = "required", groups = {Validation.Create.class}) + @ExcelProperty(value = "姓名", index = 1) + private String name; + @NotBlank(message = "required", groups = {Validation.Create.class}) + @ExcelProperty(value = "手机号", index = 2) + private String tel; + @NotBlank(message = "required", groups = {Validation.Create.class}) + @ExcelProperty(value = "登陆账号", index = 3) + private String loginId; + @ExcelIgnore + private Integer clientId; + @ExcelIgnore + private String clientName; + @ExcelProperty(value = "近似名", index = 4) + private String similarNames; + @ExcelProperty(value = "对公发票管理", index = 5) + private Boolean corInvSubmit; + @ExcelProperty(value = "是否手工发票", index = 6) + private Boolean manual; + @ExcelProperty(value = "组织", index = 7) + private String group; + @ExcelProperty(value = "Default公司", index = 8) + private String taxNo; + @ExcelProperty(value = "类型", index = 9) + private String type; + @ExcelProperty(value = "Band", index = 10) + private String bandler; + @ExcelProperty(value = "Ext01", index = 11) + private String ext01; + @ExcelProperty(value = "Ext02", index = 12) + private String ext02; + @ExcelProperty(value = "Ext03", index = 13) + private String ext03; + @ExcelProperty(value = "Ext04", index = 14) + private String ext04; + @ExcelProperty(value = "Ext05", index = 15) + private String ext05; + + @ExcelProperty(value = "验真模式", index = 16) + private Integer validMode; + + @ExcelIgnore + private String org; + + @ExcelProperty(value = "isDel", index = 17) + private String isDel; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/baozun/InterfaceRequestEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/baozun/InterfaceRequestEntity.java new file mode 100644 index 0000000..be874e9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/baozun/InterfaceRequestEntity.java @@ -0,0 +1,26 @@ +package com.cmsen.ticket.domain.entity.baozun; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 宝尊接口请求实体 + */ +@Data +public class InterfaceRequestEntity implements Serializable { + //requestId + private String requestId; + //援引合同的owner 以,隔开 + private String owner; + //状态: 0-草稿 2-上级审批 4-财务节点2 6-出纳付款 8-发票匹配 10-财务节点3 12-归档 99-撤销 + private String status; + //审批意见 + private String approvalComment; + //财务审批人 当状态是6时,需要拼接在owner上 + private String finApprover; + + //flowId + private String flowId; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/baozun/Invoke2Entity.java b/src/main/java/com/cmsen/ticket/domain/entity/baozun/Invoke2Entity.java new file mode 100644 index 0000000..8031e66 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/baozun/Invoke2Entity.java @@ -0,0 +1,29 @@ +package com.cmsen.ticket.domain.entity.baozun; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 援引 + * @author + */ +@Data +public class Invoke2Entity implements Serializable { + //requestid + private String requestid; + //流程名称 + private String requestname; + //创建时间 + private String createdate; + //流程编号 + private String LCBH; + //收款方成本中心 + private String DEPARTMENT_CODE_CR; + //申请人 + private String shenqingren; + //付款方所属公司 + private String FKFSSGS; + //收款方所属公司 + private String SKFSSGS; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/baozun/InvokeEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/baozun/InvokeEntity.java new file mode 100644 index 0000000..15f4b71 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/baozun/InvokeEntity.java @@ -0,0 +1,149 @@ +package com.cmsen.ticket.domain.entity.baozun; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 援引 + * @author + */ +@Data +public class InvokeEntity implements Serializable { + //requestid + private String requestid; + //流程编号 + private String lcbh; + //申请人 + private String sqr; + //合同名称 + private String htmc; + //合同类型--签署类型 + private String htlx; + //我方签约公司名称 + private String wfqygsmc; + //对方签约公司 + private String dfqygs; + //合同开始时间 + private String htksrq; + //合同到期时间 + private String htdqrq; + //签订类型 + private String qdlx; + //签署类型 + private String qylx; + private String qslx; + //币种 + private String bz; + // + private String approver; + + + //我方签约公司名称 + private String company; + private String company1; + //合同期限 + private String htqx; + + //合同开始时间 + private String htkssj; + //合同到期时间 + private String hejssj; + + //合同类型 + private String htlx1; + //我方签约公司名称 + private String ssgs; + //对方签约公司 + private String dfqygsmc; + + //币种2 + private String bz2; + //供应商名称 + private String vendor; + //所属行业 + private String hy; + //开户行【供应商】 + private String gyskhh; + //银行账号【供应商】 + private String gysyhzh; + //援引非经营采购流程 + private String zlc; + //流程编码 + private String lcbm; + //项目编号A GS项目批号 + private String xiangmupihao; + //项目编号B OA通用项目批号 + private String xiangmupihao1; + //成本中心 + private String cbzx; + //是否预付款 + private String sfyfk; + //流程名称 + private String requestname; + + //对接单号 + private String djdh; + //采购合计金额 + private String hj; + //援引相关合同流程 + private String yyxght; + //非经营性采购流程编号 + private String yyfjyxcglcbh; + //相关合同流程编号 + private String xghtlcbh; + //合同流程中对方签约公司名称 + private String htlczxzgsmc; + + //合同结束日期 + private String htjsrq; + //财务结算条款. + private String htzcwjstk; + //抄送干系人 + private String csgxr; + //是否外部来源 + //private String sfwbly; + //创建时间 + private String createdate; + //商品名称 + private String spmc; + + //创建时间 + private String creater; + //对接单号 + private String dockno; + + + //流水号 + private String lsh; + //币种 + private String biz; + private String bizhong; + //成本中心 + private String dept; + //付款类型 + private String fklx; + //供应商 + private String gys; + //是否为非经营性采购 + private String sfwfjyxcg; + //是否为数字营销 + private String sfwdm; + + //品牌公司名 + private String customer; + private String ppgsm; + //是否有供应商合同 + private String gysht; + private String gh;//工号 + private String sqrgh;//工号 + private String zj;//职级 + private String bm;//部门 + private String sqrbm;//部门 + private String fb;//分部 + private String sshy;//所属行业 + private String sshy1;//所属行业 + private String yszd;//所需资源-投入的成本金额 + private String sxzytrdcbje;//所需资源-投入的成本金额 + private String sfpttgfy;//是否店铺运营平台推广费用 +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/cardPackage/CardPackageResp.java b/src/main/java/com/cmsen/ticket/domain/entity/cardPackage/CardPackageResp.java new file mode 100644 index 0000000..9987b6c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/cardPackage/CardPackageResp.java @@ -0,0 +1,67 @@ +package com.cmsen.ticket.domain.entity.cardPackage; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author ran hao yu + * @date 2020/9/1 10:26 + * @description + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CardPackageResp { + private int errcode; + private String errmsg; + private List item_list; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class ItemList { + private CardPackageResp.UserInfo user_info; + private String card_id; + private String openid; + private String type; + private String payee; + private String detail; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class UserInfo { + private int fee; + private String title; + private int billing_time; + private String billing_no; + private String billing_code; + private List info; + private int fee_without_tax; + private int tax; + private String detail; + private String pdf_url; + private String reimburse_status; + private String order_id; + private String s_pdf_media_id; + private String check_code; + private String buyer_number; + private String buyer_address_and_phone; + private String buyer_bank_account; + private String seller_number; + private String seller_address_and_phone; + private String seller_bank_account; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Info { + private String name; + private int price; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/collect/CollectCompany.java b/src/main/java/com/cmsen/ticket/domain/entity/collect/CollectCompany.java new file mode 100644 index 0000000..bb4bbf7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/collect/CollectCompany.java @@ -0,0 +1,632 @@ +package com.cmsen.ticket.domain.entity.collect; + +import java.util.Date; + +public class CollectCompany { + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.id + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String id; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.company_name + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String companyName; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.tax_no + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String taxNo; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext1 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext1; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext2 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext2; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext3 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext3; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext4 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext4; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext5 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext5; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext6 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext6; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext7 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext7; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext8 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext8; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext9 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext9; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.ext10 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String ext10; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.del_flag + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String delFlag; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.create_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String createBy; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.update_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private Date updateDate; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.update_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String updateBy; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.create_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private Date createDate; + + /** + * + * This field was generated by MyBatis Generator. + * This field corresponds to the database column collect_company.remarks + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + private String remarks; + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.id + * + * @return the value of collect_company.id + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getId() { + return id; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.id + * + * @param id the value for collect_company.id + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setId(String id) { + this.id = id == null ? null : id.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.company_name + * + * @return the value of collect_company.company_name + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getCompanyName() { + return companyName; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.company_name + * + * @param companyName the value for collect_company.company_name + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setCompanyName(String companyName) { + this.companyName = companyName == null ? null : companyName.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.tax_no + * + * @return the value of collect_company.tax_no + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getTaxNo() { + return taxNo; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.tax_no + * + * @param taxNo the value for collect_company.tax_no + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setTaxNo(String taxNo) { + this.taxNo = taxNo == null ? null : taxNo.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext1 + * + * @return the value of collect_company.ext1 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt1() { + return ext1; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext1 + * + * @param ext1 the value for collect_company.ext1 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt1(String ext1) { + this.ext1 = ext1 == null ? null : ext1.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext2 + * + * @return the value of collect_company.ext2 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt2() { + return ext2; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext2 + * + * @param ext2 the value for collect_company.ext2 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt2(String ext2) { + this.ext2 = ext2 == null ? null : ext2.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext3 + * + * @return the value of collect_company.ext3 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt3() { + return ext3; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext3 + * + * @param ext3 the value for collect_company.ext3 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt3(String ext3) { + this.ext3 = ext3 == null ? null : ext3.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext4 + * + * @return the value of collect_company.ext4 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt4() { + return ext4; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext4 + * + * @param ext4 the value for collect_company.ext4 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt4(String ext4) { + this.ext4 = ext4 == null ? null : ext4.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext5 + * + * @return the value of collect_company.ext5 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt5() { + return ext5; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext5 + * + * @param ext5 the value for collect_company.ext5 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt5(String ext5) { + this.ext5 = ext5 == null ? null : ext5.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext6 + * + * @return the value of collect_company.ext6 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt6() { + return ext6; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext6 + * + * @param ext6 the value for collect_company.ext6 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt6(String ext6) { + this.ext6 = ext6 == null ? null : ext6.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext7 + * + * @return the value of collect_company.ext7 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt7() { + return ext7; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext7 + * + * @param ext7 the value for collect_company.ext7 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt7(String ext7) { + this.ext7 = ext7 == null ? null : ext7.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext8 + * + * @return the value of collect_company.ext8 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt8() { + return ext8; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext8 + * + * @param ext8 the value for collect_company.ext8 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt8(String ext8) { + this.ext8 = ext8 == null ? null : ext8.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext9 + * + * @return the value of collect_company.ext9 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt9() { + return ext9; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext9 + * + * @param ext9 the value for collect_company.ext9 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt9(String ext9) { + this.ext9 = ext9 == null ? null : ext9.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.ext10 + * + * @return the value of collect_company.ext10 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getExt10() { + return ext10; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.ext10 + * + * @param ext10 the value for collect_company.ext10 + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setExt10(String ext10) { + this.ext10 = ext10 == null ? null : ext10.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.del_flag + * + * @return the value of collect_company.del_flag + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getDelFlag() { + return delFlag; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.del_flag + * + * @param delFlag the value for collect_company.del_flag + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setDelFlag(String delFlag) { + this.delFlag = delFlag == null ? null : delFlag.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.create_by + * + * @return the value of collect_company.create_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getCreateBy() { + return createBy; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.create_by + * + * @param createBy the value for collect_company.create_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setCreateBy(String createBy) { + this.createBy = createBy == null ? null : createBy.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.update_date + * + * @return the value of collect_company.update_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public Date getUpdateDate() { + return updateDate; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.update_date + * + * @param updateDate the value for collect_company.update_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.update_by + * + * @return the value of collect_company.update_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getUpdateBy() { + return updateBy; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.update_by + * + * @param updateBy the value for collect_company.update_by + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy == null ? null : updateBy.trim(); + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.create_date + * + * @return the value of collect_company.create_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public Date getCreateDate() { + return createDate; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.create_date + * + * @param createDate the value for collect_company.create_date + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + /** + * This method was generated by MyBatis Generator. + * This method returns the value of the database column collect_company.remarks + * + * @return the value of collect_company.remarks + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public String getRemarks() { + return remarks; + } + + /** + * This method was generated by MyBatis Generator. + * This method sets the value of the database column collect_company.remarks + * + * @param remarks the value for collect_company.remarks + * + * @mbg.generated Tue Oct 17 20:56:34 CST 2023 + */ + public void setRemarks(String remarks) { + this.remarks = remarks == null ? null : remarks.trim(); + } +} \ No newline at end of file diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/AddAttendeeDto.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/AddAttendeeDto.java new file mode 100644 index 0000000..cafb139 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/AddAttendeeDto.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.domain.entity.concur; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/10/28 13:51 + **/ + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class AddAttendeeDto { + @JsonProperty("AttendeeTypeCode") + private String AttendeeTypeCode; + @JsonProperty("AttendeeTypeID") + private String AttendeeTypeID; + @JsonProperty("FirstName") + private String FirstName; + @JsonProperty("LastName") + private String LastName; + @JsonProperty("Company") + private String Company; + @JsonProperty("Title") + private String Title; + @JsonProperty("ID") + private String ID; + @JsonProperty("OwnerLoginID") + private String OwnerLoginID; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendDetail.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendDetail.java new file mode 100644 index 0000000..e9cc1de --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendDetail.java @@ -0,0 +1,136 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AttendDetail { + @JsonProperty("ID") + private String ID; + @JsonProperty("EntryID") + private String EntryID; + @JsonProperty("AttendeeID") + private String AttendeeID; + @JsonProperty("Amount") + private String Amount; + @JsonProperty("AssociatedAttendeeCount") + private String AssociatedAttendeeCount; + @JsonProperty("AssociatedAttendeeID") + private String AssociatedAttendeeID; + @JsonProperty("Custom1") + private String Custom1; + @JsonProperty("Custom2") + private String Custom2; + @JsonProperty("Custom3") + private String Custom3; + @JsonProperty("Custom4") + private String Custom4; + @JsonProperty("Custom5") + private String Custom5; + @JsonProperty("AttendeeStatus") + private String AttendeeStatus; + @JsonProperty("TaskID") + private String TaskID; + + public String getID() { + return ID; + } + + public void setID(String ID) { + this.ID = ID; + } + + public String getEntryID() { + return EntryID; + } + + public void setEntryID(String entryID) { + EntryID = entryID; + } + + public String getAttendeeID() { + return AttendeeID; + } + + public void setAttendeeID(String attendeeID) { + AttendeeID = attendeeID; + } + + public String getAmount() { + return Amount; + } + + public void setAmount(String amount) { + Amount = amount; + } + + public String getAssociatedAttendeeCount() { + return AssociatedAttendeeCount; + } + + public void setAssociatedAttendeeCount(String associatedAttendeeCount) { + AssociatedAttendeeCount = associatedAttendeeCount; + } + + public String getCustom1() { + return Custom1; + } + + public void setCustom1(String custom1) { + Custom1 = custom1; + } + + public String getCustom2() { + return Custom2; + } + + public void setCustom2(String custom2) { + Custom2 = custom2; + } + + public String getCustom3() { + return Custom3; + } + + public void setCustom3(String custom3) { + Custom3 = custom3; + } + + public String getCustom4() { + return Custom4; + } + + public void setCustom4(String custom4) { + Custom4 = custom4; + } + + public String getCustom5() { + return Custom5; + } + + public void setCustom5(String custom5) { + Custom5 = custom5; + } + + public String getAttendeeStatus() { + return AttendeeStatus; + } + + public void setAttendeeStatus(String attendeeStatus) { + AttendeeStatus = attendeeStatus; + } + + public String getTaskID() { + return TaskID; + } + + public void setTaskID(String taskID) { + TaskID = taskID; + } + + public String getAssociatedAttendeeID() { + return AssociatedAttendeeID; + } + + public void setAssociatedAttendeeID(String associatedAttendeeID) { + AssociatedAttendeeID = associatedAttendeeID; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendListData.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendListData.java new file mode 100644 index 0000000..2f2f31d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/AttendListData.java @@ -0,0 +1,59 @@ +package com.cmsen.ticket.domain.entity.concur; + +import java.util.List; +import java.util.Map; + +/** + * attend接收参数类 + */ +public class AttendListData { + private boolean state; + + private List> data; + + private String message; + + private int totalCount; + + private String errCode; + + public boolean getState() { + return this.state; + } + + public void setState(boolean state) { + this.state = state; + } + + public List> getData() { + return this.data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getTotalCount() { + return this.totalCount; + } + + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + } + + public String getErrCode() { + return this.errCode; + } + + public void setErrCode(String errCode) { + this.errCode = errCode; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/CityResult.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/CityResult.java new file mode 100644 index 0000000..00c060d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/CityResult.java @@ -0,0 +1,156 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author OWTS > + * @Date 2020/11/12 + * @Description + */ +public class CityResult { + @JsonProperty("total") + private int totalNum; + @JsonProperty("rows") + private List rows = new ArrayList<>(); + + public CityResult() { + } + + @Override + public String toString() { + return "CityResult{" + + "totalNum=" + totalNum + + ", rows=" + rows + + '}'; + } + + public int getTotalNum() { + return totalNum; + } + + public void setTotalNum(int totalNum) { + this.totalNum = totalNum; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public static class ConcurCity { + @JsonProperty("staType") + private String staType; + @JsonProperty("staName") + private String staName; + @JsonProperty("cityCode") + private String cityCode; + @JsonProperty("cityName") + private String cityName; + @JsonProperty("custom1") + private String custom1; + @JsonProperty("custom2") + private String custom2; + @JsonProperty("custom3") + private String custom3; + @JsonProperty("custom4") + private String custom4; + @JsonProperty("updateDate") + private String updateDate; + + public ConcurCity() { + } + + @Override + public String toString() { + return "ConcurCity{" + + "staType='" + staType + '\'' + + ", staName='" + staName + '\'' + + ", cityCode='" + cityCode + '\'' + + ", cityName='" + cityName + '\'' + + ", custom1='" + custom1 + '\'' + + ", custom2='" + custom2 + '\'' + + ", custom3='" + custom3 + '\'' + + ", custom4='" + custom4 + '\'' + + ", updateDate='" + updateDate + '\'' + + '}'; + } + + public String getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(String updateDate) { + this.updateDate = updateDate; + } + + public String getStaType() { + return staType; + } + + public void setStaType(String staType) { + this.staType = staType; + } + + public String getStaName() { + return staName; + } + + public void setStaName(String staName) { + this.staName = staName; + } + + public String getCityCode() { + return cityCode; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getCustom1() { + return custom1; + } + + public void setCustom1(String custom1) { + this.custom1 = custom1; + } + + public String getCustom2() { + return custom2; + } + + public void setCustom2(String custom2) { + this.custom2 = custom2; + } + + public String getCustom3() { + return custom3; + } + + public void setCustom3(String custom3) { + this.custom3 = custom3; + } + + public String getCustom4() { + return custom4; + } + + public void setCustom4(String custom4) { + this.custom4 = custom4; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurConfigEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurConfigEntity.java new file mode 100644 index 0000000..292932b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurConfigEntity.java @@ -0,0 +1,126 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Author OWTS > + * @Date 2020/11/18 + * @Description + */ +@Component +@Data +@ConfigurationProperties(prefix = "concur") +public class ConcurConfigEntity { + private Boolean active; + private Boolean syncUserActive; + private String baseUrl; + private String tokenRoute = "/sys/login"; + private String userName; + private String password; + + private String delegators = "/ocr/getDelegators"; + + private String wechatSend = "/weixin/addReport"; + + private String createReportRoute = "/ocr/createReport"; + private String getReportStateRoute = "/ocr/getReportStateNew"; + + private String getReportV4State = "/ocr/getReportV4State"; + + private String getTaxRateInfoV4 = "/ocr/getTaxRateInfoV4"; + + private String upReportRoute = "/ocr/upReport"; + private String upEntryRoute = "/ocr/upEntry"; + private String delEntryRoute = "/ocr/delEntry"; + private String checkEntryRoute = "/ocr/checkEntryList"; + + private String checkEntryReportRoute = "/ocr/checkEntry"; + + private String checkPeceiptIdRoute = "/ocr/getReceiptState"; + + private String checkEntryExist = "/ocr/getEntryMesg"; + + + private String t10Employee = "/today/employee/t10Employee/list"; + + private String reportMain = "/today/report/t10ReportMain/list"; + + private String attendeeList = "/ocr/attend/t10Attendee/list"; + + private String poList = "/c009/podetail/tC009PoNumber/list"; + + private String addAttendee = "/ocr/addAttend"; + + private String reportById = "/today/report/t10ReportMain/queryById"; + + private String entryItemization = "/today/report/t10EntryItemization/list"; + + private String entryItemizationById = "/today/report/t10EntryItemization/queryById"; + + private String entryAssociations = "/today/report/t10EntryAssociations/list"; + + private String getImageId = "/ocr/getEntryImageId"; + + private String upInvoiceState = "/ocr/upInvoiceState"; + + private String upReceiptV4 = "/ocr/upReceiptEntryV4"; + + private String upTaxRateV4 = "/ocr/upTaxRateV4"; + + private String abPolicy = "/sfdc/policy/tSfPolicy/list"; + + private String createWeChatProcess = "/today/flow/createStartFormData"; + + private String submitWeChatProcess = "/today/flow/submitFormData"; + + private String rollbackWeChatProcess = "/today/flow/deleteProcIns"; + + private String entryImages = "/ocr/getEntryImage"; + private String sendApInvoice = "/today/kettle/setOcrId"; + + private String contractView = "/contract/getView"; + private String contractCancel = "/contract/Undo"; + + private String approveReport = "/ocr/approveReport"; + private String approveReportV4 = "/ocr/approveReportV4"; + + private String submitReportV4 = "/ocr/submitReportV4"; + + private String upReportV4Custom = "/ocr/upReportV4Custom"; + + //配置是否进行getConcurImage的定时任务 + private boolean entryImagesActive = true; + + private ConcurLoginInfo concurLoginInfo; + private OcrConcur ocrConcur; + + private Guni guni; + + + @Data + public static class ConcurLoginInfo { + private String userName; + private String count; + private String secret; + private String token; + } + + @Data + public static class OcrConcur { + private String templateID; + private String execUser; + private String action; + } + + @Data + public static class Guni { + private boolean active; + private String loginUrl; + private String listUrl; + private String userName; + private String secret; + private int count; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurEntryEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurEntryEntity.java new file mode 100644 index 0000000..2a752f1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurEntryEntity.java @@ -0,0 +1,88 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @Author OWTS > + * @Date 2020/11/18 + * @Description + */ +@Data +public class ConcurEntryEntity { + //是否电子票,从票种配置表中获取 + @JsonProperty("ERCPT") + public String ERCPT; + //报销单明细ID + private String entryId; + //报销人邮箱 + private String loginId; + //拍照人Email + @JsonProperty("CreatedBy") + private String CreatedBy; + //备注 + @JsonProperty("BZ") + private String BZ; + //费用类型 Category,expense Type ID + @JsonProperty("FYDL") + private String FYDL; + //地址ID + @JsonProperty("DD") + private String DD; + //费率类型 + private String FYXL; + //Report ID + @JsonProperty("ReportID") + private String ReportID; + //Amount报销金额 + @JsonProperty("BSJE") + private String BSJE; + //Currency货币类型 + @JsonProperty("Currency") + private String Currency; + //供应商说明 + @JsonProperty("GYS") + private String GYS; + //发票类型 + private String third_type; + //税率 + private String tax; + @JsonProperty("FYRQ") + private String FYRQ; //交易日期 + @JsonProperty("FPHM") + private String FPHM; + @JsonProperty("FPDM") + private String FPDM; + @JsonProperty("ID") + private String ID; //任务ID + @JsonProperty("CreatedTime") + private String CreatedTime; //任务创建时间 + @JsonProperty("RowNumber") + private String RowNumber; + @JsonProperty("Title") + private String Title; //任务标题 + @JsonProperty("Folder") + private String Folder; //发票夹ID + @JsonProperty("CFCS") + private String CFCS; //从哪里 + @JsonProperty("DDCS") + private String DDCS; //到哪里 + @JsonProperty("name") + private String name; //Concur Logon ID + @JsonProperty("type") + private String type; + @JsonProperty("invctype") + private String invctype; + //税码 + @JsonProperty("TAXCODE") + private String TAXCODE; + //发票分类,从票种配置表中获取 + @JsonProperty("FPCAT") + private String FPCAT; + + @JsonProperty("isValid") + private String isValid; + + @JsonProperty("TAXITYPE") + private String TAXITYPE; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurLoginForm.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurLoginForm.java new file mode 100644 index 0000000..e742d7c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurLoginForm.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author OWTS > + * @Date 2020/11/12 + * @Description + */ +@Data +@NoArgsConstructor +public class ConcurLoginForm { + private String userName; + private String count; + private String secret; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurResponse.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurResponse.java new file mode 100644 index 0000000..92d7288 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ConcurResponse.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +/** + * @Author OWTS > + * @Date 2020/12/8 + * @Description + */ +@Data +public class ConcurResponse { + private Boolean state; + private String message; + private Object data; + private Integer totalCount; + private String errCode; + + public ConcurResponse(Boolean state, String message, Object data, Integer totalCount, String errCode) { + this.state = state; + this.message = message; + this.data = data; + this.totalCount = totalCount; + this.errCode = errCode; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/Delegators.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/Delegators.java new file mode 100644 index 0000000..9088375 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/Delegators.java @@ -0,0 +1,22 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class Delegators { + private String msg; + private int code; + private boolean success; + @JsonProperty("dataList") + private List dataList = new ArrayList<>(); + + @Data + public static class Delegator { + @JsonProperty("ConcurID") + private String ConcurID; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/InvoicePictureEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/InvoicePictureEntity.java new file mode 100644 index 0000000..b6dbe33 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/InvoicePictureEntity.java @@ -0,0 +1,15 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +/** + * @Author OWTS > + * @Date 2020/11/17 + * @Description + */ +@Data +public class InvoicePictureEntity { + private String fileName; + private String base64; + private String filePath; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemizationDetail.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemizationDetail.java new file mode 100644 index 0000000..22ae00b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemizationDetail.java @@ -0,0 +1,206 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ItemizationDetail { + @JsonProperty("ID") + private String ID; + @JsonProperty("EntryID") + private String EntryID; + @JsonProperty("ReportID") + private String ReportID; + @JsonProperty("ReportOwnerID") + private String ReportOwnerID; + @JsonProperty("ExpenseTypeCode") + private String ExpenseTypeCode; + @JsonProperty("ExpenseTypeName") + private String ExpenseTypeName; + @JsonProperty("SpendCategoryCode") + private String SpendCategoryCode; + @JsonProperty("SpendCategoryName") + private String SpendCategoryName; + @JsonProperty("TransactionDate") + private String TransactionDate; + @JsonProperty("TransactionAmount") + private String TransactionAmount; + @JsonProperty("ItemId") + private String ItemId; + /*@JsonProperty("Custom1") + private String Custom1; + @JsonProperty("Custom2") + private String Custom2; + @JsonProperty("Custom3") + private String Custom3; + @JsonProperty("Custom4") + private String Custom4; + @JsonProperty("Custom5") + private String Custom5; + @JsonProperty("Custom13") + private String Custom13;*/ + @JsonProperty("Status") + private String Status; + @JsonProperty("TaskID") + private String TaskID; + @JsonProperty("ExpenseTypeId") + private Integer ExpenseTypeId; + + public String getID() { + return ID; + } + + public void setID(String ID) { + this.ID = ID; + } + + public String getEntryID() { + return EntryID; + } + + public void setEntryID(String entryID) { + EntryID = entryID; + } + + public String getReportID() { + return ReportID; + } + + public void setReportID(String reportID) { + ReportID = reportID; + } + + public String getReportOwnerID() { + return ReportOwnerID; + } + + public void setReportOwnerID(String reportOwnerID) { + ReportOwnerID = reportOwnerID; + } + + public String getExpenseTypeCode() { + return ExpenseTypeCode; + } + + public void setExpenseTypeCode(String expenseTypeCode) { + ExpenseTypeCode = expenseTypeCode; + } + + public String getExpenseTypeName() { + return ExpenseTypeName; + } + + public void setExpenseTypeName(String expenseTypeName) { + ExpenseTypeName = expenseTypeName; + } + + public String getSpendCategoryCode() { + return SpendCategoryCode; + } + + public void setSpendCategoryCode(String spendCategoryCode) { + SpendCategoryCode = spendCategoryCode; + } + + public String getSpendCategoryName() { + return SpendCategoryName; + } + + public void setSpendCategoryName(String spendCategoryName) { + SpendCategoryName = spendCategoryName; + } + + public String getTransactionDate() { + return TransactionDate; + } + + public void setTransactionDate(String transactionDate) { + TransactionDate = transactionDate; + } + + public String getTransactionAmount() { + return TransactionAmount; + } + + public void setTransactionAmount(String transactionAmount) { + TransactionAmount = transactionAmount; + } + + public String getItemId() { + return ItemId; + } + + public void setItemId(String itemId) { + ItemId = itemId; + } + + /*public String getCustom1() { + return Custom1; + } + + public void setCustom1(String custom1) { + Custom1 = custom1; + } + + public String getCustom2() { + return Custom2; + } + + public void setCustom2(String custom2) { + Custom2 = custom2; + } + + public String getCustom3() { + return Custom3; + } + + public void setCustom3(String custom3) { + Custom3 = custom3; + } + + public String getCustom4() { + return Custom4; + } + + public void setCustom4(String custom4) { + Custom4 = custom4; + } + + public String getCustom5() { + return Custom5; + } + + public void setCustom5(String custom5) { + Custom5 = custom5; + }*/ + + public String getStatus() { + return Status; + } + + public void setStatus(String status) { + Status = status; + } + + public String getTaskID() { + return TaskID; + } + + public void setTaskID(String taskID) { + TaskID = taskID; + } + + public Integer getExpenseTypeId() { + return ExpenseTypeId; + } + + public void setExpenseTypeId(Integer expenseTypeId) { + ExpenseTypeId = expenseTypeId; + } + + /*public String getCustom13() { + return Custom13; + } + + public void setCustom13(String custom13) { + Custom13 = custom13; + }*/ +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemzationListData.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemzationListData.java new file mode 100644 index 0000000..fb576f5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ItemzationListData.java @@ -0,0 +1,59 @@ +package com.cmsen.ticket.domain.entity.concur; + +import java.util.List; +import java.util.Map; + +/** + * attend接收参数类 + */ +public class ItemzationListData { + private boolean state; + + private List> data; + + private String message; + + private int totalCount; + + private String errCode; + + public boolean getState() { + return this.state; + } + + public void setState(boolean state) { + this.state = state; + } + + public List> getData() { + return this.data; + } + + public void setData(List> data) { + this.data = data; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getTotalCount() { + return this.totalCount; + } + + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + } + + public String getErrCode() { + return this.errCode; + } + + public void setErrCode(String errCode) { + this.errCode = errCode; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ListIdEntityDto.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListIdEntityDto.java new file mode 100644 index 0000000..537f2ed --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListIdEntityDto.java @@ -0,0 +1,50 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ListIdEntityDto { + @JsonProperty("Data") + private List Data; + + @Data + public static class ListIdEntity { + @JsonProperty("Code") + private String Code; + @JsonProperty("Name") + private String Name; + @JsonProperty("DataType") + private String DataType; + @JsonProperty("ParentID") + private String ParentID; + @JsonProperty("isDisable") + private int isDisable; + @JsonProperty("ListID") + private String ListID; + @JsonProperty("ListItemID") + private String ListItemID; + @JsonProperty("Ext01") + private String Ext01; + @JsonProperty("Ext02") + private String Ext02; + @JsonProperty("Ext03") + private String Ext03; + @JsonProperty("Ext04") + private String Ext04; + @JsonProperty("Ext05") + private String Ext05; + @JsonProperty("Ext06") + private String Ext06; + @JsonProperty("Ext07") + private String Ext07; + @JsonProperty("Ext08") + private String Ext08; + @JsonProperty("Ext09") + private String Ext09; + @JsonProperty("Ext10") + private String Ext10; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemDTO.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemDTO.java new file mode 100644 index 0000000..bfe2406 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemDTO.java @@ -0,0 +1,33 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/9/6 14:52 + **/ +@EqualsAndHashCode +@ColumnWidth(20) +@Data +public class ListItemDTO { + private String id; + private String createDate; + private String updateDate; + private String name; + private String listId; + private String listitemId; + private String codeO; + private String codeTw; + private String codeTh; + private String codeF; + private String codeFi; + private String codeS; + private String attributer1; + private String attributer2; + private String attributer3; + private String attributer4; + private String attributer5; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemV4DTO.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemV4DTO.java new file mode 100644 index 0000000..3550334 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/ListItemV4DTO.java @@ -0,0 +1,26 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/9/6 14:52 + **/ +@EqualsAndHashCode +@Data +public class ListItemV4DTO { + private String id; + private String createDate; + private String updateDate; + private String listItemId; + private String listCode; + private String shortCode; + private String listValue; + private String parentId; + private String listLevel; + private String hasChildren; + private String isDeleted; + private String listId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/LoginResult.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/LoginResult.java new file mode 100644 index 0000000..05ebb8e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/LoginResult.java @@ -0,0 +1,15 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @Author OWTS > + * @Date 2020/12/8 + * @Description + */ +@Data +public class LoginResult { + @JsonProperty("Token") + private String Token; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/MeituanEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/MeituanEntity.java new file mode 100644 index 0000000..50fd179 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/MeituanEntity.java @@ -0,0 +1,46 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class MeituanEntity { + @JsonProperty("Date") + private String Date; + + @JsonProperty("Type") + private String Type; + + @JsonProperty("creditCard") + private String creditCard; + + @JsonProperty("Restarant") + private String Restarant; + + @JsonProperty("Attendee") + private String Attendee; + + @JsonProperty("Amount") + private String Amount; + + @JsonProperty("Currecy") + private String Currecy; + + @JsonProperty("Status") + private String Status; + + @JsonProperty("ActualAttend") + private String ActualAttend; + + @JsonProperty("Remark") + private String Remark; + + @JsonProperty("isCheck") + private String isCheck; + + @JsonProperty("Reason") + private String Reason; + + @JsonProperty("Result") + private String Result; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/PoItem.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/PoItem.java new file mode 100644 index 0000000..9695962 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/PoItem.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/11/23 17:32 + */ +@Data +public class PoItem { + private String id; + private String poName; + private String poNo; + private String userCostTotal; + private String ownerName; + private String ownerEmpId; + private String ownerEmail; + private String attributer1; + private String surplus; + private String listItemId; + private String poExpenseCode; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/PostBoxEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/PostBoxEntity.java new file mode 100644 index 0000000..798a3d7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/PostBoxEntity.java @@ -0,0 +1,65 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +import java.util.List; + +/** + * @author fengql + * @date 2024/5/9 10:24 + * @description + */ +@Data +public class PostBoxEntity { + private String imgUrl; + private String loginId; + private String ocrId; + private BoxData data; + + @Data + public static class BoxData { + + private String schema; + private String issueDate; + private String type; + private String invoiceSeries; + private String invoiceNumber; + private String verificationCode; + private String isElectronic; + private String companyTaxId; + private String companyName; + private String startDateTime; + private String sellerTaxId; + private String dateTime; + private String total; + private String tax; + private String taxRate; + private String currencyCode; + private String ocrId; + private List payments; + private Seller seller; + } + + @Data + public static class Payment { + private String amount; + } + + @Data + public static class Seller { + private String name; + private Location location; + } + + @Data + public static class Location { + private Address address; + } + + @Data + public static class Address { + private String streetAddress; + private String addressCountry; + private String addressLocality; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventEntity.java new file mode 100644 index 0000000..cae6114 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventEntity.java @@ -0,0 +1,34 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.cmsen.common.http.response.Validation; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author OWTS > + * @version 1.0.0 + * @date 2021/6/4 10:12 + * @desc PRC EVENT JSON + */ +@Data +public class PrcEventEntity { + @NotNull(groups = Validation.Create.class, message = "loginId must not be null") + private String loginId; + @NotNull(groups = Validation.Create.class, message = "reportId must not be null") + private String reportId; + /** + * 1:正常插入invoice2:source插入invoice_tmp3:deduction插入invoice_tmp + */ + private String queryFlag; + private List lines; + + @Data + public static class Line { + private String expenseType; + private String entryId; + private String pdfUrl; + private String entryMoney; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventReturn.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventReturn.java new file mode 100644 index 0000000..f80c369 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/PrcEventReturn.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +/** + * @author OWTS > + * @version 1.0.0 + * @date 2021/6/4 10:15 + * @desc ticket + */ +@Data +public class PrcEventReturn { + private String entryId; + private String number; + private String number2; + private String money="0"; + private Result result; + + @Data + public static class Result { + /** + * 200 校验成功 + * 202 错误 发票号码重复 + * 204 发票金额小于报销金额 + * 206 警告 验真、连号。。。 + */ + private Integer code = 200; + private String message = ""; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/SendFolderEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/SendFolderEntity.java new file mode 100644 index 0000000..d5d1933 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/SendFolderEntity.java @@ -0,0 +1,42 @@ +package com.cmsen.ticket.domain.entity.concur; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @Author OWTS > + * @Date 2020/11/13 + * @Description + */ +@Data +public class SendFolderEntity { + @Data + public static class UnSendRequest { + private String pageIndex; + private String pageSize; + private String taskId; + } + + @Data + public static class ResponseDate { + @JsonProperty("RowNumber") + private String RowNumber; + @JsonProperty("UserName") + private String UserName; + @JsonProperty("FolderName") + private String FolderName; + @JsonProperty("FolderID") + private String FolderID; + @JsonProperty("GroupName") + private String GroupName; + } + + @Data + public static class UpdateFolderRequest { + private Integer folderId; + private String reportKey; + private String message; + private String status; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/SendReportEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/SendReportEntity.java new file mode 100644 index 0000000..6cfe7a6 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/SendReportEntity.java @@ -0,0 +1,156 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author OWTS > + * @Date 2020/11/13 + * @Description + */ +@Data +public class SendReportEntity { + + @Data + public static class ReportRequest { + private String templateId; + private String pageIndex; + private String pageSize; + private ItemSearch itemSearch; +// private String taskId; + } + + @Data + public static class ItemSearch { + @JsonProperty("FPZT") + private String FPZT; + @JsonProperty("taskId") + private String taskId; + } + + @Data + public static class UpdateReportRequest { + @JsonProperty("userName") + private String userName; //员工编号 + @JsonProperty("title") + private String title; //任务标题 + @JsonProperty("action") + private String action; //动作 + @JsonProperty("createdtime") + private String createdtime; //任务创建时间 + @JsonProperty("id") + private String id; //任务id + @JsonProperty("execUser") + private String execUser; //执行用户 + @JsonProperty("FPZT") + private String FPZT; //发票整体状态 + @JsonProperty("CSZT") + private String CSZT; //接口状态 + @JsonProperty("CSSBYY") + private String CSSBYY; //失败原因 + @JsonProperty("entryId") + private String entryId; + } + + @Data + public static class Response { + private boolean state; + private String message; + private List data; + private int totalCount; + } + + @Data + public static class ResponseDate { + //是否电子票,从票种配置表中获取 + @JsonProperty("ERCPT") + public String ERCPT; + @JsonProperty("ID") + private String ID; //任务ID + @JsonProperty("CreatedTime") + private String CreatedTime; //任务创建时间 + @JsonProperty("CreatedBy") + private String CreatedBy; //拍照人Email + @JsonProperty("RowNumber") + private String RowNumber; + @JsonProperty("Title") + private String Title; //任务标题 + @JsonProperty("FPDM") + private String FPDM; //发票代码 + @JsonProperty("FPHM") + private String FPHM; //发票号码 + @JsonProperty("Folder") + private String Folder; //发票夹ID + @JsonProperty("ReportID") + private String ReportID; //Report Id + @JsonProperty("FYDL") + private String FYDL; //费用类型 + @JsonProperty("BSJE") + private String BSJE; //报销金额 + @JsonProperty("Currency") + private String Currency; //货币类型 + @JsonProperty("FYRQ") + private String FYRQ; //交易日期 + @JsonProperty("CFCS") + private String CFCS; //从哪里 + @JsonProperty("DDCS") + private String DDCS; //到哪里 + @JsonProperty("GYS") + private String GYS; //Vendor Name + @JsonProperty("DD") + private String DD; //城市 + @JsonProperty("BZ") + private String BZ; //comment意见 + @JsonProperty("name") + private String name; //Concur Logon ID + @JsonProperty("type") + private String type; + @JsonProperty("FYXL") + private String FYXL; + @JsonProperty("invctype") + private String invctype; + //税码 + @JsonProperty("TAXCODE") + private String TAXCODE; + //发票分类,从票种配置表中获取 + @JsonProperty("FPCAT") + private String FPCAT; + @JsonProperty("tax") + private String tax; + + @JsonProperty("isValid") + private String isValid; + + @JsonProperty("ZSTS") + private String ZSTS; + + @JsonProperty("TAXITYPE") + private String TAXITYPE; + } + + @Data + public static class InvoiceDeleteRequest { + @JsonProperty("RowNumber") + private String RowNumber; + @JsonProperty("id") + private String id; + @JsonProperty("entryId") + private String entryId; + @JsonProperty("reportId") + private String reportId; + @JsonProperty("userLogin") + private String userLogin; + @JsonProperty("flag") + private String flag; + } + + @Data + public static class InvoiceLogRequest { + @JsonProperty("id") + private String id; + @JsonProperty("status") + private String status; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/UpInvoiceStateDto.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpInvoiceStateDto.java new file mode 100644 index 0000000..3f34617 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpInvoiceStateDto.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/11/23 17:10 + */ +@Data +public class UpInvoiceStateDto { + private String reportId; + private String loginId; + private String invoiceNum; + private String invoiceNum2; + private String imageId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateAttendeeData.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateAttendeeData.java new file mode 100644 index 0000000..be202d5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateAttendeeData.java @@ -0,0 +1,32 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/10/28 13:28 + **/ +@Data +public class UpdateAttendeeData { + @JsonProperty("Data") + private List Data; + + + @lombok.Data + public static class Data { + @JsonProperty("Id") + private String Id; + @JsonProperty("AttendeeID") + private String AttendeeID; + @JsonProperty("AttendeeStatus") + private String AttendeeStatus; + @JsonProperty("AssociatedAttendeeID") + private String AssociatedAttendeeID; + @JsonProperty("TaskID") + private String TaskID; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateItemzationData.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateItemzationData.java new file mode 100644 index 0000000..55ede53 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/UpdateItemzationData.java @@ -0,0 +1,35 @@ +package com.cmsen.ticket.domain.entity.concur; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/10/28 10:59 + **/ +@Data +public class UpdateItemzationData { + + @JsonProperty("Data") + private List Data; + + + @lombok.Data + public static class Data { + @JsonProperty("Id") + private String Id; + @JsonProperty("ReportID") + private String ReportID; + @JsonProperty("TransactionAmount") + private String TransactionAmount; + @JsonProperty("ItemId") + private String ItemId; + @JsonProperty("Status") + private Integer Status; + @JsonProperty("TaskID") + private String TaskID; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatCallback.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatCallback.java new file mode 100644 index 0000000..a704eef --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatCallback.java @@ -0,0 +1,11 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +@Data +public class WeChatCallback { + private String requestId; + //审批状态:1-审批中;2-已同意;3-已驳回;4-已转审 + private String action; + private String approvalMsg; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceBody.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceBody.java new file mode 100644 index 0000000..f0a0de6 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceBody.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class WeChatInvoiceBody { + private String createUser; + private String approverUser; + private String reportName; + private Long reportCreateDate; //单据日期(yyyy-MM-dd) + private String reportMoney; + private List reportDetail = new ArrayList<>(); +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceDetail.java b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceDetail.java new file mode 100644 index 0000000..e53ec9f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/concur/WeChatInvoiceDetail.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.domain.entity.concur; + +import lombok.Data; + +@Data +public class WeChatInvoiceDetail { + private Long detailDate; //明细日期(yyyy-MM-dd) + private String detailMoney; + private String detailPurpose; //明细用途 + private String detailType; //明细类型 + private String detailRate; //明细费率 + private String detailHasExceptions; //明细是否例外 + private String detailImg; //明细图片 +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/hly/FormItem.java b/src/main/java/com/cmsen/ticket/domain/entity/hly/FormItem.java new file mode 100644 index 0000000..6cf078e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/hly/FormItem.java @@ -0,0 +1,33 @@ +package com.cmsen.ticket.domain.entity.hly; + +import lombok.Data; + +import java.util.List; + +@Data +public class FormItem { + private Integer id; + private String value; + private String valueName; + private String pid; + private String isDel; + private String selectName; + private String category; + private Integer required; + private Integer sort; + private String type; + private String defaultValue; // 待替换字段 + private Integer kind; + private Integer exPid; + private String childId; + private List child; + private List subs; + private String binding; + private String targetId; + private Boolean editAble; + private List pickArr; + private List pickerFields; + private List childField; + private List mutiIndex; + private List> mutiArray; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/hly/ReportReceive.java b/src/main/java/com/cmsen/ticket/domain/entity/hly/ReportReceive.java new file mode 100644 index 0000000..ed7b27c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/hly/ReportReceive.java @@ -0,0 +1,98 @@ +package com.cmsen.ticket.domain.entity.hly; +import lombok.Data; + +import java.util.Date; +import java.util.List; + + +@Data +public class ReportReceive { + + private static final long serialVersionUID = 1L; + private String uuid; // uuid + //private String entryId; // entry_id + private String loginId; // login_id + private String CreatedBy; + + private String ext09; // ext09 + private String ext10; // 单据号 + private String ext11; // ext11 + private String ext12; // ext12 + private String ext13; // ext13 + private String ext14; // ext14 + private String ext15; // ext15 + private String ext16; // ext16 + private String ext17; // ext17 + private String ext18; // ext18 + private String ext19; // ext19 + private String ext20; // ext20 + + private String ext41; // ext41 + private String ext42; // ext42 + + private Date createDate; + + private List data; + + + @Data + public class ReportReceiveLine { + + private String BZ; // 备注 + private String FYDL; // fydl + private String DD; // 地点 + private String FYXL; // fyxl + //private String ReportID; // 报销单id + private String BSJE; // 报税金额 + private String FYRQ; // 费用日期 + private String Currency; // 币种 + private String GYS; // 供应商 + private String type; // type + private String Id; + private String tax; // 税率 + private String purpose; // purpose + private String ext01; // ext01 + private String ext02; // ext02 + private String ext03; // ext03 + private String ext04; // ext04 + private String ext05; // ext05 + private String ext06; // ext06 + private String ext07; // ext07 + private String ext08; // ext08 + + private String ext21; // ext21 + private String ext22; // ext22 + private String ext23; // ext23 + private String ext24; // ext24 + private String ext25; // ext25 + private String ext26; // ext26 + private String ext27; // ext27 + private String ext28; // ext28 + private String ext29; // ext29 + private String ext30; // ext30 + private String ext31; // ext31 + private String ext32; // ext32 + private String ext33; // ext33 + private String ext34; // ext34 + private String ext35; // ext35 + private String ext36; // ext36 + private String ext37; // ext37 + private String ext38; // ext38 + private String ext39; // ext39 + private String ext40; // ext40 + + public String getType() { + switch (type) { + case "R": + return "1"; + case "T": + return "2"; + case "N": + return "0"; + default: + return ""; + } + } + } + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/hly/T10ReportReceive.java b/src/main/java/com/cmsen/ticket/domain/entity/hly/T10ReportReceive.java new file mode 100644 index 0000000..c3d0bc0 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/hly/T10ReportReceive.java @@ -0,0 +1,91 @@ +package com.cmsen.ticket.domain.entity.hly; +import lombok.Data; + +import java.util.Date; + + +@Data +public class T10ReportReceive { + + private static final long serialVersionUID = 1L; + private String id; + private String uuid; // uuid + private String entryId; // entry_id + private String loginId; // login_id + private String bz; // 备注 + private String fydl; // fydl + private String dd; // 地点 + private String fyxl; // fyxl + private String reportId; // 报销单id + private String bsje; // 报税金额 + private String currency; // 币种 + private String gys; // 供应商 + private String tax; // 税率 + private String type; // type + private String ext01; // ext01 + private String ext02; // ext02 + private String ext03; // ext03 + private String ext04; // ext04 + private String ext05; // ext05 + private String ext06; // ext06 + private String ext07; // ext07 + private String ext08; // ext08 + private String ext09; // ext09 + private String ext10; // 单据号 + private String ext11; // ext11 + private String ext12; // ext12 + private String ext13; // ext13 + private String ext14; // ext14 + private String ext15; // ext15 + private String ext16; // ext16 + private String ext17; // ext17 + private String ext18; // ext18 + private String ext19; // ext19 + private String ext20; // ext20 + private String ext21; // ext21 + private String ext22; // ext22 + private String ext23; // ext23 + private String ext24; // ext24 + private String ext25; // ext25 + private String ext26; // ext26 + private String ext27; // ext27 + private String ext28; // ext28 + private String ext29; // ext29 + private String ext30; // ext30 + private String ext31; // ext31 + private String ext32; // ext32 + private String ext33; // ext33 + private String ext34; // ext34 + private String ext35; // ext35 + private String ext36; // ext36 + private String ext37; // ext37 + private String ext38; // ext38 + private String ext39; // ext39 + private String ext40; // ext40 + private String ext41; // ext41 + private String ext42; // ext42 + private String ext43; // ext43 + private String ext44; // ext44 + private String ext45; // ext45 + private String ext46; // ext46 + private String ext47; // ext47 + private String ext48; // ext48 + private String ext49; // ext49 + private String ext50; // ext50 + private String receiveStatus; // 接收状态 + private String receiveType; // 接收类型 + private String pdfToLocal; // pdf是否已下载到本地0否1是 + private String pdfLocalUrl; // pdf的本地路径地址 + private String fjToLocal; // ext03附件下载 + private String fjLocalUrl; // ext03附件本地地址 + private String rebuildPdfUrl; // pdf和fj重组后的pdf路径 + private String pdfToConcur; // pdf是否已上传concur 0否 1是 + private String dataToConcur; // data_to_concur + private String fyrq; // 费用日期 + private String purpose; // purpose + private Date updateDate; + private Date createDate; + private String createBy; + private String updateBy; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/ComplianceCheck.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/ComplianceCheck.java new file mode 100644 index 0000000..a3d7f55 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/ComplianceCheck.java @@ -0,0 +1,107 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ComplianceCheck implements Serializable { + private static final long serialVersionUID = 1L; + @ExcelIgnore + private Integer id; + //报告ID + @ExcelProperty(value = "单据号", index = 1) + private String reportId; + //检查结果 0 一致 1 不一致 + @ExcelIgnore + private Integer checkStatus; + + @ExcelProperty(value = "检查状态", index = 0) + private String checkStatusStr; + //提交人 + @ExcelProperty(value = "提交人", index = 2) + private String submitter; + //更新时间 + @ExcelProperty(value = "更新时间", index = 3) + private String updateTime; + //报销金额 + @ExcelProperty(value = "报销金额", index = 4) + private String reimbursement; + //发票类型 + @ExcelProperty(value = "发票类型", index = 5) + private String invoiceType; + //发票日期 + @ExcelProperty(value = "发票日期", index = 6) + private String invoiceDate; + //发票号码 + @ExcelProperty(value = "发票号码", index = 7) + private String invoiceNumber; + //检查结果 0未触发异常 1 有警告信息 2 有错误信息 + @ExcelIgnore + private Integer checkResult; + @ExcelProperty(value = "校验结果", index = 8) + private String checkResultStr; + //校验信息 + @ExcelProperty(value = "异常原因", index = 9) + private String errMsg; + //处理结果 + @ExcelProperty(value = "处理结果", index = 10) + private String dealResult; + //数据来源 + @ExcelProperty(value = "数据来源", index = 11) + private String dataSource; + //创建时间 + @ExcelIgnore + private String createTime; + + @ExcelIgnore + private String dealType; + @ExcelIgnore + private String dealIdea; + + @ExcelIgnore + private Integer originalId; + @ExcelIgnore + private String entryId; + @ExcelIgnore + private String invoiceMoney; + + @ExcelIgnore + private String expenseTypeName; + @ExcelIgnore + private String currencyCode; + @ExcelIgnore + private String ext40;//预检信息 + @ExcelIgnore + private int compCheck;//特殊标记 + + public String getCheckStatusStr() { + if (checkStatus == null) return ""; + switch (checkStatus) { + case 0: + return "未触发异常"; + case 1: + return "有警告信息"; + case 2: + return "有错误信息"; + default: + return ""; + } + } + + public String getCheckResultStr() { + if (checkResult == null) return ""; + switch (checkResult) { + case 0: + return "未触发异常"; + case 1: + return "有警告信息"; + case 2: + return "有错误信息"; + default: + return ""; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/DeductionConfig.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/DeductionConfig.java new file mode 100644 index 0000000..9edf2e9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/DeductionConfig.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @TableName deduction_config + */ +@Data +public class DeductionConfig implements Serializable { + private static final long serialVersionUID = 1L; + /** + * + */ + private Integer id; + /** + * 发票类型 + */ + private String invoiceType; + /** + * 费用类型(codes) + */ + private String expenseTypes; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImage.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImage.java new file mode 100644 index 0000000..964a6ad --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImage.java @@ -0,0 +1,180 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.common.util.StringUtil; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 影像查询主表 + * + * @TableName invoice_image + */ +@Data +public class InvoiceImage implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelIgnore + private Integer id; + /** + * 源主键 + */ + @ExcelIgnore + private String originalId; + /** + * 来源 + */ + @ExcelIgnore + private String source; + /** + * 发票代码 + */ + @ExcelProperty(value = "发票代码") + private String code; + /** + * 发票号码 + */ + @ExcelProperty(value = "发票号码") + private String number; + /** + * 开票日期 + */ + @ExcelProperty(value = "发票日期") + private String date; + + @ExcelProperty(value = "金额") + private String pretaxAmount; + + @ExcelProperty(value = "总金额") + private String total; + + @ExcelProperty(value = "税额") + private String tax; + + @ExcelIgnore + private String checkCode; + + @ExcelProperty(value = "销售方名称") + private String seller; + + @ExcelProperty(value = "销售方税号") + private String sellerTaxId; + /** + * 消费类型 + */ + @ExcelProperty(value = "消费类型") + private String kind; + + @ExcelProperty(value = "购买方税号") + private String buyerTaxId; + + @ExcelProperty(value = "购买方名称") + private String buyer; + + @ExcelProperty(value = "发票内容") + private String itemNames; + + /*@ExcelProperty(value = "NPO")*/ + private String po; + + @ExcelProperty(value = "付款日期") + private String paidDate; + + @ExcelProperty(value = "创建日期") + private Date createDate; + /** + * 操作人 + */ + @ExcelProperty(value = "提交人") + private String operator; + + @ExcelProperty(value = "报销单号码") + private String reportId; + + @ExcelProperty(value = "报销人") + private String reportOwner; + + @ExcelProperty(value = "报销单金额") + private String reportMoney; + + @ExcelIgnore + private Integer status; + + @ExcelIgnore + private String imgUri; + + @ExcelIgnore + private String originalUri; + + @ExcelIgnore + private String fileName; + + @ExcelIgnore + private String downloadUri; + + @ExcelIgnore + private String currency; + + @ExcelProperty(value = "发票类型") + private String invoiceType; + + @ExcelIgnore + private String passenger; + + @ExcelIgnore + private String seatType; + + @ExcelIgnore + private String startStation; + + @ExcelIgnore + private String endStation; + + @ExcelIgnore + private Integer deductStatus; + + @ExcelIgnore + private String taxRate; + + @ExcelIgnore + private Boolean validStatus; + + @ExcelIgnore + private Integer expenseTypeId; + @ExcelIgnore + private String entryId; + @ExcelIgnore + private String reimbursementAmount; + + @ExcelIgnore + private String postedAmount; + + @ExcelIgnore + private String dataJson; + + @ExcelIgnore + private String employeeName; + @ExcelIgnore + private String reportTotal; + + @ExcelIgnore + private String ext01; + + public String getFileName() { + if (StringUtil.isNotEmpty(this.originalUri)) { + return this.checkCode + "_" + this.number + this.originalUri.substring(this.originalUri.lastIndexOf(".")); + } + return StringUtil.isEmpty(this.imgUri) ? "null" : this.checkCode + "_" + this.number + this.imgUri.substring(this.imgUri.lastIndexOf(".")); + } + + public String getDownloadUri() { + if (StringUtil.isNotEmpty(this.originalUri)) { + return this.originalUri; + } + return this.imgUri; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImg.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImg.java new file mode 100644 index 0000000..46de206 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceImg.java @@ -0,0 +1,189 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.common.util.StringUtil; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 影像查询主表 非App + * + * @TableName invoice_img + */ +@Data +public class InvoiceImg implements Serializable { + + private static final long serialVersionUID = 1L; + + @ExcelIgnore + private Integer id; + /** + * 源主键 + */ + @ExcelIgnore + private String originalId; + /** + * 来源 + */ + @ExcelIgnore + private String source; + /** + * 发票代码 + */ + @ExcelProperty(value = "发票代码") + private String code; + /** + * 发票号码 + */ + @ExcelProperty(value = "发票号码") + private String number; + /** + * 开票日期 + */ + @ExcelProperty(value = "发票日期") + private String date; + + @ExcelProperty(value = "金额") + private String pretaxAmount; + + @ExcelProperty(value = "总金额") + private String total; + + @ExcelProperty(value = "税额") + private String tax; + + @ExcelIgnore + private String checkCode; + + @ExcelProperty(value = "销售方名称") + private String seller; + + @ExcelProperty(value = "销售方税号") + private String sellerTaxId; + /** + * 消费类型 + */ + @ExcelProperty(value = "消费类型") + private String kind; + + @ExcelProperty(value = "购买方税号") + private String buyerTaxId; + + @ExcelProperty(value = "购买方名称") + private String buyer; + + @ExcelProperty(value = "发票内容") + private String itemNames; + + /*@ExcelProperty(value = "NPO")*/ + private String po; + + @ExcelProperty(value = "付款日期") + private String paidDate; + + @ExcelProperty(value = "创建日期") + private Date createDate; + /** + * 操作人 + */ + @ExcelProperty(value = "提交人") + private String operator; + + @ExcelProperty(value = "报销单号码") + private String reportId; + + @ExcelProperty(value = "报销人") + private String reportOwner; + + @ExcelProperty(value = "报销单金额") + private String reportMoney; + + @ExcelIgnore + private Integer status; + + @ExcelIgnore + private String imgUri; + + @ExcelIgnore + private String originalUri; + + @ExcelIgnore + private String fileName; + + @ExcelIgnore + private String downloadUri; + + @ExcelIgnore + private String currency; + + @ExcelProperty(value = "发票类型") + private String invoiceType; + + @ExcelIgnore + private String passenger; + + @ExcelIgnore + private String seatType; + + @ExcelIgnore + private String startStation; + + @ExcelIgnore + private String endStation; + + @ExcelIgnore + private Integer deductStatus; + + @ExcelIgnore + private String taxRate; + + @ExcelIgnore + private Boolean validStatus; + + @ExcelIgnore + private Integer expenseTypeId; + @ExcelIgnore + private String entryId; + @ExcelIgnore + private String reimbursementAmount; + + @ExcelIgnore + private String postedAmount; + + @ExcelIgnore + private String dataJson; + + @ExcelIgnore + private String employeeName; + @ExcelIgnore + private String reportTotal; + + @ExcelIgnore + private String ext01; + + @ExcelIgnore + private String ext02; + @ExcelIgnore + private String ext03; + @ExcelIgnore + private String ext04; + @ExcelIgnore + private String ext05; + + public String getFileName() { + if (StringUtil.isNotEmpty(this.originalUri)) { + return this.reportId + "_" + this.number + this.originalUri.substring(this.originalUri.lastIndexOf(".")); + } + return StringUtil.isEmpty(this.imgUri) ? "null" : this.reportId + "_" + this.number + this.imgUri.substring(this.imgUri.lastIndexOf(".")); + } + + public String getDownloadUri() { + if (StringUtil.isNotEmpty(this.originalUri)) { + return this.originalUri; + } + return this.imgUri; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceKindMatching.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceKindMatching.java new file mode 100644 index 0000000..7712cc3 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/InvoiceKindMatching.java @@ -0,0 +1,35 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * invoice_kind_matching + * @author + */ +@Data +public class InvoiceKindMatching implements Serializable { + /** + * 主键 + */ + private Integer id; + + /** + * 内容关键字 + */ + private String content; + + /** + * 类型 + */ + private String kind; + + /** + * 是否可用 + */ + private String active; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeet.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeet.java new file mode 100644 index 0000000..3a0bb7f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeet.java @@ -0,0 +1,86 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * signin_meet + * @author + */ +@Data +public class SigninMeet implements Serializable { + private Integer id; + + /** + * SIGNIN表ID + */ + private Integer signinId; + + /** + * ReqId + */ + private String reqId; + + /** + * 会议唯一ID + */ + private String meetId; + + /** + * 会议号码 + */ + private String meetCode; + + /** + * 主题 + */ + private String subject; + + /** + * 预定会议开始时间 + */ + private Date statrTime; + + /** + * 预定会议结束时间 + */ + private Date endTime; + + /** + * 当前参会总人次 + */ + private String totalCount; + + /** + * 创建时间 + */ + private Date createDate; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + + private String ext06; + + private String ext07; + + private String ext08; + + private String ext09; + + private String ext10; + + private List attends; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeetAttend.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeetAttend.java new file mode 100644 index 0000000..c2604cf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SigninMeetAttend.java @@ -0,0 +1,153 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * signin_meet_attend + * @author + */ +@Data +public class SigninMeetAttend implements Serializable { + private Integer id; + + /** + * signin_meet表ID + */ + private Integer pid; + + /** + * 参会者用户ID + */ + private String userId; + + /** + * 当场会议的用户临时ID + */ + private String msOpenId; + + /** + * 用户的身份 ID + */ + private String uuid; + + /** + * 已授权用户的 ID + */ + private String openId; + + /** + * 入会用户名 + */ + private String userName; + + /** + * 是否是企业内部成员 + */ + private String isInUser; + + /** + * 参会者手机号 + */ + private String phone; + + /** + * 参会者加入会议时间 + */ + private Date joinTime; + + /** + * 参会者加入离开时间 + */ + private Date leftTime; + + /** + * 用户的终端设备类型 + */ + private Integer instanceId; + + /** + * 用户角色 + */ + private Integer userRole; + + /** + * 用户IP + */ + private String ip; + + /** + * 用户地理位置 + */ + private String location; + + /** + * 用户连接方式 + */ + private String linkType; + + /** + * 入会方式 + */ + private Integer joinType; + + /** + * 网络类型 + */ + private String net; + + /** + * 客户端版本 + */ + private String appVersion; + + /** + * 麦克风状态 + */ + private String audioState; + + /** + * 摄像头状态 + */ + private String avideoState; + + /** + * 屏幕共享状态 + */ + private String screenSharedState; + + /** + * 专属字段 + */ + private String customerData; + + /** + * 创建时间 + */ + private Date createDate; + + private String ext01;//姓名 + + private String ext02;//手机号 + + private String ext03;//医院 + + private String ext04;//科室 + + private String ext05; + + private String ext06; + + private String ext07; + + private String ext08; + + private String ext09; + + private String ext10; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatching.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatching.java new file mode 100644 index 0000000..e460efc --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatching.java @@ -0,0 +1,220 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.common.util.StringUtil; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * supplier_order_item_matching + * + * @author + */ +@Data +public class SupplierOrderItemMatching implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键ID + */ + @ExcelIgnore + private Long id; + /** + * corporate_invoice id + */ + @ExcelIgnore + private String invoiceId; + /** + * corporate_invoice_items id + */ + @ExcelIgnore + private String itemId; + /** + * supplier_order id + */ + @ExcelIgnore + private Integer orderId; + /** + * 名称 + */ + @ExcelIgnore + private String name; + /** + * 规格型号 + */ + @ExcelIgnore + private String specification; + /** + * 单位 + */ + @ExcelIgnore + private String unit; + /** + * 数量 + */ + @ExcelIgnore + private String quantity; + + @ExcelIgnore + private String frozenQuantity; + /** + * 价格 + */ + @ExcelIgnore + private BigDecimal price; + /** + * 金额 + */ + @ExcelIgnore + private BigDecimal total; + /** + * 税额 + */ + @ExcelIgnore + private BigDecimal tax; + /** + * 税率 + */ + @ExcelIgnore + private String taxRate; + + /** + * PO查询 2022/5/26 + */ + @ExcelProperty(value = "公司名称") + private String companyName;//公司名称 + @ExcelProperty(value = "发票类型") + private String invoiceType;//发票类型 + @ExcelProperty(value = "发票供应商") + private String invioceSupplier;//发票供应商 + @ExcelProperty(value = "付款供应商") + private String paySupplier;//付款供应商 + @ExcelProperty(value = "发票代码") + private String invoiceCode;//发票代码 + @ExcelProperty(value = "发票号码") + private String invoiceNumber;//发票号码 + @ExcelProperty(value = "发票日期") + private String invoiceDate;//发票日期 + @ExcelProperty(value = "金额") + private String pretaxAmount;//金额 + @ExcelProperty(value = "税额") + private String taxAmount;//税额 + @ExcelProperty(value = "总金额") + private String totalAmount;//总金额 + + @ExcelIgnore + private String imgUri;//图片地址 + + public String getFileName() { + return StringUtil.isEmpty(this.imgUri) ? "null" : this.invoiceCode + "_" + this.invoiceNumber + this.imgUri.substring(this.imgUri.lastIndexOf(".")); + } + + public String getDownloadUri() { + return this.imgUri; + } + + /** + * 匹配状态 + */ + @ExcelIgnore + private Integer matchingStatus; + @ExcelIgnore + private String matchingStatusName; + @ExcelIgnore + private String receiveNo; + @ExcelIgnore + private BigDecimal deductionAmount; + @ExcelIgnore + private BigDecimal deductionTax; + @ExcelIgnore + private String deductionTaxRate; + @ExcelIgnore + private String orderNo; + /** + * 收货金额 + */ + @ExcelIgnore + private BigDecimal receivedTotal; + /** + * 物料號 + */ + @ExcelIgnore + private String itemNo; + + @ExcelIgnore + private Boolean priceHasUpdated; + + @ExcelIgnore + private BigDecimal difference; + @ExcelIgnore + private String cId; + @ExcelIgnore + private String cNumber; + @ExcelIgnore + private String cCode; + @ExcelIgnore + private String tCode; + @ExcelIgnore + private String matchingId; + + @ExcelIgnore + private String code; + @ExcelIgnore + private String number; + @ExcelIgnore + private String imgUrl; + @ExcelIgnore + private String sourceId; + @ExcelIgnore + private String ticketCode; + + @ExcelIgnore + private String expenseType; + @ExcelIgnore + private String currency; + @ExcelIgnore + private String amount; + + /** + * 操作人 + */ + @ExcelIgnore + private String createBy; + + /** + * 操作时间 + */ + @ExcelIgnore + private Date createDate; + @ExcelIgnore + private String ext01; + @ExcelIgnore + private String ext02; + @ExcelIgnore + private String ext03; + @ExcelIgnore + private String ext04; + @ExcelIgnore + private String ext05; + + public String getMatchingStatusName() { + if (matchingStatus == null) { + return null; + } + switch (matchingStatus) { + case 1: + return "处理中"; + case 2: + return "已完成"; + case 3: + return "ERP匹配"; + case 4: + return "发送错误"; + default: + return "匹配中"; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatchingReport.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatchingReport.java new file mode 100644 index 0000000..c9294cd --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SupplierOrderItemMatchingReport.java @@ -0,0 +1,32 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * supplier_order_item_matching + * + * @author + */ +@Data +public class SupplierOrderItemMatchingReport implements Serializable { + private static final long serialVersionUID = 1L; + + @ExcelProperty(value = "供应商名称",index = 0) + private String supplierName; + @ExcelProperty(value = "PO号",index = 1) + private String orderNo; + @ExcelProperty(value = "发票号",index = 2) + private String invoiceNumber; + @ExcelProperty(value = "成本中心",index = 3) + private String costcenter; + @ExcelProperty(value = "SKU",index = 5) + private String itemNo; + @ExcelProperty(value = "虚拟物料金额",index = 6) + private String totalAmount; + @ExcelProperty(value = "成本中心名称",index = 4) + private String costcenterName; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysConfig.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysConfig.java new file mode 100644 index 0000000..d7bdcba --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysConfig.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_config + * + * @author + */ +@Data +public class SysConfig implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String name; + private String code; + private String value; + private String desc; + private Integer client; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysEmp.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysEmp.java new file mode 100644 index 0000000..531f452 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysEmp.java @@ -0,0 +1,107 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * sys_emp + * @author + */ +@Data +public class SysEmp implements Serializable { + private Long id; + + /** + * 用户id + */ + private String userId; + + /** + * 编号-工号 + */ + private String workCode; + + /** + * 姓名 + */ + private String lastName; + + /** + * 职级 + */ + private String jobLevel; + + /** + * 分部ID + */ + private String subCompanyId; + + /** + * 分部 + */ + private String subCompany; + + /** + * 部门ID + */ + private String departmaentId; + + /** + * 部门 + */ + private String departmaent; + + /** + * 所属行业ID + */ + private String subDepartmaentId; + + /** + * 所属行业 + */ + private String subDepartmaent; + + private Boolean isDel; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateDate; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + + private String email; + + private int orgId; + + private String vendorType; + + private static final long serialVersionUID = 1L; + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysLogo.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysLogo.java new file mode 100644 index 0000000..58519ff --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysLogo.java @@ -0,0 +1,60 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_logo + * @author + */ +@Data +public class SysLogo implements Serializable { + private Long id; + + /** + * 系统名称 + */ + private String sysName; + + /** + * PC的logo + */ + private String pcLogo; + + /** + * 小程序底图 + */ + private String appBase; + + /** + * 小程序的logo + */ + private String appLogo; + + /** + * 0为未删除,1为已删除,默认为0 + */ + private String isDel; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + private String ssoUrl; + + /** + * 备注 + */ + private String remark; + + private String typeStr; + private static final long serialVersionUID = 1L; + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysMenu.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysMenu.java new file mode 100644 index 0000000..5bbdfb7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysMenu.java @@ -0,0 +1,37 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * sys_menu + * + * @author + */ +@Data +public class SysMenu implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private Integer pid; + private String name; + private String title; + private String routeName; + private String method; + private String uri; + private String tag; + private Short status; + private Integer sort; + private String permission; + /** + * 是否是按钮,1是,0否 + */ + private Integer isButton; + /** + * 图片路径 + */ + private String icon; + private Boolean isChecked = true; + private List menu; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOaDept.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOaDept.java new file mode 100644 index 0000000..e5fda9b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOaDept.java @@ -0,0 +1,67 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * sys_oa_dept + * @author + */ +@Data +public class SysOaDept implements Serializable { + private Long id; + + private String code; + + /** + * 类型 + */ + private String departmaentId; + + /** + * 用户ID + */ + private String subCompanyId; + + /** + * REQ_ID + */ + private String subDepartmaentId; + + private Boolean isDel; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateDate; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOrg.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOrg.java new file mode 100644 index 0000000..965d917 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysOrg.java @@ -0,0 +1,46 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.cmsen.common.http.response.Validation; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * sys_org + * + * @author + */ +@Data +public class SysOrg implements Serializable { + private static final long serialVersionUID = 1L; + @NotNull(message = "required", groups = {Validation.Update.class}) + private Integer id; + @NotNull(message = "required", groups = {Validation.Create.class}) + private String name; + private String code; + private Integer pid; + private Integer client; + private Integer sort; + private Date createTime; + private Integer level; + private Integer companyId; + private Boolean isBusiness; + + private String orgName; + + private List child; + + private String ledger; + + private String costcenter; + private String type; + private String pName; + private String companyName; + private Integer userId; + + private String taxNo; + private String remark; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRole.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRole.java new file mode 100644 index 0000000..bcec7aa --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRole.java @@ -0,0 +1,22 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * sys_role + * + * @author + */ +@Data +public class SysRole implements Serializable { + private static final long serialVersionUID = 1L; + private Integer id; + private String name; + private String roleType; + private String homePage; + private Short status; + private List menus; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRoleMenu.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRoleMenu.java new file mode 100644 index 0000000..59f3512 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysRoleMenu.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_role_menu + * + * @author + */ +@Data +public class SysRoleMenu implements Serializable { + private static final long serialVersionUID = 1L; + private Integer roleId; + private Integer menuId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUser.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUser.java new file mode 100644 index 0000000..8cda1da --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUser.java @@ -0,0 +1,96 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.cmsen.common.http.response.Validation; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * sys_user + * + * @author + */ +@Data +public class SysUser implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + @NotNull(message = "required", groups = {Validation.Update.class}) + private Integer id; + /** + * 用户账号 + */ + @NotBlank(message = "required", groups = {Validation.Create.class}) + private String name; + /** + * 用户密码 + */ + @JsonIgnore + private String pwd; + /** + * 用户年龄 + */ + private Integer age; + /** + * 用户邮箱地址 + */ + private String email; + /** + * 用户联系电话 + */ + private String tel; + /** + * 用户联系地址 + */ + private String address; + /** + * 创建时间 + */ + private String createTime; + /** + * 0代表启用,1代表未启用,默认0(启用) + */ + private Integer isEnable; + private Integer inActive; + /** + * 备注 + */ + private String note; + /** + * 用户姓名 + */ + private String userName; + /** + * 组织 + */ + private Integer orgId; + private Integer role; + + /** + * 角色名 + */ + private String roleName; + private String orgName; + /** + * 1代表强制修改密码,默认2不修改 + */ + private String pwdFlag; + private String lastUpdateTime; + + private String companyCode; + private String companyName; + private String orgCode; + + //工号 + private String jobNo; + + private String homePage; + private String roleType; + + private Integer client; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUserRole.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUserRole.java new file mode 100644 index 0000000..fdabc52 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/SysUserRole.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sys_user_role + * + * @author + */ +@Data +public class SysUserRole implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键ID + */ + private Integer id; + /** + * 用户表主键ID + */ + private Integer userId; + /** + * 角色表主键ID + */ + private Integer roleId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportLine.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportLine.java new file mode 100644 index 0000000..4c0a07c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportLine.java @@ -0,0 +1,279 @@ +package com.cmsen.ticket.domain.entity.manager; + + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * t_10_report_line + * + * @author + */ +@Data +//@EqualsAndHashCode(callSuper = true) +public class T10ReportLine implements Serializable { + private static final long serialVersionUID = 1L; + /** + * UUID + */ + private String id; + /** + * 行ID + */ + private String reportEntryId; + /** + * 报销单Id + */ + private String reportId; + /** + * 主表ID + */ + private String mainId; + /** + * 类型ID + */ + private String expenseTypeId; + /** + * 类型名称 + */ + private String expenseTypeName; + /** + * 支出类别 + */ + private String spendCategory; + /** + * 付款类型 + */ + private String paymentTypeCode; + /** + * 交易日期 + */ + private String transactionDate; + /** + * 付款类型名称 + */ + private String paymentTypeName; + /** + * 币种名称 + */ + private String transactionCurrencyName; + /** + * 费率 + */ + private String exchangeRate; + /** + * 行金额 + */ + private String transactionMoney; + /** + * 过账金额 + */ + private String postedAmount; + /** + * 审批金额 + */ + private String approvedAmount; + /** + * 费用原因 + */ + private String businessPurpose; + /** + * 供应说明 + */ + private String vendorDescription; + /** + * 所在地 + */ + private String locationName; + /** + * 详细地址 + */ + private String locationSubdivision; + /** + * 所在国家 + */ + private String locationCountry; + /** + * 组织1 + */ + private String orgUnit1; + /** + * 组织2 + */ + private String orgUnit2; + /** + * 组织3 + */ + private String orgUnit3; + /** + * 组织4 + */ + private String orgUnit4; + /** + * 组织5 + */ + private String orgUnit5; + /** + * 组织6 + */ + private String orgUnit6; + /** + * 行图片ID + */ + private String entryImageId; + /** + * 是否Vat + */ + private String hasVat; + /** + * 是否备注 + */ + private String hasComments; + /** + * 备注计数 + */ + private String commentCount; + /** + * 是否项目 + */ + private String isItemized; + /** + * 是否例外 + */ + private String hasExceptions; + /** + * 是否个人 + */ + private String isPersonal; + /** + * 是否参与人 + */ + private String hasAttendees; + /** + * 是否分配 + */ + private String hasAllocation; + /** + * 交易币别 + */ + private String transactionCurrencyCode; + private String custom1; + private String custom2; + private String custom3; + private String custom4; + private String custom5; + private String custom6; + private String custom7; + private String custom8; + private String custom9; + private String custom10; + private String custom11; + private String custom12; + private String custom13; + private String custom14; + private String custom15; + private String custom16; + private String custom17; + private String custom18; + private String custom19; + private String custom20; + private String custom21; + private String custom22; + private String custom23; + private String custom24; + private String custom25; + private String custom26; + private String custom27; + private String custom28; + private String custom29; + private String custom30; + private String custom31; + private String custom32; + private String custom33; + private String custom34; + private String custom35; + private String custom36; + private String custom37; + private String custom38; + private String custom39; + private String custom40; + /** + * 属性1 + */ + private String attributer1; + /** + * 属性2 + */ + private String attributer2; + /** + * 属性3 + */ + private String attributer3; + /** + * 属性4 + */ + private String attributer4; + /** + * 属性5 + */ + private String attributer5; + /** + * 属性6 + */ + private String attributer6; + /** + * 属性7 + */ + private String attributer7; + /** + * 属性8 + */ + private String attributer8; + /** + * 属性9 + */ + private String attributer9; + /** + * 属性10 + */ + private String attributer10; + /** + * 创建者 + */ + private String createBy; + /** + * 创建时间 + */ + private Date createDate; + /** + * 更新者 + */ + private String updateBy; + /** + * 更新时间 + */ + private Date updateDate; + /** + * 备注信息 + */ + private String remarks; + /** + * ocr 发票部分字段 + */ + private String expenseReprotsName; + private BigDecimal invoiceMoney; + private String tax; + private String taxRate; + private String invoiceType; + private String invoiceDate; + + private String ext40;//预检信息 + private String filesType;//所需附件 + + private String businessType; + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMain.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMain.java new file mode 100644 index 0000000..6f652c2 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMain.java @@ -0,0 +1,340 @@ +package com.cmsen.ticket.domain.entity.manager; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * t_10_report_main + * + * @author + */ +@Data +public class T10ReportMain implements Serializable { + private static final long serialVersionUID = 1L; + /** + * UUID + */ + @ExcelIgnore + private String id; + /** + * 创建人ID + */ + @ExcelProperty(value = "提交人", index = 5) + private String userLoginId; + /** + * 创建人 + */ + @ExcelProperty(value = "姓名", index = 15) + private String employeeName; + /** + * 报销单id + */ + @ExcelProperty(value = "报告ID", index = 0) + private String reportId; + /** + * 报销单Key + */ + @ExcelProperty(value = "报告Key", index = 14) + private String reportKey; + /** + * 名称 + */ + @ExcelProperty(value = "报告名称", index = 1) + private String reportName; + /** + * 用途 + */ + @ExcelIgnore + private String purpose; + /** + * 报销单日期 + */ + @ExcelIgnore + private String reportDate; + /** + * 报销单创建日期 + */ + @ExcelIgnore + private String creationDate; + /** + * 提交日期 + */ + @ExcelProperty(value = "提交日期", index = 11) + private String sumitDate; + /** + * 付款日期 + */ + @ExcelProperty(value = "付款日期", index = 10) + private String paidDate; + /** + * 币种 + */ + @ExcelIgnore + private String currencyCode; + /** + * 金额 + */ + @ExcelIgnore + private String reportTotal; + /** + * 个人开支 + */ + @ExcelIgnore + private String personalExpensees; + /** + * 应付职工款 + */ + @ExcelIgnore + private String amountDueEmployee; + /** + * 应付工资卡金额 + */ + @ExcelIgnore + private String amountDueCompanyCard; + /** + * 索赔总额 + */ + @ExcelIgnore + private String totalClaimedAmount; + /** + * 审批金额 + */ + @ExcelIgnore + private String totalApprovedAmount; + /** + * 审批状态 + */ + @ExcelProperty(value = "报告状态", index = 7) + private String approvalStatusCode; + /** + * 审批状态名称 + */ + @ExcelProperty(value = "审批状态", index = 8) + private String approvalStatusName; + /** + * 审批状态 + */ + @ExcelIgnore + private String paymentStatusCode; + /** + * 付款状态名称 + */ + @ExcelProperty(value = "付款状态", index = 9) + private String paymentStatusName; + /** + * 组织1 + */ + @ExcelProperty(value = "组织", index = 6) + private String orgUnit1; + /** + * 组织2 + */ + @ExcelIgnore + private String orgUnit2; + /** + * 组织3 + */ + @ExcelIgnore + private String orgUnit3; + /** + * 组织4 + */ + @ExcelIgnore + private String orgUnit4; + /** + * 组织5 + */ + @ExcelIgnore + private String orgUnit5; + /** + * 组织6 + */ + @ExcelIgnore + private String orgUnit6; + /** + * 组织名 + */ + @ExcelIgnore + private String ledgerName; + /** + * policy_id + */ + @ExcelProperty(value = "政策ID", index = 12) + private String policyId; + /** + * 是否发送返回 + */ + @ExcelIgnore + private String everSentBack; + /** + * 表头图片 + */ + @ExcelIgnore + private String reportImageUrl; + /** + * 是否异常 + */ + @ExcelIgnore + private String hasException; + /** + * 审批路径 + */ + @ExcelIgnore + private String workFlowUrl; + /** + * 审批人 + */ + @ExcelProperty(value = "当前审核人", index = 13) + private String approvalLogin; + /** + * 是否发送 + */ + @ExcelIgnore + private String isSend; + /** + * 已发送状态 + */ + @ExcelIgnore + private String sendStatus; + /** + * 审批来源(0:concur1:转审) + */ + @ExcelIgnore + private String approvalSource; + @ExcelIgnore + private String custom1; + @ExcelIgnore + private String custom2; + @ExcelIgnore + private String custom3; + @ExcelIgnore + private String custom4; + @ExcelIgnore + private String custom5; + @ExcelIgnore + private String custom6; + @ExcelIgnore + private String custom7; + @ExcelIgnore + private String custom8; + @ExcelIgnore + private String custom9; + @ExcelIgnore + private String custom10; + @ExcelIgnore + private String custom11; + @ExcelIgnore + private String custom12; + @ExcelIgnore + private String custom13; + @ExcelIgnore + private String custom14; + @ExcelIgnore + private String custom15; + @ExcelIgnore + private String custom16; + @ExcelIgnore + private String custom17; + @ExcelIgnore + private String custom18; + @ExcelIgnore + private String custom19; + @ExcelIgnore + private String custom20; + /** + * 属性1 + */ + @ExcelIgnore + private String attributer1; + /** + * 属性2 + */ + @ExcelIgnore + private String attributer2; + /** + * 属性3 + */ + @ExcelIgnore + private String attributer3; + /** + * 属性4 + */ + @ExcelIgnore + private String attributer4; + /** + * 属性5 + */ + @ExcelIgnore + private String attributer5; + /** + * 属性6 + */ + @ExcelIgnore + private String attributer6; + /** + * 属性7 + */ + @ExcelIgnore + private String attributer7; + /** + * 属性8 + */ + @ExcelIgnore + private String attributer8; + /** + * 属性9 + */ + @ExcelIgnore + private String attributer9; + /** + * 属性10 + */ + @ExcelIgnore + private String attributer10; + /** + * 创建者 + */ + @ExcelIgnore + private String createBy; + /** + * 创建时间 + */ + @ExcelIgnore + private Date createDate; + /** + * 更新者 + */ + @ExcelIgnore + private String updateBy; + /** + * 更新时间 + */ + @ExcelIgnore + private Date updateDate; + /** + * 备注信息 + */ + @ExcelIgnore + private String remarks; + + @ExcelIgnore + private List t10ReportLineList = new ArrayList<>(); + + @ExcelProperty(value = "开始日期", index = 2) + private String startdata; + @ExcelProperty(value = "结束日期", index = 3) + private String enddata; + @ExcelProperty(value = "地点", index = 4) + private String place; + @ExcelProperty(value = "处理状态", index = 16) + private String date; + + @ExcelIgnore + private String processingState; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMainExtension.java b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMainExtension.java new file mode 100644 index 0000000..2919072 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/manager/T10ReportMainExtension.java @@ -0,0 +1,54 @@ +package com.cmsen.ticket.domain.entity.manager; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * t_10_report_main_extension + * @author + */ +@Data +public class T10ReportMainExtension implements Serializable { + /** + * 报告ID + */ + private String reportId; + + /** + * 处理状态 0 待处理 1 待审核 2 通过 3 已处理 4 驳回 5 关闭 + */ + private String processingState; + + /** + * 0未同步,1已同步 + */ + private Boolean syncStatus; + + /** + * 驳回意见 + */ + private String comment; + + /** + * 处理人 + */ + private String processor; + + private Boolean isDel; + + private String ext01; + + private String ext02; + + private String ext03; + + private String ext04; + + private String ext05; + + private static final long serialVersionUID = 1L; + + private Date createDate; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcHeader.java b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcHeader.java new file mode 100644 index 0000000..fcd1180 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcHeader.java @@ -0,0 +1,266 @@ +package com.cmsen.ticket.domain.entity.pengfei; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * PengFeiNcHeader对象 invoice_pengfei_nc_header + * + * @author ruoyi + * @date 2024-01-09 + */ +public class InvoicePengfeiNcHeader +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + + private String billmaker; + + /** 币种 */ + private String corigcurrencyid; + + /** 入账金额 */ + private String ntotalorigmny; + + /** 发票号-nc号 */ + private String vbillcode; + + /** 查询发票用的invoice */ + private String pkInvoice; + + /** 返回的title */ + private String title; + + /** 组织 */ + private String pkorg; + + /** 回写备注 */ + private String vdef21; + + /** $column.columnComment */ + private Date createDate; + + /** $column.columnComment */ + private Date updateDate; + + /** 是否已发送rpa */ + private String flag; + + /** 是否已执行匹配 */ + private String status; + + /** $column.columnComment */ + private String ext01; + + /** $column.columnComment */ + private String ext02; + + /** $column.columnComment */ + private String ext03; + + /** $column.columnComment */ + private String ext04; + + public String getDbilldate() { + return dbilldate; + } + + public void setDbilldate(String dbilldate) { + this.dbilldate = dbilldate; + } + + /** $column.columnComment */ + private String dbilldate; + + public String getInvoiceNumber() { + return invoiceNumber; + } + + public void setInvoiceNumber(String invoiceNumber) { + this.invoiceNumber = invoiceNumber; + } + + private String invoiceNumber; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setCorigcurrencyid(String corigcurrencyid) + { + this.corigcurrencyid = corigcurrencyid; + } + + public String getCorigcurrencyid() + { + return corigcurrencyid; + } + public void setNtotalorigmny(String ntotalorigmny) + { + this.ntotalorigmny = ntotalorigmny; + } + + public String getNtotalorigmny() + { + return ntotalorigmny; + } + public void setVbillcode(String vbillcode) + { + this.vbillcode = vbillcode; + } + + public String getVbillcode() + { + return vbillcode; + } + public void setPkInvoice(String pkInvoice) + { + this.pkInvoice = pkInvoice; + } + + public String getPkInvoice() + { + return pkInvoice; + } + public void setTitle(String title) + { + this.title = title; + } + + public String getTitle() + { + return title; + } + public void setPkorg(String pkorg) + { + this.pkorg = pkorg; + } + + public String getPkorg() + { + return pkorg; + } + public void setVdef21(String vdef21) + { + this.vdef21 = vdef21; + } + + public String getVdef21() + { + return vdef21; + } + public void setCreateDate(Date createDate) + { + this.createDate = createDate; + } + + public Date getCreateDate() + { + return createDate; + } + public void setUpdateDate(Date updateDate) + { + this.updateDate = updateDate; + } + + public Date getUpdateDate() + { + return updateDate; + } + public void setFlag(String flag) + { + this.flag = flag; + } + + public String getFlag() + { + return flag; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setExt01(String ext01) + { + this.ext01 = ext01; + } + + public String getExt01() + { + return ext01; + } + public void setExt02(String ext02) + { + this.ext02 = ext02; + } + + public String getExt02() + { + return ext02; + } + public void setExt03(String ext03) + { + this.ext03 = ext03; + } + + public String getExt03() + { + return ext03; + } + public void setExt04(String ext04) + { + this.ext04 = ext04; + } + + public String getExt04() + { + return ext04; + } + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("corigcurrencyid", getCorigcurrencyid()) + .append("ntotalorigmny", getNtotalorigmny()) + .append("vbillcode", getVbillcode()) + .append("pkInvoice", getPkInvoice()) + .append("title", getTitle()) + .append("pkorg", getPkorg()) + .append("vdef21", getVdef21()) + .append("createDate", getCreateDate()) + .append("updateDate", getUpdateDate()) + .append("flag", getFlag()) + .append("status", getStatus()) + .append("ext01", getExt01()) + .append("ext02", getExt02()) + .append("ext03", getExt03()) + .append("ext04", getExt04()) + .toString(); + } + + + public String getBillmaker() { + return billmaker; + } + + public void setBillmaker(String billmaker) { + this.billmaker = billmaker; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcLine.java b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcLine.java new file mode 100644 index 0000000..5711430 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePengfeiNcLine.java @@ -0,0 +1,359 @@ +package com.cmsen.ticket.domain.entity.pengfei; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * PengFeiNcLine对象 invoice_pengfei_nc_line + * + * @author ruoyi + * @date 2024-01-09 + */ +public class InvoicePengfeiNcLine{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** $column.columnComment */ + private Long headerId; + + /** 备注-是否需要处理? */ + private String vmemo; + + /** 收获单据号 */ + private String vsourcecode; + + /** po号 */ + private String vordercode; + + /** Po行号 */ + private String vfirstrowno; + + /** 无税单价 */ + private String nastorigprice; + + /** 供应商发货数量 */ + private String nshouldnum; + + /** 开票数量 */ + private String nnum; + + /** 无税金额 */ + private String norigmny; + + /** 税率 */ + private String ntaxrate; + + /** 物料编码 */ + private String pkMaterialCode; + + /** 物料名称 */ + private String pkMaterialName; + + /** 物料图号 */ + private String pkMaterialGraphid; + + /** 物料规格 */ + private String pkMaterialMaterialspec; + + /** 物料型号 */ + private String pkMaterialMaterialtype; + + /** 供应商名称 */ + private String pkSupplierName; + + /** 供应商编码 */ + private String pkSupplierCode; + + /** 供应商税号 */ + private String pkSupplierTaxpayerid; + + /** $column.columnComment */ + private String csourcebid; + + /** $column.columnComment */ + private String uom; + + /** $column.columnComment */ + private String ext01; + + /** $column.columnComment */ + private String ext02; + + /** $column.columnComment */ + private String ext03; + + public String getDbilldate() { + return dbilldate; + } + + public void setDbilldate(String dbilldate) { + this.dbilldate = dbilldate; + } + + public String getPk_invoice() { + return pk_invoice; + } + + public void setPk_invoice(String pk_invoice) { + this.pk_invoice = pk_invoice; + } + + /** $column.columnComment */ + private String dbilldate; + + /** $column.columnComment */ + private String pk_invoice; + + + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setHeaderId(Long headerId) + { + this.headerId = headerId; + } + + public Long getHeaderId() + { + return headerId; + } + public void setVmemo(String vmemo) + { + this.vmemo = vmemo; + } + + public String getVmemo() + { + return vmemo; + } + public void setVsourcecode(String vsourcecode) + { + this.vsourcecode = vsourcecode; + } + + public String getVsourcecode() + { + return vsourcecode; + } + public void setVordercode(String vordercode) + { + this.vordercode = vordercode; + } + + public String getVordercode() + { + return vordercode; + } + public void setVfirstrowno(String vfirstrowno) + { + this.vfirstrowno = vfirstrowno; + } + + public String getVfirstrowno() + { + return vfirstrowno; + } + public void setNastorigprice(String nastorigprice) + { + this.nastorigprice = nastorigprice; + } + + public String getNastorigprice() + { + return nastorigprice; + } + public void setNshouldnum(String nshouldnum) + { + this.nshouldnum = nshouldnum; + } + + public String getNshouldnum() + { + return nshouldnum; + } + public void setNnum(String nnum) + { + this.nnum = nnum; + } + + public String getNnum() + { + return nnum; + } + public void setNorigmny(String norigmny) + { + this.norigmny = norigmny; + } + + public String getNorigmny() + { + return norigmny; + } + public void setNtaxrate(String ntaxrate) + { + this.ntaxrate = ntaxrate; + } + + public String getNtaxrate() + { + return ntaxrate; + } + public void setPkMaterialCode(String pkMaterialCode) + { + this.pkMaterialCode = pkMaterialCode; + } + + public String getPkMaterialCode() + { + return pkMaterialCode; + } + public void setPkMaterialName(String pkMaterialName) + { + this.pkMaterialName = pkMaterialName; + } + + public String getPkMaterialName() + { + return pkMaterialName; + } + public void setPkMaterialGraphid(String pkMaterialGraphid) + { + this.pkMaterialGraphid = pkMaterialGraphid; + } + + public String getPkMaterialGraphid() + { + return pkMaterialGraphid; + } + public void setPkMaterialMaterialspec(String pkMaterialMaterialspec) + { + this.pkMaterialMaterialspec = pkMaterialMaterialspec; + } + + public String getPkMaterialMaterialspec() + { + return pkMaterialMaterialspec; + } + public void setPkMaterialMaterialtype(String pkMaterialMaterialtype) + { + this.pkMaterialMaterialtype = pkMaterialMaterialtype; + } + + public String getPkMaterialMaterialtype() + { + return pkMaterialMaterialtype; + } + public void setPkSupplierName(String pkSupplierName) + { + this.pkSupplierName = pkSupplierName; + } + + public String getPkSupplierName() + { + return pkSupplierName; + } + public void setPkSupplierCode(String pkSupplierCode) + { + this.pkSupplierCode = pkSupplierCode; + } + + public String getPkSupplierCode() + { + return pkSupplierCode; + } + public void setPkSupplierTaxpayerid(String pkSupplierTaxpayerid) + { + this.pkSupplierTaxpayerid = pkSupplierTaxpayerid; + } + + public String getPkSupplierTaxpayerid() + { + return pkSupplierTaxpayerid; + } + public void setCsourcebid(String csourcebid) + { + this.csourcebid = csourcebid; + } + + public String getCsourcebid() + { + return csourcebid; + } + public void setUom(String uom) + { + this.uom = uom; + } + + public String getUom() + { + return uom; + } + public void setExt01(String ext01) + { + this.ext01 = ext01; + } + + public String getExt01() + { + return ext01; + } + public void setExt02(String ext02) + { + this.ext02 = ext02; + } + + public String getExt02() + { + return ext02; + } + public void setExt03(String ext03) + { + this.ext03 = ext03; + } + + public String getExt03() + { + return ext03; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("headerId", getHeaderId()) + .append("vmemo", getVmemo()) + .append("vsourcecode", getVsourcecode()) + .append("vordercode", getVordercode()) + .append("vfirstrowno", getVfirstrowno()) + .append("nastorigprice", getNastorigprice()) + .append("nshouldnum", getNshouldnum()) + .append("nnum", getNnum()) + .append("norigmny", getNorigmny()) + .append("ntaxrate", getNtaxrate()) + .append("pkMaterialCode", getPkMaterialCode()) + .append("pkMaterialName", getPkMaterialName()) + .append("pkMaterialGraphid", getPkMaterialGraphid()) + .append("pkMaterialMaterialspec", getPkMaterialMaterialspec()) + .append("pkMaterialMaterialtype", getPkMaterialMaterialtype()) + .append("pkSupplierName", getPkSupplierName()) + .append("pkSupplierCode", getPkSupplierCode()) + .append("pkSupplierTaxpayerid", getPkSupplierTaxpayerid()) + .append("csourcebid", getCsourcebid()) + .append("uom", getUom()) + .append("ext01", getExt01()) + .append("ext02", getExt02()) + .append("ext03", getExt03()) + .append("Pk_invoice", getPk_invoice()) + .append("Dbilldate", getDbilldate()) + .toString(); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePfNcInfo.java b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePfNcInfo.java new file mode 100644 index 0000000..6647fdc --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/pengfei/InvoicePfNcInfo.java @@ -0,0 +1,170 @@ +package com.cmsen.ticket.domain.entity.pengfei; + +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 鹏飞项目对象 invoice_pf_nc_info + * + * @author ruoyi + * @date 2023-11-23 + */ +@Data +public class InvoicePfNcInfo +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 提交人 */ + private String billmaker; + + /** 币种 */ + private String corigcurrencyid; + + /** 头入账金额 */ + private String ntotalorigmny; + + /** 发票号-nc号? */ + private String vbillcode; + + /** 备注-是否需要处理? */ + private String vmemo; + + /** 收获单据号 */ + private String vsourcecode; + + /** po号 */ + private String vordercode; + + /** Po行号 */ + private String vfirstrowno; + + /** 无税单价 */ + private String nastorigprice; + + /** 供应商发货数量 */ + private String nshouldnum; + + /** 开票数量 */ + private String nnum; + + /** 无税金额 */ + private String norigmny; + + /** 税率 */ + private String ntaxrate; + + /** 物料编码 */ + private String pkMaterialCode; + + /** 物料名称 */ + private String pkMaterialName; + + /** 物料图号 */ + private String pkMaterialGraphid; + + /** 物料规格 */ + private String pkMaterialMaterialspec; + + /** 物料型号 */ + private String pkMaterialMaterialtype; + + /** 供应商名称 */ + private String pkSupplierName; + + /** 供应商编码 */ + private String pkSupplierCode; + + /** 供应商税号 */ + private String pkSupplierTaxpayerid; + + /** $column.columnComment */ + private String ext01; + + /** $column.columnComment */ + private String ext02; + + /** $column.columnComment */ + private String csourcebid; + + /** $column.columnComment */ + private String uom; + + /** $column.columnComment */ + private String pk_invoice; + + /** $column.columnComment */ + private String title; + + /** $column.columnComment */ + private String dbilldate; + + /** $column.columnComment */ + private String pkorg; + + /** $column.columnComment */ + private String invoiceNumber; + + /** $column.columnComment */ + private String vdef21; + + /** $column.columnComment */ + private Date createDate; + + /** $column.columnComment */ + private Date updateDate; + + /** $column.columnComment */ + private String flag; + + /** $column.columnComment */ + private String status; + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("billmaker", getBillmaker()) + .append("corigcurrencyid", getCorigcurrencyid()) + .append("ntotalorigmny", getNtotalorigmny()) + .append("vbillcode", getVbillcode()) + .append("vmemo", getVmemo()) + .append("vsourcecode", getVsourcecode()) + .append("vordercode", getVordercode()) + .append("vfirstrowno", getVfirstrowno()) + .append("nastorigprice", getNastorigprice()) + .append("nshouldnum", getNshouldnum()) + .append("nnum", getNnum()) + .append("norigmny", getNorigmny()) + .append("ntaxrate", getNtaxrate()) + .append("pkMaterialCode", getPkMaterialCode()) + .append("pkMaterialName", getPkMaterialName()) + .append("pkMaterialGraphid", getPkMaterialGraphid()) + .append("pkMaterialMaterialspec", getPkMaterialMaterialspec()) + .append("pkMaterialMaterialtype", getPkMaterialMaterialtype()) + .append("pkSupplierName", getPkSupplierName()) + .append("pkSupplierCode", getPkSupplierCode()) + .append("pkSupplierTaxpayerid", getPkSupplierTaxpayerid()) + .append("ext01", getExt01()) + .append("ext02", getExt02()) + .append("ext03", getCsourcebid()) + .append("ext04", getUom()) + .append("ext05", getPk_invoice()) + .append("ext06", getTitle()) + .append("ext07", getDbilldate()) + .append("ext08", getPkorg()) + .append("invoiceNumber", getInvoiceNumber()) + .append("vdef21", getVdef21()) + .append("createDate", getCreateDate()) + .append("updateDate", getUpdateDate()) + .append("flag", getFlag()) + .append("status", getStatus()) + .toString(); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/print/PrintParam.java b/src/main/java/com/cmsen/ticket/domain/entity/print/PrintParam.java new file mode 100644 index 0000000..cc241ab --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/print/PrintParam.java @@ -0,0 +1,32 @@ +package com.cmsen.ticket.domain.entity.print; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @author Will Chow + */ +@Setter +@Getter +public class PrintParam { + + private String workOrderId; + + private String oddNumber; + + private String client; + + private String partNo; + + private Integer templateType; + + private Boolean isUseDataBase = false; + + private String targetPrinter; + + private List innerList; + + private String barCode; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/project/Project.java b/src/main/java/com/cmsen/ticket/domain/entity/project/Project.java new file mode 100644 index 0000000..9d6e4cc --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/project/Project.java @@ -0,0 +1,48 @@ +package com.cmsen.ticket.domain.entity.project; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class Project implements Serializable { + private Long id; + private String projectType; + private String customer; + private String projectName; + private Integer sort; + private String projectCode; + private String projectMode; + private String projectApprover; + private String projectDirector; + private String sales; + private String startTime; + private String endTime; + private BigDecimal totalHours; + private Integer status;//0-待发布 1-已发布 8-已撤销 9-已完成 + + private String remark; + private String createBy; + private Date createTime; + private String updateBy; + private Date updateTime; + + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + + @ApiModelProperty("参与人id集合(示例 1,2)") + private String attendees; + + private List attendeeList; + + private String approverName; + private String directorName; + private String salesName; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectAttendee.java b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectAttendee.java new file mode 100644 index 0000000..c2348de --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectAttendee.java @@ -0,0 +1,26 @@ +package com.cmsen.ticket.domain.entity.project; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class ProjectAttendee implements Serializable { + private Long id; + private String projectCode; + private String attendee; + private String attendeeName; + + private String createBy; + private Date createTime; + private String updateBy; + private Date updateTime; + + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectHoursReport.java b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectHoursReport.java new file mode 100644 index 0000000..87f9185 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectHoursReport.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.entity.project; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class ProjectHoursReport implements Serializable { + private Long id; + private String projectCode; + private String projectName; + private Long taskId; + private String taskName; + private String dateRangeStart; + private String dateRangeEnd; + private String reportDate; + private BigDecimal reportedHours; + private String reporter; + private Date reportTime; + private String approver; + private Date approveTime; + private Integer status;//0-待提交 1-已提交 2-已驳回 3-已审批 + + private Date updateTime; + + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + + private String reporterName; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectTask.java b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectTask.java new file mode 100644 index 0000000..8ce469f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/project/ProjectTask.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.entity.project; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class ProjectTask implements Serializable { + private Long id; + private String projectCode; + private String projectName; + private String taskName; + private BigDecimal plannedHours; + private String startTime; + private String endTime; + private String corRequirement; + private String responsiblePerson; + private String taskType; + private Integer status;//1-活动中 2-已完成 + + private String createBy; + private Date createTime; + private String updateBy; + private Date updateTime; + + private String ext01; + private String ext02; + private String ext03; + private String ext04; + private String ext05; + + private String resPersonName; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/project/response/WeekHours.java b/src/main/java/com/cmsen/ticket/domain/entity/project/response/WeekHours.java new file mode 100644 index 0000000..d3f934f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/project/response/WeekHours.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.domain.entity.project.response; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class WeekHours { + + private String reporter;//填报人 + private String dateRangeStart; + private String dateRangeEnd; + private BigDecimal approveHours; + private BigDecimal unSubmitHours; + private Integer status;//0-待提交 1-已提交 2-无工时 +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AdvanceReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AdvanceReport.java new file mode 100644 index 0000000..33838e4 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AdvanceReport.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事前预申请报告 + */ +@ColumnWidth(20) +@Data +public class AdvanceReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "会议名称", index = 1) + private String meetName; + @ExcelProperty(value = "活动时间", index = 2) + private String requestDate; + @ExcelProperty(value = "活动地址", index = 3) + private String address; + @ExcelProperty(value = "request金额", index = 4) + private String amount; + @ExcelProperty(value = "参会人数", index = 5) + private String joinNum; + @ExcelProperty(value = "参会人员", index = 6) + private String joinMan; + @ExcelProperty(value = "会议形式", index = 7) + private String meetFormat; + @ExcelProperty(value = "讲者姓名", index = 8) + private String speaker; + @ExcelProperty(value = "销售姓名", index = 9) + private String empName; + @ExcelProperty(value = "工号", index = 10) + private String empId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AgreementReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AgreementReport.java new file mode 100644 index 0000000..5cfe9ef --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/AgreementReport.java @@ -0,0 +1,50 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事中协议报告 + */ +@ColumnWidth(20) +@Data +public class AgreementReport { + + @ExcelProperty(value = "ReportID", index = 0) + private String reportId; + @ExcelProperty(value = "活动编号", index = 1) + private String reqId; + @ExcelProperty(value = "讲者姓名", index = 2) + private String speaker; + @ExcelProperty(value = "医院", index = 3) + private String orgName; + @ExcelProperty(value = "科室", index = 4) + private String deptName; + @ExcelProperty(value = "会议名称", index = 5) + private String meetName; + @ExcelProperty(value = "会议时间", index = 6) + private String startDate; + @ExcelProperty(value = "会议标题", index = 7) + private String meetTitle; + @ExcelProperty(value = "服务类型", index = 8) + private String serviceType; + @ExcelProperty(value = "学术顾问", index = 9) + private String adviser; + @ExcelProperty(value = "ASM", index = 10) + private String ASM; + @ExcelProperty(value = "协议演讲时间", index = 11) + private String agreementSpeakDate; + @ExcelProperty(value = "报销演讲时间", index = 12) + private String expenseSpeakDate; + @ExcelProperty(value = "是否后台推送", index = 13) + private String isSend; + @ExcelProperty(value = "后台推送时间", index = 14) + private String sendDate; + @ExcelProperty(value = "销售姓名", index = 15) + private String empName; + @ExcelProperty(value = "工号", index = 16) + private String empId; + @ExcelProperty(value = "extId", index = 17) + private String extId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/CompositeReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/CompositeReport.java new file mode 100644 index 0000000..0f47b9d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/CompositeReport.java @@ -0,0 +1,75 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 综合报告 + */ +@ColumnWidth(20) +@Data +public class CompositeReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "会议时间", index = 1) + private String startDate; + @ExcelProperty(value = "结束时间", index = 2) + private String endDate; + @ExcelProperty(value = "ReportID", index = 3) + private String reportId; + @ExcelProperty(value = "区域", index = 4) + private String area; + @ExcelProperty(value = "员工姓名", index = 5) + private String userName; + @ExcelProperty(value = "员工号", index = 6) + private String empId; + @ExcelProperty(value = "会议形式", index = 7) + private String meetFormat; + @ExcelProperty(value = "合规备注", index = 8) + private String remarks; + @ExcelProperty(value = "签到人姓名", index = 9) + private String signName; + @ExcelProperty(value = "签到人医院", index = 10) + private String signOrg; + @ExcelProperty(value = "签到人科室", index = 11) + private String signDep; + @ExcelProperty(value = "有效性", index = 12) + private String valids; + @ExcelProperty(value = "签到人数", index = 13) + private String signNum; + @ExcelProperty(value = "有效签到人数", index = 14) + private String efSignNum; + @ExcelProperty(value = "协议讲者姓名", index = 15) + private String speakerName; + @ExcelProperty(value = "协议讲者医院", index = 16) + private String speakerOrg; + @ExcelProperty(value = "协议讲者科室", index = 17) + private String speakerDep; + @ExcelProperty(value = "协议ASM签字", index = 18) + private String asmSign; + @ExcelProperty(value = "费用类型", index = 19) + private String expenseType; + @ExcelProperty(value = "协议服务类型", index = 20) + private String serviceType; + @ExcelProperty(value = "协议演讲时间", index = 21) + private String speakTime; + @ExcelProperty(value = "协议金额", index = 22) + private String agreementAmount; + @ExcelProperty(value = "报销费用条目", index = 23) + private String expenseEntries; + @ExcelProperty(value = "实际时长", index = 24) + private String actualDuration; + @ExcelProperty(value = "ppt", index = 25) + private String ppt; + @ExcelProperty(value = "报销金额", index = 26) + private String reimburseMoney; + @ExcelProperty(value = "EntryId", index = 27) + private String entryId; + @ExcelProperty(value = "ReportKey", index = 28) + private String reportKey; + @ExcelProperty(value = "讲者类型", index = 29) + private String speakerType; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/InvoiceDetailReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/InvoiceDetailReport.java new file mode 100644 index 0000000..a224a9b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/InvoiceDetailReport.java @@ -0,0 +1,46 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事后发票明细报告 + */ +@ColumnWidth(20) +@Data +public class InvoiceDetailReport { + + @ExcelProperty(value = "UserId", index = 0) + private String userId; + @ExcelProperty(value = "ReportKey", index = 1) + private String reportKey; + @ExcelProperty(value = "员工姓名", index = 2) + private String empName; + @ExcelProperty(value = "员工号", index = 3) + private String empId; + @ExcelProperty(value = "报告提交日期", index = 4) + private String submitDate; + @ExcelProperty(value = "发票日期", index = 5) + private String invoiceDate; + @ExcelProperty(value = "发票号", index = 6) + private String invoiceNum; + @ExcelProperty(value = "发票类型", index = 7) + private String invoiceType; + @ExcelProperty(value = "火车票等级", index = 8) + private String trainLevel; + @ExcelProperty(value = "发票金额", index = 9) + private String invoiceMoney; + @ExcelProperty(value = "税额", index = 10) + private String tax; + @ExcelProperty(value = "税率", index = 11) + private String taxRate; + @ExcelProperty(value = "手工录入", index = 12) + private String manualEntry; + @ExcelProperty(value = "报销金额", index = 13) + private String reimburseMoney; + @ExcelProperty(value = "费用类型", index = 14) + private String expenseType; + @ExcelProperty(value = "报告类型", index = 15) + private String expenseUse; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetApplyReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetApplyReport.java new file mode 100644 index 0000000..025378b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetApplyReport.java @@ -0,0 +1,71 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 合规会议申请报表 + */ +@ColumnWidth(20) +@Data +public class MeetApplyReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "会议名称", index = 1) + private String meetName; + @ExcelProperty(value = "会议类型", index = 2) + private String meetType; + @ExcelProperty(value = "会议形式", index = 3) + private String meetFormat; + @ExcelProperty(value = "活动地址", index = 4) + private String address; + @ExcelProperty(value = "省份", index = 5) + private String province; + @ExcelProperty(value = "城市", index = 6) + private String city; + @ExcelProperty(value = "活动申请人", index = 7) + private String empName; + @ExcelProperty(value = "工号", index = 8) + private String empId; + @ExcelProperty(value = "部门", index = 9) + private String empDep; + @ExcelProperty(value = "联系方式", index = 10) + private String empPhone; + @ExcelProperty(value = "直线经理", index = 11) + private String approverId; + @ExcelProperty(value = "直线经理邮箱", index = 12) + private String approverEmail; + @ExcelProperty(value = "直线经理联系方式", index = 13) + private String approverPhone; + @ExcelProperty(value = "活动开始时间", index = 14) + private String startDate; + @ExcelProperty(value = "活动结束时间", index = 15) + private String endDate; + @ExcelProperty(value = "腾讯会议ID", index = 16) + private String tencentId; + @ExcelProperty(value = "参会人数", index = 17) + private String joinNum; + @ExcelProperty(value = "产品", index = 18) + private String product; + @ExcelProperty(value = "讲者姓名", index = 19) + private String speakerName; + @ExcelProperty(value = "更新时间", index = 20) + private String updateDate; + @ExcelProperty(value = "角色", index = 21) + private String roleName; + @ExcelProperty(value = "级别", index = 22) + private String levelName; + @ExcelProperty(value = "医院", index = 23) + private String company; + @ExcelProperty(value = "科室", index = 24) + private String department; + @ExcelProperty(value = "计划付费时长", index = 25) + private String paymentTime; + @ExcelProperty(value = "计划付费金额", index = 26) + private String paymentAmount; + + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetFinishReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetFinishReport.java new file mode 100644 index 0000000..9ce356f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/MeetFinishReport.java @@ -0,0 +1,63 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 合规已完成会议报表 + */ +@ColumnWidth(20) +@Data +public class MeetFinishReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "会议名称", index = 1) + private String meetName; + @ExcelProperty(value = "会议类型", index = 2) + private String meetType; + @ExcelProperty(value = "会议形式", index = 3) + private String meetFormat; + @ExcelProperty(value = "活动地址", index = 4) + private String address; + @ExcelProperty(value = "省份", index = 5) + private String province; + @ExcelProperty(value = "城市", index = 6) + private String city; + @ExcelProperty(value = "活动申请人", index = 7) + private String empName; + @ExcelProperty(value = "工号", index = 8) + private String empId; + @ExcelProperty(value = "部门", index = 9) + private String empDep; + @ExcelProperty(value = "直线经理", index = 10) + private String approverId; + @ExcelProperty(value = "活动开始时间", index = 11) + private String startDate; + @ExcelProperty(value = "活动结束时间", index = 12) + private String endDate; + @ExcelProperty(value = "预计参会人数", index = 13) + private String beJoinNum; + @ExcelProperty(value = "实际参会人数", index = 14) + private String reJoinNum; + @ExcelProperty(value = "实际有效参会人数", index = 15) + private String efJoinNum; + @ExcelProperty(value = "产品", index = 16) + private String product; + @ExcelProperty(value = "讲者姓名", index = 17) + private String speakerName; + @ExcelProperty(value = "角色", index = 18) + private String roleName; + @ExcelProperty(value = "级别", index = 19) + private String levelName; + @ExcelProperty(value = "医院", index = 20) + private String company; + @ExcelProperty(value = "科室", index = 21) + private String department; + @ExcelProperty(value = "付费时长", index = 22) + private String paymentTime; + @ExcelProperty(value = "实际付费金额", index = 23) + private String paymentAmount; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/PicReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/PicReport.java new file mode 100644 index 0000000..57d2227 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/PicReport.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事中照片报告 + */ +@ColumnWidth(20) +@Data +public class PicReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "会议名称", index = 1) + private String meetName; + @ExcelProperty(value = "会议形式", index = 2) + private String meetFormat; + @ExcelProperty(value = "照片类型", index = 3) + private String picType; + @ExcelProperty(value = "extId", index = 4) + private String extId; + @ExcelProperty(value = "照片数量", index = 5) + private String picNum; + @ExcelProperty(value = "规模照人头数量", index = 6) + private String heads; + @ExcelProperty(value = "是否后台推送", index = 7) + private String isSend; + @ExcelProperty(value = "后台推送时间", index = 8) + private String sendTime; + @ExcelProperty(value = "销售姓名", index = 9) + private String empName; + @ExcelProperty(value = "工号", index = 10) + private String empId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SigninReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SigninReport.java new file mode 100644 index 0000000..121341d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SigninReport.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事中签到报告 + */ +@ColumnWidth(20) +@Data +public class SigninReport { + + @ExcelProperty(value = "活动编号", index = 0) + private String reqId; + @ExcelProperty(value = "签到人姓名", index = 1) + private String signName; + @ExcelProperty(value = "医院", index = 2) + private String orgName; + @ExcelProperty(value = "科室", index = 3) + private String deptName; + @ExcelProperty(value = "签到时间", index = 4) + private String checkDate; + @ExcelProperty(value = "会议时间", index = 5) + private String startDate; + @ExcelProperty(value = "签到类型", index = 6) + private String signType; + @ExcelProperty(value = "是否后台推送", index = 7) + private String isSend; + @ExcelProperty(value = "后台推送时间", index = 8) + private String sendTime; + @ExcelProperty(value = "销售姓名", index = 9) + private String empName; + @ExcelProperty(value = "工号", index = 10) + private String empId; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SynthesizeReport.java b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SynthesizeReport.java new file mode 100644 index 0000000..815df18 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/reportEntity/SynthesizeReport.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.domain.entity.reportEntity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +/** + * 事后综合报告 + */ +@ColumnWidth(20) +@Data +public class SynthesizeReport { + + @ExcelProperty(value = "ReportKey", index = 0) + private String reportKey; + @ExcelProperty(value = "活动编号", index = 1) + private String reqId; + @ExcelProperty(value = "员工姓名", index = 2) + private String empName; + @ExcelProperty(value = "员工号", index = 3) + private String empId; + @ExcelProperty(value = "费用条目", index = 4) + private String expenseType; + @ExcelProperty(value = "发票金额", index = 5) + private String invoiceMoney; + @ExcelProperty(value = "报销金额", index = 6) + private String reimburseMoney; + @ExcelProperty(value = "附件数量", index = 7) + private String fileNum; +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/request/RequestResponse.java b/src/main/java/com/cmsen/ticket/domain/entity/request/RequestResponse.java new file mode 100644 index 0000000..563f3f6 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/request/RequestResponse.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.domain.entity.request; + +import lombok.Data; + + +@Data +public class RequestResponse { + private Boolean state; + private String message; + private Object data; + private Integer totalCount; + private String errCode; + + public RequestResponse(Boolean state, String message, Object data, Integer totalCount, String errCode) { + this.state = state; + this.message = message; + this.data = data; + this.totalCount = totalCount; + this.errCode = errCode; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/sign/SignResponse.java b/src/main/java/com/cmsen/ticket/domain/entity/sign/SignResponse.java new file mode 100644 index 0000000..d8b8cff --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/sign/SignResponse.java @@ -0,0 +1,21 @@ +package com.cmsen.ticket.domain.entity.sign; + +import lombok.Data; + + +@Data +public class SignResponse { + private Boolean state; + private String message; + private Object data; + private Integer totalCount; + private String errCode; + + public SignResponse(Boolean state, String message, Object data, Integer totalCount, String errCode) { + this.state = state; + this.message = message; + this.data = data; + this.totalCount = totalCount; + this.errCode = errCode; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/sign/UpdateSignEntity.java b/src/main/java/com/cmsen/ticket/domain/entity/sign/UpdateSignEntity.java new file mode 100644 index 0000000..d929269 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/sign/UpdateSignEntity.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.entity.sign; + +import lombok.Data; + + +@Data +public class UpdateSignEntity { + + private Long id; + private String agreementId; + private String agreementStatus; + private String reqId; + private String templateId; + private String routerId; + private String routerOrder; + private String enterpriseName; + private String signName; + private String signAccount; + private String routerStatus; + + private String base64; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddMeetProcessDto.java b/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddMeetProcessDto.java new file mode 100644 index 0000000..2e52e66 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddMeetProcessDto.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.entity.wechat; + +import lombok.Data; + +/** + * @author OWTS + */ +@Data +public class AddMeetProcessDto { + private String title; + private String data; + private String userName; + + public String getTitle() { + return title == null ? "" : title; + } + + public String getData() { + return data == null ? "" : data; + } + + public String getUserName() { + return userName == null ? "" : userName; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddProcessDto.java b/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddProcessDto.java new file mode 100644 index 0000000..8eccb0e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/wechat/AddProcessDto.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.entity.wechat; + +import lombok.Data; + +/** + * @author OWTS + */ +@Data +public class AddProcessDto { + private String title; + private String data; + private String userName; + + public String getTitle() { + return title == null ? "" : title; + } + + public String getData() { + return data == null ? "" : data; + } + + public String getUserName() { + return userName == null ? "" : userName; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/wechat/MeetProcessData.java b/src/main/java/com/cmsen/ticket/domain/entity/wechat/MeetProcessData.java new file mode 100644 index 0000000..10e3fbf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/wechat/MeetProcessData.java @@ -0,0 +1,43 @@ +package com.cmsen.ticket.domain.entity.wechat; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * @author OWTS + */ +@Data +public class MeetProcessData { + private String reqId;//编号 + private String name;//申请名称 + private String createTime;//申请日期 + private String expenseUse;//申请类型 + private String type;//活动类型 + private String ext01;//区域 + private String ext02;//产品类 + private String ext03;//产品线 + private String ext04;//产品组 + private String ext05;//项目 + private String startDate;//开始时间 + private String endDate;//结束时间 + private String city;//城市 + private String meetFormat;//线上线下 + + @JsonProperty("meet_expense") + private List meetExpense = new ArrayList<>(); + + @Data + public static class MeetExpense { + private String expType;//费用类型 + private String person;//人员 + private String tradeDate;//日期 + private String currency;//币种 + private BigDecimal amount;//金额 + private String city;//城市 + private String remark;//备注 + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/wechat/ProcessData.java b/src/main/java/com/cmsen/ticket/domain/entity/wechat/ProcessData.java new file mode 100644 index 0000000..780d7c7 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/wechat/ProcessData.java @@ -0,0 +1,110 @@ +package com.cmsen.ticket.domain.entity.wechat; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author OWTS + */ +@Data +public class ProcessData { + private String reportName; + private String reportDate; + private String reportTotal; + private String reportReason; + private String empId; + @JsonProperty("report_line") + private List reportLine = new ArrayList<>(); + + @Data + public static class ReportLine { + private String expenseType; + private String transtionDate; + private String exChangeRate; + private String currenyCode; + private String hasException; + private String reportId; + private String entryId; + private String entryMoney; + private List imgUrl = new ArrayList<>(); + private String project; + private String remark; + + public String getExpenseType() { + return expenseType == null ? "" : expenseType; + } + + public String getTranstionDate() { + return transtionDate == null ? "" : transtionDate; + } + + public String getExChangeRate() { + return exChangeRate == null ? "" : exChangeRate; + } + + public String getCurrenyCode() { + return currenyCode == null ? "" : currenyCode; + } + + public String getHasException() { + return hasException == null ? "" : hasException; + } + + public String getReportId() { + return reportId == null ? "" : reportId; + } + + public String getEntryId() { + return entryId == null ? "" : entryId; + } + + public String getEntryMoney() { + return entryMoney == null ? "" : entryMoney; + } + + public String getProject() { + return project == null ? "" : project; + } + + public String getRemark() { + return remark == null ? "" : remark; + } + } + + @Data + public static class ImgUrl { + private String url; + private String name; + + public String getUrl() { + return url == null ? "" : url; + } + + public String getName() { + return name == null ? "" : name; + } + } + + public String getReportName() { + return reportName == null ? "" : reportName; + } + + public String getReportDate() { + return reportDate == null ? "" : reportDate; + } + + public String getReportTotal() { + return reportTotal == null ? "" : reportTotal; + } + + public String getReportReason() { + return reportReason == null ? "" : reportReason; + } + + public String getEmpId() { + return empId == null ? "" : empId; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/weitai/LineDOCUP.java b/src/main/java/com/cmsen/ticket/domain/entity/weitai/LineDOCUP.java new file mode 100644 index 0000000..deed853 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/weitai/LineDOCUP.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.domain.entity.weitai; + +import lombok.Data; + +@Data +public class LineDOCUP { + public String InvoiceNo; + //文件后缀明 + public String FileExt; + //文件名称 + public String FileName; + //文件内容 + public byte[] DOCUP; + + private String InvoiceType = "I"; //I P +} diff --git a/src/main/java/com/cmsen/ticket/domain/entity/weitai/OCREXPRESS.java b/src/main/java/com/cmsen/ticket/domain/entity/weitai/OCREXPRESS.java new file mode 100644 index 0000000..89f3d9e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/weitai/OCREXPRESS.java @@ -0,0 +1,103 @@ +package com.cmsen.ticket.domain.entity.weitai; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class OCREXPRESS { + // 摘要: + // 发票号 + @JsonProperty("InvoiceNo") + public String InvoiceNo; + // + // 摘要: + // 供应商编码 + @JsonProperty("CardCode") + public String CardCode; + // + // 摘要: + // 供应商名称 + @JsonProperty("CardName") + public String CardName; + // + // 摘要: + // 开票日期 + @JsonProperty("DocDate") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + public Date DocDate; + // + // 摘要: + // 总含税金额 + @JsonProperty("DocTotal") + public String DocTotal; + @JsonProperty("LineDetial") + public List LineDetial; + @JsonProperty("OcrDocEntry") + private String OcrDocEntry; + @JsonProperty("PayDate") + private String PayDate; + //[物料:I,服务:S] + @JsonProperty("ExpenseType") + private String ExpenseType = "S"; + @JsonProperty("Company") + private String Company; + @JsonProperty("OcrURL") + public String OcrURL; + + //OCR发票传入SAP(明细行) + @Data + public static class LineDetial { + // + // 摘要: + // Lineid + @JsonProperty("LineId") + public int LineId; + // + // 摘要: + // 名称 + @JsonProperty("ItemName") + public String ItemName; + // + // 摘要: + // 规格 + @JsonProperty("Desc") + public String Desc; + // + // 摘要: + // 单位 + @JsonProperty("Uint") + public String Uint; + // + // 摘要: + // 数量 + @JsonProperty("Quantity") + public String Quantity; + // + // 摘要: + // 单价 + @JsonProperty("Price") + public String Price; + // + // 摘要: + // 金额 + @JsonProperty("LineTotal") + public String LineTotal; + // + // 摘要: + // 税率 + @JsonProperty("Tax") + public String Tax; + // + // 摘要: + // 税额 + @JsonProperty("TaxAmount") + public String TaxAmount; + @JsonProperty("OcrURL") + public String OcrURL; + } +} + diff --git a/src/main/java/com/cmsen/ticket/domain/entity/weitai/SendResult.java b/src/main/java/com/cmsen/ticket/domain/entity/weitai/SendResult.java new file mode 100644 index 0000000..f6ebbc9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/entity/weitai/SendResult.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.domain.entity.weitai; + +import lombok.Data; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/9/27 11:03 + **/ +@Data +public class SendResult { + private Integer result = 1; + private String message = ""; +} diff --git a/src/main/java/com/cmsen/ticket/domain/exception/BusinessException.java b/src/main/java/com/cmsen/ticket/domain/exception/BusinessException.java new file mode 100644 index 0000000..d88ceed --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/exception/BusinessException.java @@ -0,0 +1,129 @@ +package com.cmsen.ticket.domain.exception; + +import com.cmsen.common.exception.DatabaseException; +import com.cmsen.common.exception.ServiceException; +import com.cmsen.common.http.response.ResponseStatus; +import com.cmsen.common.http.response.RestResponse; +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.MyBatisSystemException; +import org.springframework.http.HttpStatus; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 业务异常处理类 + * + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Slf4j +@RestControllerAdvice +public class BusinessException { + + @ExceptionHandler(DatabaseException.class) + public RestResponse databaseException(DatabaseException e) { + log.error("databaseException: {}", e.getMessage()); + return RestResponse.failure(e.getMessage(), e.getCode()); + } + + @ExceptionHandler(ServiceException.class) + public RestResponse serviceException(ServiceException e) { + log.error("ServiceException: {}", e.getMessage()); + return RestResponse.failure(e.getMessage(), e.getCode()); + } + + @org.springframework.web.bind.annotation.ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(ScannerException.class) + public RestResponse scannerException(ScannerException e) { + log.error("ScannerException: {}", e.getMessage()); + return RestResponse.failure(e.getMessage(), e.getCode()); + } + + /** + * 方法参数无效异常 + * + * @param e 异常类 + * @return json + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public RestResponse methodException(MethodArgumentNotValidException e) { + log.warn("MethodArgumentNotValidException: {}", e.getMessage()); + BindingResult result = e.getBindingResult(); + FieldError error = result.getFieldError(); + if (error == null) { + return RestResponse.failure(ResponseStatus.SERVER_ERROR); + } + return RestResponse.failure(error.getField() + " " + error.getDefaultMessage(), ResponseStatus.SERVER_ERROR.getStatus()); + } + + @ExceptionHandler(BindException.class) + public RestResponse bindExceptionHandler(BindException e) { + log.warn("BindException: {}", e.getMessage()); + BindingResult bindingResult = e.getBindingResult(); + FieldError error = bindingResult.getFieldError(); + if (error == null) { + return RestResponse.failure(ResponseStatus.SERVER_ERROR); + } + return RestResponse.failure(error.getField() + " " + error.getDefaultMessage(), ResponseStatus.SERVER_ERROR.getStatus()); + } + + /** + * 处理空指针的异常 + * + * @param e 异常类 + * @return json + */ + @ExceptionHandler(NullPointerException.class) + public RestResponse nullPointerException(NullPointerException e) { + log.error("NullPointerException: {}", e.getMessage()); + log.error(e.getMessage(), e); + return RestResponse.failure(ResponseStatus.SERVER_ERROR); + } + + /** + * 处理MyBatis异常 + */ + @ExceptionHandler(MyBatisSystemException.class) + public RestResponse validationBindException(MyBatisSystemException e) { + log.error("处理数据异常:{}", e.getMessage()); + log.error(e.getMessage(), e); + return RestResponse.failure(e.getMessage(), ResponseStatus.SERVER_ERROR.getStatus()); + } + + /** + * 400 - Bad Request + * + * @param e 异常类 + * @return json + */ + @ExceptionHandler(HttpMessageNotReadableException.class) + public RestResponse validationBindException(HttpMessageNotReadableException e) { + log.error("Bad Request: {}", e.getMessage()); + return RestResponse.failure(ResponseStatus.BAD_REQUEST); + } + + @ExceptionHandler(RuntimeException.class) + public RestResponse runtimeException(RuntimeException e) { + log.error("RuntimeException: {}", e.getMessage()); + log.error(e.getMessage(), e); + return RestResponse.failure(ResponseStatus.SERVER_ERROR); + } + + @ExceptionHandler(Exception.class) + public RestResponse Exception(Exception e) { + log.error("Exception: {}", e.getMessage()); + log.error(e.getMessage(), e); + return RestResponse.failure(ResponseStatus.SERVER_ERROR); + } + + //IllegalArgumentException + @ExceptionHandler(IllegalArgumentException.class) + public RestResponse illegalArgumentException(IllegalArgumentException e) { + log.error("IllegalArgumentException: {}", e.getMessage()); + return RestResponse.failure(e.getMessage(), ResponseStatus.SERVER_ERROR.getStatus()); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/exception/ScannerException.java b/src/main/java/com/cmsen/ticket/domain/exception/ScannerException.java new file mode 100644 index 0000000..01ebdd3 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/exception/ScannerException.java @@ -0,0 +1,17 @@ +package com.cmsen.ticket.domain.exception; + +import com.cmsen.common.exception.ServiceException; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/7/13 18:37 + **/ +public class ScannerException extends ServiceException { + public ScannerException(String message) { + super(message); + } + + public ScannerException() { + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/CompanyMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/CompanyMapper.java new file mode 100644 index 0000000..1ed0374 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/CompanyMapper.java @@ -0,0 +1,114 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.Company; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * (Company)表数据库访问层 + * + * @author ran hao yu + * @since 2020-09-18 14:11:43 + */ +@Mapper +public interface CompanyMapper { + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + Company queryById(Integer id); + + /** + * 查询指定行数据 + * + * @return 对象列表 + */ + List queryAllByLimit(@Param("code") String code, @Param("name") String name, @Param("taxNo") String taxNo); + + + /** + * 通过实体作为筛选条件查询 + * + * @param company 实例对象 + * @return 对象列表 + */ + List queryAll(Company company); + + /** + * 新增数据 + * + * @param company 实例对象 + * @return 影响行数 + */ + int insert(Company company); + + /** + * 修改数据 + * + * @param company 实例对象 + * @return 影响行数 + */ + int update(Company company); + + /** + * 通过主键删除数据 + * + * @param id 主键 + * @return 影响行数 + */ + int deleteById(Integer id); + + Company checkCoAndTax(@Param("buyer") String buyer, @Param("buyerTaxId") String buyerTaxId); + + List getListByNameAndTax(@Param("buyer") String buyer, @Param("buyerTaxId") String buyerTaxId); + + Company checkCoAndTax2(@Param("buyer") String buyer, @Param("buyerTaxId") String buyerTaxId); + + List selectTaxsByClient(@Param("client") Integer client); + + List list(Map params); + + int count(Map params); + + int checkTaxId(String taxId); + + /** + * 启用 + * + * @param id + * @return + */ + int active(@Param("id") Integer id); + + /** + * 停用 + * + * @param id + * @return + */ + int clock(@Param("id") Integer id); + + Company selectByCompanyCode(String companyCode); + Company selectByCompanyCode2(String companyCode); + + Company selectByValueName(String valueName); + + List searchByKeyword(@Param("keyword") String keyword); + + List checkTaxNo(Map params); + + Company selectByFullName(@Param("fullName") String fullName); + + Company selectByTaxNo(String taxNo); + + List selectPengFeiCompanies(); + + List selectNotCNCompany(); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceItemsMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceItemsMapper.java new file mode 100644 index 0000000..c0ffa9a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceItemsMapper.java @@ -0,0 +1,55 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.dto.CorporateInvoiceItemsDto; +import com.cmsen.ticket.domain.entity.CorporateInvoiceItems; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface CorporateInvoiceItemsMapper { + + int deleteByPrimaryKey(String id); + + int insert(CorporateInvoiceItems record); + + CorporateInvoiceItems selectByPrimaryKey(String id); + + List selectItemsByPid(String pid); + + int updateByPrimaryKeySelective(CorporateInvoiceItems record); + + void deleteByPid(String id); + + CorporateInvoiceItems selectForAutoSmartMatching(@Param("invoiceId") String invoiceId, @Param("goods") String goods, @Param("itemNo") String itemNo, @Param("intValue") int intValue, + @Param("matchType") Integer matchType, @Param("unUsedQuantity") Integer unUsedQuantity); + + CorporateInvoiceItems selectForAutoSmartMatchingMulti(@Param("invoiceId") String invoiceId, @Param("goods") String goods, @Param("itemNo") String itemNo, @Param("intValue") int intValue, + @Param("matchType") Integer matchType, @Param("unUsedQuantity") Integer unUsedQuantity); + + List selectForAutoSmartMatchingMulti2(@Param("invoiceId") String invoiceId, @Param("itemNo") String itemNo); + List selectForAutoSmartMatchingMulti3(@Param("invoiceId") String invoiceId, @Param("itemNo") String itemNo); + + List selectForAutoSmartMatchingMultiPengfei(@Param("invoiceId") String invoiceId, @Param("itemNo") String itemNo); + + + List selectItemsForOrder(Map params); + List selectItemsForMaterial(Map params); + List selectItemsForMaterial2(Map params); + int countForOrder(Map params); + + List listByPid(String pId); + + List selectUnmatchedItems(String billCode); + + List selectByPidAndProductName(String invoiceId, String invoiceProductName, String invoiceSpecification); + + List selectByBillCode(String billCode); + + void deleteByBillCode(String billCode); + + void deleteByInvoiceNumber(String number); + +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceMapper.java new file mode 100644 index 0000000..971393a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceMapper.java @@ -0,0 +1,118 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.dto.InvoiceItemListDto; +import com.cmsen.ticket.domain.entity.CorporateInvoice; +import com.cmsen.ticket.domain.vo.CorporateInvoiceVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +@Mapper +public interface CorporateInvoiceMapper { + List supplierInvoiceMatchInvoiceList(@Param("numberS") String numberS, @Param("numberE") String numberE, @Param("invoiceType") Integer invoiceType); + + int setValidStatus(String id); + + int deleteByPrimaryKey(String id); + + int insert(CorporateInvoice record); + + CorporateInvoice selectByPrimaryKey(String id); + + CorporateInvoice selectByIdContainsNames(@Param("id") String id); + + int updateByPrimaryKeySelective(CorporateInvoice record); + + int updateByDeductStatus(Map params); + + List selectByLoginId(String loginId); + + List selectByParams(Map params); + + List list(Map params); + List list2(Map params); + List list6(Map params); + + List listReportInvoiceId(Map params); + List listReportServiceInvoiceIds(Map params); + List list4(Map params); + List list5(Map params); + + + List searchList(Map params); + + int countForSearchList(Map params); + + int count(Map params); + int count2(Map params); + + + int checkInvoiceNumIsExistByNumAndCode(@Param("number") String number, @Param("code") String code,@Param("invoiceId") String invoiceId,@Param("orgId") Integer orgId); + + CorporateInvoice selectByNumAndCode(String number, String code); + + CorporateInvoice selectByNumAndCode2(String number, String code); + + int updateCorInvDeductStatusTask(); + + List selectUnValidInvoiceUpdate(Map param); + + String selectSupplierCode(@Param("invoiceId") String invoiceId); + + //根据id查找subject +// int getBySubject(@Param("id") String id); Unknown column 'I.I' in 'where clause' + + CorporateInvoice selectById(@Param("id") String id); + + CorporateInvoiceVo getAccount(String id); + + BigDecimal calculateMatchingPercent(@Param("priceType") Integer priceType, @Param("invoiceId") String invoiceId); + + BigDecimal calculateMatchingPercentPriceType_1(@Param("priceType") Integer priceType, @Param("invoiceId") String invoiceId); + + int updateByFlow(String id); + + List listByNumbers(Map params); + + int refund(@Param("id") String id,@Param("isSend") String isSend); + + List selectByBillCode(String billCode); + + + List selectByPushList(@Param("list") List pushList); + + List selectByInvoiceNumber(String number); + + void updateExt08(String pushList); + + List selectByMap(Map map); + + void updateTaxNo(CorporateInvoice corporateInvoice); + + List queryByOrg(@Param("orgId")String[] corInvoiceOrg); + + List selectListByParams(Map params); + + CorporateInvoice selectDetailById(@Param("id") String id); + + void updateSellerNo(CorporateInvoice corporateInvoice); + + void updateBuyerNo(CorporateInvoice corporateInvoice); + + List selectByNumberAndStatus(@Param("number") String invoiceNum, @Param("status")String status); + + CorporateInvoice selectByNumberAndExt01(String number,long ext01); + + void updateExt01(CorporateInvoice record); + + List selectByNumAndValidStatus(String number, String validStatus); + + void deleteByNumber(String number); + + List listUnSend(Map map); + int invoiceMatchingCount(ParameterScope params); + List invoiceMatchingList(ParameterScope params); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceTypeMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceTypeMapper.java new file mode 100644 index 0000000..14822ba --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/CorporateInvoiceTypeMapper.java @@ -0,0 +1,24 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.CorporateInvoiceType; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CorporateInvoiceTypeMapper { + int deleteByPrimaryKey(Integer id); + + int insertSelective(CorporateInvoiceType record); + + CorporateInvoiceType selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(CorporateInvoiceType record); + + List selectByRecord(CorporateInvoiceType corporateInvoiceType); + + List selectForUser(@Param("userId") Integer userId); + + CorporateInvoiceType selectByCode(String s); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/CustomerMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/CustomerMapper.java new file mode 100644 index 0000000..41e74db --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/CustomerMapper.java @@ -0,0 +1,71 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.Customer; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * (Customer)表数据库访问层 + * + * @author ran hao yu + * @since 2020-09-18 14:11:43 + */ +@Mapper +public interface CustomerMapper { + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + Customer queryById(Integer id); + + /** + * 查询指定行数据 + * + * @param offset 查询起始位置 + * @param limit 查询条数 + * @return 对象列表 + */ + List queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit); + + + /** + * 通过实体作为筛选条件查询 + * + * @param customer 实例对象 + * @return 对象列表 + */ + List queryAll(Customer customer); + + /** + * 新增数据 + * + * @param customer 实例对象 + * @return 影响行数 + */ + int insert(Customer customer); + + /** + * 修改数据 + * + * @param customer 实例对象 + * @return 影响行数 + */ + int update(Customer customer); + + /** + * 通过主键删除数据 + * + * @param id 主键 + * @return 影响行数 + */ + int deleteById(Integer id); + + String selectJsAdapterById(@Param("id") Integer id); + + String selectCompanyWord(); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/ParameterScope.java b/src/main/java/com/cmsen/ticket/domain/mapper/ParameterScope.java new file mode 100644 index 0000000..ef79a37 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/ParameterScope.java @@ -0,0 +1,16 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.domain.mapper; + +/** + * Parameter value scope mapping + * + * @author jared.Yan (yanhuaiwen@163.com) + */ +public interface ParameterScope { +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierBlacklistMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierBlacklistMapper.java new file mode 100644 index 0000000..2cfef7b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierBlacklistMapper.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.domain.mapper; + +import org.apache.ibatis.annotations.Mapper; + +/** + * @Entity com.cmsen.ticket.domain.entity.SupplierBlacklist + */ +@Mapper +public interface SupplierBlacklistMapper { + /** + * @mbg.generated 2021-02-23 16:00:58 + */ + int deleteByPrimaryKey(Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierDiffAllowMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierDiffAllowMapper.java new file mode 100644 index 0000000..a7dcff5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierDiffAllowMapper.java @@ -0,0 +1,18 @@ +package com.cmsen.ticket.domain.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @author ONE MORE THING + * @description 针对表【supplier_diff_allow(差异配置)】的数据库操作Mapper + * @createDate 2022-03-14 14:34:06 + * @Entity com.cmsen.ticket.domain.entity.SupplierDiffAllow + */ +@Mapper +public interface SupplierDiffAllowMapper { + + int deleteByPrimaryKey(Long id); + + Boolean selectDiffAllowByOrgAndCorType(@Param("org") int org, @Param("corType") int corType); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMapper.java new file mode 100644 index 0000000..095dbfd --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMapper.java @@ -0,0 +1,57 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.dto.SupplierUomMappingDTO; +import com.cmsen.ticket.domain.entity.Supplier; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierSearchForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierMapper { + int deleteByPrimaryKey(Integer id); + + int insert(Supplier record); + + int insertSelective(Supplier record); + + Supplier selectByPrimaryKey(Integer id); + + List selectByTaxNo(String name); + + int updateByPrimaryKeySelective(Supplier record); + + int updateByPrimaryKey(Supplier record); + + List list(Map params); + + List list(SupplierSearchForm form); + + int count(Map params); + + int count(SupplierSearchForm form); + + Supplier selectCodeByNameAndCode(@Param("sellerNo") String sellerNo, @Param("code") String code); + Supplier selectCodeByNameAndCode2(@Param("sellerNo") String sellerNo, @Param("code") String code); + Supplier selectByTaxNoCode(@Param("sellerNo") String sellerNo, @Param("code") String code); + Supplier selectBySupplierCodeOnly(@Param("supplierCode") String code); + Supplier selectByName(@Param("name") String name); + String selectSupplierCode(@Param("code") String code); + + Supplier selectByCode(@Param("supplierCode") String supplierCode); + + + + + + List selectCNCompanyTaxNoEmpty(Map params); + + List selectNotCNCompany(); + + + String selectFullNameByTaxNo(String taxNo); + + List selectUomMapping(@Param("supplierCode")String supplierCode); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingLogMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingLogMapper.java new file mode 100644 index 0000000..e629289 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingLogMapper.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierMatchingLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierMatchingLogMapper { + int deleteByPrimaryKey(String id); + + int insert(SupplierMatchingLog record); + + SupplierMatchingLog selectByPrimaryKey(String id); + + List selectByPid(String pid); + + int updateByPrimaryKeySelective(SupplierMatchingLog record); + + List getPriceLogsForMatching(@Param("matchingId") String matchingId); + + List list(Map params); + + int count(Map params); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingMapper.java new file mode 100644 index 0000000..4fcef8f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMatchingMapper.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.dto.SupplierPODto; +import com.cmsen.ticket.domain.entity.SupplierMatching; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SupplierMatchingMapper { + int countByPrimaryKey(String invoiceId); + + int deleteByPrimaryKey(String invoiceId); + + int insert(SupplierMatching record); + + int insertSelective(SupplierMatching record); + + SupplierMatching selectByPrimaryKey(String invoiceId); + +// List selectBySupplierCode(String invoiceId); + + int updateByPrimaryKeySelective(SupplierMatching record); + + int updateByPrimaryKey(SupplierMatching record); + + String getOrderNoByInvoiceId(String invoiceId); + + + SupplierPODto getSupplierPoByNo(String po); + + List selectByOrderNo(String orderNo); + + void deleteByOrderNo(String orderNo); + +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialDefineMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialDefineMapper.java new file mode 100644 index 0000000..ccc2b55 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialDefineMapper.java @@ -0,0 +1,25 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierMaterialDefine; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierMaterialDefineMapper { + + int deleteByPrimaryKey(Long id); + + int insert(SupplierMaterialDefine record); + + SupplierMaterialDefine selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(SupplierMaterialDefine record); + + List listByParams(Map params); + + int countByParams(Map params); + + SupplierMaterialDefine selectSimilar(Map queryMap); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialFilterMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialFilterMapper.java new file mode 100644 index 0000000..9d0997f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialFilterMapper.java @@ -0,0 +1,24 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierMaterialFilter; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierMaterialFilterSearchForm; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SupplierMaterialFilterMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SupplierMaterialFilter record); + + int insertSelective(SupplierMaterialFilter record); + + SupplierMaterialFilter selectByPrimaryKey(Integer id); + + List list(SupplierMaterialFilterSearchForm form); + + int updateByPrimaryKeySelective(SupplierMaterialFilter record); + + int updateByPrimaryKey(SupplierMaterialFilter record); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialMapper.java new file mode 100644 index 0000000..2d8b766 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialMapper.java @@ -0,0 +1,45 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.application.manager.vo.SupplierMaterialDefineVo; +import com.cmsen.ticket.domain.entity.SupplierMaterial; +import com.cmsen.ticket.domain.entity.SupplierMaterialUom; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierMaterialSearchForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierMaterialMapper { + int deleteByPrimaryKey(Integer id); + + int insertSelective(SupplierMaterial record); + + SupplierMaterial selectByPrimaryKey(Integer id); + + List list(SupplierMaterialSearchForm form); + + int count(SupplierMaterialSearchForm form); + + int updateByPrimaryKeySelective(SupplierMaterial record); + + int checkByRecord(SupplierMaterial supplierMaterial); + List getList(SupplierMaterial supplierMaterial); + + List selectMaterialsByInvoiceId(@Param("invoiceId") String invoiceId, @Param("supplierCode") String supplierCode); + + + + List selectByParams(Map params); + + List selectByMaterialNo(String materialNo,String supplierNo); + + List selectBySupplierMaterial(@Param("supplierMaterial") String supplierMaterial,@Param("specification") String specification); + + String selectItemTypeFromMaterialDefine(String itemNo); + + SupplierMaterialDefineVo getSimilarMaterialNo(@Param("itemNo")String itemNo, @Param("supplierCode")String supplierCode, @Param("unitPrice")String unitPrice); + + void deleteHBHS(); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialUomMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialUomMapper.java new file mode 100644 index 0000000..8e0c109 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierMaterialUomMapper.java @@ -0,0 +1,31 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierMaterialUom; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierMaterialUOMSearchForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface SupplierMaterialUomMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SupplierMaterialUom record); + + int insertSelective(SupplierMaterialUom record); + + SupplierMaterialUom selectByPrimaryKey(Integer id); + + List list(SupplierMaterialUOMSearchForm form); + + int count(SupplierMaterialUOMSearchForm form); + + int updateByPrimaryKeySelective(SupplierMaterialUom record); + + int updateByPrimaryKey(SupplierMaterialUom record); + + SupplierMaterialUom selectByItem(@Param("supplier") String supplier, @Param("specification") String specification, @Param("name") String name, @Param("unit") String unit); + + SupplierMaterialUom selectByMaterialNo(String materialNo); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierOrderMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierOrderMapper.java new file mode 100644 index 0000000..9577f19 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierOrderMapper.java @@ -0,0 +1,64 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.application.manager.vo.SupplierInvoiceMatchOrderVo; +import com.cmsen.ticket.domain.entity.SupplierOrder; +import com.cmsen.ticket.interfaces.facade.form.SupplierInvoiceMatchForm; +import com.cmsen.ticket.interfaces.facade.manager.form.SupplierOrderSearchForm; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierOrderMapper { + int deleteByPrimaryKey(Integer id); + + int insertSelective(SupplierOrder record); + + SupplierOrder selectByPrimaryKey(Integer id); + + List selectByOrderNo(String orderNo); + + List list(SupplierOrderSearchForm form); + + int count(SupplierOrderSearchForm form); + + int updateByPrimaryKeySelective(SupplierOrder record); + + List getMatchListForMultiMode(SupplierInvoiceMatchForm form); + + /** + * 按供应商代码匹配订单 + * + * @param params supplierCode 供应商代码 + * @param params all 1 物料 2 金额 3 金额+物料 4 全部 + * @return 返回匹配结果 + */ + List matchOrderBySupplierCode2(Map params); + + SupplierOrder selectForAutoSmartMatching(@Param("id") Integer id); + + List listByPOs(Map params); + + List selectOrderForMaterial(Map params); + + List selectOrderForMaterial2(Map params); + + int deleteByOrderNo(@Param("orderNo") String orderNo); + + List selectUnmatchedSupplierOrder(@Param("bpmNo") String bpmNo); + + List selectUnmatchedByOrderNo(String po); + + List selectListByParams(Map queryMap); + + SupplierOrder selectByState(@Param("receiveNo") String receiveNo,@Param("orderNo") String orderNo,@Param("stateItemNo") String stateItemNo); + + + List selectByExt02(String htNo); + + List getMatchSimilarOrders(Map params); + + SupplierOrder selectSimilarOrder(Map queryMap); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierStateMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierStateMapper.java new file mode 100644 index 0000000..8a4e21d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierStateMapper.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierState; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Date; +import java.util.List; + +@Mapper +public interface SupplierStateMapper { + + List list(); + + void updateEntityIsDel(String userId, String number, Date date); + + List listByPo(String po); + + List listByNumber(String number); + + int insert(SupplierState supplierState); + + void updateIsDel(String isDel,String po); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SupplierUomMappingMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierUomMappingMapper.java new file mode 100644 index 0000000..a0c5e3d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SupplierUomMappingMapper.java @@ -0,0 +1,23 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SupplierUomMapping; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SupplierUomMappingMapper { + + int deleteByPrimaryKey(Long id); + + int insert(SupplierUomMapping record); + + SupplierUomMapping selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(SupplierUomMapping record); + + List listByParams(Map params); + + int countByParams(Map params); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SysUserApproveMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SysUserApproveMapper.java new file mode 100644 index 0000000..c2a5ca1 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SysUserApproveMapper.java @@ -0,0 +1,22 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SysUserApprove; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SysUserApproveMapper { + int deleteByPrimaryKey(Integer userId); + + int insert(SysUserApprove record); + + int insertSelective(SysUserApprove record); + + SysUserApprove selectByPrimaryKey(Integer userId); + + int updateByPrimaryKeySelective(SysUserApprove record); + + int updateByPrimaryKey(SysUserApprove record); + + SysUserApprove selectByOrgId(@Param("userId") String userId, @Param("costCenter") String costCenter); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/SysUserOrgMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/SysUserOrgMapper.java new file mode 100644 index 0000000..76439ce --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/SysUserOrgMapper.java @@ -0,0 +1,20 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.SysUserOrg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface SysUserOrgMapper { + int deleteByPrimaryKey(Integer userId); + + int insert(SysUserOrg record); + + SysUserOrg selectByPrimaryKey(Integer userId); + + int updateByPrimaryKey(SysUserOrg record); + + int updateByPrimaryKeySelective(SysUserOrg record); + + SysUserOrg selectByOrgId(@Param("userId") String userId, @Param("costCenter") String costCenter); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/UserMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/UserMapper.java new file mode 100644 index 0000000..7b5099d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/UserMapper.java @@ -0,0 +1,50 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.User; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface UserMapper { + int deleteByPrimaryKey(Integer userId); + + int insert(User record); + + User verifySelect(User user); + + User selectByPrimaryKey(Integer id); + + User selectByUser(User user); + + int updateByPrimaryKeySelective(User record); + + int updateByUserId(User record); + + int updateByPrimaryKey(User record); + + User selectByAccount(User user); + + List selectByPloxy(String tel); + + String selectEmailByReportKey(String reportId); + + List selectIdsByEmails(List list); + + User selectByProxyId(Integer proxyId); + + List selectSearchList(@Param("name") String name); + + User selectByEmail(@Param("email") String email); + + User selectByTel(@Param("tel") String tel); + + User selectByEmpId(@Param("empId") String empId); + + List selectListByTel(@Param("tel") String tel); + + User selectByOpenId(@Param("openId") String openId, @Param("isDel") String isDel); + + int updateUnionId(@Param("unionId") String unionId, @Param("id") Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/VerifiedUserMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/VerifiedUserMapper.java new file mode 100644 index 0000000..cf2a08a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/VerifiedUserMapper.java @@ -0,0 +1,41 @@ +package com.cmsen.ticket.domain.mapper; + +import com.cmsen.ticket.domain.entity.VerifiedUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface VerifiedUserMapper { + int deleteByPrimaryKey(Integer id); + + int insert(VerifiedUser record); + + VerifiedUser selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(VerifiedUser record); + + VerifiedUser checkByTel(String tel); + + List list(Map params); + + int count(Map params); + + VerifiedUser selectByLoginId(@Param("loginId") String loginId); + + VerifiedUser selectByEmpId(@Param("empId") String empId); + + VerifiedUser checkByTelOrEmail(@Param("telOrEmail") String telOrEmail); + + List export(@Param("orgUnitWord") String orgUnitWord); + + List list2(Map params); + + int count2(Map params); + + List selForStaffSave(); + + void updateForStaffSave(Integer id); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SupplierOrderItemMatchingMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SupplierOrderItemMatchingMapper.java new file mode 100644 index 0000000..de98664 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SupplierOrderItemMatchingMapper.java @@ -0,0 +1,45 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; + +@Mapper +public interface SupplierOrderItemMatchingMapper { + int deleteByPrimaryKey(Long id); + + int insert(SupplierOrderItemMatching record); + + SupplierOrderItemMatching selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(SupplierOrderItemMatching record); + + int insertBatch(List list); + + List selectListByItemId(@Param("itemId") String itemId); + List selectListByOrderId(@Param("orderId") Integer orderId); + List selectBySupplierOrderId(@Param("orderNo") String orderNo); + + int completeMatching(@Param("ids") List ids); + + int deleteByOrderNo(@Param("orderNo") String orderNo); + + int selectCountByInvoiceId(String invoiceId); + + BigDecimal getUsedAmountByOrderId(@Param("orderId") Integer orderId); + + BigDecimal getUsedAmountByItemId(@Param("itemId") String itemId); + + List selectIdsByStatusAndInvoiceId(@Param("invoiceId") String invoiceId, @Param("matchStatus") Integer matchStatus); + + BigDecimal getUsedQuantityByItemId(@Param("itemId") String itemId); + + String getUsedQuantityByOrderId(@Param("orderId") Integer orderId); + + BigDecimal sumMatchingCountByItemId(@Param("itemId") String itemId); + List selectListGroupByInvoiceId(@Param("invoiceId") String invoiceId); + +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysConfigMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysConfigMapper.java new file mode 100644 index 0000000..075addf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysConfigMapper.java @@ -0,0 +1,31 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SysConfigMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SysConfig record); + + SysConfig selectByPrimaryKey(Integer id); + + SysConfig selectByCode(String code); + + int updateByPrimaryKeySelective(SysConfig record); + + List list(String code); + + List list2(Map params); + + int count(Map params); + + List> executeTaskSqlResult(@Param("sql") String sql); + + SysConfig selectByValue(@Param("code") String code, @Param("value") String value); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysMenuMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysMenuMapper.java new file mode 100644 index 0000000..0636f12 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysMenuMapper.java @@ -0,0 +1,27 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysMenu; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SysMenuMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SysMenu record); + + SysMenu selectByPrimaryKey(Integer id); + + List list(Integer isButton); + + List selectMenuButtonsByRole(Integer role, Integer isButton); + + List selectMenuByRole(Integer role); + + List selectMenuByRoleId(Integer role); + + List queryAll(); + + List selectAllMenus(Integer role); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysOrgMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysOrgMapper.java new file mode 100644 index 0000000..2aec979 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysOrgMapper.java @@ -0,0 +1,42 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SysOrgMapper { + int deleteByPrimaryKey(Integer id); + + int insertSelective(SysOrg record); + + SysOrg selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(SysOrg record); + + List list(Map params); + + int count(Map params); + + SysOrg selectByCode(@Param("code") String code); + SysOrg selectByCostcenter(@Param("costcenter") String costcenter); + + SysOrg selectByCostcenter2(@Param("costcenter") String costcenter); + + SysOrg selectByTaxNo(@Param("taxNo") String code); + + List selectForUser(@Param("userId") int userId, @Param("name") String name); + + List selectListByRecord(SysOrg sysOrg); + + List selectOrgListByUserId(@Param("userId") Integer userId); + List selectApproveOrgListByUserId(@Param("userId") Integer userId); + + + List searchByKeyword(@Param("keyword") String keyword); + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMapper.java new file mode 100644 index 0000000..0e8de8f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMapper.java @@ -0,0 +1,32 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysRole; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SysRoleMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SysRole record); + + int insertSelective(SysRole record); + + SysRole selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(SysRole record); + + int updateByPrimaryKey(SysRole record); + + List list(Map params); + + int count(Map params); + + int deleteMenusByRole(Integer id); + + int insertRoleAndMenu(@Param("id") Integer id,@Param("menu") Integer menu); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMenuMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMenuMapper.java new file mode 100644 index 0000000..4f882c6 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysRoleMenuMapper.java @@ -0,0 +1,11 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysRoleMenu; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysRoleMenuMapper { + int insert(SysRoleMenu record); + + int insertSelective(SysRoleMenu record); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserMapper.java new file mode 100644 index 0000000..23e9e24 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserMapper.java @@ -0,0 +1,40 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface SysUserMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SysUser record); + + int insertSelective(SysUser record); + + SysUser selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(SysUser record); + + int updateByPrimaryKey(SysUser record); + + SysUser selectByUserName(String username); + + List list(Map params); + + int count(Map params); + + SysUser selectByEmail(String email); + + SysUser selectByTelAndCode(@Param("tel") String tel, @Param("code") String code); + + SysUser selectByJobNo(@Param("jobNo") String jobNo); + + + @Select("${sql}") + public List> execSelectSql(@Param(value="sql")String sql); +} diff --git a/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserRoleMapper.java b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserRoleMapper.java new file mode 100644 index 0000000..7fa7958 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/mapper/manager/SysUserRoleMapper.java @@ -0,0 +1,19 @@ +package com.cmsen.ticket.domain.mapper.manager; + +import com.cmsen.ticket.domain.entity.manager.SysUserRole; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysUserRoleMapper { + int deleteByPrimaryKey(Integer id); + + int insert(SysUserRole record); + + int insertSelective(SysUserRole record); + + SysUserRole selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(SysUserRole record); + + int updateByPrimaryKey(SysUserRole record); +} diff --git a/src/main/java/com/cmsen/ticket/domain/response/PageDto.java b/src/main/java/com/cmsen/ticket/domain/response/PageDto.java new file mode 100644 index 0000000..20e8bcf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/response/PageDto.java @@ -0,0 +1,28 @@ +package com.cmsen.ticket.domain.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author OWTS + **/ +@Data +public class PageDto { + @ApiModelProperty(value = "页码") + private int pageNo = 1; + @ApiModelProperty(value = "条数") + private int pageSize = 10; + @ApiModelProperty(value = "偏移量", hidden = true) + private int startNo; + + @ApiModelProperty(value = "条数", hidden = true) + private int length; + + public int getStartNo() { + return startNo = (this.pageNo - 1) * pageSize; + } + + public int getLength() { + return pageSize; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/response/Response.java b/src/main/java/com/cmsen/ticket/domain/response/Response.java new file mode 100644 index 0000000..33b851e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/response/Response.java @@ -0,0 +1,63 @@ +package com.cmsen.ticket.domain.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/7/21 18:42 + **/ +@Getter +@Setter +@AllArgsConstructor +public class Response { + @ApiModelProperty("状态码") + private int status; + @ApiModelProperty("返回消息") + private String message; + @ApiModelProperty("结果") + private T result; + + public static Response success() { + return restResult(null, ResponseStatus.SUCCESS.getStatus(), ResponseStatus.SUCCESS.getMessage()); + } + + public static Response success(String message) { + return restResult(null, ResponseStatus.SUCCESS.getStatus(), message); + } + + public static Response success(T result) { + return restResult(result, ResponseStatus.SUCCESS.getStatus(), ResponseStatus.SUCCESS.getMessage()); + } + + public static Response success(int status, T result) { + return restResult(result, status, ResponseStatus.SUCCESS.getMessage()); + } + + public static Response success(int status, String message, T result) { + return restResult(result, status, message); + } + + public static Response failure(String message) { + return restResult(null, ResponseStatus.FAILURE.getStatus(), message); + } + + public static Response failure() { + return restResult(null, ResponseStatus.FAILURE.getStatus(), ResponseStatus.FAILURE.getMessage()); + } + + public static Response failure(int status, String message) { + return restResult(null, status, message); + } + + public static Response response(int status, String message, T result) { + return restResult(result, status, message); + } + + private static Response restResult(T result, int status, String message) { + return new Response<>(status, message, result); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/response/ResponsePage.java b/src/main/java/com/cmsen/ticket/domain/response/ResponsePage.java new file mode 100644 index 0000000..0f8a17f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/response/ResponsePage.java @@ -0,0 +1,40 @@ +package com.cmsen.ticket.domain.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +/** + * @author OWTS + **/ +@Getter +@Setter +public class ResponsePage { + @ApiModelProperty("当前页码") + private int pageNo; + @ApiModelProperty("条数") + private int pageSize; + @ApiModelProperty("总页数") + private int pageTotal; + @ApiModelProperty("总条数") + private long total; + @ApiModelProperty("列表") + private List list; + + public ResponsePage(int pageNo, int pageSize, int pageTotal, long total, List list) { + this.pageNo = pageNo; + this.pageSize = pageSize; + this.pageTotal = pageTotal; + this.total = total; + this.list = list; + } + + public static ResponsePage getPageInfo(PageDto pageDto, int total, List list) { + int totalPage = total / pageDto.getPageSize(); + int pageRow = total % pageDto.getPageSize(); + totalPage = (pageRow == 0) ? totalPage : (totalPage + 1); + return new ResponsePage<>(pageDto.getPageNo(), pageDto.getPageSize(), totalPage, total, list); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/response/ResponsePageUtil.java b/src/main/java/com/cmsen/ticket/domain/response/ResponsePageUtil.java new file mode 100644 index 0000000..5cf3762 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/response/ResponsePageUtil.java @@ -0,0 +1,35 @@ +package com.cmsen.ticket.domain.response; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author OWTS + **/ +public class ResponsePageUtil { + public static ResponsePage getPage(List list, int pageNum, int pageSize) { + int pageTotal = list.size() % pageSize == 0 ? list.size() / pageSize : list.size() / pageSize + 1; + if (pageNum > pageTotal) { + return new ResponsePage<>(pageNum, pageSize, pageTotal, list.size(), new ArrayList<>()); + } + int totalCount = list.size(); + int pageCount = 0; + List subList; + int m = totalCount % pageSize; + if (m > 0) { + pageCount = totalCount / pageSize + 1; + } else { + pageCount = totalCount / pageSize; + } + if (m == 0) { + subList = list.subList((pageNum - 1) * pageSize, pageSize * (pageNum)); + } else { + if (pageNum == pageCount) { + subList = list.subList((pageNum - 1) * pageSize, totalCount); + } else { + subList = list.subList((pageNum - 1) * pageSize, pageSize * (pageNum)); + } + } + return new ResponsePage<>(pageNum, pageSize, pageTotal, list.size(), subList); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/response/ResponseStatus.java b/src/main/java/com/cmsen/ticket/domain/response/ResponseStatus.java new file mode 100644 index 0000000..d89a988 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/response/ResponseStatus.java @@ -0,0 +1,34 @@ +package com.cmsen.ticket.domain.response; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/7/21 18:41 + **/ +public enum ResponseStatus { + SUCCESS(200, "SUCCESS"), + FAILURE(500, "FAILURE"), + BAD_REQUEST(400, "BAD_REQUEST"), + UNAUTHORIZED(401, "UNAUTHORIZED"), + FORBIDDEN(403, "FORBIDDEN"), + NOT_FOUND(404, "NOT_FOUND"), + UNSUPPORTED_MEDIA_TYPE(415, "UNSUPPORTED_MEDIA_TYPE"), + SERVER_ERROR(500, "SERVER_ERROR"), + BAD_GATEWAY(502, "BAD_GATEWAY"); + + private int status; + private String message; + + ResponseStatus(int status, String message) { + this.status = status; + this.message = message; + } + + public int getStatus() { + return this.status; + } + + public String getMessage() { + return this.message; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/Base64Utils.java b/src/main/java/com/cmsen/ticket/domain/util/Base64Utils.java new file mode 100644 index 0000000..ce3c60e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/Base64Utils.java @@ -0,0 +1,156 @@ +package com.cmsen.ticket.domain.util; + +import lombok.Data; +import sun.misc.BASE64Decoder; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Base64; + + +/** + * @Author OWTS + * @Date 2020/11/29$ 18:10$ + * @Description + * @Version 1.0 + **/ +public class Base64Utils { + public String getSubImage(String sourceImage, ImageInfo imageInfo) throws IOException { + byte[] decode = Base64.getDecoder().decode(sourceImage); + InputStream inputStream = new ByteArrayInputStream(decode); + BufferedImage bi = ImageIO.read(inputStream); + BufferedImage subImage = bi.getSubimage(imageInfo.x, imageInfo.y, imageInfo.width, imageInfo.height); + return bufferImageToBase64(subImage); + } + + private String bufferImageToBase64(BufferedImage bufferedImage) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(bufferedImage, "jpg", baos); + byte[] bytes = baos.toByteArray(); + Base64.Encoder encoder = Base64.getEncoder(); + String trim = encoder.encodeToString(bytes); + return trim.replaceAll("\n", "").replaceAll("\r", ""); + } + + @Data + public static class ImageInfo { + // 横轴开始坐标 + private int x; + // 纵轴开始坐标 + private int y; + // 横轴结束坐标 + private int width; + // 纵轴结束坐标 + private int height; + + public ImageInfo(int x1, int y1, int x2, int y2) { + this.x = x1; + this.y = y1; + this.width = x2 - x; + this.height = y2 - y; + } + } + + public static void pdfBase64ToPdf(String base64,String outFile){ + // 读取文件转换为String + BASE64Decoder decoder = new BASE64Decoder(); + byte[] decodedBytes = new byte[0]; + try { + decodedBytes = decoder.decodeBuffer(base64); + } catch (IOException e) { + e.printStackTrace(); + } + File file = new File(outFile); + FileOutputStream fop = null; + try { + fop = new FileOutputStream(file); + fop.write(decodedBytes); + fop.flush(); + fop.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String extractMimeFromDataUrl(String dataUrl) { + if (dataUrl == null || !dataUrl.startsWith("data:")) { + return null; + } + // 去掉 data: + String sub = dataUrl.substring(5); + // 找到第一个分号 ; + int semicolonIndex = sub.indexOf(';'); + if (semicolonIndex == -1) { + return null; + } + return sub.substring(0, semicolonIndex); + } + /** + * 解析data:xxx;base64,xxxx 格式base64,保存到文件 + * @param base64WithMime 带MIME前缀的base64字符串 + * @param targetFilePathWithoutSuffix 不带后缀的输出路径,例如:/tmp/output + * @return 实际生成的完整文件路径(自动追加后缀 .pdf/.png/.jpg) + * @throws Exception mime不支持、base64解析失败、IO异常 + */ + public static String saveMimeBase64ToFile(String base64WithMime, String targetFilePathWithoutSuffix) throws Exception { + int commaIndex = base64WithMime.indexOf(','); + if (commaIndex == -1) { + // 没有逗号,不是标准data-url格式 + throw new IllegalArgumentException("缺少逗号分隔符,不是data base64格式"); + } + + String mimePart = extractMimeFromDataUrl(base64WithMime.substring(0, commaIndex)); // data:application/pdf;base64 + String base64Content = base64WithMime.substring(commaIndex + 1); // base64本体 + // 清除换行空格 + base64Content = base64Content.replaceAll("\\s", ""); + + // 识别后缀 + String suffix; + switch (mimePart) { + case "application/pdf": + suffix = ".pdf"; + break; + case "image/png": + suffix = ".png"; + break; + case "image/jpeg": + case "image/jpg": + suffix = ".jpg"; + break; + default: + throw new IllegalArgumentException("不支持的MIME类型:" + mimePart + ",仅支持pdf/png/jpeg"); + } + + // base64解码 + byte[] fileBytes; + try { + fileBytes = java.util.Base64.getDecoder().decode(base64Content); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("base64解码失败,存在非法字符", e); + } + + // 简单校验文件头 + boolean validHeader = false; + if (suffix.equals(".pdf")) { + validHeader = fileBytes.length >=5 && new String(fileBytes,0,5, StandardCharsets.ISO_8859_1).startsWith("%PDF"); + } else if (suffix.equals(".png")) { + // PNG头 89 50 4E 47 + validHeader = fileBytes.length >=4 && (fileBytes[0] == (byte)0x89 && fileBytes[1] == 0x50 && fileBytes[2]==0x4E && fileBytes[3]==0x47); + } else if (suffix.equals(".jpg")) { + // jpeg FF D8 + validHeader = fileBytes.length >=2 && (fileBytes[0] == (byte)0xFF && fileBytes[1]==(byte)0xD8); + } + if (!validHeader) { + throw new RuntimeException("解码后字节与MIME类型不匹配,文件头校验失败,mime=" + mimePart); + } + + // 写出文件 + String fullPath = targetFilePathWithoutSuffix + suffix; + Files.write(Paths.get(fullPath), fileBytes); + return fullPath; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/DateUtils.java b/src/main/java/com/cmsen/ticket/domain/util/DateUtils.java new file mode 100644 index 0000000..fdf8809 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/DateUtils.java @@ -0,0 +1,180 @@ +package com.cmsen.ticket.domain.util; + +import com.cmsen.common.util.DateFormat; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Calendar; +import java.util.Date; + +/** + * 日期格式 + */ +public class DateUtils { + + + public static Date formatDate(String dateString){ + + String lastString = ""; + if (dateString != null && dateString.trim().length() > 0) { + dateString = dateString.replaceAll("[\\/|\\.]+", "-"); + + //将年、月、日进行解析 + String[] split = dateString.split("-"); + String d1 = split[0]; + String d2 = split[1]; + String d3 = split[2]; + + if(d1.length() == 4){//第一位是4位数---年月日 + lastString = dateString; + }else if(d3.length() == 4){//第三位是4位数 + if(Integer.parseInt(d1) <= 12){//第一位小于12---月日年 + lastString = d3 + "-" + d1 + "-" + d2; + }else{//第一位大于12---日月年 + lastString = d3 + "-" + d2 + "-" + d1; + } + }else{//第一、三位都不是4位数 + + //得到当前年份、上一年份 + Calendar now = Calendar.getInstance(); + String year = String.valueOf(now.get(Calendar.YEAR)); + String lastyear = String.valueOf(now.get(Calendar.YEAR)-1); + String year2 = year.substring(2,4); + String lastyear2 = lastyear.substring(2,4); + + if(d1.equals(year2)){//第一位是当前年份--年月日 + lastString = year + "-" + d2 + "-" + d3; + }else if(d1.equals(lastyear2)){//第一位是上一年份--年月日 + lastString = lastyear + "-" + d2 + "-" + d3; + }else if(d3.equals(year2)){//第三位是当前年份 + if(Integer.parseInt(d1) <= 12){ + lastString = year + "-" + d1 + "-" + d2; + }else{ + lastString = year + "-" + d2 + "-" + d1; + } + }else if (d3.equals(lastyear2)){//第三位是上一年份 + if(Integer.parseInt(d1) <= 12){ + lastString = lastyear + "-" + d1 + "-" + d2; + }else{ + lastString = lastyear + "-" + d2 + "-" + d1; + } + }else{ + lastString = ""; + } + } + + if(!lastString.equals("")){ + return DateFormat.parse(lastString); + }else{ + return null; + } + } else { + return null; + } + + } + + /** + * 英文格式的转换成数字 May 5, 2016 ---->2016-05-05 + * @param beforeString + * @return + */ + public static String EnToString(String beforeString){ + String[] arr = beforeString.replace(",","").split(" "); + String yy = arr[2]; + String mm = arr[0]; + String dd = arr[1]; + + //处理月份 + switch (mm) { + case "Jan": + mm = "01"; + break; + case "Feb": + mm = "02"; + break; + case "Mar": + mm = "03"; + break; + case "Apr": + mm = "04"; + break; + case "May": + mm = "05"; + break; + case "Jun": + mm = "06"; + break; + case "Jul": + mm = "07"; + break; + case "Aug": + mm = "08"; + break; + case "Sep": + mm = "09"; + break; + case "Oct": + mm = "10"; + break; + case "Nov": + mm = "11"; + break; + case "Dec": + mm = "12"; + break; + default: + mm = "13"; + break; + } + if(mm.equals("13")){ + return "-1"; + } + if(yy.length() != 4 || Integer.parseInt(dd) > 31){ + return "-1"; + } + + if(dd.length() == 1){ + dd = "0" + dd; + } + + String toString = yy +"-"+ mm +"-"+ dd; + + return toString; + } + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + /** + * 校验并处理开票日期字符串 + * @param invoiceDateStr 待处理日期字符串 yyyy-MM-dd + * @param exceptionMons 向前推几个月 + * @return 符合范围返回原字符串,否则返回空字符串 "" + */ + public static String handleInvoiceDate(String invoiceDateStr, int exceptionMons) { + // 空值直接返回空 + if (invoiceDateStr == null || invoiceDateStr.isEmpty()) { + return ""; + } + + LocalDate invoiceDate; + try { + invoiceDate = LocalDate.parse(invoiceDateStr.trim(), FORMATTER); + } catch (DateTimeParseException e) { + // 格式不正确,直接置空 + return ""; + } + + LocalDate today = LocalDate.now(); + LocalDate minDate = today.minusMonths(exceptionMons); + + // 大于今天 或者 早于最小日期 → 返回空 + if (invoiceDate.isAfter(today) || invoiceDate.isBefore(minDate)) { + return ""; + } + // 合法返回原值 + return invoiceDateStr; + } + +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/HttpInterfaceUtil.java b/src/main/java/com/cmsen/ticket/domain/util/HttpInterfaceUtil.java new file mode 100644 index 0000000..270447e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/HttpInterfaceUtil.java @@ -0,0 +1,108 @@ +package com.cmsen.ticket.domain.util; + + +import lombok.extern.slf4j.Slf4j; +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.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.Charset; + +/** + * http接口类 + */ +@Slf4j +public class HttpInterfaceUtil { + + /** + * SOAP webService调用 + * @param destUrl + * @param postData + * @return + * @throws Exception + */ + public static String soapHttpPost(String destUrl, String postData) throws Exception { + URL url = new URL(destUrl); + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + if (conn == null) { + return null; + } + conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + conn.setFollowRedirects(true); + conn.setAllowUserInteraction(false); + conn.setRequestMethod("POST"); + + System.out.println("post data size:" + postData.length()); + + OutputStream out = conn.getOutputStream(); + OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8"); + writer.write(postData); + writer.close(); + out.close(); + + System.out.println("connection status: " + conn.getResponseCode() +"; connection response: " +conn.getResponseMessage()); + + InputStream in = conn.getInputStream(); + InputStreamReader iReader = new InputStreamReader(in,"UTF-8"); + BufferedReader bReader = new BufferedReader(iReader); + + String line; + String response = ""; + System.out.println("==================Service response: ================ "); + while ((line = bReader.readLine()) != null) { + System.out.println(line); + response += line; + } + iReader.close(); + bReader.close(); + in.close(); + conn.disconnect(); + + return response; + } + + + public static String doPostSoap(String postUrl, String soapXml, String soapAction) { + String retStr = ""; + // 创建HttpClientBuilder + HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); + // HttpClient + CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); + HttpPost httpPost = new HttpPost(postUrl); + // 设置请求和传输超时时间 + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(6000) + .setConnectTimeout(6000).build(); + httpPost.setConfig(requestConfig); + try { + httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8"); + httpPost.setHeader("SOAPAction", soapAction); + StringEntity data = new StringEntity(soapXml, Charset.forName("UTF-8")); + httpPost.setEntity(data); + CloseableHttpResponse response = closeableHttpClient.execute(httpPost); + HttpEntity httpEntity = response.getEntity(); + if (httpEntity != null) { + // 打印响应内容 + retStr = EntityUtils.toString(httpEntity, "UTF-8"); + System.out.println("response:" + retStr); + } + // 释放资源 + closeableHttpClient.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return retStr; + } + + +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/Pagination.java b/src/main/java/com/cmsen/ticket/domain/util/Pagination.java new file mode 100644 index 0000000..99a0599 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/Pagination.java @@ -0,0 +1,61 @@ +package com.cmsen.ticket.domain.util; + +public class Pagination { + private int pageNo = 1; + private int pageSize = 15; + private int pageTotal; + private int total; + + public Pagination(int total) { + this.setTotal(total); + } + + public Pagination(int total, int pageSize) { + this.setPageSize(pageSize); + this.setTotal(total); + } + + public Pagination(int total, int pageSize, int pageNo) { + this.setPageNo(pageNo); + this.setPageSize(pageSize); + this.setTotal(total); + } + + public int getPageNo() { + return this.pageNo; + } + + public Pagination setPageNo(int pageNo) { + this.pageNo = pageNo <= 0 ? 1 : pageNo; + return this; + } + + public int getPageSize() { + return this.pageSize; + } + + public Pagination setPageSize(int pageSize) { + this.pageSize = pageSize <= 0 ? 1 : pageSize; + this.pageTotal = (int) Math.ceil(1.0D * (double) this.total / (double) pageSize); + return this; + } + + public int getPageTotal() { + return this.pageTotal; + } + + public Pagination setPageTotal(int pageTotal) { + this.pageTotal = pageTotal; + return this; + } + + public int getTotal() { + return this.total; + } + + public Pagination setTotal(int total) { + this.total = total; + this.pageTotal = (int) Math.ceil(1.0D * (double) total / (double) this.pageSize); + return this; + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/PaginationUtil.java b/src/main/java/com/cmsen/ticket/domain/util/PaginationUtil.java new file mode 100644 index 0000000..dfdf6a2 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/PaginationUtil.java @@ -0,0 +1,68 @@ +package com.cmsen.ticket.domain.util; + +import com.cmsen.ticket.interfaces.facade.manager.form.PaginationForm; +import lombok.*; + +import java.util.Map; + +/** + * @Author OWTS > + * @Date 2020/7/30 + * @Description + */ +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class PaginationUtil { + private Object data; + private Pagination pagination; + + /** + * 无pageNo不分页 + * + * @param total 数据总数 + * @param form 分页参数数据 + * @param data 数据 + * @author jared.Yan (yanhuaiwen@163.com) + */ + public static Object getPageResult(int total, PaginationForm form, Object data) { + if (form != null && form.getStartNo() != null) { + return new PaginationUtil(data, new Pagination(total, form.getLength(), form.getStartNo())); + } else { + return data; + } + } + + /** + * 匹配pageSize,pageNo,若无,不分页 + * + * @param params + */ + public static void paginationInit(Map params) { + if (params.containsKey("pageSize") && params.containsKey("pageNo")) { + params.put("startNo", (Integer.parseInt(params.get("pageNo").toString()) - 1) + * Integer.parseInt(params.get("pageSize").toString())); + params.put("length", Integer.parseInt(params.get("pageSize").toString())); + } + } + + /** + * 返回查询结果,包含分页信息 + * + * @param total + * @param params + * @param data + * @return + */ + public static Object getPageResult(int total, Map params, Object data) { + if (params.containsKey("pageSize") && params.containsKey("pageNo")) { + Pagination pagination = new Pagination(total, Integer.parseInt(params.get("pageSize").toString()), + Integer.parseInt(params.get("pageNo").toString())); + return new PaginationUtil(data, pagination); + } else { + return data; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/util/StringUtils.java b/src/main/java/com/cmsen/ticket/domain/util/StringUtils.java new file mode 100644 index 0000000..2b11149 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/util/StringUtils.java @@ -0,0 +1,301 @@ +package com.cmsen.ticket.domain.util; + +import com.cmsen.common.util.DateFormat; +import com.cmsen.common.util.StringUtil; +import org.apache.commons.codec.binary.Base64; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/1/8 20:54 + **/ +public class StringUtils { + + private static final String REG_EX = "\\pP|\\pS|\\s+"; + + private static final String regEx="[`~!@#$%^&*()+=|{}':;',//[//].·<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; + + private static final String regEx2 = "\\\\s*|\\t|\\r|\\n"; + + + public static boolean isAddress(String str){ + String regex = "([\u4e00-\u9fa5]+(?:省|市|自治区))?([\u4e00-\u9fa5]+(?:市|区|县|州|盟))?([\u4e00-\u9fa5]+(?:街道|镇|乡))?([\u4e00-\u9fa5]+(?:号|村|社))?([\u4e00-\u9fa5]+(?:路|街|巷))?(.+(?:弄|号楼|栋|单元|号|座|幢|中心))?"; + return str.matches(regex); + } + + public static boolean hasChineseCharacter(String str) { + str += ""; + for (char c : str.toCharArray()) { + if (c >= 0x4E00 && c <= 0x9FA5){ + return true; + } + } + return false; + } + + public static String getStringWithOutSpecialCode(String chars) { + if (!StringUtil.isEmpty(chars)) { + chars = Pattern.compile(REG_EX).matcher(chars).replaceAll("").trim(); + return chars; + } + return ""; + } + + public static String getStringWithOutSpecialCode2(String chars) { + if (chars == null) return null; + chars = Pattern.compile(REG_EX).matcher(chars).replaceAll("").trim(); + return chars; + } + + public static String getStringReplaceSpecialCode(String chars) { + if (!StringUtil.isEmpty(chars)) { + chars = Pattern.compile(regEx).matcher(chars).replaceAll("_").trim(); + return chars; + } + return ""; + } + + public static String getStringReplaceSpecialCode4(String chars) { + if (!StringUtil.isEmpty(chars)) { + chars = Pattern.compile(regEx).matcher(chars).replaceAll("").trim(); + return chars; + } + return ""; + } + + public static String getStringReplaceSpecialCode2(String chars) { + if (!StringUtil.isEmpty(chars)) { + chars = Pattern.compile(regEx2).matcher(chars).replaceAll("").trim(); + return chars; + } + return ""; + } + + public static String getStringReplaceSpecialCode3(String chars) { + if (!StringUtil.isEmpty(chars)) { + chars = Pattern.compile(regEx).matcher(chars).replaceAll("").trim(); + return chars; + } + return ""; + } + + public static boolean isInteger(String str) { + if (null == str) { + return false; + } + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); + return pattern.matcher(str).matches(); + } + + public static void decoderUrl(Map params) { + params.forEach((k, v) -> { + try { + if (v instanceof CharSequence) { + params.put(k, URLDecoder.decode(v.toString().trim(), "UTF-8")); + } + } catch (UnsupportedEncodingException e) { + } + }); + } + + + public static String formatDate(String dateStr) { + if (StringUtil.isBlank(dateStr)) { + return null; + } + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy"); + try { + return DateFormat.format(sdf.parse(dateStr), DateFormat.DatePatternType.FORMAT_yyyy_MM_dd); + } catch (Exception e) { + } + Date parseDate = DateFormat.parse(dateStr); + if (null == parseDate) { + return null; + } + return DateFormat.format(parseDate, DateFormat.DatePatternType.FORMAT_yyyy_MM_dd); + } + + /** + * 根据备注获取PO号 + * + * @param remark + * @return + * @example P0 NP021-00010 + */ + public static String getPO(String remark) { + if (!StringUtil.isEmpty(remark)) { + remark = remark.trim(); + String regEx = "NP.{3}-.+"; + Pattern pattern = Pattern.compile(regEx); + Matcher matcher = pattern.matcher(remark); + if (matcher.find()) { + String group = matcher.group(); + return group.length() > 11 ? group.substring(0, 11) : group; + } + return null; + } + return null; + } + + + + public static String getPOByReg(String remark,String regEx) { + if (!StringUtil.isEmpty(remark)) { + remark = remark.trim(); +// String regEx = "NP.{3}-.+"; + Pattern pattern = Pattern.compile(regEx); + Matcher matcher = pattern.matcher(remark); + if (matcher.find()) { + String group = matcher.group(); + return group.length() > 11 ? group.substring(0, 11) : group; + } + return null; + } + return null; + } + + public static String stringToInt(String str) { + if (str.contains("@")) { + //str = str.substring(0, str.indexOf("@")); + //增加@后面两位 2022/9/6 + str = str.substring(0, str.indexOf("@")+3).replace("@",""); + System.out.println(str); + } + StringBuilder res = new StringBuilder(); + for (int i = 0; i < str.length(); i++) { + res.append((int) str.charAt(i)); + } + return res.toString(); + } + + public static String formatUrl(String url, String seg) { + return url == null ? null : url.replace("\\", "/"); + } + + + /** + * web类型的unicode转string + * @param input + * @return + */ + public static String WebUnicodeToString(String input) { + //input = input.substring(input.indexOf("&")); + String str = ""; + String[] y1 = input.split(";"); + for (String c : y1) { + int a = c.indexOf("&#"); + if(a != -1){ + str += c.substring(0,a); + c = c.substring(a); + if (c.length() > 2) { + str += (char) Integer.parseInt(c.substring(2)); + } + }else{ + str +=c; + } + } + return str; + } + + public static String removePercentDecimal(String percentStr) { + // 1. 校验空值/非百分比字符串 + if (percentStr == null || !percentStr.contains("%")) { + return percentStr; // 原样返回,避免异常 + } + // 2. 拆分数字部分和百分号 + String numPart = percentStr.substring(0, percentStr.indexOf("%")); + // 3. 去除末尾的小数点和零 + if (numPart.contains(".")) { + // 去掉末尾的0 + numPart = numPart.replaceAll("0*$", ""); + // 去掉末尾的小数点(如果只剩小数点) + numPart = numPart.replaceAll("\\.$", ""); + } + // 4. 拼接百分号返回 + return numPart + "%"; + } + + public static void main(String asd[]) throws IOException { + System.out.println(getStringWithOutSpecialCode("茵梦达电机(中国)有限公司")); + System.out.println(getStringWithOutSpecialCode("茵梦达电机(中国)有限公司")); + +// test(); +// String filePath = "/202307/23071110343/Express_Panorama__3.jpg"; +// +// int index = filePath.lastIndexOf("/"); +// +// String dir = filePath.substring(0,index+1); +// String fileName = filePath.substring(index); +// System.out.println(dir); +// String e = "http://10.66.14.149/api/img/bayer/2023112701/83288dc6-90e2-4d5f-852a-f96841e975a7.pdf"; +// String fileName = "ext.pdf"; +// System.out.println(fileName.substring(0,fileName.indexOf("."))); +// String localTestFile = "D:\\home\\img\\1.jpg"; +// String fileName = "test.jpg"; +// String base64 = Base64Util.fileToBase64(localTestFile); + +// String po = getPO("9698677711"); +// System.out.println(po); +// String message = "123213123"; +// String suiteKey = "suiteKey"; +// String suiteKeyValue = "e32e083695b74351b9e1a46eab2fb7b3"; +// String tenantId = "tenantId"; +// String tenantIdValue = "hc6h4yne"; +// String timestamp = "timestamp"; +// long timestampValue = new Date().getTime(); +// String pj = suiteKey+suiteKeyValue+tenantId+tenantIdValue+timestamp+timestampValue; +// SecretKey secretKey = KeyAgreementSpi.engineGenerateSecret(suiteKeyValue); +// // 创建HMAC-SHA256的Mac实例 +// Mac mac = Mac.getInstance("HmacSHA256"); +// // 初始化Mac实例,并设置密钥 +// mac.init(secretKey); +// // 计算认证码 +// byte[] hmac = mac.doFinal(message.getBytes()); +// System.out.println("HMAC-SHA256: " + bytesToHex(hmac)); + } + + public static void test(){ + String clientId = "c04b6670-4f3c-4be7-8a30-e0204617212a";//需要替换 + String securet = "MmJhZjZkNGUtM2E2YS00NTYyLThkMjAtOGNmOGQ5ZTE0N2I4";//需要替换 + String tokenUrl = "https://apistage.huilianyi.com/gateway/oauth/token";//需要替换 + + int MAX_TIME_OUT = 1000 * 120; + HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(); + httpRequestFactory.setConnectionRequestTimeout(MAX_TIME_OUT); + httpRequestFactory.setConnectTimeout(MAX_TIME_OUT); + httpRequestFactory.setReadTimeout(MAX_TIME_OUT); + RestTemplate restTemplate = new RestTemplate(); + restTemplate.setRequestFactory(httpRequestFactory); + + HttpHeaders httpHeaders = new HttpHeaders(); + String authStr = clientId.concat(":").concat(securet); + String authStrEnc = new String(Base64.encodeBase64(authStr.getBytes())); + httpHeaders.set("Authorization", "Basic ".concat(authStrEnc)); + + MultiValueMap formData = new LinkedMultiValueMap(); + formData.add("grant_type", "client_credentials"); + formData.add("scope", "write"); + + HttpEntity httpEntity = new HttpEntity(formData, httpHeaders); + ResponseEntity exchange = restTemplate.exchange(tokenUrl, HttpMethod.POST, httpEntity, String.class); + String respone = exchange.getBody(); + System.out.println(respone); + } +} diff --git a/src/main/java/com/cmsen/ticket/domain/vo/AIMaterialVO.java b/src/main/java/com/cmsen/ticket/domain/vo/AIMaterialVO.java new file mode 100644 index 0000000..10b536a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/vo/AIMaterialVO.java @@ -0,0 +1,37 @@ +package com.cmsen.ticket.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AIMaterialVO { + //{ + // "ids": [ + // 0, + // 2, + // 1 + // ], + // "scores": [ + // 0.6152831315994263, + // 0.4760909974575043, + // 0.4201146066188812 + // ], + // "texts": [ + // "上海虹桥", + // "shanghai", + // "北京" + // ] + //} + + private List ids; + + private List scores; + + private List texts; + +} diff --git a/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceItemsVo.java b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceItemsVo.java new file mode 100644 index 0000000..ad7b150 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceItemsVo.java @@ -0,0 +1,73 @@ +package com.cmsen.ticket.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cmsen.ticket.domain.entity.manager.SupplierOrderItemMatching; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * corporate_invoice_items + */ +@Data +@Slf4j +public class CorporateInvoiceItemsVo implements Serializable { + + + @ExcelIgnore + private String id; + @ExcelProperty(value = "序号", index = 0) + private String indexNo; + @ExcelProperty(value = "产品名称", index = 1) + private String name; + @ExcelProperty(value = "单位", index = 3) + private String unit; + @ExcelProperty(value = "数量", index = 4) + private String quantity; + @ExcelProperty(value = "单价", index = 5) + private String price; + @ExcelProperty(value = "发票金额", index = 6) + private String total; + @ExcelIgnore + private String extraFields; + @ExcelProperty(value = "规格型号", index = 2) + private String specification; + @ExcelProperty(value = "税额", index = 9) + private String tax; + @ExcelProperty(value = "税率", index = 8) + private String taxRate; + @ExcelProperty(value = "折扣金额", index = 10) + private String deductionAmount; + @ExcelIgnore + private String deductionTaxRate; + @ExcelProperty(value = "折扣税额", index = 11) + private String deductionTax; + @ExcelIgnore + private BigDecimal usedAmount; + @ExcelIgnore + private BigDecimal unUsedAmount; + @ExcelProperty(value = "剩余匹配金额", index = 7) + private String unUsedAmountStr; + @ExcelIgnore + private BigDecimal usedQuantity; + @ExcelIgnore + private BigDecimal unUsedQuantity; + @ExcelProperty(value = "差异", index = 12) + private String difference; + @ExcelIgnore + private String originUnit; + @ExcelIgnore + private String invoiceNumber; + @ExcelIgnore + private String originQuantity; + @ExcelIgnore + private String originPrice; + @ExcelIgnore + private List itemMatchingList; + @ExcelIgnore + private int priceType; +} diff --git a/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceMatchingItemVo.java b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceMatchingItemVo.java new file mode 100644 index 0000000..5d8606b --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceMatchingItemVo.java @@ -0,0 +1,15 @@ +package com.cmsen.ticket.domain.vo; + +import com.cmsen.ticket.domain.entity.CorporateInvoiceItems; +import lombok.Data; + +import java.util.List; + +@Data +public class CorporateInvoiceMatchingItemVo { + + private List dataResult; + private int total; + private int pageSize; + private int currentPage; +} diff --git a/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceVo.java b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceVo.java new file mode 100644 index 0000000..726f900 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/vo/CorporateInvoiceVo.java @@ -0,0 +1,45 @@ +package com.cmsen.ticket.domain.vo; + +import lombok.Data; + +@Data +public class CorporateInvoiceVo { + + //扩展字段 + private String expand; + private String expand1; + private String expand2; + private String expand3; + private String expand4; + private String expand5; + private String expand6; + private String expand7; + private String expand8; + private String expand9; + private String costCenter; + + private String id; + + private String company; //corporateInvoice buyer + + private String name; //sys_user.id =corporateInvoice.owner + + private String subject; //account_mapping type + + private String ledger; //sys_org ledger + + private String companyId; // sys_org company_id getCode // + + private String depId; // sys_org code //corporateInvoice.org_id = sys_org.id + + private String period; + private String sourceId; + private String code; + private String number; + private String depName; + + // select buyer,name,type,ledger,companyid,code from sys_user,sys_org ,corporate_invoice,account_mapping where + // sys_user.id =corporateInvoice.owner and corporateInvoice.org_id = sys_org.id and corporateInvoice.subject = account_mapping.id + + //Column 'NAME' in field list is ambiguous +} diff --git a/src/main/java/com/cmsen/ticket/domain/vo/SupplierOrderItemsVo.java b/src/main/java/com/cmsen/ticket/domain/vo/SupplierOrderItemsVo.java new file mode 100644 index 0000000..8c800e5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/domain/vo/SupplierOrderItemsVo.java @@ -0,0 +1,43 @@ +package com.cmsen.ticket.domain.vo; + +import lombok.Data; + +@Data +public class SupplierOrderItemsVo { + + private String orderNo; + private String nowDate; + private String number; + private String code; + private String sourceCode; + private String sourceId; + private String lineNum; + private String receiveNo; + private String itemNo; + private String quantity; + private String price; + private String total; + private String tax; + private String orderId; + private String itemNo2; + private String quantity2; + private String deductionAmount; + private String deductionTax; + private String priceType; + private String matchType; + private String itemId; + private String pretaxAmount; + private String sellerName; + private String sellerNo; + private String invoiceDate; + private String buyerName; + private String buyerNo; + private String ticketCode; + private String kind; + private String itemName; + private String itemUnit; + private String invoiceId; + private String taxRate; + private String exchangeRateDate; + private String supplierCode; +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/ApiAccessLog.java b/src/main/java/com/cmsen/ticket/infrastructure/config/ApiAccessLog.java new file mode 100644 index 0000000..728b685 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/ApiAccessLog.java @@ -0,0 +1,22 @@ +package com.cmsen.ticket.infrastructure.config; + +import lombok.Data; + +@Data +public class ApiAccessLog { + private String timestamp; + private String http_method; + private String request_url; + private Integer http_status_code; + private String client_ip; + private String trace_id; + private String user_id; + private String username; + private String service_account; + private String client_id; + private String api_key_id; + private String application_name; + private String environment; + private Long response_time_ms; + private String user_agent; +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/OkHttpMonitorInterceptor.java b/src/main/java/com/cmsen/ticket/infrastructure/config/OkHttpMonitorInterceptor.java new file mode 100644 index 0000000..0cf39d3 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/OkHttpMonitorInterceptor.java @@ -0,0 +1,50 @@ +package com.cmsen.ticket.infrastructure.config; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class OkHttpMonitorInterceptor implements Interceptor { + private static final String OKHTTP_CLIENT_UA = "cmsen-ticket-okhttp-client/1.0"; + @Override + public Response intercept(Chain chain) throws IOException { + OuterHttpMonitorLog monitorLog = new OuterHttpMonitorLog(); + long start = System.currentTimeMillis(); + Request request = chain.request(); + + try { + // 填充请求基础信息 + monitorLog.setHttp_method(request.method()); + monitorLog.setRequest_url(request.url().toString()); + monitorLog.setEnvironment("IMS"); + // UA + String ua = request.header("User-Agent"); + if (ua==null) { + ua = OKHTTP_CLIENT_UA; + } + monitorLog.setUser_agent(ua); + // 如果尚未设置User‑Agent,则填充 + // 执行请求 + Response response = chain.proceed(request); + long cost = System.currentTimeMillis() - start; + + // 响应信息 + monitorLog.setHttp_status_code(response.code()); + monitorLog.setResponse_time_ms(cost); + + // 输出日志 + OuterHttpLogUtil.printMonitorLog(monitorLog); + return response; + } catch (Exception e) { + long cost = System.currentTimeMillis() - start; + monitorLog.setHttp_status_code(-1); + monitorLog.setResponse_time_ms(cost); + OuterHttpLogUtil.printMonitorLog(monitorLog); + throw e; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpLogUtil.java b/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpLogUtil.java new file mode 100644 index 0000000..37ea8dd --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpLogUtil.java @@ -0,0 +1,64 @@ +package com.cmsen.ticket.infrastructure.config; + +import com.alibaba.fastjson2.JSON; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.UUID; + +public class OuterHttpLogUtil { + // 单独日志appender:logback可配置 outer_http_monitor.log + private static final Logger OUTER_HTTP_LOG = LoggerFactory.getLogger("outerHttpMonitor"); + + /** + * 填充公共上下文字段 traceId、用户信息、本机IP + */ + public static void fillCommonField(OuterHttpMonitorLog log) { + // ✅从当前业务线程MDC拿traceId(业务链路已经put好了) + String traceId = MDC.get("traceId"); + if(StringUtils.isEmpty(traceId)){ + traceId = UUID.randomUUID().toString(); + } + // 1. traceId 取自MDC(sleuth/mdc埋点) + log.setTrace_id(traceId); + log.setCorrelation_id(traceId); + // 2. 本机服务IP client_ip + try { + InetAddress localHost = InetAddress.getLocalHost(); + log.setClient_ip(localHost.getHostAddress()); + } catch (UnknownHostException e) { + MDC.remove("traceId"); + log.setClient_ip("unknown"); + } + + // 3. 从Web上下文取登录用户(根据你项目上下文自行适配) + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (requestAttributes instanceof ServletRequestAttributes) { + HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); + // 从MDC/request attribute拿用户信息,示例自行替换 + Object userId = MDC.get("userId"); + Object username = MDC.get("username"); + log.setUser_id(userId == null ? null : Long.valueOf(userId.toString())); + log.setUsername(username == null ? null : username.toString()); + log.setUser_agent(request.getHeader("User-Agent")); + } + } + + /** + * 输出标准化JSON监控日志 + */ + public static void printMonitorLog(OuterHttpMonitorLog log) { + log.fillTimestamp(); + fillCommonField(log); + // 直接输出一行JSON,无多余格式 + OUTER_HTTP_LOG.info(JSON.toJSONString(log)); + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpMonitorLog.java b/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpMonitorLog.java new file mode 100644 index 0000000..42898c9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/OuterHttpMonitorLog.java @@ -0,0 +1,66 @@ +package com.cmsen.ticket.infrastructure.config; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.time.Instant; + +@Data +@Slf4j +public class OuterHttpMonitorLog { + // 请求时间戳 UTC + private String timestamp; + // 请求方法 GET/POST/PUT + private String http_method; + // 完整请求URL + private String request_url; + // 响应状态码 + private Integer http_status_code; + // 客户端本机IP(发起调用服务IP) + private String client_ip; + // 链路追踪ID MDC + private String trace_id; + private String correlation_id; + // 当前登录用户信息(从MDC/上下文取) + private Long user_id; + private String username; + private String service_account; + private String client_id; + private String api_key_id; + // 接口耗时 ms + private Long response_time_ms; + // 请求UA + private String user_agent; + private String environment; + + private String called_application_name; + + // 构建UTC时间 + public void fillTimestamp() { + this.timestamp = Instant.now().toString(); + } + public String getCalled_application_name() { + if(request_url.contains("huisuiyun")){ + return "VERIFY"; + }else if(request_url.contains("concursulitions")){ + return "CONCUR"; + }else if(request_url.contains("fanhan")){ + return "OCR"; + }else if(request_url.contains("huilianyi")){ + return "HLY"; + }else if(request_url.contains("10.66.14.151")){ + return "RZ"; + }else if(request_url.contains("fapiao.glority.cn")){ + return "RZ"; + }else if(request_url.contains("103.222.40.154")){ + return "OCR"; + }else if(request_url.contains("10.66.24.133")){ + return "PWC"; + }else if(request_url.contains("ics")){ + return "ICS"; + }else{ + log.warn("unknown request_url => {}",request_url); + return "unknown"; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/PageHelperConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/PageHelperConfig.java new file mode 100644 index 0000000..c0111d2 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/PageHelperConfig.java @@ -0,0 +1,13 @@ +package com.cmsen.ticket.infrastructure.config; + +import com.github.pagehelper.PageHelper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class PageHelperConfig { + @Bean + public PageHelper config(){ + return new PageHelper(); + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateConfig.java new file mode 100644 index 0000000..b3c641e --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateConfig.java @@ -0,0 +1,31 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class RestTemplateConfig { + + @Resource + private RestTemplateMonitorInterceptor restTemplateMonitorInterceptor; + + @Bean + public RestTemplate restTemplate() { + // 设置超时 300000ms = 300秒 + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(300000); + factory.setReadTimeout(300000); + RestTemplate restTemplate = new RestTemplate(factory); + List interceptors = new ArrayList<>(); + interceptors.add(restTemplateMonitorInterceptor); + restTemplate.setInterceptors(interceptors); + return restTemplate; + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateMonitorInterceptor.java b/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateMonitorInterceptor.java new file mode 100644 index 0000000..fdb69da --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/RestTemplateMonitorInterceptor.java @@ -0,0 +1,57 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.UUID; + +@Component +public class RestTemplateMonitorInterceptor implements ClientHttpRequestInterceptor { + private static final String DEFAULT_UA = "cmsen-ticket-restclient/1.0"; + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + HttpHeaders headers = request.getHeaders(); + String traceId = MDC.get("traceId"); + if(StringUtils.isEmpty(traceId)){ + traceId = UUID.randomUUID().toString(); + } + headers.set("X-Trace-Id", traceId); + OuterHttpMonitorLog monitorLog = new OuterHttpMonitorLog(); + long start = System.currentTimeMillis(); + monitorLog.setHttp_method(request.getMethod().name()); + monitorLog.setRequest_url(request.getURI().toString()); + + // 1. traceId 取自MDC(sleuth/mdc埋点) + monitorLog.setTrace_id(traceId); + monitorLog.setCorrelation_id(traceId); + monitorLog.setEnvironment("IMS"); + // 如果尚未设置User‑Agent,则填充 + if (!request.getHeaders().containsKey("User-Agent")) { + monitorLog.setUser_agent(DEFAULT_UA); + }else{ + monitorLog.setUser_agent(request.getHeaders().getFirst("User-Agent")); + } + + try { + ClientHttpResponse response = execution.execute(request, body); + long cost = System.currentTimeMillis() - start; + monitorLog.setHttp_status_code(response.getStatusCode().value()); + monitorLog.setResponse_time_ms(cost); + OuterHttpLogUtil.printMonitorLog(monitorLog); + return response; + } catch (Exception e) { + long cost = System.currentTimeMillis() - start; + monitorLog.setHttp_status_code(-1); + monitorLog.setResponse_time_ms(cost); + OuterHttpLogUtil.printMonitorLog(monitorLog); + throw e; + } + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/ScheduledConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/ScheduledConfig.java new file mode 100644 index 0000000..49331ef --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/ScheduledConfig.java @@ -0,0 +1,40 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; + +import javax.annotation.Resource; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/5/19 0:54 + * @desc 定时任务指定线程池 + **/ +@Configuration +public class ScheduledConfig implements SchedulingConfigurer { + + @Resource + private TaskScheduler taskScheduler; + + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + scheduledTaskRegistrar.setTaskScheduler(taskScheduler); + } + + @Bean(name = "taskScheduler") + public TaskScheduler getMyThreadPoolTaskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.setPoolSize(4); + taskScheduler.setThreadNamePrefix("TaskScheduled-"); + taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + //调度器shutdown被调用时等待当前被调度的任务完成 + taskScheduler.setWaitForTasksToCompleteOnShutdown(false); + return taskScheduler; + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/SecurityConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/SecurityConfig.java new file mode 100644 index 0000000..686dc2c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/SecurityConfig.java @@ -0,0 +1,132 @@ +/** + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.infrastructure.config; + +import com.cmsen.common.http.ContentEnctype; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.util.JsonUtil; +import com.cmsenframework.security.AccessDeniedHandlerSecurity; +import com.cmsenframework.security.AuthenticationEntryPointSecurity; +import com.cmsenframework.security.SecurityConfigurerAdapter; +import com.cmsenframework.security.TokenSecurityFilter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.core.AuthenticationException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Slf4j +@Configuration +public class SecurityConfig extends SecurityConfigurerAdapter { + @Override + public boolean configure(WebSecurity web) { + web.ignoring() + .antMatchers("/mini/user/getMessagesCode/**", "/mini/user/verifyMessages/**", "/mini/customer") +// .antMatchers("/piaoge/user/third/login") + .antMatchers("/ims/user/third/login") + .antMatchers("/piaoge/task/image") + .antMatchers("/piaoge/task/attachments") + .antMatchers("/mini/internationalization/selectList") + .antMatchers("/mini/internationalization/menus") + .antMatchers("/img/**") + .antMatchers("/manager/auth/login") + .antMatchers("/manager/auth/singleLogin") + .antMatchers("/manager/auth/logout") + .antMatchers("/piaoge/wechat/callback") + .antMatchers("/piaoge/itemization/listAll") + .antMatchers("/piaoge/itemization/update") + .antMatchers("/piaoge/attendee/listAll") + .antMatchers("/piaoge/attendee/update") + .antMatchers("/piaoge/report/getIsSend") + .antMatchers("/mini/user/appauth/**") + .antMatchers("/mini/userPc/**")//PC扫描登录、无需token + .antMatchers("/manager/logo/select")//获取系统样式接口、无需token + .antMatchers("/pengfei/**") +// .antMatchers("/scanner/**") + // 日志 任务模块过滤 + //.antMatchers("/quartz/scheduleJob/**") + //.antMatchers("/concur/log/tInterfaceLog/**") + //swagger 文档 + .antMatchers("/webjars/**") + .antMatchers("/swagger-resources/**") + //.antMatchers("/v2/**") + + //对外接口 无需token形式 + .antMatchers("/out/**") + + .antMatchers("/manager/report/deductionsConcur") + .antMatchers("/saml2/service-provider-metadata/samltestidp") + .antMatchers("/sso/**") + + .antMatchers("/callback/**") + + .antMatchers("/mini/infos/**") + .antMatchers("/weitai/**") + .antMatchers("/bayer/tools/**") + .antMatchers("/manager/smartImageCheck/uploadImage") + + .antMatchers("/interface/user/third/login") + .antMatchers("/hly/interface/user/third/login") + + //说明:项目部署的时候需要注释(需要token),开发时可以去掉注释进行接口测试(不需要token) +// .antMatchers("/**") + ; + return false; + } + + @Override + public AccessDeniedHandlerSecurity accessDeniedHandlerSecurity() { + return new AccessDeniedHandlerSecurity() { + @Override + public void handle(HttpServletRequest request, + HttpServletResponse response, + AccessDeniedException e) throws IOException, ServletException { + log.error("Access denied:{}", e.getMessage()); + response.reset(); + response.setStatus(401); + response.setCharacterEncoding("UTF-8"); + response.setContentType(ContentEnctype.JSON); + RestResponse failMsg = RestResponse.failure("Access denied: " + e.getMessage(), 403); + responseBody(response, JsonUtil.toString(failMsg)); + } + }; + } + + @Override + public String[] requestSecurityPolicy() { + return new String[]{"2592416792", "1149585447", "1169058945", "770410223"}; + } + + @Override + public TokenSecurityFilter tokenSecurityFilter() { + return new TokenSecurityFilterConfig(); + } + + @Override + public AuthenticationEntryPointSecurity authenticationEntryPointSecurity() { + return new AuthenticationEntryPointSecurity() { + @Override + public void commence(HttpServletRequest request, + HttpServletResponse response, + AuthenticationException e) throws IOException, ServletException { + log.error("Unauthorized:{}", e.getMessage()); + response.reset(); + response.setStatus(401); + response.setCharacterEncoding("UTF-8"); + response.setContentType(ContentEnctype.JSON); + RestResponse failMsg = RestResponse.failure("Unauthorized: " + e.getMessage(), 401); + responseBody(response, JsonUtil.toString(failMsg)); + } + }; + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/SwaggerConfiguration.java b/src/main/java/com/cmsen/ticket/infrastructure/config/SwaggerConfiguration.java new file mode 100644 index 0000000..5185b75 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/SwaggerConfiguration.java @@ -0,0 +1,42 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; + + +/** + * @author OWTS > + */ +@Configuration +@EnableSwagger2WebMvc +public class SwaggerConfiguration { + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("com.cmsen.ticket")) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("发票管家") + .contact(new Contact("OWTS", null, null)) + .description("发票管家系统接口文档") + .termsOfServiceUrl("http://swagger:8080/") + .version("1.0.0") + .build(); + } + +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/ThreadPoolConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/ThreadPoolConfig.java new file mode 100644 index 0000000..790bf1d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/ThreadPoolConfig.java @@ -0,0 +1,99 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author OWTS > + */ +@Configuration +public class ThreadPoolConfig { + + @Bean("ScannerPool") + public Executor invoicePoolExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + taskExecutor.setCorePoolSize(16); + taskExecutor.setMaxPoolSize(32); + taskExecutor.setQueueCapacity(2048); + taskExecutor.setKeepAliveSeconds(60); + taskExecutor.setThreadNamePrefix("ScannerPool-"); + //taskExecutor.setWaitForTasksToCompleteOnShutdown(false); + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setAwaitTerminationSeconds(60); + + // 关键:拒绝策略改为【调用者运行】,永不抛异常、不丢任务 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.initialize(); + return taskExecutor; + } + +// @Bean("SystemPool") +// public Executor concurExecutor() { +// ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); +// taskExecutor.setCorePoolSize(2); +// taskExecutor.setMaxPoolSize(5); +// taskExecutor.setQueueCapacity(255); +// taskExecutor.setKeepAliveSeconds(60); +// taskExecutor.setThreadNamePrefix("SystemPool-"); +// taskExecutor.setWaitForTasksToCompleteOnShutdown(false); +// return taskExecutor; +// } + + @Bean("SystemPool") + public Executor systemExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + taskExecutor.setCorePoolSize(16); + taskExecutor.setMaxPoolSize(64); + taskExecutor.setQueueCapacity(2048); + taskExecutor.setKeepAliveSeconds(100); + taskExecutor.setThreadNamePrefix("SystemPool-"); + //taskExecutor.setWaitForTasksToCompleteOnShutdown(false); + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setAwaitTerminationSeconds(60); + + // 关键:拒绝策略 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.initialize(); + return taskExecutor; + } + + @Bean("file2PDFPool") + public Executor file2PDFExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + taskExecutor.setCorePoolSize(16); + taskExecutor.setMaxPoolSize(64); + taskExecutor.setQueueCapacity(2048); + taskExecutor.setKeepAliveSeconds(60); + taskExecutor.setThreadNamePrefix("file2PDFPool-"); + //taskExecutor.setWaitForTasksToCompleteOnShutdown(false); +// taskExecutor.setAwaitTerminationSeconds(60); + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setAwaitTerminationSeconds(120); // PDF慢,允许更长关闭等待 + + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.initialize(); + return taskExecutor; + } + + @Bean("ScannerSplitPool") + public Executor scannerSplitExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + taskExecutor.setCorePoolSize(16); + taskExecutor.setMaxPoolSize(64); + taskExecutor.setQueueCapacity(4096); + taskExecutor.setKeepAliveSeconds(60); + taskExecutor.setThreadNamePrefix("SplitPool-"); + //taskExecutor.setWaitForTasksToCompleteOnShutdown(false); + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setAwaitTerminationSeconds(60); + + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.initialize(); + return taskExecutor; + } + +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/TokenSecurityFilterConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/TokenSecurityFilterConfig.java new file mode 100644 index 0000000..f33b68d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/TokenSecurityFilterConfig.java @@ -0,0 +1,272 @@ +/** + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.infrastructure.config; + +import com.cmsen.common.util.StorageCache; +import com.cmsen.common.util.StringUtil; +import com.cmsen.ticket.domain.entity.concur.ConcurConfigEntity; +import com.cmsenframework.security.RequestContextMap; +import com.cmsenframework.security.RequestSecurityPolicy; +import com.cmsenframework.security.TokenSecurityFilter; +import com.cmsenframework.security.UserDetail; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jboss.logging.MDC; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.util.ContentCachingRequestWrapper; +import org.springframework.web.util.ContentCachingResponseWrapper; + +import javax.annotation.Resource; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 令牌安全过滤器配置 + * + * @author jared.Yan (yanhuaiwen@163.com) + */ +@Slf4j +@Component +public class TokenSecurityFilterConfig extends TokenSecurityFilter { + + @Resource + private ConcurConfigEntity concurConfig; + + // 使用你logback配置的命名logger,输出到OUTER_HTTP_MONITOR文件 + private static final Logger accessLogger = LoggerFactory.getLogger("innerHttpMonitor"); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final DateTimeFormatter UTC_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneOffset.UTC); + private static final String TRACE_ID_KEY = "traceId"; + private static final String APP_NAME = "OCR"; + private static final String ENV = "IMS"; + private static final String ACCESS_LOG_FILTER_MARK = "ACCESS_LOG_FILTER_MARK"; + @Override + protected boolean shouldNotFilterErrorDispatch() { + return true; // error转发直接跳过子类doFilterInternal + } + + @Override + protected boolean shouldNotFilterAsyncDispatch() { + return true; // 异步分发跳过 + } + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain chain) throws ServletException, IOException { + // 自己增加标记,防止本类二次执行(因为父类子类FILTERED属性名不一样) + if (request.getAttribute(ACCESS_LOG_FILTER_MARK) != null) { + chain.doFilter(request, response); + return; + } + request.setAttribute(ACCESS_LOG_FILTER_MARK, Boolean.TRUE); + + String traceId = request.getHeader(TRACE_ID_KEY); + if(StringUtils.isEmpty(traceId)){ + traceId = UUID.randomUUID().toString(); + } + // ======这里put!之后Controller、Service都可以MDC.get("traceId")====== + MDC.put("traceId", traceId); + long startNs = System.currentTimeMillis(); + + // 1.包装request response,防止流读取一次丢失 + ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request); + ContentCachingResponseWrapper wrappedResponse = new ContentCachingResponseWrapper(response); + + // 2.生成/获取 correlation_id(traceId) + + if (traceId == null || traceId.trim().length() == 0) { + traceId = UUID.randomUUID().toString(); + } + org.slf4j.MDC.put(TRACE_ID_KEY, traceId); + try{ + // 开放回送地址访问给定接口 + String header = request.getHeader("Authorization"); + if (!StringUtil.isEmpty(header) && header.length() > 20 && header.startsWith("Bearer ") + && header.substring("Bearer ".length()).equalsIgnoreCase(concurConfig.getConcurLoginInfo().getToken())) { + if (RequestSecurityPolicy.getAuthentication() == null) { + RequestSecurityPolicy.setSecurityContext(new UserDetail() {{ + setPermissions(RequestContextMap.get().values() + .stream() + .filter(map -> map.getPath().contains("piaoge") || map.getPath().contains("weitai") || map.getPath().contains("ims") || map.getPath().contains("interface")) + .map(RequestContextMap.Context::getPermission) + .collect(Collectors.toList())); + }}, request); + } + chain.doFilter(request, response); + return; + } + String header1 = request.getHeader("Scanner-Upload"); + if ("6B31975147F94E7D8F6C1C33F8DE032B".equalsIgnoreCase(header1)) { + if (RequestSecurityPolicy.getAuthentication() == null) { + RequestSecurityPolicy.setSecurityContext(new UserDetail() {{ + setPermissions(RequestContextMap.get().values() + .stream() + .filter(map -> map.getPath().contains("scanner")) + .map(RequestContextMap.Context::getPermission) + .collect(Collectors.toList())); + }}, request); + } + chain.doFilter(request, response); + return; + } + String key = "Auth:" + header; + Object read = StorageCache.read(key); + if (read != null) { + HeaderMapRequestWrapper headerMapRequestWrapper = new HeaderMapRequestWrapper(request); + headerMapRequestWrapper.putHeader("Authorization", read.toString()); + StorageCache.write(key, headerMapRequestWrapper.getHeader("Authorization"), 2 * 60 * 60 * 1000); + super.doFilterInternal(headerMapRequestWrapper, response, chain); + } else { + super.doFilterInternal(request, response, chain); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + { + try { + // 计算耗时 ms + long responseTimeMs = System.currentTimeMillis() - startNs; + + // 获取客户端真实IP + String clientIp = getClientIp(wrappedRequest); + + // 请求url + String requestUrl = wrappedRequest.getRequestURL().toString(); + if (wrappedRequest.getQueryString() != null) { + requestUrl = requestUrl + "?" + wrappedRequest.getQueryString(); + } + + // user‑agent + String userAgent = wrappedRequest.getHeader("User-Agent"); + if(userAgent == null){ + userAgent = ""; + } + + // UTC时间戳 + String timestamp = UTC_FORMATTER.format(Instant.now()); + + // 组装JSON实体 + AccessLog logVo = new AccessLog(); + logVo.called_application_name = APP_NAME; + logVo.client_ip = clientIp; + logVo.correlation_id = traceId; + logVo.environment = ENV; + logVo.http_method = wrappedRequest.getMethod(); + logVo.http_status_code = wrappedResponse.getStatus(); + logVo.request_url = requestUrl; + logVo.response_time_ms = responseTimeMs; + logVo.timestamp = timestamp; + logVo.trace_id = traceId; + logVo.user_agent = userAgent; + + // 输出纯JSON,logback OUTER_HTTP_MONITOR pattern=%msg%n + String json = OBJECT_MAPPER.writeValueAsString(logVo); +// accessLogger.info(json); + + }catch (Exception ex){ + // 防止日志本身异常影响业务 + logger.error("write access log error", ex); + }finally { + // 必须复制回response body,否则前端拿不到返回内容!!! + wrappedResponse.copyBodyToResponse(); + org.slf4j.MDC.remove(TRACE_ID_KEY); + } + } + MDC.clear(); // 请求结束,必须清理! + } + + } + + public static class HeaderMapRequestWrapper extends HttpServletRequestWrapper { + + private final Map customHeaders; + + public HeaderMapRequestWrapper(HttpServletRequest request) { + super(request); + this.customHeaders = new HashMap<>(); + } + + public void putHeader(String name, String value) { + this.customHeaders.put(name, value); + } + + @Override + public String getHeader(String name) { + // check the custom headers first + String headerValue = customHeaders.get(name); + + if (headerValue != null) { + return headerValue; + } + // else return from into the original wrapped object + return ((HttpServletRequest) getRequest()).getHeader(name); + } + + @Override + public Enumeration getHeaderNames() { + // create a set of the custom header names + Set set = new HashSet(customHeaders.keySet()); + + // now add the headers from the wrapped request object + @SuppressWarnings("unchecked") + Enumeration e = ((HttpServletRequest) getRequest()).getHeaderNames(); + while (e.hasMoreElements()) { + // add the names of the request headers into the list + String n = e.nextElement(); + set.add(n); + } + + // create an enumeration from the set and return + return Collections.enumeration(set); + } + } + /** + * 获取真实客户端IP,兼容代理、nginx转发 + */ + private String getClientIp(HttpServletRequest request) { + String xForwardedFor = request.getHeader("X‑Forwarded‑For"); + if (xForwardedFor != null && !xForwardedFor.isEmpty()) { + return xForwardedFor.split(",")[0].trim(); + } + String xRealIp = request.getHeader("X‑Real‑IP"); + if(xRealIp != null){ + return xRealIp; + } + return request.getRemoteAddr(); + } + + + /** + * 日志JSON实体,和你输出字段完全一一对应 + */ + public static class AccessLog{ + public String called_application_name; + public String client_ip; + public String correlation_id; + public String environment; + public String http_method; + public Integer http_status_code; + public String request_url; + public Long response_time_ms; + public String timestamp; + public String trace_id; + public String user_agent; + } +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/config/WebConfig.java b/src/main/java/com/cmsen/ticket/infrastructure/config/WebConfig.java new file mode 100644 index 0000000..f536927 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/config/WebConfig.java @@ -0,0 +1,33 @@ +package com.cmsen.ticket.infrastructure.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author ran hao yu + * @date 2020/8/24 17:48 + * @description 服务器上的文件夹虚拟映射路径 + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Value("${file.filepath}") + private String filePath; +// @Value("${file.invoicePic}") +// private String invoicePic; +// @Value("${file.PDF}") +// private String PDF; + + // http://118.31.3.255:18088/api/img/20200828110015441f0258a6ce43f7bbd30c5674f69b20.jpg +// http://127.0.0.1:18088/api/img/202008281041280d7c7f21a7e34a18b40c6ec208735e40.jpg + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/img/**") + .addResourceLocations("file:" + filePath + "/") +// .addResourceLocations("file:" + invoicePic + "/") +// .addResourceLocations("file:" + PDF + "/") + .addResourceLocations("file:D:/WorkSpace/Resource/invoice/"); + } + +} diff --git a/src/main/java/com/cmsen/ticket/infrastructure/ocr2/RuiZhenOCRService.java b/src/main/java/com/cmsen/ticket/infrastructure/ocr2/RuiZhenOCRService.java new file mode 100644 index 0000000..8e58f99 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/infrastructure/ocr2/RuiZhenOCRService.java @@ -0,0 +1,161 @@ +package com.cmsen.ticket.infrastructure.ocr2; + +import com.alibaba.fastjson.JSONObject; +import com.cmsen.common.http.ClientHttpResponse; +import com.cmsen.common.util.JsonUtil; +import com.cmsen.ticket.bestsign.util.InterfaceUtil; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.mapper.CorporateInvoiceMapper; +import com.cmsen.ticket.domain.mapper.SupplierMapper; +import com.cmsen.ticket.domain.mapper.SupplierMaterialUomMapper; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.domain.mapper.manager.SysUserMapper; +import com.cmsen.ticket.infrastructure.config.RestTemplateConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.*; + + +/** + * @author OWTS + * @date 2020/10/11 15:26 + * @description + */ +@Component +@Slf4j +public class RuiZhenOCRService { + @Resource + private InterfaceUtil interfaceUtil; + @Resource + private RestTemplateConfig restTemplateConfig; + @Resource + private SupplierMaterialUomMapper supplierMaterialUomMapper; + + @Resource + private SupplierMapper supplierMapper; + + @Resource + private SysConfigMapper sysConfigMapper; + + + @Resource + private CorporateInvoiceMapper corporateInvoiceMapper; + + @Resource + private SysUserMapper sysUserMapper; + private String verify_invoice_interface_str; + + private int tryMax = 1; + + @PostConstruct + public void init() { + SysConfig verify_invoice_interface = sysConfigMapper.selectByCode("VERIFY_INVOICE_INTERFACE"); + verify_invoice_interface_str = verify_invoice_interface.getValue(); + log.info("verify_invoice_interface_is_rz >> {}", verify_invoice_interface_str); + } + + private static final List needVerifyCodes = new ArrayList() {{ + add("10101"); + add("10100"); + add("10102"); + add("10103"); + add("10104"); + add("10105"); + add("10107"); + add("10106");//新增 2022/11/11 + add("10108");//新增 2022/11/11 + add("10506");//新增 2026/6/2 航空客运行程单发票 + }}; + private static final List qrCodeTypes = new ArrayList() {{ + add("10101"); + add("10100"); + add("10102"); + }}; + @Value("${spring.ccintocr.app_key}") + private String appKey; + @Value("${spring.ccintocr.app_secret}") + private String appSecret; + /** + * 繁瀚接口调用 + * + * @param api + * @param body : application/pdf or image/jpeg + * @return + */ + public Map billsCropFHByNd(String api, JSONObject body) throws Exception { + Map result = new HashMap<>(); + + SysConfig sysConfig = sysConfigMapper.selectByCode("ND_SECRET"); + long timeLong = new Date().getTime(); + String uuid = UUID.randomUUID().toString(); +// ClientHttpResponse response = ClientHttps.post( +// new ClientHttpRequest() +// .setTimeOut(300000) +// .setUrl(api+"?timestamp="+timeLong+"&uuid="+uuid) +// .setHeaders("Content-Type", ContentEnctype.JSON) +// .setHeaders("secret", sysConfig != null ? sysConfig.getValue() : "74a5c2bd-0e83-43b9-9578-24e39939d47b") +// .setParams(JsonUtil.toString(body)) +// ); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("secret", sysConfig != null ? sysConfig.getValue() : "74a5c2bd-0e83-43b9-9578-24e39939d47b"); + HttpEntity entity = new HttpEntity<>(JsonUtil.toString(body), headers); + RestTemplate client = restTemplateConfig.restTemplate(); + try { + ResponseEntity responseEntity = null; + responseEntity = client.exchange( + api + "?timestamp=" + timeLong + "&uuid=" + uuid, + HttpMethod.POST, + entity, + String.class + ); + + // 封装返回对象 + ClientHttpResponse response = new ClientHttpResponse(); + response.setStatus(responseEntity.getStatusCodeValue()); + if (null != responseEntity.getBody()) { + response.setBody(new StringBuilder(responseEntity.getBody())); + } + //log.info("FH-ND Params>>" + JsonUtil.toString(body)); + + if (null == response.getBody()) { + log.info("FH-ND MESSAGE status>>{}", response.getStatus()); + log.info("FH-ND MESSAGE body>>{}", response.getBody()); + log.info("FH-ND MESSAGE message>>{}", response.getMessage()); + throw new Exception("OCR 接口返回异常>" + response.getMessage()); + } + log.info("FH-ND nd Result>> {}", response); + + int status = response.getStatus(); + result.put("status", status); + result.put("message", response.getMessage()); + String responseBody = response.getBody().toString(); + JSONObject apiResult = JSONObject.parseObject(responseBody); + JSONObject dataResult = apiResult.getJSONObject("data"); + JSONObject jsonDataResult = dataResult.getJSONObject("json_data"); + result.put("result", jsonDataResult); + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + +// RuiZhenOCREntity ruiZhenOCREntity = JsonUtil.toClass(response.toString(), RuiZhenOCREntity.class); +// List identifyResults = ruiZhenOCREntity.getResponse().getData().getIdentify_results(); +// for (RuiZhenOCREntity.IdentifyResults identifyResult : identifyResults) { +// Details details = identifyResult.getDetails(); +// if ("1".equals(details.getElectronic_mark()) && identifyResult.getType().equals("10100")) { +// identifyResult.setType("10106"); +// } +// details.setNumberBackup(details.getNumber()); +// } +// return null; + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/UserFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/UserFacade.java new file mode 100644 index 0000000..7a7c7fc --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/UserFacade.java @@ -0,0 +1,80 @@ +package com.cmsen.ticket.interfaces.facade; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.service.UserService; +import com.cmsen.ticket.domain.entity.User; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author ran hao yu + * @date 2020/7/31 9:33 + * @description + */ +@Slf4j +@RestController +@RequestMapping("mini/user") +public class UserFacade { + @Resource + private UserService userService; + + @PostMapping("/addUser") + public RestResponse addUser(@RequestBody User user) { + return userService.insert(user); + } + + @GetMapping("/getMessagesCode/{jsCode}/{tel}") + public RestResponse getMessagesCode(@PathVariable("jsCode") String jsCode, @PathVariable("tel") String tel) { + return userService.getMessagesCode(jsCode, tel); + } + + @ApiOperation("小程序自动登录") + @GetMapping("appauth") + public RestResponse getMessagesCode(@RequestParam("jsCode") String jsCode, @RequestParam(value = "type") int type, + @RequestParam(value = "code") String code, @RequestParam(value = "corCode", required = false) String corCode) { + log.info("App Auth >> type={},code={},jsCode={},corCode={}", type, code, jsCode, corCode); + return userService.appAuth(jsCode, corCode, type); + } + + @PostMapping("editInvoiceEmails") + public RestResponse editInvoiceEmails(@RequestBody List emails) { + return userService.addSendEmails(emails); + } + + @GetMapping("getInvoiceEmails") + public RestResponse getInvoiceEmails() { + return userService.selectSendEmails(); + } + + @ApiOperation("小程序验证手机号登录") + @GetMapping("/verifyMessages/{jsCode}/{verificationCode}/{tel}") + public RestResponse verifyMessages(@PathVariable("jsCode") String jsCode, @PathVariable("verificationCode") Integer verificationCode, @PathVariable("tel") String tel) { + return userService.verifyMessages(jsCode, verificationCode, tel); + } + + @PostMapping("/updateLanguageType") + public RestResponse getOpenIdAndToken(@RequestBody User user) { + return userService.updateLanguageType(user); + } + + @GetMapping("/selectUserByOpenID/{openID}") + public RestResponse selectUserByOpenID(@PathVariable("openID") String openID) { + return userService.selectUser(openID); + } + + @PostMapping("updateValidType") + public RestResponse updateValidType(@RequestBody User user) { + return userService.updateValidType(user); + } + + @GetMapping("/checkGps") + public RestResponse checkGps() { + return userService.checkGps(); + } + + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/UserPcFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/UserPcFacade.java new file mode 100644 index 0000000..74f45b5 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/UserPcFacade.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.interfaces.facade; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author fenql + * @date 2022/8/17 11:33 + * @description + */ +@Slf4j +@RestController +@RequestMapping("mini/userPc") +public class UserPcFacade { + } diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/form/ChangePassword.java b/src/main/java/com/cmsen/ticket/interfaces/facade/form/ChangePassword.java new file mode 100644 index 0000000..47ad288 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/form/ChangePassword.java @@ -0,0 +1,13 @@ +package com.cmsen.ticket.interfaces.facade.form; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +@Data +public class ChangePassword { + @NotEmpty + private String oldPassword; + @NotEmpty + private String newPassword; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/form/LoginForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/form/LoginForm.java new file mode 100644 index 0000000..104c0b9 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/form/LoginForm.java @@ -0,0 +1,44 @@ +package com.cmsen.ticket.interfaces.facade.form; + +import com.cmsen.ticket.domain.entity.manager.SysMenu; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.*; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +@Getter +@Setter +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@ToString +@JsonIgnoreProperties(value = {"password"}, allowSetters = true) +public class LoginForm { + private long userId; + @NotBlank(message = "required") + private String username; + // @NotBlank(message = "required") + private String password; + private String token; + private String loginCodeNeed; + private String ssoId; + // private int expireIn; + private List menu; + + private List button; + + private Integer roleId; + + private SysUser user; + + private List orgList; + + private String homePage; + + private String language; + private String roleType; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/form/SupplierInvoiceMatchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/form/SupplierInvoiceMatchForm.java new file mode 100644 index 0000000..bd22985 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/form/SupplierInvoiceMatchForm.java @@ -0,0 +1,50 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.form; + +import com.cmsen.common.http.response.Validation; +import com.cmsen.ticket.domain.mapper.ParameterScope; +import com.cmsen.ticket.interfaces.facade.manager.form.PaginationForm; +import com.cmsen.ticket.interfaces.facade.manager.form.ValidationForm; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierInvoiceMatchForm extends PaginationForm implements ParameterScope { + private String ticketCode; + @NotNull(message = "required", groups = Validation.Search.class) + private Integer invoiceType; + private String seller; + private String number; + private String buyer; + /** + * 0 待处理 1 待审核 2 未发送 3 已发送 + */ + private Integer matchStatus; + /** + * 匹配类型,非表字段,1单张发票匹配、2批量发票匹配 + */ + @NotNull(message = "required", groups = ValidationForm.Search.class) + @Min(value = 1, groups = ValidationForm.Search.class) + @Max(value = 2, groups = ValidationForm.Search.class) + private Integer matchMode; + + private Integer searchOwner; + + private Integer searchOrg; + + private String keywords; + private String receive; + + private String received; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierFacade.java new file mode 100644 index 0000000..e11d124 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierFacade.java @@ -0,0 +1,18 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 供应商接口 + * + * @author jared.Yan (yanhuaiwen@163.com) + * @author jared.Yan (yanhuaiwen@163.com) + * @apiNote 供应商管理,订单管理,物料管理 + */ +@Api(tags = "供应商功能模块") +@RestController +@RequestMapping("manager/supplier") +public class SupplierFacade { + } diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierMaterialDefineFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierMaterialDefineFacade.java new file mode 100644 index 0000000..628c086 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierMaterialDefineFacade.java @@ -0,0 +1,42 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SupplierMaterialDefineService; +import com.cmsen.ticket.domain.entity.SupplierMaterialDefine; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +@RestController +@RequestMapping("manager/similarMaterials") +public class SupplierMaterialDefineFacade { + @Resource + private SupplierMaterialDefineService service; + + @GetMapping("/list") + public RestResponse select(@RequestParam(required = false) Map params) { + return service.list(params); + } + + @PostMapping("/insert") + public RestResponse insert(@RequestBody SupplierMaterialDefine record) { + return service.create(record); + } + + @PostMapping("/update") + public RestResponse update(@RequestBody SupplierMaterialDefine record) { + return service.update(record); + } + + @PostMapping("/delete") + public RestResponse delete(@RequestParam Long id) { + return service.delete(id); + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierUomMappingFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierUomMappingFacade.java new file mode 100644 index 0000000..234eaef --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SupplierUomMappingFacade.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SupplierUomMappingService; +import com.cmsen.ticket.domain.entity.SupplierUomMapping; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author + * @version 1.0.0 + * @date 2025/07/25 10:19 + **/ +@RestController +@RequestMapping("manager/unitConversion") +public class SupplierUomMappingFacade { + @Resource + private SupplierUomMappingService service; + + @PostMapping("/insert") + public RestResponse insert(@RequestBody SupplierUomMapping record) { + return service.create(record); + } + + @PostMapping("/update") + public RestResponse update(@RequestBody SupplierUomMapping record) { + return service.update(record); + } + + @PostMapping("/delete") + public RestResponse delete(@RequestParam Long id) { + return service.delete(id); + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SynchronousDataFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SynchronousDataFacade.java new file mode 100644 index 0000000..84df152 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SynchronousDataFacade.java @@ -0,0 +1,14 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/9/18 10:05 + **/ +@RestController +@RequestMapping("manager/synchronousData") +public class SynchronousDataFacade { + } diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysAuthFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysAuthFacade.java new file mode 100644 index 0000000..c9c9c9f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysAuthFacade.java @@ -0,0 +1,46 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.manager.service.SysUserService; +import com.cmsen.ticket.interfaces.facade.form.LoginForm; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "PC 授权") +@RestController +@RequestMapping("manager/auth") +public class SysAuthFacade { + @Resource + private SysUserService service; + + @PostMapping("login") + public RestResponse login(@RequestBody LoginForm loginForm) { + return service.login(loginForm); + } + @PostMapping("singleLogin") + public RestResponse singleLogin(@RequestBody LoginForm loginForm) { + return service.singleLogin(loginForm); + } + + @GetMapping("logout") + public RestResponse logout(HttpServletRequest request) { + return service.logout(request); + } + + @ApiOperation("获取手机或邮箱验证码") + @GetMapping("/getVerCode") + public RestResponse getVerCode(@RequestParam("tel") String tel) { + return service.getVerCode(tel); + } + + @ApiOperation("验证码登录") + @PostMapping("/verCodeLogin") + public RestResponse verCodeLogin(@RequestParam("tel") String tel, @RequestParam("code") String code) { + return service.verCodeLogin(tel, code); + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCompanyFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCompanyFacade.java new file mode 100644 index 0000000..ac2eeaf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCompanyFacade.java @@ -0,0 +1,92 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.application.service.CompanyService; +import com.cmsen.ticket.domain.entity.Company; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * (Company)表控制层 + * + * @author ran hao yu + * @since 2020-09-18 14:11:43 + */ +@RestController +@RequestMapping("manager/company") +public class SysCompanyFacade { + /** + * 服务对象 + */ + @Resource + private CompanyService companyService; + + /** + * 通过主键查询单条数据 + * + * @param id 主键 + * @return 单条数据 + */ + @GetMapping("selectOne") + public RestResponse selectOne(Integer id) { + return RestResponse.success(this.companyService.queryById(id)); + } + + /** + * 查询所有 + * + * @return + */ + @GetMapping("queryAll") + public RestResponse queryAll(@RequestParam(name = "code",required = false) String code, + @RequestParam(name = "name",required = false)String name, + @RequestParam(name = "taxNo",required = false)String taxNo) { + return RestResponse.success(this.companyService.queryAllByLimit(code,name,taxNo)); + } + + /** + * 更新 + * + * @param company + * @return + */ + @PutMapping("update") + public RestResponse update(@RequestBody Company company) { + return RestResponse.success(this.companyService.update(company)); + } + + /** + * 保存 + * + * @param company + * @return + */ + @PostMapping("insert") + public RestResponse insert(@RequestBody Company company) { + return companyService.insert(company); + } + + /** + * 启用 + * + * @param id + * @return + */ + @PostMapping("active") + public RestResponse active(Integer id) { + return companyService.active(id); + } + + /** + * 停用 + * + * @param id + * @return + */ + @PostMapping("delCompany") + public RestResponse delCompany(Integer id) { + return companyService.clock(id); + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysConfigFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysConfigFacade.java new file mode 100644 index 0000000..fdfca1d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysConfigFacade.java @@ -0,0 +1,36 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.http.response.Validation; +import com.cmsen.ticket.application.manager.service.SysConfigService; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("manager/config") +public class SysConfigFacade { + @Resource + private SysConfigService sysConfigService; + + @GetMapping("/list") + public RestResponse list(@RequestParam(required = false) Map params) { + return sysConfigService.list(params); + } + + @PostMapping("/update") + public RestResponse update(@Validated(Validation.Update.class) @RequestBody SysConfig sysConfig) { + return sysConfigService.update(sysConfig); + } + + @GetMapping("/get") + public RestResponse list(@RequestParam("code") String code) { + return sysConfigService.getByCode(code); + } + + + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCorInvoiceFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCorInvoiceFacade.java new file mode 100644 index 0000000..9886eea --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysCorInvoiceFacade.java @@ -0,0 +1,15 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/2/19 9:48 + **/ +@Api(tags = "供应商发票") +@RestController +@RequestMapping("manager/corInvoice") +public class SysCorInvoiceFacade {} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysOrgFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysOrgFacade.java new file mode 100644 index 0000000..1fd706a --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysOrgFacade.java @@ -0,0 +1,48 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.http.response.Validation; +import com.cmsen.ticket.application.manager.service.SysOrgService; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("manager/org") +public class SysOrgFacade { + @Resource + private SysOrgService service; + + @GetMapping + public RestResponse select(@RequestParam(required = false) Map params) { + return service.list(params); + } + + @GetMapping("{id}") + public RestResponse selectByPrimaryKey(@PathVariable("id") Integer id) { + return service.selectByPrimaryKey(id); + } + + @PostMapping + public RestResponse insert(@Validated(Validation.Create.class) @RequestBody SysOrg sysOrg) { + return service.create(sysOrg); + } + + @PutMapping + public RestResponse update(@Validated(Validation.Update.class) @RequestBody SysOrg sysOrg) { + return service.update(sysOrg); + } + + @DeleteMapping("{id}") + public RestResponse delete(@PathVariable("id") Integer id) { + return service.delete(id); + } + + @GetMapping("approve/{userId}") + public RestResponse selectApproveOrgListByUserId(@PathVariable("userId") Integer id) { + return service.selectApproveOrgListByUserId(id); + } +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysRoleFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysRoleFacade.java new file mode 100644 index 0000000..0d19813 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysRoleFacade.java @@ -0,0 +1,48 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.http.response.Validation; +import com.cmsen.ticket.application.manager.service.SysRoleService; +import com.cmsen.ticket.domain.entity.manager.SysRole; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +@RestController +@RequestMapping("manager/role") +public class SysRoleFacade { + @Resource + private SysRoleService service; + + @GetMapping + public RestResponse select(@RequestParam(required = false) Map params) { + return service.list(params); + } + + @PostMapping + public RestResponse insert(@Validated(Validation.Create.class) @RequestBody SysRole sysRole) { + return service.create(sysRole); + } + + @PutMapping + public RestResponse update(@Validated(Validation.Update.class) @RequestBody SysRole sysRole) { + return service.update(sysRole); + } + + @DeleteMapping("{id}") + public RestResponse delete(@PathVariable("id") Integer id) { + return service.delete(id); + } + + @GetMapping("menus/{role}") + public RestResponse getMenus(@PathVariable("role") Integer role) { + return service.getMenus(role); + } + + @PostMapping("assignPermissions") + public RestResponse assignPermissions(@RequestBody SysRole sysRole) { + return service.assignPermissions(sysRole); + } +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysUserFacade.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysUserFacade.java new file mode 100644 index 0000000..8dd7626 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/SysUserFacade.java @@ -0,0 +1,94 @@ +package com.cmsen.ticket.interfaces.facade.manager; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.common.http.response.Validation; +import com.cmsen.ticket.application.manager.service.SysUserService; +import com.cmsen.ticket.domain.entity.CorporateInvoiceType; +import com.cmsen.ticket.domain.entity.SysUserOrg; +import com.cmsen.ticket.domain.entity.manager.SysOrg; +import com.cmsen.ticket.domain.entity.manager.SysUser; +import com.cmsen.ticket.domain.response.Response; +import com.cmsen.ticket.interfaces.facade.form.ChangePassword; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("manager/user") +public class SysUserFacade { + @Resource + private SysUserService service; + + @GetMapping + public RestResponse select(@RequestParam(required = false) Map params, HttpServletRequest request) { + return service.list(params); + } + + @PostMapping + public RestResponse insert(@Validated(Validation.Create.class) @RequestBody SysUser sysUser) { + return service.create(sysUser); + } + + @PutMapping + public RestResponse update(@Validated(Validation.Update.class) @RequestBody SysUser sysUser) { + return service.update(sysUser); + } + + @DeleteMapping("{id}") + public RestResponse delete(@PathVariable("id") Integer id) { + return service.delete(id); + } + + @PostMapping("changePassword") + public RestResponse changePassword(@RequestBody ChangePassword changePassword, HttpServletRequest request) { + return service.changePassword(changePassword, request); + } + + @PostMapping("resetPassword/{id}") + public RestResponse resetPassword(@PathVariable("id") Integer id) { + return service.resetPassword(id); + } + + @ApiOperation("获取数据权限数据") + @GetMapping("getDataAuth") + public Response getDataAuth(Integer userId) { + return service.getDataAuth(userId); + } + + @ApiOperation("获取所有采购类型") + @GetMapping("getInvoiceTypes") + public Response> getInvoiceTypes(Integer userId) { + return service.getInvoiceTypes(userId); + } + + @ApiOperation("获取所有组织") + @GetMapping("getUserOrgs") + public Response> getUserOrgs(String keyword, Integer userId) { + return service.getUserOrgs(keyword, userId); + } + + @ApiOperation("更新数据权限") + @PutMapping("updateDataPermission") + public Response updateDataPermission(@RequestBody SysUserOrg userOrg) { + return service.updateDataPermission(userOrg); + } + + @ApiOperation("授权导入-用户权限") + @PostMapping("uploadOrg") + public RestResponse uploadOrg(MultipartFile file) { + return service.uploadOrg(file); + } + + @ApiOperation("授权导入-审批权限") + @PostMapping("uploadApprove") + public RestResponse uploadApprove(MultipartFile file) { + return service.uploadApprove(file); + } + +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PaginationForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PaginationForm.java new file mode 100644 index 0000000..500579d --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PaginationForm.java @@ -0,0 +1,31 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Data +public class PaginationForm { + @NotNull(message = "required", groups = {ValidationForm.Pagination.class}) + Integer startNo; + Integer length = 15; + + public void setStartNo(Integer startNo) { + if (startNo != null) { + this.startNo = (Math.max(startNo, 1) - 1) * Math.max(length, 0); + } else { + this.startNo = startNo; + } + } + + public void setLength(Integer length) { + this.length = Math.max(length, 0); + } +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PayMentSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PayMentSearchForm.java new file mode 100644 index 0000000..6ecaabf --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/PayMentSearchForm.java @@ -0,0 +1,22 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class PayMentSearchForm extends PaginationForm { + + private String name;//单据名称 + private String vendor;//供应商 + private String submitName;//提交人 + private String checker;//审核人 + private String status;//状态 +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SubmitMileageForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SubmitMileageForm.java new file mode 100644 index 0000000..c397514 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SubmitMileageForm.java @@ -0,0 +1,11 @@ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; + +/** + * @author OWTS + */ +@Data +public class SubmitMileageForm { + private String invoiceId; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierInvoiceAttachmentForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierInvoiceAttachmentForm.java new file mode 100644 index 0000000..41e2a69 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierInvoiceAttachmentForm.java @@ -0,0 +1,22 @@ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +/** + * @author OWTS + * @version 1.0.0 + * @date 2021/11/16 10:45 + */ +@Data +public class SupplierInvoiceAttachmentForm { + @ApiModelProperty("附件列表") + private MultipartFile[] files; + @ApiModelProperty("发票ID") + private String invoiceId; + @ApiModelProperty("附件类型") + private String type; + @ApiModelProperty("描述") + private String description; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialFilterSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialFilterSearchForm.java new file mode 100644 index 0000000..5c27f5f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialFilterSearchForm.java @@ -0,0 +1,15 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; + +@Data +public class SupplierMaterialFilterSearchForm { + private String name; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialSearchForm.java new file mode 100644 index 0000000..8d42973 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialSearchForm.java @@ -0,0 +1,18 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierMaterialSearchForm extends PaginationForm { + private String material; + private String supplierMaterial; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialUOMSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialUOMSearchForm.java new file mode 100644 index 0000000..8a43c77 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierMaterialUOMSearchForm.java @@ -0,0 +1,18 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierMaterialUOMSearchForm extends PaginationForm { + private String materialNo; + private String unit; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierOrderSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierOrderSearchForm.java new file mode 100644 index 0000000..2a31ea3 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierOrderSearchForm.java @@ -0,0 +1,30 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierOrderSearchForm extends PaginationForm { + private String receiveNo; + private String supplierCode; + private String orderNo; + private String lineNum; + private String itemNo; + private String poNumber; + private String goods; + private String receivedNum; + private Integer searchOwner; + private Integer searchOrg; + private String status; + + //可匹配:1-可匹配,null或者''-全部 + private String matchable; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierSearchForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierSearchForm.java new file mode 100644 index 0000000..8aa9053 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierSearchForm.java @@ -0,0 +1,20 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierSearchForm extends PaginationForm { + private String code; + private String name; + private String taxNo; + private Integer status; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierUpdatePriceForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierUpdatePriceForm.java new file mode 100644 index 0000000..148ecce --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/SupplierUpdatePriceForm.java @@ -0,0 +1,30 @@ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author OWTS + */ +@Data +public class SupplierUpdatePriceForm implements Serializable { + private Long id; + @NotBlank + private String invoiceId; + @NotBlank + private String itemId; + @NotNull + private Boolean containsTax; + @NotNull + private BigDecimal prePrice; + @NotNull + private BigDecimal afterPrice; + @NotBlank + private String taxRate; + + private String reason; +} diff --git a/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/ValidationForm.java b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/ValidationForm.java new file mode 100644 index 0000000..0d0b24c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/interfaces/facade/manager/form/ValidationForm.java @@ -0,0 +1,15 @@ +/* + * +--------------------------------------------------------- + * | Author Jared.Yan + * +--------------------------------------------------------- + * | Copyright (c) http://cmsen.com All rights reserved. + * +--------------------------------------------------------- + */ +package com.cmsen.ticket.interfaces.facade.manager.form; + +import com.cmsen.common.http.response.Validation; + +public interface ValidationForm extends Validation { + public interface Pagination { + } +} diff --git a/src/main/java/com/cmsen/ticket/log/entity/TInterfaceLog.java b/src/main/java/com/cmsen/ticket/log/entity/TInterfaceLog.java new file mode 100644 index 0000000..281cb04 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/log/entity/TInterfaceLog.java @@ -0,0 +1,251 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.log.entity; + + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 功能日志Entity + * @author 许鹏 + * @version 2020-02-28 + */ +@AllArgsConstructor +@NoArgsConstructor +public class TInterfaceLog { + + private static final long serialVersionUID = 1L; + private String interfaceName; // 接口名称 + private String runState; // 运行状态(0:失败1:成功:2:已回滚) + private String sendMesg; // 发送内容 + private String runMesg; // 运行信息 + private String operType; // 操作类型 + private String isRollBack; // 是否可回滚(0:否1:是) + private String runBatch; // 运行批次 + private String interfaceFlag; // 接口标志 + private String attributer1; // 属性1 + private String attributer2; // 属性2 + private String attributer3; // 属性3 + private String attributer4; // 属性4 + private String attributer5; // 属性5 + private String attributer6; // 属性6 + private String attributer7; // 属性7 + private String attributer8; // 属性8 + private String attributer9; // 属性9 + private String attributer10; // 属性10 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + private String id; + private Date createDate; + private Date updateDate; + private String delFlag; + private String remarks; + private String createBy; + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + private String updateBy; + + + + public String getInterfaceName() { + return interfaceName; + } + + public void setInterfaceName(String interfaceName) { + this.interfaceName = interfaceName; + } + + public String getRunState() { + return runState; + } + + public void setRunState(String runState) { + this.runState = runState; + } + + public String getSendMesg() { + return sendMesg; + } + + public void setSendMesg(String sendMesg) { + this.sendMesg = sendMesg; + } + + public String getRunMesg() { + return runMesg; + } + + public void setRunMesg(String runMesg) { + this.runMesg = runMesg; + } + + public String getOperType() { + return operType; + } + + public void setOperType(String operType) { + this.operType = operType; + } + + public String getIsRollBack() { + return isRollBack; + } + + public void setIsRollBack(String isRollBack) { + this.isRollBack = isRollBack; + } + + public String getRunBatch() { + return runBatch; + } + + public void setRunBatch(String runBatch) { + this.runBatch = runBatch; + } + + public String getInterfaceFlag() { + return interfaceFlag; + } + + public void setInterfaceFlag(String interfaceFlag) { + this.interfaceFlag = interfaceFlag; + } + + public String getAttributer1() { + return attributer1; + } + + public void setAttributer1(String attributer1) { + this.attributer1 = attributer1; + } + + public String getAttributer2() { + return attributer2; + } + + public void setAttributer2(String attributer2) { + this.attributer2 = attributer2; + } + + public String getAttributer3() { + return attributer3; + } + + public void setAttributer3(String attributer3) { + this.attributer3 = attributer3; + } + + public String getAttributer4() { + return attributer4; + } + + public void setAttributer4(String attributer4) { + this.attributer4 = attributer4; + } + + public String getAttributer5() { + return attributer5; + } + + public void setAttributer5(String attributer5) { + this.attributer5 = attributer5; + } + + public String getAttributer6() { + return attributer6; + } + + public void setAttributer6(String attributer6) { + this.attributer6 = attributer6; + } + + public String getAttributer7() { + return attributer7; + } + + public void setAttributer7(String attributer7) { + this.attributer7 = attributer7; + } + + public String getAttributer8() { + return attributer8; + } + + public void setAttributer8(String attributer8) { + this.attributer8 = attributer8; + } + + public String getAttributer9() { + return attributer9; + } + + public void setAttributer9(String attributer9) { + this.attributer9 = attributer9; + } + + public String getAttributer10() { + return attributer10; + } + + public void setAttributer10(String attributer10) { + this.attributer10 = attributer10; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/src/main/java/com/cmsen/ticket/log/mapper/TInterfaceLogMapper.java b/src/main/java/com/cmsen/ticket/log/mapper/TInterfaceLogMapper.java new file mode 100644 index 0000000..9337171 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/log/mapper/TInterfaceLogMapper.java @@ -0,0 +1,37 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.log.mapper; + +import com.cmsen.ticket.log.entity.TInterfaceLog; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * 功能日志MAPPER接口 + * @author 许鹏 + * @version 2020-02-28 + */ +@Mapper +@Repository +public interface TInterfaceLogMapper{ + TInterfaceLog getOne(String id); + + List selectFindErrNotSendEntity(); + + List findList3(Map params); + + int getCount(Map params); + + void delete(TInterfaceLog tInterfaceLog); + + void insert(TInterfaceLog tInterfaceLog); + + void update(TInterfaceLog tInterfaceLog); + + public void execUpdateSql(@Param("sql") String sql); +} diff --git a/src/main/java/com/cmsen/ticket/log/service/TInterfaceLogService.java b/src/main/java/com/cmsen/ticket/log/service/TInterfaceLogService.java new file mode 100644 index 0000000..870da8c --- /dev/null +++ b/src/main/java/com/cmsen/ticket/log/service/TInterfaceLogService.java @@ -0,0 +1,52 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.log.service; + +import com.cmsen.ticket.log.entity.TInterfaceLog; +import com.cmsen.ticket.log.mapper.TInterfaceLogMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.UUID; + +import static org.apache.commons.lang3.StringUtils.isEmpty; + +/** + * 功能日志Service + * @author 许鹏 + * @version 2020-02-28 + */ +@Service +@Transactional(readOnly = false) +@Slf4j +public class TInterfaceLogService { + + @Resource + private TInterfaceLogMapper interfaceLogMapper; + @Lazy + + + public TInterfaceLog get(String id) { + return interfaceLogMapper.getOne(id); + } + + @Transactional(readOnly = false) + public void save(TInterfaceLog tInterfaceLog) { + String id = tInterfaceLog.getId(); + if(isEmpty(id)){ + tInterfaceLog.setId(UUID.randomUUID().toString()); + tInterfaceLog.setCreateDate(new Date()); + tInterfaceLog.setDelFlag("0"); + interfaceLogMapper.insert(tInterfaceLog); + }else{ + tInterfaceLog.setUpdateDate(new Date()); + interfaceLogMapper.update(tInterfaceLog); + } + } + +} diff --git a/src/main/java/com/cmsen/ticket/log/web/TInterfaceLogFacade.java b/src/main/java/com/cmsen/ticket/log/web/TInterfaceLogFacade.java new file mode 100644 index 0000000..7616c54 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/log/web/TInterfaceLogFacade.java @@ -0,0 +1,198 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.log.web; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.common.AjaxJson; +import com.cmsen.ticket.log.entity.TInterfaceLog; +import com.cmsen.ticket.log.service.TInterfaceLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections.map.HashedMap; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * 功能日志Controller + * @author 许鹏 + * @version 2020-02-28 + */ +@Api(tags = "定时任务日志") +@RestController +@RequestMapping(value = "manager/concur/log/tInterfaceLog") +public class TInterfaceLogFacade { + + @Autowired + private TInterfaceLogService tInterfaceLogService; + + @ModelAttribute + public TInterfaceLog get(@RequestParam(required=false) String id) { + TInterfaceLog entity = null; + if (StringUtils.isNotBlank(id)){ + entity = tInterfaceLogService.get(id); + } + if (entity == null){ + entity = new TInterfaceLog(); + } + return entity; + } + + /** + * 功能日志列表数据 + */ +// @RequiresPermissions("concur:log:tInterfaceLog:list") +// @GetMapping("list") +// public AjaxJson list(TInterfaceLog tInterfaceLog, HttpServletRequest request, HttpServletResponse response) { +// Page page = tInterfaceLogService.findPage(new Page(request, response), tInterfaceLog); +// return AjaxJson.success().put("page",page); +// } + + @GetMapping("list") + @ApiOperation("分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name",value = "名称"), + @ApiImplicitParam(name = "runState",value = "运行状态"), + @ApiImplicitParam(name = "runMesg",value = "运行信息"), + @ApiImplicitParam(name = "pageSize",value = "分页大小"), + @ApiImplicitParam(name = "pageNo",value = "分页页号"), + @ApiImplicitParam(name = "orderBy",value = "排序字段") + }) + public RestResponse select(@RequestParam(required = false) String name, + @RequestParam(required = true) String pageSize, + @RequestParam(required = true) String pageNo, + @RequestParam(required = false) String orderBy, + @RequestParam(required = false) String runState, + @RequestParam(required = false) String runMesg + ) { + Map params = new HashedMap(); + params.put("interfaceName",name); + params.put("orderBy",orderBy); + params.put("pageSize",pageSize); + params.put("pageNo",pageNo); + params.put("runState",runState); + params.put("runMesg",runMesg); +// return tInterfaceLogService.list(params); + return null; + } + + /** + * 根据Id获取功能日志数据 + */ +// @RequiresPermissions(value={"concur:log:tInterfaceLog:view","concur:log:tInterfaceLog:add","concur:log:tInterfaceLog:edit"},logical=Logical.OR) + @GetMapping("queryById") + @ApiOperation("根据Id获取功能日志数据") + public AjaxJson queryById(TInterfaceLog tInterfaceLog) { + return AjaxJson.success().put("tInterfaceLog", tInterfaceLog); + } + + /** + * 保存功能日志 + */ +// @RequiresPermissions(value={"concur:log:tInterfaceLog:add","concur:log:tInterfaceLog:edit"},logical=Logical.OR) + @PostMapping("save") + @ApiOperation("保存功能日志") + public AjaxJson save(TInterfaceLog tInterfaceLog) throws Exception{ + /** + * 后台hibernate-validation插件校验 + */ +// String errMsg = beanValidator(tInterfaceLog); +// if (StringUtils.isNotBlank(errMsg)){ +// return AjaxJson.error(errMsg); +// } + //新增或编辑表单保存 + tInterfaceLogService.save(tInterfaceLog);//保存 + return AjaxJson.success("保存功能日志成功"); + } + + + /** + * 批量删除功能日志 + */ +// @RequiresPermissions("concur:log:tInterfaceLog:del") + @DeleteMapping("delete") + @ApiOperation("批量删除功能日志") + public AjaxJson delete(String ids) { + String idArray[] =ids.split(","); + for(String id : idArray){ +// tInterfaceLogService.delete(tInterfaceLogService.get(id)); + } + return AjaxJson.success("删除功能日志成功"); + } + + /** + * 导出excel文件 + */ +// @RequiresPermissions("concur:log:tInterfaceLog:export") +// @GetMapping("export") +// @ApiOperation("导出excel文件") +// public AjaxJson exportFile(TInterfaceLog tInterfaceLog, HttpServletRequest request, HttpServletResponse response) { +// try { +// String fileName = "功能日志"+ DateUtils.getDate("yyyyMMddHHmmss")+".xlsx"; +// Page page = tInterfaceLogService.findPage(new Page(request, response, -1), tInterfaceLog); +// new ExportExcel("功能日志", TInterfaceLog.class).setDataList(page.getList()).write(response, fileName).dispose(); +// return null; +// } catch (Exception e) { +// return AjaxJson.error("导出功能日志记录失败!失败信息:"+e.getMessage()); +// } +// } + + /** + * 导入Excel数据 + + */ +// @RequiresPermissions("concur:log:tInterfaceLog:import") +// @PostMapping("import") +// @ApiIgnore +// @ApiOperation("导入Excel数据") +// public AjaxJson importFile(@RequestParam("file")MultipartFile file, HttpServletResponse response, HttpServletRequest request) { +// try { +// int successNum = 0; +// int failureNum = 0; +// StringBuilder failureMsg = new StringBuilder(); +// ImportExcel ei = new ImportExcel(file, 1, 0); +// List list = ei.getDataList(TInterfaceLog.class); +// for (TInterfaceLog tInterfaceLog : list){ +// try{ +// tInterfaceLogService.save(tInterfaceLog); +// successNum++; +// }catch(ConstraintViolationException ex){ +// failureNum++; +// }catch (Exception ex) { +// failureNum++; +// } +// } +// if (failureNum>0){ +// failureMsg.insert(0, ",失败 "+failureNum+" 条功能日志记录。"); +// } +// return AjaxJson.success( "已成功导入 "+successNum+" 条功能日志记录"+failureMsg); +// } catch (Exception e) { +// return AjaxJson.error("导入功能日志失败!失败信息:"+e.getMessage()); +// } +// } + + /** + * 下载导入功能日志数据模板 + */ +// @RequiresPermissions("concur:log:tInterfaceLog:import") +// @ApiIgnore +// @GetMapping("import/template") +//// @ApiOperation("下载导入功能日志数据模板") +// public AjaxJson importFileTemplate(HttpServletResponse response) { +// try { +// String fileName = "功能日志数据导入模板.xlsx"; +// List list = Lists.newArrayList(); +// new ExportExcel("功能日志数据", TInterfaceLog.class, 1).setDataList(list).write(response, fileName).dispose(); +// return null; +// } catch (Exception e) { +// return AjaxJson.error( "导入模板下载失败!失败信息:"+e.getMessage()); +// } +// } + + +} diff --git a/src/main/java/com/cmsen/ticket/monitor/entity/ScheduleJob.java b/src/main/java/com/cmsen/ticket/monitor/entity/ScheduleJob.java new file mode 100644 index 0000000..5a48146 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/entity/ScheduleJob.java @@ -0,0 +1,294 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.monitor.entity; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +/** + * 定时任务Entity + * + * @author lgf + * @version 2017-02-04 + */ +@ApiModel(parent = void.class) +@AllArgsConstructor +@NoArgsConstructor +public class ScheduleJob implements Serializable { + + private static final long serialVersionUID = 1L; + @ApiModelProperty("任务名") + private String name; // 任务名 + @ApiModelProperty("任务组") + private String group; // 任务组 + @ApiModelProperty("定时规则") + private String cronExpression; // 定时规则 + @ApiModelProperty("启用状态") + private String status; // 启用状态 + @ApiModelProperty("通知用户") + private String isInfo; // 通知用户 + @ApiModelProperty("任务类") + private String className; // 任务类 + @ApiModelProperty("描述") + private String description; // 描述 + @ApiModelProperty("存储过程") + private String mapTxt; // 存储过程 + @ApiModelProperty("排序号") + private int sort; + @ApiModelProperty(hidden = true) + private String ext1; + @ApiModelProperty(hidden = true) + private String ext2; + @ApiModelProperty(hidden = true) + private String ext3; + @ApiModelProperty(hidden = true) + private String ext4; + @ApiModelProperty(hidden = true) + private String ext5; + @ApiModelProperty(hidden = true) + private String ext6; + @ApiModelProperty(hidden = true) + private String ext7; + @ApiModelProperty(hidden = true) + private String ext8; + @ApiModelProperty(hidden = true) + private String ext9; + @ApiModelProperty(hidden = true) + private String ext10; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + private String id; + private Date createDate; + private Date updateDate; + private String delFlag; + private String remarks; + + private String createBy; + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + private String updateBy; + + + @NotNull(message = "任务名不能为空") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @NotNull(message = "任务组不能为空") + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + @NotNull(message = "定时规则不能为空") + public String getCronExpression() { + return cronExpression; + } + + public void setCronExpression(String cronExpression) { + this.cronExpression = cronExpression; + } + + @NotNull(message = "启用状态不能为空") + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIsInfo() { + return isInfo; + } + + public void setIsInfo(String isInfo) { + this.isInfo = isInfo; + } + + @NotNull(message = "任务类不能为空") + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String toString(){ + return this.name; + } + + public String getMapTxt() { + return mapTxt; + } + + public void setMapTxt(String mapTxt) { + this.mapTxt = mapTxt; + } + + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public String getExt1() { + return ext1; + } + + public void setExt1(String ext1) { + this.ext1 = ext1; + } + + public String getExt2() { + return ext2; + } + + public void setExt2(String ext2) { + this.ext2 = ext2; + } + + public String getExt3() { + return ext3; + } + + public void setExt3(String ext3) { + this.ext3 = ext3; + } + + public String getExt4() { + return ext4; + } + + public void setExt4(String ext4) { + this.ext4 = ext4; + } + + public String getExt5() { + return ext5; + } + + public void setExt5(String ext5) { + this.ext5 = ext5; + } + + public String getExt6() { + return ext6; + } + + public void setExt6(String ext6) { + this.ext6 = ext6; + } + + public String getExt7() { + return ext7; + } + + public void setExt7(String ext7) { + this.ext7 = ext7; + } + + public String getExt8() { + return ext8; + } + + public void setExt8(String ext8) { + this.ext8 = ext8; + } + + public String getExt9() { + return ext9; + } + + public void setExt9(String ext9) { + this.ext9 = ext9; + } + + public String getExt10() { + return ext10; + } + + public void setExt10(String ext10) { + this.ext10 = ext10; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/src/main/java/com/cmsen/ticket/monitor/entity/Task.java b/src/main/java/com/cmsen/ticket/monitor/entity/Task.java new file mode 100644 index 0000000..02bd177 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/entity/Task.java @@ -0,0 +1,143 @@ +package com.cmsen.ticket.monitor.entity; + +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Date; + + +/** + * 定时任务工作类 + * + * @author ty + * @date 2015年1月13日 + */ +@DisallowConcurrentExecution +public abstract class Task implements Job { + public ScheduleJob scheduleJob; + + /** + * 系统通知bean + * + * @return + */ +// @Bean +// public SystemInfoSocketHandler systemInfoSocketHandler() { +// return new SystemInfoSocketHandler(); +// } + + public void execute(JobExecutionContext context) throws JobExecutionException { + Object scheduleJob_obj = context.getMergedJobDataMap().get("scheduleJob"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); + scheduleJob =getKeyAndValue(scheduleJob_obj); + run(); + try { + String isInfo = scheduleJob_obj.getClass().getMethod("getIsInfo").invoke(scheduleJob_obj).toString(); +// if (isInfo.equals("1")) { +// systemInfoSocketHandler().sendMessageToUser("admin", "任务名称 = [" + scheduleJob_obj.toString() + "]" + " 在 " + dateFormat.format(new Date()) + " 时运行"); +// } else if (isInfo.equals("2")) { +// +// systemInfoSocketHandler().sendMessageToAllUsers("任务名称 = [" + scheduleJob_obj.toString() + "]" + " 在 " + dateFormat.format(new Date()) + " 时运行"); +// } + + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("任务名称 = [" + scheduleJob_obj.toString() + "]" + " 在 " + dateFormat.format(new Date()) + " 时运行"); + } + + public abstract void run(); + + /** + * 获取任务对象 + * @param obj + * @return + */ + public ScheduleJob getKeyAndValue(Object obj) { + ScheduleJob scheduleJob1 = new ScheduleJob(); + // 得到类对象 + Class userCla = (Class) obj.getClass(); + /* 得到类中的所有属性集合 */ + Field[] fs = userCla.getDeclaredFields(); + for (int i = 0; i < fs.length; i++) { + Field f = fs[i]; + f.setAccessible(true); // 设置些属性是可以访问的 + Object val = new Object(); + try { + val = f.get(obj); + // 得到此属性的值 + //map.put(f.getName(), val);// 设置键值 + if(f.getName().equals("name")){ + scheduleJob1.setName(val.toString()); + }else if(f.getName().equals("group")){ + scheduleJob1.setGroup(val.toString()); + }else if(f.getName().equals("cronExpression")){ + scheduleJob1.setCronExpression(val.toString()); + }else if(f.getName().equals("status")){ + scheduleJob1.setStatus(val.toString()); + }else if(f.getName().equals("isInfo")){ + scheduleJob1.setIsInfo(val.toString()); + }else if(f.getName().equals("className")){ + scheduleJob1.setClassName(val.toString()); + }else if(f.getName().equals("description")){ + scheduleJob1.setDescription(val.toString()); + }else if(f.getName().equals("mapTxt")){ + if(val!=null) { + scheduleJob1.setMapTxt(val.toString()); + } + }else if(f.getName().equals("ext1")){ + if(val!=null) { + scheduleJob1.setExt1(val.toString()); + } + }else if(f.getName().equals("ext2")){ + if(val!=null) { + scheduleJob1.setExt2(val.toString()); + } + }else if(f.getName().equals("ext3")){ + if(val!=null) { + scheduleJob1.setExt3(val.toString()); + } + }else if(f.getName().equals("ext4")){ + if(val!=null) { + scheduleJob1.setExt4(val.toString()); + } + }else if(f.getName().equals("ext5")){ + if(val!=null) { + scheduleJob1.setExt5(val.toString()); + } + }else if(f.getName().equals("ext6")){ + if(val!=null) { + scheduleJob1.setExt6(val.toString()); + } + }else if(f.getName().equals("ext7")){ + if(val!=null) { + scheduleJob1.setExt7(val.toString()); + } + }else if(f.getName().equals("ext8")){ + if(val!=null) { + scheduleJob1.setExt8(val.toString()); + } + }else if(f.getName().equals("ext9")){ + if(val!=null) { + scheduleJob1.setExt9(val.toString()); + } + }else if(f.getName().equals("ext10")){ + if(val!=null) { + scheduleJob1.setExt10(val.toString()); + } + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + + } + return scheduleJob1; + } +} diff --git a/src/main/java/com/cmsen/ticket/monitor/mapper/ScheduleJobMapper.java b/src/main/java/com/cmsen/ticket/monitor/mapper/ScheduleJobMapper.java new file mode 100644 index 0000000..fc96ed0 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/mapper/ScheduleJobMapper.java @@ -0,0 +1,35 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.monitor.mapper; + +import com.cmsen.ticket.monitor.entity.ScheduleJob; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * 定时任务MAPPER接口 + * + * @author lgf + * @version 2017-02-04 + */ +@Mapper +@Repository +public interface ScheduleJobMapper { + public List findList2(ScheduleJob scheduleJob); + + public List findList3(Map params); + + int getCount(Map params); + + ScheduleJob get(String id); + + void insert(ScheduleJob scheduleJob); + + void update(ScheduleJob scheduleJob); + + void delete(ScheduleJob scheduleJob); +} diff --git a/src/main/java/com/cmsen/ticket/monitor/service/ScheduleJobService.java b/src/main/java/com/cmsen/ticket/monitor/service/ScheduleJobService.java new file mode 100644 index 0000000..06e6c91 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/service/ScheduleJobService.java @@ -0,0 +1,370 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.monitor.service; + +import com.alibaba.fastjson2.JSONObject; +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.domain.util.PaginationUtil; +import com.cmsen.ticket.monitor.entity.ScheduleJob; +import com.cmsen.ticket.monitor.mapper.ScheduleJobMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.quartz.*; +import org.quartz.impl.matchers.GroupMatcher; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +import static org.apache.commons.lang3.StringUtils.isEmpty; + +/** + * 定时任务Service + * + * @author lgf + * @version 2017-02-04 + */ +@Service +@Transactional(readOnly = true) +@Slf4j +public class ScheduleJobService { + + + @Autowired + private Scheduler scheduler; + + @Autowired + private ScheduleJobMapper scheduleJobMapper; + + public ScheduleJob get(String id) { + return scheduleJobMapper.get(id); + } + + public List findList2(ScheduleJob scheduleJob) { + return scheduleJobMapper.findList2(scheduleJob); + } + + @Transactional(readOnly = false) + public void save(ScheduleJob scheduleJob) { + if (!StringUtils.isBlank(scheduleJob.getId())) { + ScheduleJob t = this.get(scheduleJob.getId()); + JobKey key = new JobKey(t.getName(), t.getGroup()); + try { + scheduler.deleteJob(key); + } catch (SchedulerException e) { + e.printStackTrace(); + } + } + + this.add(scheduleJob); + // 如果没有就新增 + String id = scheduleJob.getId(); + if(isEmpty(id)){ + scheduleJob.setDelFlag("0"); + scheduleJob.setId(UUID.randomUUID().toString()); + scheduleJob.setCreateDate(new Date()); + scheduleJobMapper.insert(scheduleJob); + }else{ + scheduleJob.setUpdateDate(new Date()); + scheduleJobMapper.update(scheduleJob); + } + } + + public ScheduleJobService (){ + + } + + + public RestResponse list(Map params){ + PaginationUtil.paginationInit(params); + List list = scheduleJobMapper.findList3(params); + int total = scheduleJobMapper.getCount(params); + return RestResponse.success(PaginationUtil.getPageResult(total, params, list)); + } + + + @Transactional(readOnly = false) + public void add(ScheduleJob scheduleJob) { + Class job = null; + try { + job = Class.forName(scheduleJob.getClassName()); + } catch (ClassNotFoundException e1) { + e1.printStackTrace(); + } + JobDetail jobDetail = JobBuilder.newJob(job).withIdentity(scheduleJob.getName(), scheduleJob.getGroup()) + .build(); + jobDetail.getJobDataMap().put("scheduleJob", scheduleJob); + + // 表达式调度构建器(可判断创建SimpleScheduleBuilder) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger() + .withIdentity(scheduleJob.getName(), scheduleJob.getGroup()).withSchedule(scheduleBuilder).build(); + try { + scheduler.scheduleJob(jobDetail, trigger); + JobKey key = new JobKey(scheduleJob.getName(), scheduleJob.getGroup()); + if (scheduleJob.getStatus().equals("0")) { + scheduler.pauseJob(key); + } else { + scheduler.resumeJob(key); + } + + } catch (SchedulerException e) { + e.printStackTrace(); + } + + } + + @Transactional(readOnly = false) + public void delete(ScheduleJob scheduleJob) { + + JobKey key = new JobKey(scheduleJob.getName(), scheduleJob.getGroup()); + try { + scheduler.deleteJob(key); + scheduleJobMapper.delete(scheduleJob); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + + } + + + /** + * 获取所有JobDetail + * + * @return 结果集合 + */ + public List getJobs() { + try { + GroupMatcher matcher = GroupMatcher.anyJobGroup(); + Set jobKeys = scheduler.getJobKeys(matcher); + List jobDetails = new ArrayList(); + for (JobKey key : jobKeys) { + jobDetails.add(scheduler.getJobDetail(key)); + } + return jobDetails; + } catch (SchedulerException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取所有计划中的任务 + * + * @return 结果集合 + */ + public List getAllScheduleJob() { + List scheduleJobList = new ArrayList(); + ; + GroupMatcher matcher = GroupMatcher.anyJobGroup(); + try { + Set jobKeys = scheduler.getJobKeys(matcher); + for (JobKey jobKey : jobKeys) { + List triggers = scheduler.getTriggersOfJob(jobKey); + for (Trigger trigger : triggers) { + ScheduleJob scheduleJob = new ScheduleJob(); + scheduleJob.setName(jobKey.getName()); + scheduleJob.setGroup(jobKey.getGroup()); + Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); + scheduleJob.setStatus(triggerState.name()); + //获取要执行的定时任务类名 + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + scheduleJob.setClassName(jobDetail.getJobClass().getName()); + //判断trigger + if (trigger instanceof SimpleTrigger) { + SimpleTrigger simple = (SimpleTrigger) trigger; + scheduleJob.setCronExpression("重复次数:" + (simple.getRepeatCount() == -1 ? + "无限" : simple.getRepeatCount()) + ",重复间隔:" + (simple.getRepeatInterval() / 1000L)); + scheduleJob.setDescription(simple.getDescription()); + } + if (trigger instanceof CronTrigger) { + CronTrigger cron = (CronTrigger) trigger; + scheduleJob.setCronExpression(cron.getCronExpression()); + scheduleJob.setDescription(cron.getDescription() == null ? ("触发器:" + trigger.getKey()) : cron.getDescription()); + } + scheduleJobList.add(scheduleJob); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return scheduleJobList; + } + + /** + * 获取所有运行中的任务 + * + * @return 结果集合 + */ + public List getAllRuningScheduleJob() { + List scheduleJobList = null; + try { + List executingJobs = scheduler.getCurrentlyExecutingJobs(); + scheduleJobList = new ArrayList(executingJobs.size()); + for (JobExecutionContext executingJob : executingJobs) { + ScheduleJob scheduleJob = new ScheduleJob(); + JobDetail jobDetail = executingJob.getJobDetail(); + JobKey jobKey = jobDetail.getKey(); + Trigger trigger = executingJob.getTrigger(); + scheduleJob.setName(jobKey.getName()); + scheduleJob.setGroup(jobKey.getGroup()); + //scheduleJob.setDescription("触发器:" + trigger.getKey()); + Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); + scheduleJob.setStatus(triggerState.name()); + //获取要执行的定时任务类名 + scheduleJob.setClassName(jobDetail.getJobClass().getName()); + //判断trigger + if (trigger instanceof SimpleTrigger) { + SimpleTrigger simple = (SimpleTrigger) trigger; + scheduleJob.setCronExpression("重复次数:" + (simple.getRepeatCount() == -1 ? + "无限" : simple.getRepeatCount()) + ",重复间隔:" + (simple.getRepeatInterval() / 1000L)); + scheduleJob.setDescription(simple.getDescription()); + } + if (trigger instanceof CronTrigger) { + CronTrigger cron = (CronTrigger) trigger; + scheduleJob.setCronExpression(cron.getCronExpression()); + scheduleJob.setDescription(cron.getDescription()); + } + scheduleJobList.add(scheduleJob); + } + } catch (SchedulerException e) { + e.printStackTrace(); + } + return scheduleJobList; + } + + /** + * 获取所有的触发器 + * + * @return 结果集合 + */ + public List getTriggersInfo() { + try { + GroupMatcher matcher = GroupMatcher.anyTriggerGroup(); + Set Keys = scheduler.getTriggerKeys(matcher); + List triggers = new ArrayList(); + + for (TriggerKey key : Keys) { + Trigger trigger = scheduler.getTrigger(key); + ScheduleJob scheduleJob = new ScheduleJob(); + scheduleJob.setName(trigger.getJobKey().getName()); + scheduleJob.setGroup(trigger.getJobKey().getGroup()); + scheduleJob.setStatus(scheduler.getTriggerState(key) + ""); + if (trigger instanceof SimpleTrigger) { + SimpleTrigger simple = (SimpleTrigger) trigger; + scheduleJob.setCronExpression("重复次数:" + (simple.getRepeatCount() == -1 ? + "无限" : simple.getRepeatCount()) + ",重复间隔:" + (simple.getRepeatInterval() / 1000L)); + scheduleJob.setDescription(simple.getDescription()); + } + if (trigger instanceof CronTrigger) { + CronTrigger cron = (CronTrigger) trigger; + scheduleJob.setCronExpression(cron.getCronExpression()); + scheduleJob.setDescription(cron.getDescription()); + } + triggers.add(scheduleJob); + } + return triggers; + } catch (SchedulerException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 暂停任务 + * + */ + @Transactional(readOnly = false) + public void stopJob(ScheduleJob scheduleJob) { + + JobKey key = new JobKey(scheduleJob.getName(), scheduleJob.getGroup()); + try { + scheduler.pauseJob(key); + scheduleJob.setStatus("0"); + scheduleJobMapper.update(scheduleJob); + } catch (SchedulerException e) { + e.printStackTrace(); + } + } + + /** + * 恢复任务 + * + * @param + * @param + */ + @Transactional(readOnly = false) + public void restartJob(ScheduleJob scheduleJob) { + JobKey key = new JobKey(scheduleJob.getName(), scheduleJob.getGroup()); + try { + scheduler.resumeJob(key); + scheduleJob.setStatus("1"); + scheduleJobMapper.update(scheduleJob); + } catch (SchedulerException e) { + e.printStackTrace(); + } + } + + /** + * 立马执行一次任务 + * + * @param + * @param + */ + @Transactional(readOnly = false) + public void startNowJob(ScheduleJob scheduleJob) { + log.info("scheduleJob=>{}", JSONObject.toJSONString(scheduleJob)); + try { + JobKey key = new JobKey(scheduleJob.getName(), scheduleJob.getGroup()); + scheduler.triggerJob(key); + } catch (SchedulerException e) { + e.printStackTrace(); + } + } + + + /** + * 修改触发器时间 + * + * @param name 任务名 + * @param group 任务组 + * @param cron cron表达式 + */ + @Transactional(readOnly = false) + public void modifyTrigger(String name, String group, String cron) { + try { + TriggerKey key = TriggerKey.triggerKey(name, group); + //Trigger trigger = scheduler.getTrigger(key); + + CronTrigger newTrigger = (CronTrigger) TriggerBuilder.newTrigger() + .withIdentity(key) + .withSchedule(CronScheduleBuilder.cronSchedule(cron)) + .build(); + scheduler.rescheduleJob(key, newTrigger); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + } + + /** + * 暂停调度器 + */ + @Transactional(readOnly = false) + public void stopScheduler() { + try { + if (!scheduler.isInStandbyMode()) { + scheduler.standby(); + } + } catch (SchedulerException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/com/cmsen/ticket/monitor/task/ProcedureTask.java b/src/main/java/com/cmsen/ticket/monitor/task/ProcedureTask.java new file mode 100644 index 0000000..9564e1f --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/task/ProcedureTask.java @@ -0,0 +1,87 @@ +package com.cmsen.ticket.monitor.task; + +import com.cmsen.ticket.common.SpringContextHolder; +import com.cmsen.ticket.log.entity.TInterfaceLog; +import com.cmsen.ticket.log.service.TInterfaceLogService; +import com.cmsen.ticket.monitor.entity.ScheduleJob; +import com.cmsen.ticket.monitor.entity.Task; +import org.quartz.DisallowConcurrentExecution; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Random; + +@DisallowConcurrentExecution +public class ProcedureTask extends Task { + + ScheduleJob scheduleJob; + @Resource + private TInterfaceLogService interfaceLogService; + + @Override + public void run() { + scheduleJob = super.scheduleJob; + try { + runTask(); + + }catch (Exception e){ + e.printStackTrace(); + } + } + + + + /** + * 开始运行任务 + * @throws Exception + */ + public void runTask() + { + if(interfaceLogService==null){ + interfaceLogService = SpringContextHolder.getBean("interfaceLogService"); + } + StringBuffer mesg=new StringBuffer(); + String batch_no=""; + try + { + if(scheduleJob.getMapTxt()!=null&&!"".equals(scheduleJob.getMapTxt())){ + // 生成批号 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + String batch = (new SimpleDateFormat("yyyyMMddHHmmss")).format(calendar.getTime()); + Random random = new Random(); + int rannum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 获取5位随机数 + batch_no = batch+rannum; +// interfaceLogService.executeUpdateSql("call "+this.scheduleJob.getMapTxt()+"()"); + } + } + catch(Exception e) + { + mesg.append(e.getMessage()); + e.printStackTrace(); + } + finally { + // 日志信息 + TInterfaceLog interfaceLog = new TInterfaceLog(); + interfaceLog.setInterfaceName(scheduleJob.getName()); + if(mesg.length()>0){ + interfaceLog.setRunState("1"); + interfaceLog.setSendMesg(mesg.toString()); + interfaceLog.setRunMesg(mesg.toString()); + }else{ + interfaceLog.setRunState("2"); + interfaceLog.setRunBatch(batch_no); + interfaceLog.setInterfaceFlag(scheduleJob.getMapTxt()); + interfaceLog.setSendMesg("运行成功"); + interfaceLog.setRunMesg("运行成功"); + } + interfaceLog.setIsRollBack("1"); + +// interfaceLogService.saveSendEmail(interfaceLog,scheduleJob); + + } + } + +} diff --git a/src/main/java/com/cmsen/ticket/monitor/task/SqlEmailTask.java b/src/main/java/com/cmsen/ticket/monitor/task/SqlEmailTask.java new file mode 100644 index 0000000..cc4a4aa --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/task/SqlEmailTask.java @@ -0,0 +1,195 @@ +package com.cmsen.ticket.monitor.task; + +import com.alibaba.excel.EasyExcel; +import com.cmsen.ticket.common.SpringContextHolder; +import com.cmsen.ticket.domain.entity.manager.SysConfig; +import com.cmsen.ticket.domain.mapper.manager.SysConfigMapper; +import com.cmsen.ticket.log.entity.TInterfaceLog; +import com.cmsen.ticket.log.service.TInterfaceLogService; +import com.cmsen.ticket.monitor.entity.ScheduleJob; +import com.cmsen.ticket.monitor.entity.Task; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.springframework.beans.factory.annotation.Value; + +import javax.annotation.Resource; +import java.io.File; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + + +@DisallowConcurrentExecution +public class SqlEmailTask extends Task { + + ScheduleJob scheduleJob; + @Resource + private TInterfaceLogService interfaceLogService; + + @Resource + private SysConfigMapper sysConfigMapper; + +// @Resource +// private SendMailService sendMailService; + + @Value("${task.file.dir}") + public String baseDir; + + @Override + public void run() { + scheduleJob = super.scheduleJob; + try { + runTask(); + + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 开始运行任务 + * @throws Exception + */ + public void runTask() + { + if(interfaceLogService==null){ + interfaceLogService = SpringContextHolder.getBean("interfaceLogService"); + } + StringBuffer mesg=new StringBuffer(); + String batch_no=""; + try{ + // 获取job的 ext1和ext2 + String code = scheduleJob.getExt1(); + if(StringUtils.isEmpty(code)){ + throw new RuntimeException("code不能为空"); + } + String emailAddress = scheduleJob.getExt2(); + if(StringUtils.isEmpty(emailAddress)){ + throw new RuntimeException("邮箱不能为空"); + } + + SysConfig sqlConfig = sysConfigMapper.selectByCode(code); + if(null==sqlConfig){ + throw new RuntimeException("code:【"+code+"】在sysConfig缺少配置"); + } + String codeSql = sqlConfig.getValue(); + if(StringUtils.isEmpty(codeSql)){ + throw new RuntimeException("code:【"+code+"】在sysConfig缺少配置"); + } + List> result = null; + result = sysConfigMapper.executeTaskSqlResult(codeSql); + if(result.isEmpty()){ + throw new RuntimeException("code:【"+code+"】无结果集"); + } + // 将结果写入到excel中。 + String filePath = saveFile(result); + // 发送邮件 + String address[] = emailAddress.split(","); + String subject = scheduleJob.getName()+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + for (int i = 0; i < address.length; i++) { +// sendMailService.sendFileAndText(address[i],subject,filePath); + } + } + catch(Exception e) + { + mesg.append(e.getMessage()); + e.printStackTrace(); + } + finally { + // 日志信息 + TInterfaceLog interfaceLog = new TInterfaceLog(); + interfaceLog.setInterfaceName(scheduleJob.getName()); + if(mesg.length()>0){ + interfaceLog.setRunState("1"); + interfaceLog.setSendMesg(mesg.toString()); + interfaceLog.setRunMesg(mesg.toString()); + }else{ + interfaceLog.setRunState("2"); + interfaceLog.setRunBatch(batch_no); + interfaceLog.setInterfaceFlag(scheduleJob.getMapTxt()); + interfaceLog.setSendMesg("运行成功"); + interfaceLog.setRunMesg("运行成功"); + } + interfaceLog.setIsRollBack("1"); +// interfaceLogService.saveSendEmail(interfaceLog,scheduleJob); + } + } + + public String saveFile(List> result){ + long timeLong = new Date().getTime(); + File dir = new File(baseDir+File.separator+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + if(!dir.exists()){ + dir.mkdirs(); + } + String filePath = baseDir+File.separator+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))+ File.separator+"task_"+ timeLong + ".xlsx"; + File file = new File(filePath); + List> head = new ArrayList<>(); + Map title = result.get(0); + for (String s : title.keySet()) { + List headLine = new ArrayList<>(); + headLine.add(s); + head.add(headLine); + } + List> data = new ArrayList<>(); + for (int i = 0; i < result.size(); i++) { + Map map = result.get(i); + List lineData = new ArrayList<>(); + for (String s : title.keySet()) { + lineData.add(String.valueOf(null==map.get(s)?"":map.get(s))); + } + data.add(lineData); + } + // 2023-06-02 内存溢出修改 + EasyExcel.write(file) + .head(head) + .sheet(0, "Report报表") + .doWrite(data); +// // 1.创建工作簿 +// Workbook workbook = new XSSFWorkbook(); +// // 2.创建表名 +// Sheet sheet = workbook.createSheet("sheet1"); +// //3.创建单元格并写入数据 +// Map title = result.get(0); +// Row rowHead=sheet.createRow(0); +// int t=0; +// for (String s : title.keySet()) { +// rowHead.createCell(t).setCellValue(s); +// t++; +// } +// for (int i = 0; i < result.size(); i++) { +// Map map = result.get(i); +// Row row = sheet.createRow(i + 1); +// int lineN = 0; +// for (String s : title.keySet()) { +// row.createCell(lineN).setCellValue(String.valueOf(map.get(s))); +// lineN++; +// } +// } +// try { +// //4.创建流用于输出 +// FileOutputStream fileOutputStream = new FileOutputStream(filePath); +// //5.输出 +// workbook.write(fileOutputStream); +// } catch (IOException e) { +// e.printStackTrace(); +// return null; +// }finally { +// try { +// workbook.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } + return filePath; + } + + public static boolean patternMatches(String emailAddress, String regexPattern) { + return Pattern.compile(regexPattern) + .matcher(emailAddress) + .matches(); + } +} diff --git a/src/main/java/com/cmsen/ticket/monitor/task/TestTask.java b/src/main/java/com/cmsen/ticket/monitor/task/TestTask.java new file mode 100644 index 0000000..14d1882 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/task/TestTask.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.monitor.task; + +import com.cmsen.ticket.monitor.entity.Task; +import org.quartz.DisallowConcurrentExecution; + + +@DisallowConcurrentExecution +public class TestTask extends Task { + + @Override + public void run() { + System.out.println("这是测试任务TestTask。"); + + } + +} diff --git a/src/main/java/com/cmsen/ticket/monitor/task/TestTask1.java b/src/main/java/com/cmsen/ticket/monitor/task/TestTask1.java new file mode 100644 index 0000000..380cf44 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/task/TestTask1.java @@ -0,0 +1,16 @@ +package com.cmsen.ticket.monitor.task; + +import com.cmsen.ticket.monitor.entity.Task; +import org.quartz.DisallowConcurrentExecution; + + +@DisallowConcurrentExecution +public class TestTask1 extends Task { + + @Override + public void run() { + System.out.println("这是另一个测试任务TestTask1。"); + + } + +} diff --git a/src/main/java/com/cmsen/ticket/monitor/web/ScheduleJobFacade.java b/src/main/java/com/cmsen/ticket/monitor/web/ScheduleJobFacade.java new file mode 100644 index 0000000..d5e45d4 --- /dev/null +++ b/src/main/java/com/cmsen/ticket/monitor/web/ScheduleJobFacade.java @@ -0,0 +1,201 @@ +/** + * Copyright © 2015-2020 JeePlus All rights reserved. + */ +package com.cmsen.ticket.monitor.web; + +import com.cmsen.common.http.response.RestResponse; +import com.cmsen.ticket.common.AjaxJson; +import com.cmsen.ticket.monitor.entity.ScheduleJob; +import com.cmsen.ticket.monitor.service.ScheduleJobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.map.HashedMap; +import org.quartz.CronExpression; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import java.util.Map; + +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +/** + * 定时任务Controller + * + * @author lgf + * @version 2017-02-04 + */ +@Api(tags = "定时任务") +@RestController +@RequestMapping("manager/quartz/scheduleJob") +@Slf4j +public class ScheduleJobFacade { + + @Autowired + private ScheduleJobService scheduleJobService; + + @ModelAttribute + public ScheduleJob get(@RequestParam(required = false) String id) { + ScheduleJob entity = null; + if (isNotBlank(id)) { + entity = scheduleJobService.get(id); + } + if (entity == null) { + entity = new ScheduleJob(); + } + return entity; + } + + + /** + * 定时任务列表数据 + */ +// @RequiresPermissions("quartz:scheduleJob:list") +// @GetMapping("list") +// public AjaxJson data(ScheduleJob scheduleJob, HttpServletRequest request, HttpServletResponse response, Model model) { +// Page page = scheduleJobService.findPage(new Page(request, response), scheduleJob); +// return AjaxJson.success().put("page", page); +// } + + @GetMapping("list") + @ApiOperation("分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name",value = "任务名称"), + @ApiImplicitParam(name = "pageSize",value = "分页大小"), + @ApiImplicitParam(name = "pageNo",value = "分页页号"), + @ApiImplicitParam(name = "orderBy",value = "排序字段") + }) + public RestResponse select(@RequestParam(required = false) String name, + @RequestParam(required = true) String pageSize, + @RequestParam(required = true) String pageNo, + @RequestParam(required = false) String orderBy) { + Map params = new HashedMap(); + params.put("name",name); + params.put("orderBy",orderBy); + params.put("pageSize",pageSize); + params.put("pageNo",pageNo); + return scheduleJobService.list(params); + } + + /** + * 查看,增加,编辑定时任务表单页面 + */ + @GetMapping("queryById") + @ApiOperation("查看,增加,编辑定时任务表单页面") + public AjaxJson queryById(ScheduleJob scheduleJob) { + return AjaxJson.success().put("scheduleJob", scheduleJob); + } + + /** + * 保存定时任务 + */ +// @RequiresPermissions(value = {"quartz:scheduleJob:add", "quartz:scheduleJob:edit"}, logical = Logical.OR) + @PostMapping("save") + @ApiOperation("保存定时任务") + public AjaxJson save(@RequestBody ScheduleJob scheduleJob) throws Exception { + /** + * 后台hibernate-validation插件校验 + */ +// String errMsg = beanValidator(scheduleJob); +// if (StringUtils.isNotBlank(errMsg)) { +// return AjaxJson.error(errMsg); +// } + + //验证cron表达式 + if (!CronExpression.isValidExpression(scheduleJob.getCronExpression())) { + return AjaxJson.error("cron表达式不正确!"); + } + + scheduleJobService.save(scheduleJob);//保存 + + return AjaxJson.success("保存定时任务成功!"); + } + + + /** + * 批量删除定时任务 + */ +// @RequiresPermissions("quartz:scheduleJob:del") + @DeleteMapping("delete") + @ApiOperation("批量删除定时任务") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids",value = "id逗号隔开"), + }) + public AjaxJson deleteAll(String ids) { + AjaxJson j = new AjaxJson(); + String idArray[] = ids.split(","); + for (String id : idArray) { + scheduleJobService.delete(scheduleJobService.get(id)); + } + return AjaxJson.success("删除定时任务成功"); + } + + + /** + * 暂停任务 + */ +// @RequiresPermissions("quartz:scheduleJob:stop") + @PostMapping("stop") + @ApiOperation("暂停任务") + public AjaxJson stop(ScheduleJob scheduleJob) { + scheduleJobService.stopJob(scheduleJob); + return AjaxJson.success("暂停成功!"); + } + + + /** + * 立即运行一次 + */ +// @RequiresPermissions("quartz:scheduleJob:startNow") + @PostMapping("startNow") + @ApiOperation("立即运行一次") + public AjaxJson stratNow(ScheduleJob scheduleJob) { + scheduleJobService.startNowJob(scheduleJob); + return AjaxJson.success("运行成功"); + } + + /** + * 恢复 + */ +// @RequiresPermissions("quartz:scheduleJob:resume") + @PostMapping("resume") + @ApiOperation("恢复") + public AjaxJson resume(ScheduleJob scheduleJob) { + scheduleJobService.restartJob(scheduleJob); + scheduleJobService.startNowJob(scheduleJob);//恢复之后,立即触发一次激活定时任务,不然定时任务有可能不会执行,这是bug的回避案,具体原因我没找到。 + return AjaxJson.success("恢复成功"); + } + + /** + * 验证类任务类是否存在 + */ + @GetMapping("existsClass") + @ApiOperation("验证类任务类是否存在") + @ApiImplicitParams({ + @ApiImplicitParam(name = "className",value = "人物类的全称"), + }) + public AjaxJson existsClass(String className) { + Class job = null; + try { + job = Class.forName(className); + return AjaxJson.success(); + } catch (ClassNotFoundException e1) { + return AjaxJson.error("类不存在"); + } + } + /** + * 获取存储过程 + */ + @ResponseBody + @GetMapping(value = "getMapTxt") + @ApiOperation("获取存储过程") + public AjaxJson getMapTxt(ScheduleJob scheduleJob, Model model, RedirectAttributes redirectAttributes) throws Exception { + return AjaxJson.success("获取数据成功!").put("mapTxt",scheduleJobService.findList2(new ScheduleJob())); + + } + +} diff --git a/src/main/resources/application-baozun.properties b/src/main/resources/application-baozun.properties new file mode 100644 index 0000000..5c03cce --- /dev/null +++ b/src/main/resources/application-baozun.properties @@ -0,0 +1,112 @@ +server.port=8888 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=baozun +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=root +spring.datasource.password=Invoice2021Baozun.com +spring.datasource.url=jdbc:mysql://10.90.85.21:3306/fees_invoice?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true + +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.max-lifetime=0 +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId= +wechat.appSecret= +wechat.corAppId= +wechat.corSecret= +wechat.corInfoSecret= + +file.filepath=/data/upload +file.invoicePic=/data/upload +file.PDF=/data/upload +file.domainName=http://10.90.85.20/ +manager-file.uploadPath=/data/upload/ +manager-file.viewPath=http://10.90.85.20/api/img/ + +manager-file.watchPath=D:// + +img.img-virtual-Path=/img +logging.level.com.cmsen.ticket.domain.mapper=debug +#logging.level.com.cmsenframework.security=debug + +mail-private.active=false +mail-private.username=**@qq.com +mail-private.password=eqweq +mail-private.host=imap.qq.com +mail-private.port=143 +mail-public.active=false +mail-public.username=**@qq.com +mail-public.password=eqwe +mail-public.host=imap.qq.com +mail-public.port=993 + +concur.baseUrl=http://127.0.0.1/ics_menarini +concur.userName=interface +concur.password=212121 + +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac + +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 + +concur.guni.active=false +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 + +concur.public.invoice.active=false + +invoice.attachment.mqUrl=http://ocr01.fanhaninfo.com:9011/MQ_produce +invoice.attachment.responseUrl=https://fp.connectconcur.com:10244/api/callback/verifiedAttachment +invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://0.0.0.0:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check + +knife4j.enable=false +knife4j.production=false + + +spring.mail.host=smtp.exmail.qq.com +spring.mail.username=fp@connectconcur.com +spring.mail.password=Ab123*() +spring.mail.default-encoding=UTF-8 +spring.mail.properties.mail.smtp.ssl.enable=true +spring.mail.properties.mail.smtp.ssl.trust=smtp.exmail.qq.com +spring.mail.properties.mail.socketFactory.class=javax.net.ssl.SSLSocketFactory +spring.mail.properties.mail.smtp.socketFactory.port=465 +spring.mail.properties.mail.smtp.port=465 +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true +spring.mail.properties.mail.smtp.starttls.required=true + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties new file mode 100644 index 0000000..a2652a6 --- /dev/null +++ b/src/main/resources/application-dev.properties @@ -0,0 +1,185 @@ +server.port=18088 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=sea-cost-ticket +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.jwt.expire-in=7200 +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c + +#spring.datasource.username: root +#spring.datasource.password: today8520 +#spring.datasource.url: jdbc:mysql://210.14.77.39:24330/ge_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=GMT%2b8 +spring.datasource.username=fees-invoice +spring.datasource.password=fees#INVOICE123 +spring.datasource.url=jdbc:mysql://210.14.77.39:29330/fees_invoice?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true +#spring.datasource.username=root +#spring.datasource.password=today8520 +#spring.datasource.url=jdbc:mysql://reg.qcisoft.com:15330/fees_test_prc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true +#spring.datasource.username=root +#spring.datasource.password=123456 +#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/fee_invoice?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.max-lifetime=0 +#spring.datasource.hikari.maximum-pool-size=32 +#spring.datasource.hikari.minimum-idle=5 +#spring.datasource.hikari.connection-timeout=30000 +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +server.max-http-header-size=502400 +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId=wx8698e907d78a0967 +wechat.appSecret=38bc957b593ede5fd664c4087e8309ee +wechat.corAppId=wwdbf8656711a2c5e4 +wechat.corSecret=xipCzDS6dMG0MMMARWQXB_VqgpOCBa3XStpH-U2RB_A +wechat.corInfoSecret=1Y70R60Yoww841g7xZpetdxi61ZZd6OoJJG-x8b2mTY +file.filepath=D://WorkSpace//Resource//invoice +file.invoicePic=D://WorkSpace//Resource//invoice +file.PDF=D://WorkSpace//Resource//invoice +file.domainName=http://invoice2.cn.utools.club/ +manager-file.uploadPath=D:\\WorkSpace\\Resource\\invoice\\ +manager-file.viewPath=http://invoice2.cn.utools.club/api/img/ +manager-file.watchPath=D:// +img.img-virtual-Path=/img +#logging.config=logback-spring.xml +#logging.config=classpath:logback-spring.xml +logging.level.com.cmsen.ticket.domain.mapper=debug +#logging.level.com.cmsenframework.security=debug + +mail-private.active=false +mail-private.username=**@qq.com +mail-private.password=heuvrmdxhqqnbbhb +mail-private.host=imap.qq.com +mail-private.port=143 + +mail-private2.active=false +mail-private2.username=**@qq.com +mail-private2.password=heuvrmdxhqqnbbhb +mail-private2.host=imap.qq.com +mail-private2.port=143 + +mail-public.active=true +mail-public.username=zhangjianxue@fanhan-tech.com +mail-public.password=Today123 +mail-public.host=imap.exmail.qq.com +mail-public.port=993 + +concur.active=true +concur.syncUserActive=false +#concur.baseUrl=https://bpm01.connectconcur.com +#concur.userName=admin +#concur.password=Ab1234 +concur.baseUrl=http://210.14.77.39:16808/ics_demo +concur.userName=interface +concur.password=Ii3691#^( +concur.entryImagesActive=false +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 +concur.guni.active=true +concur.guni.loginUrl=https://concur-prod.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-prod.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 +concur.public.invoice.active=false +#invoice.attachment.mqUrl=http://ocr01.fanhaninfo.com:9011/MQ_produce +invoice.attachment.mqUrl=http://39.99.244.218:9011/MQ_produce +invoice.attachment.responseUrl=https://fp.connectconcur.com:10244/api/callback/verifiedAttachment +#invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.authUrl=http://39.99.244.218:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://0.0.0.0:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +invoice.attachment.verifyUrlSingle=http://0.0.0.0:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +invoice.attachment.report=http://10.66.14.150:9000/api/v3/AI_httpService/OC_report/report + +knife4j.enable=true +knife4j.production=false + +#spring.mail.host=smtp.exmail.qq.com +#spring.mail.username=fp@connectconcur.com +#spring.mail.password=Ab123*() +#spring.mail.default-encoding=UTF-8 +#spring.mail.properties.mail.smtp.ssl.enable=true +#spring.mail.properties.mail.smtp.ssl.trust=smtp.exmail.qq.com +#spring.mail.properties.mail.socketFactory.class=javax.net.ssl.SSLSocketFactory +#spring.mail.properties.mail.smtp.socketFactory.port=465 +#spring.mail.properties.mail.smtp.port=465 +#spring.mail.properties.mail.smtp.auth=true +#spring.mail.properties.mail.smtp.starttls.enable=true +#spring.mail.properties.mail.smtp.starttls.required=true + +spring.mail.host=smtp.qiye.aliyun.com +spring.mail.username=atlas@baibyun.com +spring.mail.password=Today123! +spring.mail.default-encoding=UTF-8 +spring.mail.port=25 +#spring.mail.properties.mail.smtp.ssl.enable=true +#spring.mail.properties.mail.smtp.ssl.trust=smtp.office365.com +#spring.mail.properties.mail.socketFactory.class=javax.net.ssl.SSLSocketFactory +#spring.mail.properties.mail.smtp.socketFactory.port=587 +#spring.mail.properties.mail.smtp.port=25 +#spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true +spring.mail.properties.mail.smtp.starttls.required=true + +#spring.redis.host=127.0.0.1 +#spring.redis.port=16379 +#spring.redis.password= +#spring.redis.database=1 +#spring.redis.timeout=30000ms +#spring.redis.jedis.pool.max-active=20 +#spring.redis.jedis.pool.max-wait=-1ms +#spring.redis.jedis.pool.max-idle=8 +#spring.redis.jedis.pool.min-idle=1 + + +template.mileage.image.path=D://Java//ideaWorkspace//fees-invoice-mini-backend//template +template.image.path=D://Java//ideaWorkspace//fees-invoice-mini-backend//template + + +smarttax.droplet.enable=true +smarttax.droplet.mock=false +smarttax.droplet.endpoint=101.132.167.223 +smarttax.droplet.port=4567 +smarttax.droplet.ak=fanhan_2022 +smarttax.droplet.sk=7Hs3H7eKdusS1W9lT2K +smarttax.droplet.tracer=false + +pagehelper.helper-dialect=mysql +pagehelper.params=count=countSql +pagehelper.reasonable=true +pagehelper.support-methods-arguments=true + + +wechat.pc.appId=wxecd82ff9a948a534 +wechat.pc.appSecret=1c9541b2052fa3faf961c7f3253f0e3c + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true + +task.file.dir=C:\\Users\\lee\\Desktop + +#/docker/upload/exchange_attachment/ diff --git a/src/main/resources/application-menarini.properties b/src/main/resources/application-menarini.properties new file mode 100644 index 0000000..ad4b2ca --- /dev/null +++ b/src/main/resources/application-menarini.properties @@ -0,0 +1,101 @@ +server.port=18089 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=menarini +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=today +spring.datasource.password=today8520 +spring.datasource.url=jdbc:mysql://rm-8vbwx7i170m8b42bq.mysql.zhangbei.rds.aliyuncs.com:3306/ocr_menarini?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId=wxd35c361f8d087072 +wechat.appSecret=863a1b6e144a60d4f0e1758949c97da8 +wechat.corAppId=-1 +wechat.corSecret=-1 +wechat.corInfoSecret=-1 +file.filepath=/nas/menarini +file.invoicePic=/nas/menarini +file.PDF=/nas/menarini +file.domainName=https://menarini.connectconcur.com +manager-file.uploadPath=/nas/menarini/ +manager-file.viewPath=https://menarini.connectconcur.com/api/img/ +manager-file.watchPath.sap1=/nas/watch/menarini/goods/ +manager-file.watchPath.sap2=/nas/watch/menarini/service/ +manager-file.template=/data/invoice/wwwjar/fees_invoice_menarini/template/ +img.img-virtual-Path=/img +mail-private.active=true +mail-private.username=menarini@connectconcur.com +mail-private.password=Fanhan123 +mail-private.host=imap.exmail.qq.com +mail-private.port=143 +mail-public.active=true +mail-public.username=menarinivat@connectconcur.com +mail-public.password=Fanhan123 +mail-public.host=imap.exmail.qq.com +mail-public.port=143 +concur.baseUrl=http://ics02.connectconcur.com/ics_menarini +concur.tokenRoute=/sys/login +concur.userName=interface +concur.password=Ii3691#^( +concur.delegators=/ocr/getDelegators +concur.wechatSend=/weixin/addReport +concur.createReportRoute=/ocr/createReport +concur.getReportStateRoute=/ocr/getReportStateNew +concur.upReportRoute=/ocr/upReport +concur.upEntryRoute=/ocr/upEntry +concur.delEntryRoute=/ocr/delEntry +concur.checkEntryRoute=/ocr/checkEntryList +concur.t10Employee=/today/employee/t10Employee/list +concur.reportMain=/today/report/t10ReportMain/list +concur.reportById=/today/report/t10ReportMain/queryById +concur.entryItemization=/today/report/t10EntryItemization/list +concur.entryItemizationById=/today/report/t10EntryItemization/queryById +concur.entryAssociations=/today/report/t10EntryAssociations/list +concur.concurBase.baseUrl=http://ics02.connectconcur.com/ics_city/a +concur.concurBase.cityRoute=/today/city/tOcrCity/data +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 +concur.guni.active=false +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 +concur.public.invoice.active=false +invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://ocr01.fanhaninfo.com:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +logging.file=/data/logs/menarini/${spring.application.name}.log +knife4j.enable=true +knife4j.production=true + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true diff --git a/src/main/resources/application-prc.properties b/src/main/resources/application-prc.properties new file mode 100644 index 0000000..a6885cb --- /dev/null +++ b/src/main/resources/application-prc.properties @@ -0,0 +1,100 @@ +server.port=18090 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=prc +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=patrick@concurtestmysql +spring.datasource.password=Q4H!cYewtnfx +spring.datasource.url=jdbc:mysql://concurtestmysql.mysql.database.chinacloudapi.cn:3306/fees_invoice?useUnicode=true&characterEncoding=utf-8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=GMT&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId=wx0dbed645a42a43db +wechat.appSecret=318f80a07f032d10ce37cac0dabb783e +wechat.corAppId=-1 +wechat.corSecret=-1 +wechat.corInfoSecret=-1 +file.filepath=E://invoice//upload +file.invoicePic=E://invoice///upload +file.PDF=E://invoice//upload +file.domainName=https://concur-test.pernod-ricard-china.com/ocr +manager-file.uploadPath=E://invoice///upload// +manager-file.viewPath=https://concur-test.pernod-ricard-china.com/ocr/api/img/ +manager-file.template=/mnt/wwwjar/fees_invoice_menarini/template/ +manager-file.watchPath=E://invoice//watch// +img.img-virtual-Path=/img +mail-private.active=false +mail-private.username=**@qq.com +mail-private.password=heuvrmdxhqqnbbhb +mail-private.host=imap.qq.com +mail-private.port=143 +mail-public.active=false +mail-public.username=**@qq.com +mail-public.password=heuvrmdxhqqnbbhb +mail-public.host=imap.qq.com +mail-public.port=993 +concur.baseUrl=https://concur-test.pernod-ricard-china.com/ics_ocr +concur.userName=admin +concur.password=Today123!#% + +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac + +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 + +concur.guni.active=true +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 + +concur.public.invoice.active=false + +invoice.attachment.mqUrl=http://ocr01.fanhaninfo.com:9011/MQ_produce +invoice.attachment.responseUrl=https://concur-test.pernod-ricard-china.com/ocr/api/callback/verifiedAttachment +invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://ocr01.fanhaninfo.com:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check + +knife4j.enable=true +knife4j.production=true + +logging.file=/logsocr/${spring.application.name}.log +#logging.level.com.cmsenframework.security=debug + +spring.mail.host=smtp.exmail.qq.com +spring.mail.username=fp@connectconcur.com +spring.mail.password=Ab123*() +spring.mail.port=25 +spring.mail.default-encoding=utf-8 +spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true diff --git a/src/main/resources/application-pro.properties b/src/main/resources/application-pro.properties new file mode 100644 index 0000000..60f4c5a --- /dev/null +++ b/src/main/resources/application-pro.properties @@ -0,0 +1,105 @@ +server.port=18088 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=sea-cost-ticket +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=fees-invoice +spring.datasource.password=fees#INVOICE123 +spring.datasource.url=jdbc:mysql://reg.qcisoft.com:29330/fees_invoice?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.max-lifetime=0 +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId=wx8698e907d78a0967 +wechat.appSecret=38bc957b593ede5fd664c4087e8309ee +wechat.corAppId=wwdbf8656711a2c5e4 +wechat.corSecret=xipCzDS6dMG0MMMARWQXB_VqgpOCBa3XStpH-U2RB_A +wechat.corInfoSecret=1Y70R60Yoww841g7xZpetdxi61ZZd6OoJJG-x8b2mTY +file.filepath=/Picture/invoicePic +file.invoicePic=/Picture/invoicePic +file.PDF=/Picture/invoicePic +file.domainName=https://fp.connectconcur.com:10244 +manager-file.uploadPath=/Picture/invoicePic/ +manager-file.viewPath=https://fp.connectconcur.com:10244/api/img/ +manager-file.watchPath.sap1=/data/watch/sap1/ +manager-file.watchPath.sap2=/data/watch/sap2/ +img.img-virtual-Path=/img +mail-private.active=true +mail-private.username=fp@connectconcur.com +mail-private.password=Ab123*() +mail-private.host=imap.exmail.qq.com +mail-private.port=993 +mail-public.active=false +mail-public.username=**@qq.com +mail-public.password=heuvrmdxhqqnbbhb +mail-public.host=imap.qq.com +mail-public.port=993 +concur.baseUrl=http://reg.qcisoft.com:16808/ics_demo +concur.tokenRoute=/sys/login +concur.userName=interface +concur.password=Ii3691#^( +concur.delegators=/ocr/getDelegators +concur.wechatSend=/weixin/addReport +concur.createReportRoute=/ocr/createReport +concur.getReportStateRoute=/ocr/getReportStateNew +concur.upReportRoute=/ocr/upReport +concur.upEntryRoute=/ocr/upEntry +concur.delEntryRoute=/ocr/delEntry +concur.checkEntryRoute=/ocr/checkEntryList +concur.t10Employee=/today/employee/t10Employee/list +concur.reportMain=/today/report/t10ReportMain/list +concur.reportById=/today/report/t10ReportMain/queryById +concur.entryItemization=/today/report/t10EntryItemization/list +concur.entryItemizationById=/today/report/t10EntryItemization/queryById +concur.entryAssociations=/today/report/t10EntryAssociations/list +concur.concurBase.baseUrl=http://ics02.connectconcur.com/ics_city/a +concur.concurBase.cityRoute=/today/city/tOcrCity/data +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 +concur.guni.active=false +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 +concur.public.invoice.active=false +invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://ocr01.fanhaninfo.com:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +#logging.level.com.cmsenframework.security=debug +knife4j.enable=true +knife4j.production=false +knife4j.basic.enable=true +knife4j.basic.username=invoice +knife4j.basic.password=invoice + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true + diff --git a/src/main/resources/application-sironax.properties b/src/main/resources/application-sironax.properties new file mode 100644 index 0000000..d9feb82 --- /dev/null +++ b/src/main/resources/application-sironax.properties @@ -0,0 +1,101 @@ +server.port=18090 +server.servlet.context-path=/api +spring.application.name=sironax +spring.resources.cache.period=31536000 +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=today +spring.datasource.password=today8520 +spring.datasource.url=jdbc:mysql://rm-8vbwx7i170m8b42bq.mysql.zhangbei.rds.aliyuncs.com:3306/ocr_sironax?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.resources.static-locations=classpath:/templates/,classpath:/static/ +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true +wechat.appId=wx93c4216ab685e25f +wechat.appSecret=062d7bd9bd850aa1ac0596ef0d44d1e9 +wechat.corAppId=-1 +wechat.corSecret=-1 +wechat.corInfoSecret=-1 +file.filepath=/nas/sironax +file.invoicePic=/nas/sironax +file.PDF=/nas/sironax +file.domainName=https://sironax.connectconcur.com +manager-file.uploadPath=/nas/sironax/ +manager-file.viewPath=https://sironax.connectconcur.com/api/img/ +manager-file.watchPath.sap1=/nas/watch/sironax/goods/ +manager-file.watchPath.sap2=/nas/watch/sironax/service/ +manager-file.template=/data/invoice/wwwjar/fees_invoice_menarini/template/ +img.img-virtual-Path=/img +mail-private.active=true +mail-private.username=sironax@connectconcur.com +mail-private.password=Wangyifei0227 +mail-private.host=imap.exmail.qq.com +mail-private.port=993 +mail-public.active=true +mail-public.username=sironaxvat@connectconcur.com +mail-public.password=Fanhan_123 +mail-public.host=imap.exmail.qq.com +mail-public.port=993 +concur.baseUrl=http://ics02.connectconcur.com/ics_sironax +concur.tokenRoute=/sys/login +concur.userName=interface +concur.password=Ii3691#^( +concur.delegators=/ocr/getDelegators +concur.wechatSend=/weixin/addReport +concur.createReportRoute=/ocr/createReport +concur.getReportStateRoute=/ocr/getReportStateNew +concur.upReportRoute=/ocr/upReport +concur.upEntryRoute=/ocr/upEntry +concur.delEntryRoute=/ocr/delEntry +concur.checkEntryRoute=/ocr/checkEntryList +concur.t10Employee=/concur/employee/t10Employee/list +concur.reportMain=/concur/report/t10ReportMain/list +concur.reportById=/concur/report/t10ReportMain/queryById +concur.entryItemization=/concur/report/t10EntryItemization/list +concur.entryItemizationById=/concur/report/t10EntryItemization/queryById +concur.entryAssociations=/concur/report/concur/report/t10EntryAssociations/list +concur.concurBase.baseUrl=http://ics02.connectconcur.com/ics_city/a +concur.concurBase.cityRoute=/today/city/tOcrCity/data +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 +concur.guni.active=false +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 +concur.public.invoice.active=true +invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://ocr01.fanhaninfo.com:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +logging.file=/data/logs/sironax/${spring.application.name}.log +knife4j.enable=true +knife4j.production=true + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties new file mode 100644 index 0000000..9850481 --- /dev/null +++ b/src/main/resources/application-test.properties @@ -0,0 +1,135 @@ +server.port=18100 +server.servlet.context-path=/api +spring.resources.cache.period=31536000 +spring.application.name=sironax1 +spring.jwt.secret=6B31975147F94E7D8F6C1C33F8DE032B +spring.jwt.password=auto_invoice +spring.jwt.en_password=$2a$10$nU3eeg4JAd79NPzPnDVkzuCqUEhukoAPPj.pYTgv2yWnRjZ/28XFG +spring.ccintocr.app_key=5f98d567 +spring.ccintocr.app_secret=671ef2c3ae19eaf4bb05f25af7ecf04c +spring.datasource.username=fees_test2 +spring.datasource.password=fees_test2#FEES_TEXT2 +spring.datasource.url=jdbc:mysql://reg.qcisoft.com:29330/fees_test2?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&allowMultiQueries=true +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.hikari.max-lifetime=0 +spring.resources.static-locations=classpath:/templates/,classpath:/static/ + +spring.servlet.multipart.max-file-size=50MB +spring.servlet.multipart.max-request-size=50MB +mybatis.mapper-locations=classpath:/mapper/*.xml +mybatis.configuration.map-underscore-to-camel-case=true +mybatis.configuration.call-setters-on-nulls=true + +wechat.appId=wxdd60695ef466966d +wechat.appSecret=6f02417e9b028931f435d63f9af092bb +wechat.corAppId=-1 +wechat.corSecret=-1 +wechat.corInfoSecret=-1 + +file.filepath=/data/wwwroot/frees_invoice_test2/upload +file.invoicePic=/data/wwwroot/frees_invoice_test2/upload +file.PDF=/data/wwwroot/frees_invoice_test2/upload +file.domainName=https://fp.connectconcur.com:10246 +manager-file.uploadPath=/data/wwwroot/frees_invoice_test2/upload/ +manager-file.viewPath=https://fp.connectconcur.com:10246/api/img/ +manager-file.watchPath=/data/watch/frees_test2/ + + +img.img-virtual-Path=/img + +mail-private.active=false +mail-private.username=fp@connectconcur.com +mail-private.password=Ab123*() +mail-private.host=imap.exmail.qq.com +mail-private.port=993 +mail-public.active=true +mail-public.username=zhangjianxue@dv-email.com +mail-public.password=Connect@123 +mail-public.host=imap.exmail.qq.com +mail-public.port=993 + +concur.active=true +concur.syncUserActive=false +concur.baseUrl=http://reg.qcisoft.com:16808/today_ocr2 +concur.userName=interface +concur.password=Ii3691#^( + +concur.concurLoginInfo.userName=testconcur +concur.concurLoginInfo.count=0 +concur.concurLoginInfo.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.concurLoginInfo.token=fda5578b038a458dbff8b91045a06ddc1610c303136e429887f450269ab8a8df8e763b741d134804889f23fd6439e2ac + +concur.ocrConcur.templateID=74d691ec-adb5-4f0a-8e9a-6d7810fc0604 +concur.ocrConcur.execUser=testconcur +concur.ocrConcur.action=报销 + +concur.guni.active=false +concur.guni.loginUrl=https://concur-test.pernod-ricard-china.com:10000/piaoge/api/user/third/login +concur.guni.listUrl=https://concur-test.pernod-ricard-china.com:10000/Piaoge/api/Task/searchDetailList +concur.guni.userName=testconcur +concur.guni.secret=4fd684c25c3989d61a9e908af3b59c093fb7592c +concur.guni.count=0 + +concur.public.invoice.active=false + +#invoice.attachment.mqUrl=http://ocr01.fanhaninfo.com:9011/MQ_produce +invoice.attachment.mqUrl=http://39.99.244.218:9011/MQ_produce +invoice.attachment.responseUrl=https://fp.connectconcur.com:10246/api/callback/verifiedAttachment +#invoice.attachment.authUrl=http://ocr01.fanhaninfo.com:9000/api/v3/access_tokens +invoice.attachment.authUrl=http://39.99.244.218:9000/api/v3/access_tokens +invoice.attachment.username=guest +invoice.attachment.password=123456789 +invoice.attachment.verifyUrl=http://0.0.0.0:9000/api/v3/AI_httpService/OC_reimbursement_check/reimbursement_check +invoice.attachment.report=http://39.99.244.218:9000/api/v3/AI_httpService/OC_report/report + + +#logging.level.com.cmsenframework.security=debug + +knife4j.enable=true +#knife4j.production=true +#knife4j.basic.enable=true +#knife4j.basic.username=invoice +#knife4j.basic.password=invoice + +# spring.mail.host=smtp.office365.com +# spring.mail.username=Einvoice.inbox@atlascopco.com +# spring.mail.password=Cp3PB9!rkQPQQ4S& +# spring.mail.default-encoding=UTF-8 +# spring.mail.port=25 +# spring.mail.properties.mail.smtp.starttls.enable=true +# spring.mail.properties.mail.smtp.starttls.required=true + + +spring.mail.host=smtp.exmail.qq.com +spring.mail.username=fp@connectconcur.com +spring.mail.password=Ab123*() +spring.mail.default-encoding=UTF-8 +spring.mail.properties.mail.smtp.ssl.enable=true +spring.mail.properties.mail.smtp.ssl.trust=smtp.exmail.qq.com +spring.mail.properties.mail.socketFactory.class=javax.net.ssl.SSLSocketFactory +spring.mail.properties.mail.smtp.socketFactory.port=465 +spring.mail.properties.mail.smtp.port=465 +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true +spring.mail.properties.mail.smtp.starttls.required=true + +template.mileage.image.path=/data/wwwjar/frees_invoice_test2/template +template.image.path=/data/wwwjar/frees_invoice_test2/template + + + +spring.quartz.job-store-type=jdbc +spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler +spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO +spring.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX +spring.quartz.jobStore.driverDelegateClass=spring.quartz.properties.org.quartz.jobStore.driverDelegateClass= +spring.quartz.jobStore.tablePrefix=QRTZ_ +spring.quartz.jobStore.isClustered=false +spring.quartz.jobStore.clusterCheckinInterval=2000 +spring.quartz.jobStore.useProperties=false +spring.quartz.jobStore.acquireTriggersWithinLock=true +spring.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool +spring.quartz.threadPool.threadCount=10 +spring.quartz.threadPool.threadPriority=5 +spring.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..b88fc28 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,6 @@ +spring.profiles.active=dev +#spring.profiles.active=test +#spring.profiles.active=pro +#spring.profiles.active=menarini +#spring.profiles.active =sironax +#spring.profiles.active=prc \ No newline at end of file diff --git a/src/main/resources/mapper/CompanyMapper.xml b/src/main/resources/mapper/CompanyMapper.xml new file mode 100644 index 0000000..ee4961e --- /dev/null +++ b/src/main/resources/mapper/CompanyMapper.xml @@ -0,0 +1,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into company(NAME, FULLNAME, DUTY_PARAGRAPH, COMPANY_CODE, CUSTOMER_ID, IS_DEL, CREATE_TIME, VALID_MODE) + values (#{name}, #{fullName}, #{dutyParagraph}, #{companyCode}, #{customerId}, #{isDel}, #{createTime}, #{validMode}) + + + + + update company + + + NAME = #{name}, + + + FULLNAME = #{fullName}, + + + DUTY_PARAGRAPH = #{dutyParagraph}, + + + COMPANY_CODE = #{companyCode}, + + + CUSTOMER_ID = #{customerId}, + + + IS_DEL = #{isDel}, + + + CREATE_TIME = #{createTime}, + + + VALID_MODE = #{validMode,jdbcType=INTEGER}, + + + where ID = #{id} + + + + + delete + from company + where ID = #{id} + + + + + update company + set is_del = 0 + where is_del = 1 + and id = #{id} + + + + + update company + set is_del = 1 + where is_del = 0 + and id = #{id} + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/CorporateInvoiceItemsMapper.xml b/src/main/resources/mapper/CorporateInvoiceItemsMapper.xml new file mode 100644 index 0000000..a0f0c79 --- /dev/null +++ b/src/main/resources/mapper/CorporateInvoiceItemsMapper.xml @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, PID, `NAME`, UNIT, QUANTITY, PRICE, TOTAL, EXTRA_FIELDS, SPECIFICATION, TAX_RATE, TAX, + DEDUCTION_AMOUNT, DEDUCTION_TAX_RATE, DEDUCTION_TAX,DIFFERENCE,ORIGIN_UNIT,ORIGIN_QUANTITY,ORIGIN_PRICE, + ITEM_NO,EXT01,EXT02,EXT03,EXT04,EXT05 + + + + + + + + + + + + delete + from corporate_invoice_items + where ID = #{id,jdbcType=VARCHAR} + + + delete + from corporate_invoice_items + where PID = #{id,jdbcType=VARCHAR} + + + insert into corporate_invoice_items (ID, PID, `NAME`, UNIT, + QUANTITY, PRICE, TOTAL, + EXTRA_FIELDS, SPECIFICATION, TAX_RATE, TAX, + DEDUCTION_AMOUNT, DEDUCTION_TAX_RATE, DEDUCTION_TAX, DIFFERENCE, + ORIGIN_UNIT, ORIGIN_QUANTITY, ORIGIN_PRICE, + ITEM_NO,EXT01,EXT02,EXT03,EXT04,EXT05) + values (#{id,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{unit,jdbcType=VARCHAR}, + #{quantity,jdbcType=VARCHAR}, #{price,jdbcType=VARCHAR}, #{total,jdbcType=VARCHAR}, + #{extraFields,jdbcType=VARCHAR}, #{specification,jdbcType=VARCHAR}, #{taxRate,jdbcType=VARCHAR}, + #{tax,jdbcType=VARCHAR}, + #{deductionAmount,jdbcType=VARCHAR}, #{deductionTaxRate,jdbcType=VARCHAR}, + #{deductionTax,jdbcType=VARCHAR}, #{difference,jdbcType=VARCHAR}, #{originUnit,jdbcType=VARCHAR}, + #{originQuantity,jdbcType=VARCHAR}, #{originPrice,jdbcType=VARCHAR}, + #{itemNo},#{ext01},#{ext02},#{ext03},#{ext04},#{ext05}) + + + update corporate_invoice_items + + + PID = #{pid,jdbcType=VARCHAR}, + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + UNIT = #{unit,jdbcType=VARCHAR}, + + + QUANTITY = #{quantity,jdbcType=VARCHAR}, + + + PRICE = #{price,jdbcType=VARCHAR}, + + + TOTAL = #{total,jdbcType=VARCHAR}, + + + EXTRA_FIELDS = #{extraFields,jdbcType=VARCHAR}, + + + SPECIFICATION = #{specification,jdbcType=VARCHAR}, + + + TAX_RATE = #{taxRate,jdbcType=VARCHAR}, + + + TAX = #{tax,jdbcType=VARCHAR}, + + + DEDUCTION_AMOUNT = #{deductionAmount,jdbcType=VARCHAR}, + + + DEDUCTION_TAX_RATE = #{deductionTaxRate,jdbcType=VARCHAR}, + + + DEDUCTION_TAX = #{deductionTax,jdbcType=VARCHAR}, + + + DIFFERENCE = #{difference,jdbcType=VARCHAR}, + + + ORIGIN_UNIT = #{originUnit,jdbcType=VARCHAR}, + + + ORIGIN_QUANTITY = #{originQuantity,jdbcType=VARCHAR}, + + + ORIGIN_PRICE = #{originPrice,jdbcType=VARCHAR}, + + + + ITEM_NO = #{itemNo,jdbcType=VARCHAR}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/CorporateInvoiceMapper.xml b/src/main/resources/mapper/CorporateInvoiceMapper.xml new file mode 100644 index 0000000..3f13b30 --- /dev/null +++ b/src/main/resources/mapper/CorporateInvoiceMapper.xml @@ -0,0 +1,2170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, + ORG_ID, + NAME, + SELLER, + SELLER_NO, + CODE, + NUMBER, + DATE, + TOTAL, + IMG_URI, + EXTRA_FIELDS, + REMARK, + LOGIN_ID, + IS_SEND, + ENTRY_ID, + UPDATE_DATE, + BUYER, + BUYER_NO, + ORIGINAL_FILE_PATH, + PO, + TICKET_CODE, + KIND, + STATUS, + VERIFIED_CODE, + PRETAX_AMOUNT, + TAX, + DETAILS, + OPERATOR_ID, + CREATE_DATE, + CURRENCY, + CHECKED, + `DESC`, + MESSAGE, + PAY_DATE, + POSTING_DATE, + DEDUCT_TIME, + DEDUCT_STATUS, + INVOICE_TYPE, + VALID_STATUS, + VALID_COUNT, + VALID_DAY_COUNT, + MATCH_STATUS, + OWNER, + IS_DEL, + USE_STATUS, + `SUBJECT`, + MATCH_TYPE, + PRICE_TYPE, + PERIOD, + RECEIVED,NUMBER_BACKUP,NUMBER_CONFIRM,COMPANY_SEAL,DEDUCTION_AMOUNT, + ext01 ext01, + ext02 ext02, + ext03 ext03, + ext04 ext04, + ext05 ext05, + ext06 ext06, + ext07 ext07, + ext08 ext08, + ext09 ext09, + ext10 ext10 + + + + c.ID cID, + c.`NAME` `cNAME`, + c.CODE cCODE, + c.NUMBER `cNUMBER`, + c.`DATE` `cDATE`, + c.TOTAL cTOTAL, + c.IMG_URI cIMG_URI, + c.EXTRA_FIELDS cEXTRA_FIELDS, + c.REMARK cREMARK, + c.LOGIN_ID cLOGIN_ID, + c.IS_SEND cIS_SEND, + c.ENTRY_ID cENTRY_ID, + c.UPDATE_DATE cUPDATE_DATE, + c.SELLER cSELLER, + c.SELLER_NO cSELLER_NO, + c.BUYER cBUYER, + c.BUYER_NO cBUYER_NO, + c.ORIGINAL_FILE_PATH cORIGINAL_FILE_PATH, + c.PO cPO, + c.TICKET_CODE cTICKET_CODE, + c.KIND cKIND, + c.STATUS cSTATUS, + c.VERIFIED_CODE cVERIFIED_CODE, + c.PRETAX_AMOUNT cPRETAX_AMOUNT, + c.TAX cTAX, + c.DETAILS cDETAILS, + c.OPERATOR_ID cOPERATOR_ID, + c.CREATE_DATE cCREATE_DATE, + c.CURRENCY cCURRENCY, + c.CHECKED cCHECKED, + c.`DESC` cDESC, + c.MESSAGE cMESSAGE, + c.PAY_DATE cPAY_DATE, + c.POSTING_DATE cPOSTING_DATE, + c.DEDUCT_TIME cDEDUCT_TIME, + c.DEDUCT_STATUS cDEDUCT_STATUS, + c.INVOICE_TYPE cINVOICE_TYPE, + c.VALID_STATUS cVALID_STATUS, + c.VALID_COUNT cVALID_COUNT, + c.VALID_DAY_COUNT cVALID_DAY_COUNT, + c.ORG_ID cORG_ID, + c.MATCH_STATUS cMATCH_STATUS, + c.DEDUCTION_AMOUNT cDEDUCTION_AMOUNT, + c.ext01 ext01, + c.ext02 ext02, + c.ext03 ext03, + c.ext04 ext04, + c.ext05 ext05, + c.ext06 ext06, + c.ext07 ext07, + c.ext08 ext08, + c.ext09 ext09, + c.ext10 ext10, + i.ID iID, + i.PID iPID, + i.NAME `iNAME`, + i.UNIT iUNIT, + i.QUANTITY iQUANTITY, + i.PRICE iPRICE, + i.TOTAL iTOTAL, + i.EXTRA_FIELDS iEXTRA_FIELDS, + i.SPECIFICATION iSPECIFICATION, + i.TAX_RATE iTAX_RATE, + i.TAX iTAX, + f.ID fID, + f.URI fURI, + c.MATCH_TYPE cMATCH_TYPE, + c.PRICE_TYPE cPRICE_TYPE, + c.NUMBER_BACKUP cNUMBER_BACKUP,c.NUMBER_CONFIRM cNUMBER_CONFIRM,c.COMPANY_SEAL cCOMPANY_SEAL + + + + and c.TICKET_CODE = #{ticketCode,jdbcType=VARCHAR} + + + and c.INVOICE_TYPE = #{invoiceType,jdbcType=INTEGER} + + + and c.OWNER = #{searchOwner,jdbcType=INTEGER} + + + and c.MATCH_STATUS = #{matchStatus,jdbcType=TINYINT} + + + + and c.`NUMBER` like #{NUMBER_LIKE,jdbcType=VARCHAR} + + + + and c.`SELLER` like #{SELLER_LIKE,jdbcType=VARCHAR} + + + + and c.`BUYER` like #{BUYER_LIKE,jdbcType=VARCHAR} + + + and FIND_IN_SET(c.ORG_ID,(select suo.AUTHORIZED_ORG from sys_user_org suo where suo.USER_ID = + #{searchOrg,jdbcType=INTEGER})) > 0 + + + and c.NUMBER like concat('%',#{keywords,jdbcType=VARCHAR},'%') + + + c.received =#{receive} + + + + + + + + + + + + + + + + + + + + + + + + + + + delete from corporate_invoice where id = #{id} + + + delete from corporate_invoice where number = #{number} + + + + update corporate_invoice ci + left join corporate_invoice_items cii on cii.PID = ci.ID + set ci.IS_DEL = 1, + cii.IS_DEL = 1 + where ci.ID = #{id,jdbcType=VARCHAR} + + + delete + from corporate_invoice + where ext10 = #{number,jdbcType=VARCHAR} + + + insert into corporate_invoice (ID, ORG_ID, `NAME`, CODE, `NUMBER`, + `DATE`, TOTAL, IMG_URI, + EXTRA_FIELDS, REMARK, LOGIN_ID, + IS_SEND, ENTRY_ID, UPDATE_DATE, SELLER, SELLER_NO, + BUYER, BUYER_NO, ORIGINAL_FILE_PATH, PO, + TICKET_CODE, KIND, STATUS, + VERIFIED_CODE, PRETAX_AMOUNT, TAX, DETAILS, OPERATOR_ID, CREATE_DATE, CURRENCY, + CHECKED, + `DESC`, + MESSAGE, PAY_DATE, POSTING_DATE, DEDUCT_TIME, DEDUCT_STATUS, INVOICE_TYPE, + VALID_STATUS, VALID_COUNT, VALID_DAY_COUNT, MATCH_STATUS, OWNER, USE_STATUS, + SUBJECT, MATCH_TYPE, PRICE_TYPE,NUMBER_BACKUP,NUMBER_CONFIRM,COMPANY_SEAL + ,EXT01,EXT02,EXT03,EXT04,EXT05 + ,EXT06,EXT07,EXT08,EXT09,EXT10) + values (#{id,jdbcType=VARCHAR}, #{orgId,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR}, + #{number,jdbcType=VARCHAR}, + #{date,jdbcType=VARCHAR}, #{total,jdbcType=VARCHAR}, #{imgPath,jdbcType=VARCHAR}, + #{extraFields,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{loginId,jdbcType=VARCHAR}, + #{isSend,jdbcType=INTEGER}, #{entryId,jdbcType=VARCHAR}, #{updateDate,jdbcType=TIMESTAMP}, + #{seller,jdbcType=VARCHAR}, #{sellerNo,jdbcType=VARCHAR}, + #{buyer,jdbcType=VARCHAR}, #{buyerNo,jdbcType=VARCHAR}, + #{originalFilePath,jdbcType=VARCHAR}, #{po,jdbcType=VARCHAR}, + #{ticketCode,jdbcType=VARCHAR}, #{kind,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, + #{verifiedCode,jdbcType=VARCHAR}, #{pretaxAmount,jdbcType=VARCHAR}, #{tax,jdbcType=VARCHAR}, + #{details,jdbcType=VARCHAR}, #{operatorId,jdbcType=INTEGER}, #{createDate,jdbcType=TIMESTAMP}, + #{currency,jdbcType=VARCHAR}, #{checked,jdbcType=INTEGER}, + #{desc,jdbcType=VARCHAR}, #{message,jdbcType=VARCHAR}, #{payDate,jdbcType=VARCHAR}, + #{postingDate,jdbcType=TIMESTAMP}, #{deductTime,jdbcType=TIMESTAMP}, #{deductStatus,jdbcType=VARCHAR}, + #{invoiceType}, + #{validStatus}, #{validCount}, #{validDayCount}, #{matchStatus,jdbcType=TINYINT}, + #{owner,jdbcType=INTEGER}, 0, #{subject,jdbcType=INTEGER}, #{matchType}, + #{priceType}, #{numberBackup}, #{numberConfirm}, #{companySeal}, + #{ext01},#{ext02},#{ext03},#{ext04},#{ext05} + ,#{ext06},#{ext07},#{ext08},#{ext09},#{ext10}) + + + update corporate_invoice + + + `NAME` = #{title,jdbcType=VARCHAR}, + + + CODE = #{code,jdbcType=VARCHAR}, + + + `NUMBER` = #{number,jdbcType=VARCHAR}, + + + `DATE` = #{date,jdbcType=VARCHAR}, + + + TOTAL = #{total,jdbcType=VARCHAR}, + + + IMG_URI = #{imgPath,jdbcType=VARCHAR}, + + + EXTRA_FIELDS = #{extraFields,jdbcType=VARCHAR}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + LOGIN_ID = #{loginId,jdbcType=VARCHAR}, + + + IS_SEND = #{isSend,jdbcType=INTEGER}, + + + ENTRY_ID = #{entryId,jdbcType=VARCHAR}, + + + UPDATE_DATE = #{updateDate,jdbcType=TIMESTAMP}, + + + SELLER = #{seller,jdbcType=VARCHAR}, + + + SELLER_NO = #{sellerNo,jdbcType=VARCHAR}, + + + BUYER = #{buyer,jdbcType=VARCHAR}, + + + BUYER_NO = #{buyerNo,jdbcType=VARCHAR}, + + + ORIGINAL_FILE_PATH = #{originalFilePath,jdbcType=VARCHAR}, + + + PO = #{po,jdbcType=VARCHAR}, + + + TICKET_CODE = #{ticketCode,jdbcType=VARCHAR}, + + + KIND = #{kind,jdbcType=VARCHAR}, + + + `STATUS` = #{status,jdbcType=INTEGER}, + + + VERIFIED_CODE = #{verifiedCode,jdbcType=VARCHAR}, + + + PRETAX_AMOUNT = #{pretaxAmount,jdbcType=VARCHAR}, + + + TAX = #{tax,jdbcType=VARCHAR}, + + + DETAILS = #{details,jdbcType=VARCHAR}, + + + OPERATOR_ID = #{operatorId,jdbcType=INTEGER}, + + + CREATE_DATE = #{createDate,jdbcType=TIMESTAMP}, + + + CURRENCY = #{currency,jdbcType=VARCHAR}, + + + CHECKED = #{checked,jdbcType=INTEGER}, + + + `DESC` = #{desc,jdbcType=VARCHAR}, + + + MESSAGE = #{message,jdbcType=VARCHAR}, + + + PAY_DATE = #{payDate,jdbcType=VARCHAR}, + + + POSTING_DATE = #{postingDate,jdbcType=TIMESTAMP}, + + + DEDUCT_TIME = #{deductTime,jdbcType=TIMESTAMP}, + + + DEDUCT_STATUS = #{deductStatus,jdbcType=VARCHAR}, + + + INVOICE_TYPE = #{invoiceType}, + + + VALID_STATUS = #{validStatus,jdbcType=TINYINT}, + + + VALID_COUNT = #{validCount,jdbcType=INTEGER}, + + + VALID_DAY_COUNT = #{validDayCount,jdbcType=INTEGER}, + + + MATCH_STATUS = #{matchStatus,jdbcType=TINYINT}, + + + ORG_ID = #{orgId,jdbcType=INTEGER}, + + + OWNER = #{owner,jdbcType=VARCHAR}, + + + USE_STATUS = #{useStatus,jdbcType=INTEGER}, + + + SUBJECT = #{subject,jdbcType=INTEGER}, + + + MATCH_TYPE = #{matchType,jdbcType=INTEGER}, + + + PRICE_TYPE = #{priceType,jdbcType=INTEGER}, + + + NUMBER_BACKUP = #{numberBackup,jdbcType=VARCHAR}, + + + NUMBER_CONFIRM = #{numberConfirm,jdbcType=VARCHAR}, + + + COMPANY_SEAL = #{companySeal,jdbcType=VARCHAR}, + + + DEDUCTION_AMOUNT = #{deductionAmount}, + + + ext02 = #{ext02}, + + + ext03 = #{ext03}, + + + ext04 = #{ext04}, + + + ext05 = #{ext05}, + + + ext06 = #{ext06}, + + + ext07 = #{ext07}, + + + ext08 = #{ext08}, + + + ext09 = #{ext09}, + + + ext10 = #{ext10}, + + + where ID = #{id,jdbcType=VARCHAR} + + + update corporate_invoice + set `POSTING_DATE` = #{postingDate,jdbcType=TIMESTAMP}, + `DEDUCT_TIME` = #{deductTime,jdbcType=TIMESTAMP}, + `DEDUCT_STATUS` = #{deductStatus,jdbcType=VARCHAR}, + `STATUS` = #{status,jdbcType=INTEGER}, + `DESC` = #{remarks,jdbcType=VARCHAR}, + `PO` = #{npo,jdbcType=VARCHAR}, + `OPERATOR_ID` = (IFNULL((SELECT ID + FROM `sys_user` + where `NAME` = #{operator,jdbcType=VARCHAR} + LIMIT 1), `OPERATOR_ID`)), + `UPDATE_DATE` = #{updateDate,jdbcType=TIMESTAMP} + where ID = #{id,jdbcType=VARCHAR} + limit 1 + + + update corporate_invoice + set DEDUCT_STATUS = '发送抵扣' + where (POSTING_DATE is not null + and trim(POSTING_DATE) != '') + and (DEDUCT_STATUS = '未抵扣' or DEDUCT_STATUS is null or trim(DEDUCT_STATUS) = '') + + + update corporate_invoice + set VALID_DAY_COUNT = 0 + where VALID_DAY_COUNT != 0 + and status != 1 + + + update corporate_invoice + set RECEIVED = '1' + where ID = #{ID} + + + update corporate_invoice + set MATCH_STATUS = 0,STATUS=0 + + ,is_send = #{isSend} + + where ID = #{invoiceId,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + + update corporate_invoice + set PERIOD = #{period},EXT09=#{ext09} + where id = #{id} + + + + + update corporate_invoice + set STATUS = 1 , + is_send = 1 + where ID = #{id} + + + + UPDATE sys_config SET VALUE=VALUE+1 WHERE CODE='SOURCE_ACCOUNT_FLOW_NUM'; + + + + + + + + + + + + + + + + + + + + + + update corporate_invoice + set DEDUCTION_AMOUNT = #{deductionAmount} + where ID = #{id} + + + update corporate_invoice set status = 4 + + ,is_send = #{isSend} + + where id = #{id} + + + update corporate_invoice set is_send = '1' where id = #{id} + + + update corporate_invoice set + ext08 = '2' + where + 1=1 + and id = #{id} + + + update corporate_invoice + set seller_no = #{sellerNo} + where id = #{id} + + + UPDATE corporate_invoice + set po = #{po} + where id = #{invoiceId} + + + update corporate_invoice + set seller_no = #{sellerNo} + where id = #{id} + + + + + update corporate_invoice + set buyer_no = #{buyerNo} + where id = #{id} + + + update corporate_invoice + set match_status = '3' + ,status = '1' + ,is_send = '1' + ,ext10= #{number} + where ext02 = #{htNo} + and ext01 = #{scannerId} + and is_del = 0 + and match_status = '2' + and status = '0' + + + update corporate_invoice + set ext01=#{ext01} + where id = #{id} + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/CorporateInvoiceTypeMapper.xml b/src/main/resources/mapper/CorporateInvoiceTypeMapper.xml new file mode 100644 index 0000000..b1f6fd1 --- /dev/null +++ b/src/main/resources/mapper/CorporateInvoiceTypeMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + ID, + `NAME`, + `CODE`, + `DESC`, + `ACTIVE`, + REVIEW, + SEND_TYPE, + MATCH_TYPE + + + + + + + delete + from corporate_invoice_type + where ID = #{id,jdbcType=INTEGER} + + + insert into corporate_invoice_type + + + `NAME`, + + + `CODE`, + + + `DESC`, + + + `ACTIVE`, + + + `REVIEW`, + + + SEND_TYPE, + + + MATCH_TYPE, + + + + + #{name,jdbcType=VARCHAR}, + + + #{code,jdbcType=VARCHAR}, + + + #{desc,jdbcType=VARCHAR}, + + + #{active,jdbcType=BOOLEAN}, + + + #{review,jdbcType=INTEGER}, + + + #{sendType,jdbcType=INTEGER}, + + + #{matchType,jdbcType=INTEGER}, + + + + + update corporate_invoice_type + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + `CODE` = #{code,jdbcType=VARCHAR}, + + + `DESC` = #{desc,jdbcType=VARCHAR}, + + + `ACTIVE` = #{active,jdbcType=BOOLEAN}, + + + `REVIEW` = #{review,jdbcType=INTEGER}, + + + SEND_TYPE = #{sendType,jdbcType=INTEGER}, + + + MATCH_TYPE = #{matchType,jdbcType=INTEGER}, + + + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/ScheduleJobMapper.xml b/src/main/resources/mapper/ScheduleJobMapper.xml new file mode 100644 index 0000000..b62ace2 --- /dev/null +++ b/src/main/resources/mapper/ScheduleJobMapper.xml @@ -0,0 +1,209 @@ + + + + + + a.id AS "id", + a.name AS "name", + a.t_group AS "group", + a.expression AS "cronExpression", + a.status AS "status", + a.is_info AS "isInfo", + a.classname AS "className", + a.description AS "description", + a.create_by AS "createBy.id", + a.create_date AS "createDate", + a.update_by AS "updateBy.id", + a.update_date AS "updateDate", + a.del_flag AS "delFlag", + a.sort AS "sort", + a.map_txt as "mapTxt", + a.ext1 as "ext1", + a.ext2 as "ext2", + a.ext3 as "ext3", + a.ext4 as "ext4", + a.ext5 as "ext5", + a.ext6 as "ext6", + a.ext7 as "ext7", + a.ext8 as "ext8", + a.ext9 as "ext9", + a.ext10 as "ext10" + + + + + + + + + + + + + + + + INSERT INTO sys_schedule( + id, + name, + t_group, + expression, + status, + is_info, + classname, + description, + create_by, + create_date, + update_by, + update_date, + del_flag, + sort, + map_txt, + ext1, + ext2, + ext3, + ext4, + ext5, + ext6, + ext7, + ext8, + ext9, + ext10 + ) VALUES ( + #{id}, + #{name}, + #{group}, + #{cronExpression}, + #{status}, + #{isInfo}, + #{className}, + #{description}, + #{createBy.id}, + #{createDate}, + #{updateBy.id}, + #{updateDate}, + #{delFlag}, + #{sort}, + #{mapTxt}, + #{ext1}, + #{ext2}, + #{ext3}, + #{ext4}, + #{ext5}, + #{ext6}, + #{ext7}, + #{ext8}, + #{ext9}, + #{ext10} + ) + + + + UPDATE sys_schedule SET + name = #{name}, + t_group = #{group}, + expression = #{cronExpression}, + status = #{status}, + is_info = #{isInfo}, + classname = #{className}, + description = #{description}, + update_by = #{updateBy.id}, + update_date = #{updateDate}, + sort = #{sort}, + map_txt = #{mapTxt}, + ext1 = #{ext1}, + ext2 = #{ext2}, + ext3 = #{ext3}, + ext4 = #{ext4}, + ext5 = #{ext5}, + ext6 = #{ext6}, + ext7 = #{ext7}, + ext8 = #{ext8}, + ext9 = #{ext9}, + ext10 = #{ext10} + WHERE id = #{id} + + + + + + DELETE FROM sys_schedule + WHERE id = #{id} + + + + + UPDATE sys_schedule SET + del_flag = #{DEL_FLAG_DELETE} + WHERE id = #{id} + + + + + + + + + + diff --git a/src/main/resources/mapper/SupplierMapper.xml b/src/main/resources/mapper/SupplierMapper.xml new file mode 100644 index 0000000..ac5b075 --- /dev/null +++ b/src/main/resources/mapper/SupplierMapper.xml @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + ID, CODE, `NAME`, TAX_NO, `STATUS`, ORG_CODE, SUPPLIER_CODE, SUPPLIER_SPECIAL, + BRANCH_BANK,ACCOUNT_INFO,IS_DIGITAL,EXT01,EXT02,EXT03,EXT04,EXT05 + + + + and STATUS = #{status,jdbcType=VARCHAR} + + + + and CODE like #{CODE_LIKE,jdbcType=VARCHAR} + + + and TAX_NO = #{taxNo,jdbcType=VARCHAR} + + + + and `NAME` like #{NAME_LIKE,jdbcType=VARCHAR} + + + + + + + + + + + + + delete + from supplier + where ID = #{id,jdbcType=INTEGER} + + + insert into supplier (CODE, `NAME`, TAX_NO, `STATUS`, ORG_CODE, SUPPLIER_CODE, SUPPLIER_SPECIAL, + BRANCH_BANK,ACCOUNT_INFO,IS_DIGITAL,EXT01,EXT02,EXT03,EXT04,EXT05) + values (#{code,jdbcType=VARCHAR}, + #{name,jdbcType=VARCHAR}, + #{taxNo,jdbcType=VARCHAR}, + #{status,jdbcType=SMALLINT}, + #{orgCode,jdbcType=VARCHAR}, + #{supplierCode,jdbcType=VARCHAR}, + #{supplierSpecial,jdbcType=BOOLEAN}, + #{branchBank,jdbcType=VARCHAR}, + #{accountInfo,jdbcType=VARCHAR}, + #{isDigital,jdbcType=VARCHAR}, + #{ext01,jdbcType=VARCHAR}, + #{ext02,jdbcType=VARCHAR}, + #{ext03,jdbcType=VARCHAR}, + #{ext04,jdbcType=VARCHAR}, + #{ext05,jdbcType=VARCHAR} + ) + + + insert into supplier + + + CODE, + + + `NAME`, + + + TAX_NO, + + + `STATUS`, + + + ORG_CODE, + + + SUPPLIER_CODE, + + + SUPPLIER_SPECIAL, + + + BRANCH_BANK, + + + ACCOUNT_INFO, + + + IS_DIGITAL, + + + EXT01, + + + EXT02, + + + EXT03, + + + EXT04, + + + EXT05, + + + + + #{code,jdbcType=VARCHAR}, + + + #{name,jdbcType=VARCHAR}, + + + #{taxNo,jdbcType=VARCHAR}, + + + #{status,jdbcType=SMALLINT}, + + + #{orgCode,jdbcType=VARCHAR}, + + + #{supplierCode,jdbcType=VARCHAR}, + + + #{supplierSpecial,jdbcType=BOOLEAN}, + + + #{branchBank,jdbcType=VARCHAR}, + + + #{accountInfo,jdbcType=VARCHAR}, + + + #{isDigital,jdbcType=VARCHAR}, + + + #{ext01,jdbcType=VARCHAR}, + + + #{ext02,jdbcType=VARCHAR}, + + + #{ext03,jdbcType=VARCHAR}, + + + #{ext04,jdbcType=VARCHAR}, + + + #{ext05,jdbcType=VARCHAR}, + + + + + update supplier + + + CODE = #{code,jdbcType=VARCHAR}, + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + TAX_NO = #{taxNo,jdbcType=VARCHAR}, + + + `STATUS` = #{status,jdbcType=SMALLINT}, + + + ORG_CODE = #{orgCode,jdbcType=VARCHAR}, + + + SUPPLIER_CODE = #{supplierCode,jdbcType=VARCHAR}, + + + SUPPLIER_SPECIAL = #{supplierSpecial,jdbcType=BOOLEAN}, + + + BRANCH_BANK = #{branchBank,jdbcType=VARCHAR}, + + + ACCOUNT_INFO = #{accountInfo,jdbcType=VARCHAR}, + + + IS_DIGITAL = #{isDigital,jdbcType=VARCHAR}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + update supplier + set CODE = #{code,jdbcType=VARCHAR}, + `NAME` = #{name,jdbcType=VARCHAR}, + TAX_NO = #{taxNo,jdbcType=VARCHAR}, + `STATUS` = #{status,jdbcType=SMALLINT}, + ORG_CODE = #{orgCode,jdbcType=VARCHAR}, + SUPPLIER_CODE = #{supplierCode,jdbcType=VARCHAR}, + SUPPLIER_SPECIAL = #{supplierSpecial,jdbcType=BOOLEAN}, + BRANCH_BANK = #{branchBank,jdbcType=VARCHAR}, + ACCOUNT_INFO = #{accountInfo,jdbcType=VARCHAR}, + IS_DIGITAL = #{isDigital,jdbcType=VARCHAR}, + EXT01 = #{ext01,jdbcType=VARCHAR}, + EXT02 = #{ext02,jdbcType=VARCHAR}, + EXT03 = #{ext03,jdbcType=VARCHAR}, + EXT04 = #{ext04,jdbcType=VARCHAR}, + EXT05 = #{ext05,jdbcType=VARCHAR} + where ID = #{id,jdbcType=INTEGER} + + + + + + + + + + + + + + + + + insert into supplier_order_refund + ( receive_no + ,supplier_code + ,order_no + ,goods_num + ,item_no + ,create_date + ,status + ) + values + + (#{record.receiveNo,jdbcType=VARCHAR}, #{record.supplierCode,jdbcType=VARCHAR} + , #{record.orderNo,jdbcType=VARCHAR}, #{record.goodsNum,jdbcType=VARCHAR} + , #{record.itemNo,jdbcType=VARCHAR},#{record.createDate},#{record.status} + ) + + + + diff --git a/src/main/resources/mapper/SupplierMatchingLogMapper.xml b/src/main/resources/mapper/SupplierMatchingLogMapper.xml new file mode 100644 index 0000000..519edf9 --- /dev/null +++ b/src/main/resources/mapper/SupplierMatchingLogMapper.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + ID, PID, INVOICE_NO, `MODULE`, METHODS, OPERATOR_USER, CREATE_TIME,PRE_VALUE,AFTER_VALUE,REASON + + + + + + delete + from supplier_matching_log + where ID = #{id,jdbcType=CHAR} + + + insert into supplier_matching_log (ID, PID, INVOICE_NO, `MODULE`, + METHODS, OPERATOR_USER, CREATE_TIME, PRE_VALUE, AFTER_VALUE, REASON) + values (#{id,jdbcType=VARCHAR}, #{pid,jdbcType=CHAR}, #{invoiceNo,jdbcType=VARCHAR}, #{module,jdbcType=VARCHAR}, + #{methods,jdbcType=VARCHAR}, #{operatorUser,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, + #{preValue,jdbcType=VARCHAR}, #{afterValue,jdbcType=VARCHAR}, #{reason,jdbcType=VARCHAR}) + + + update supplier_matching_log + + + PID = #{pid,jdbcType=CHAR}, + + + INVOICE_NO = #{invoiceNo,jdbcType=VARCHAR}, + + + `MODULE` = #{module,jdbcType=VARCHAR}, + + + METHODS = #{methods,jdbcType=VARCHAR}, + + + OPERATOR_USER = #{operatorUser,jdbcType=VARCHAR}, + + + CREATE_TIME = #{createTime,jdbcType=TIMESTAMP}, + + + PRE_VALUE = #{preValue,jdbcType=VARCHAR}, + + + AFTER_VALUE = #{afterValue,jdbcType=VARCHAR}, + + + REASON = #{reason,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=CHAR} + + + + + + + diff --git a/src/main/resources/mapper/SupplierMatchingMapper.xml b/src/main/resources/mapper/SupplierMatchingMapper.xml new file mode 100644 index 0000000..d659573 --- /dev/null +++ b/src/main/resources/mapper/SupplierMatchingMapper.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + INVOICE_ID, SUPPLIER_CODE, ORDER_NO, OPERATION_TIME + + + + + + + + + + + delete + from supplier_matching + where INVOICE_ID = #{invoiceId,jdbcType=VARCHAR} + + + delete from supplier_matching + where order_no =#{orderNo} + + + insert into supplier_matching (INVOICE_ID, SUPPLIER_CODE, ORDER_NO, OPERATION_TIME) + values (#{invoiceId,jdbcType=VARCHAR}, #{supplierCode,jdbcType=VARCHAR}, + #{orderNo,jdbcType=VARCHAR}, #{operationTime,jdbcType=TIMESTAMP}) + + + insert into supplier_matching + + + INVOICE_ID, + + + SUPPLIER_CODE, + + + ORDER_NO, + + + OPERATION_TIME, + + + + + #{invoiceId,jdbcType=VARCHAR}, + + + #{supplierCode,jdbcType=VARCHAR}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{operationTime,jdbcType=TIMESTAMP}, + + + + + update supplier_matching + + + SUPPLIER_CODE = #{supplierCode,jdbcType=VARCHAR}, + + + ORDER_NO = #{orderNo,jdbcType=VARCHAR}, + + + OPERATION_TIME = #{operationTime,jdbcType=TIMESTAMP}, + + + where INVOICE_ID = #{invoiceId,jdbcType=VARCHAR} + + + update supplier_matching + set SUPPLIER_CODE = #{supplierCode,jdbcType=VARCHAR}, + ORDER_NO = #{orderNo,jdbcType=VARCHAR}, + OPERATION_TIME = #{operationTime,jdbcType=TIMESTAMP} + where INVOICE_ID = #{invoiceId,jdbcType=VARCHAR} + + + + + + + + + diff --git a/src/main/resources/mapper/SupplierMaterialDefineMapper.xml b/src/main/resources/mapper/SupplierMaterialDefineMapper.xml new file mode 100644 index 0000000..7e49561 --- /dev/null +++ b/src/main/resources/mapper/SupplierMaterialDefineMapper.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + id,item_no,similar_item_no,item_type,remark,ext01,ext02,ext03,ext04,ext05 + + + + + + delete + from supplier_material_define + where id = #{id} + + + insert into supplier_material_define + ( item_no,similar_item_no,item_type,remark,ext01,ext02,ext03,ext04,ext05) + values ( #{itemNo}, #{similarItemNo}, #{itemType}, #{remark}, #{ext01}, #{ext02}, #{ext03}, #{ext04}, #{ext05}) + + + update supplier_material_define + + + item_no = #{itemNo}, + + + similar_item_no = #{similarItemNo,jdbcType=VARCHAR}, + + + item_type = #{itemType,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + ext01 = #{ext01,jdbcType=VARCHAR}, + + + ext02 = #{ext02,jdbcType=VARCHAR}, + + + ext03 = #{ext03,jdbcType=VARCHAR}, + + + ext04 = #{ext04,jdbcType=VARCHAR}, + + + ext05 = #{ext05,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + + + + + + + + diff --git a/src/main/resources/mapper/SupplierMaterialFilterMapper.xml b/src/main/resources/mapper/SupplierMaterialFilterMapper.xml new file mode 100644 index 0000000..c6e4bfb --- /dev/null +++ b/src/main/resources/mapper/SupplierMaterialFilterMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + ID, `NAME`, REMARK + + + + + delete + from supplier_material_filter + where ID = #{id,jdbcType=INTEGER} + + + insert into supplier_material_filter (`NAME`, REMARK) + values (#{name,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}) + + + insert into supplier_material_filter + + + `NAME`, + + + REMARK, + + + + + #{name,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + + + update supplier_material_filter + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + update supplier_material_filter + set `NAME` = #{name,jdbcType=VARCHAR}, + REMARK = #{remark,jdbcType=VARCHAR} + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/SupplierMaterialMapper.xml b/src/main/resources/mapper/SupplierMaterialMapper.xml new file mode 100644 index 0000000..d436a55 --- /dev/null +++ b/src/main/resources/mapper/SupplierMaterialMapper.xml @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + ID, SUPPLIER_NO, MATERIAL_NO, MATERIAL, UOM, SUPPLIER_MATERIAL,SPECIFICATION + + + + + and MATERIAL like #{MATERIAL_LIKE,jdbcType=VARCHAR} + + + + and SUPPLIER_MATERIAL like #{SUPPLIER_MATERIAL_LIKE,jdbcType=VARCHAR} + + + + + + + + + + + + + + + + delete + from supplier_material + where ID = #{id,jdbcType=INTEGER} + + + delete FROM supplier_material WHERE REPLACE(REPLACE(REPLACE(MATERIAL_NO, '-', ''),'_',''),' ','') + != REPLACE(REPLACE(REPLACE(SPECIFICATION, '-', ''),'_',''),' ','') AND (SUPPLIER_NO = 'HBHS' or SUPPLIER_NO = 'YDZN'); + + + insert into supplier_material + + + SUPPLIER_NO, + + + MATERIAL_NO, + + + MATERIAL, + + + UOM, + + + SUPPLIER_MATERIAL, + + + SPECIFICATION, + + + + + #{supplierNo,jdbcType=VARCHAR}, + + + #{materialNo,jdbcType=VARCHAR}, + + + #{material,jdbcType=VARCHAR}, + + + #{uom,jdbcType=VARCHAR}, + + + #{supplierMaterial,jdbcType=VARCHAR}, + + + #{specification,jdbcType=VARCHAR}, + + + + + update supplier_material + + + SUPPLIER_NO = #{supplierNo,jdbcType=VARCHAR}, + + + MATERIAL_NO = #{materialNo,jdbcType=VARCHAR}, + + + MATERIAL = #{material,jdbcType=VARCHAR}, + + + UOM = #{uom,jdbcType=VARCHAR}, + + + SUPPLIER_MATERIAL = #{supplierMaterial,jdbcType=VARCHAR}, + + + SPECIFICATION = #{specification,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/SupplierMaterialUomMapper.xml b/src/main/resources/mapper/SupplierMaterialUomMapper.xml new file mode 100644 index 0000000..f5737c2 --- /dev/null +++ b/src/main/resources/mapper/SupplierMaterialUomMapper.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + ID, MATERIAL_NO, UNIT, VERS_UNIT, VERS_NUM, `STATUS`, REMARK, V_STATUS_NAME + + + + + and MATERIAL_NO like #{MATERIAL_NO_LIKE,jdbcType=VARCHAR} + + + and UNIT like #{unit,jdbcType=VARCHAR} + + + + + + + + + delete + from supplier_material_uom + where ID = #{id,jdbcType=INTEGER} + + + insert into supplier_material_uom (MATERIAL_NO, UNIT, VERS_UNIT, + VERS_NUM, `STATUS`, REMARK) + values (#{materialNo,jdbcType=VARCHAR}, #{unit,jdbcType=VARCHAR}, #{versUnit,jdbcType=VARCHAR}, + #{versNum,jdbcType=VARCHAR}, #{status,jdbcType=BOOLEAN}, #{remark,jdbcType=VARCHAR}) + + + insert into supplier_material_uom + + + MATERIAL_NO, + + + UNIT, + + + VERS_UNIT, + + + VERS_NUM, + + + `STATUS`, + + + REMARK, + + + + + #{materialNo,jdbcType=VARCHAR}, + + + #{unit,jdbcType=VARCHAR}, + + + #{versUnit,jdbcType=VARCHAR}, + + + #{versNum,jdbcType=VARCHAR}, + + + #{status,jdbcType=BOOLEAN}, + + + #{remark,jdbcType=VARCHAR}, + + + + + update supplier_material_uom + + + MATERIAL_NO = #{materialNo,jdbcType=VARCHAR}, + + + UNIT = #{unit,jdbcType=VARCHAR}, + + + VERS_UNIT = #{versUnit,jdbcType=VARCHAR}, + + + VERS_NUM = #{versNum,jdbcType=VARCHAR}, + + + `STATUS` = #{status,jdbcType=BOOLEAN}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + update supplier_material_uom + set MATERIAL_NO = #{materialNo,jdbcType=VARCHAR}, + UNIT = #{unit,jdbcType=VARCHAR}, + VERS_UNIT = #{versUnit,jdbcType=VARCHAR}, + VERS_NUM = #{versNum,jdbcType=VARCHAR}, + `STATUS` = #{status,jdbcType=BOOLEAN}, + REMARK = #{remark,jdbcType=VARCHAR} + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/SupplierOrderItemMatchingMapper.xml b/src/main/resources/mapper/SupplierOrderItemMatchingMapper.xml new file mode 100644 index 0000000..ec8eb4e --- /dev/null +++ b/src/main/resources/mapper/SupplierOrderItemMatchingMapper.xml @@ -0,0 +1,705 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, + INVOICE_ID, + ITEM_ID, + ORDER_ID, + `NAME`, + SPECIFICATION, + UNIT, + QUANTITY, + PRICE, + TOTAL, + TAX, + TAX_RATE, + MATCHING_STATUS, + RECEIVE_NO, + DEDUCTION_AMOUNT, + DEDUCTION_TAX, + DEDUCTION_TAX_RATE, + ORDER_NO, + RECEIVED_TOTAL, + ITEM_NO,PRICE_HAS_UPDATED, +DIFFERENCE, +matching_id,CREATE_BY, CREATE_DATE, EXT01, EXT02, EXT03, EXT04, EXT05 + + + + + + + + + + + + + + + delete + from supplier_order_item_matching + where ID = #{id,jdbcType=BIGINT} + + + delete + from supplier_order_item_matching + where ORDER_ID = #{orderId} + + + delete + from supplier_order_item_matching + where ORDER_No = #{orderNo} + + + delete + from supplier_order_item_matching + where ID in + + #{id} + + + + delete from supplier_order_item_matching where invoice_id =#{invoiceId} + + + insert into supplier_order_item_matching (INVOICE_ID, ITEM_ID, ORDER_ID, NAME, SPECIFICATION, UNIT, QUANTITY, + PRICE, TOTAL, + TAX, TAX_RATE, MATCHING_STATUS, RECEIVE_NO, DEDUCTION_AMOUNT, + DEDUCTION_TAX, DEDUCTION_TAX_RATE, ORDER_NO, + RECEIVED_TOTAL, ITEM_NO, PRICE_HAS_UPDATED, DIFFERENCE,matching_id, + CREATE_BY, CREATE_DATE,EXT01, EXT02, EXT03, + EXT04, EXT05) + values (#{invoiceId,jdbcType=VARCHAR}, + #{itemId,jdbcType=VARCHAR}, + #{orderId,jdbcType=INTEGER}, + #{name,jdbcType=VARCHAR}, + #{specification,jdbcType=VARCHAR}, + #{unit,jdbcType=VARCHAR}, + #{quantity,jdbcType=VARCHAR}, + #{price,jdbcType=DECIMAL}, + #{total,jdbcType=DECIMAL}, + #{tax,jdbcType=DECIMAL}, + #{taxRate,jdbcType=VARCHAR}, + #{matchingStatus,jdbcType=INTEGER}, + #{receiveNo,jdbcType=VARCHAR}, + #{deductionAmount,jdbcType=DECIMAL}, + #{deductionTax,jdbcType=DECIMAL}, + #{deductionTaxRate,jdbcType=VARCHAR}, + #{orderNo,jdbcType=VARCHAR}, + #{receivedTotal,jdbcType=DECIMAL}, + #{itemNo,jdbcType=VARCHAR}, 0, #{difference,jdbcType=DECIMAL}, #{matchingId,jdbcType=VARCHAR} + , #{createBy,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP}, + #{ext01,jdbcType=VARCHAR}, #{ext02,jdbcType=VARCHAR}, #{ext03,jdbcType=VARCHAR}, + #{ext04,jdbcType=VARCHAR}, #{ext05,jdbcType=VARCHAR}) + + + insert into supplier_order_item_matching (INVOICE_ID, ITEM_ID, ORDER_ID, NAME, SPECIFICATION, UNIT, QUANTITY, + PRICE, TOTAL, + TAX, TAX_RATE, MATCHING_STATUS, RECEIVE_NO, DEDUCTION_AMOUNT, + DEDUCTION_TAX, DEDUCTION_TAX_RATE, ORDER_NO, + RECEIVED_TOTAL, ITEM_NO, PRICE_HAS_UPDATED,DIFFERENCE,matching_id, + CREATE_BY, CREATE_DATE,EXT01, EXT02, EXT03, + EXT04, EXT05) + values + + (#{record.invoiceId,jdbcType=VARCHAR}, + #{record.itemId,jdbcType=VARCHAR}, + #{record.orderId,jdbcType=INTEGER}, + #{record.name,jdbcType=VARCHAR}, + #{record.specification,jdbcType=VARCHAR}, + #{record.unit,jdbcType=VARCHAR}, + #{record.quantity,jdbcType=VARCHAR}, + #{record.price,jdbcType=DECIMAL}, + #{record.total,jdbcType=DECIMAL}, + #{record.tax,jdbcType=DECIMAL}, + #{record.taxRate,jdbcType=VARCHAR}, + #{record.matchingStatus,jdbcType=INTEGER}, + #{record.receiveNo,jdbcType=VARCHAR}, + #{record.deductionAmount,jdbcType=DECIMAL}, + #{record.deductionTax,jdbcType=DECIMAL}, + #{record.deductionTaxRate,jdbcType=VARCHAR}, + #{record.orderNo,jdbcType=VARCHAR}, + #{record.receivedTotal,jdbcType=DECIMAL}, + #{record.itemNo,jdbcType=VARCHAR},0,#{record.difference,jdbcType=DECIMAL}, + #{record.matchingId,jdbcType=VARCHAR}, + #{record.createBy,jdbcType=VARCHAR}, #{record.createDate,jdbcType=TIMESTAMP}, + #{record.ext01,jdbcType=VARCHAR}, #{record.ext02,jdbcType=VARCHAR}, #{record.ext03,jdbcType=VARCHAR}, + #{record.ext04,jdbcType=VARCHAR}, #{record.ext05,jdbcType=VARCHAR}) + + + + update supplier_order_item_matching + + + INVOICE_ID = #{invoiceId,jdbcType=VARCHAR}, + + + ITEM_ID = #{itemId,jdbcType=VARCHAR}, + + + ORDER_ID = #{orderId,jdbcType=INTEGER}, + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + SPECIFICATION = #{specification,jdbcType=VARCHAR}, + + + UNIT = #{unit,jdbcType=VARCHAR}, + + + QUANTITY = #{quantity,jdbcType=VARCHAR}, + + + PRICE = #{price,jdbcType=DECIMAL}, + + + TOTAL = #{total,jdbcType=DECIMAL}, + + + TAX = #{tax,jdbcType=DECIMAL}, + + + TAX_RATE = #{taxRate,jdbcType=VARCHAR}, + + + MATCHING_STATUS = #{matchingStatus,jdbcType=INTEGER}, + + + RECEIVE_NO = #{receiveNo,jdbcType=VARCHAR}, + + + DEDUCTION_AMOUNT = #{deductionAmount,jdbcType=DECIMAL}, + + + DEDUCTION_TAX = #{deductionTax,jdbcType=DECIMAL}, + + + DEDUCTION_TAX_RATE = #{deductionTaxRate,jdbcType=VARCHAR}, + + + ORDER_NO = #{orderNo,jdbcType=VARCHAR}, + + + RECEIVED_TOTAL = #{receivedTotal,jdbcType=DECIMAL}, + + + ITEM_NO = #{itemNo,jdbcType=VARCHAR}, + + + PRICE_HAS_UPDATED = #{priceHasUpdated,jdbcType=BOOLEAN}, + + + DIFFERENCE = #{difference,jdbcType=DECIMAL}, + + + matching_id = #{matchingId,jdbcType=VARCHAR}, + + + CREATE_BY = #{createBy,jdbcType=VARCHAR}, + + + CREATE_DATE = #{createDate,jdbcType=TIMESTAMP}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=BIGINT} + + + update supplier_order_item_matching + set MATCHING_STATUS = 1 + where MATCHING_STATUS = 0 + and ID in + + #{id} + + + + + UPDATE sys_config SET VALUE=VALUE+1 WHERE CODE='SOURCE_FLOW_NUM'; + + + update + supplier_order_item_matching + set MATCHING_STATUS = 0 + where INVOICE_ID = #{invoiceId,jdbcType=VARCHAR} and MATCHING_STATUS in(1,2,4) + + + + + + + + + + + + update supplier_order_refund refund + inner join supplier_order so + on refund.receive_no = so.id + and refund.supplier_code = so.SUPPLIER_CODE + and refund.order_no = so.ORDER_NO + and refund.item_no = so.ITEM_NO set refund.status = 2 where refund.status = 1 + and so.supplier_code = #{supplierCode} and so.order_no = #{orderNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update supplier_order_item_matching + set MATCHING_STATUS = #{status} + where ORDER_NO = #{orderNo} + + + + update supplier_order_item_matching + set MATCHING_STATUS = #{status} + where ORDER_NO = #{orderNo} and CREATE_BY = #{userId} + + + + update supplier_order_item_matching + set MATCHING_STATUS = #{status} + where ID = #{id} + + + + + + + diff --git a/src/main/resources/mapper/SupplierOrderMapper.xml b/src/main/resources/mapper/SupplierOrderMapper.xml new file mode 100644 index 0000000..4295e35 --- /dev/null +++ b/src/main/resources/mapper/SupplierOrderMapper.xml @@ -0,0 +1,1355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, RECEIVE_NO, RECEIVE_TIME, SUPPLIER_CODE, ORDER_NO, LINE_NUM, GOODS, UOM, GOODS_NUM, + RECEIVED_NUM, CURRENCY, UNIT_PRICE, AMOUNT, COMPANY_NAME, `SOURCE`, `STATUS`, + COMPANY_CODE,COSTCENTER,ORG_CODE,ITEM_NO,TAX_RATE,`OWNER`,`DESCRIPTION`,CREATION_TIME,UPDATE_TIME,ORDER_DATE, + EXT01,EXT02,EXT03,EXT04,EXT05,SUPPLIER_NAME, IS_SERVICE_FEE, CODE_ID, + CODE_NAME, GS_NUM, OA_NUM,COLLECT_AMOUNT, PLAT_FORM, CHARGE_CHANNEL, CHANNEL_REMARK, + EXT06, EXT07, EXT08, EXT09, EXT10 + + + + + + and a.RECEIVE_NO like #{RECEIVE_NO_LIKE,jdbcType=VARCHAR} + + + + and a.SUPPLIER_CODE like #{SUPPLIER_CODE_LIKE,jdbcType=VARCHAR} + + + + and a.ORDER_NO like #{ORDER_NO_LIKE,jdbcType=VARCHAR} + + + + and a.GOODS like #{GOODS_LIKE,jdbcType=VARCHAR} + + + and a.OWNER = #{searchOwner,jdbcType=INTEGER} + + + and FIND_IN_SET(o.id, (select suo.AUTHORIZED_ORG + from sys_user_org suo + where suo.USER_ID = + #{searchOrg,jdbcType=INTEGER})) + + + + + + + + update supplier_order set received_num = goods_num + , amount = ext07 where id = #{id} + + + + + delete from supplier_order_refund + where id = #{id} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + delete + from supplier_order + where ID = #{id,jdbcType=INTEGER} + + + insert into supplier_order + + + RECEIVE_NO, + + + RECEIVE_TIME, + + + SUPPLIER_CODE, + + + ORDER_NO, + + + LINE_NUM, + + + GOODS, + + + UOM, + + + GOODS_NUM, + + + RECEIVED_NUM, + + + CURRENCY, + + + UNIT_PRICE, + + + AMOUNT, + + + COMPANY_NAME, + + + `SOURCE`, + + + `STATUS`, + + + COMPANY_CODE, + + + COSTCENTER, + + + ORG_CODE, + + + ITEM_NO, + + + TAX_RATE, + + + `OWNER`, + + + `DESCRIPTION`, + + + CREATION_TIME, + + + UPDATE_TIME, + + + ORDER_DATE, + + + EXT01, + + + EXT02, + + + EXT03, + + + EXT04, + + + EXT05, + + + SUPPLIER_NAME, + + + IS_SERVICE_FEE, + + + CODE_ID, + + + CODE_NAME, + + + GS_NUM, + + + OA_NUM, + + + COLLECT_AMOUNT, + + + PLAT_FORM, + + + CHARGE_CHANNEL, + + + CHANNEL_REMARK, + + + EXT06, + + + EXT07, + + + EXT08, + + + EXT09, + + + EXT10, + + + + + #{receiveNo,jdbcType=VARCHAR}, + + + #{receiveTime,jdbcType=TIMESTAMP}, + + + #{supplierCode,jdbcType=VARCHAR}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{lineNum,jdbcType=VARCHAR}, + + + #{goods,jdbcType=VARCHAR}, + + + #{uom,jdbcType=VARCHAR}, + + + #{goodsNum,jdbcType=INTEGER}, + + + #{receivedNum,jdbcType=INTEGER}, + + + #{currency,jdbcType=VARCHAR}, + + + #{unitPrice,jdbcType=DECIMAL}, + + + #{amount,jdbcType=DECIMAL}, + + + #{companyName,jdbcType=VARCHAR}, + + + #{source,jdbcType=VARCHAR}, + + + #{status,jdbcType=BOOLEAN}, + + + #{companyCode,jdbcType=VARCHAR}, + + + #{costCenter,jdbcType=VARCHAR}, + + + #{orgCode,jdbcType=VARCHAR}, + + + #{itemNo,jdbcType=VARCHAR}, + + + #{taxRate,jdbcType=VARCHAR}, + + + #{owner,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{creationTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{orderDate,jdbcType=DATE}, + + + #{ext01,jdbcType=VARCHAR}, + + + #{ext02,jdbcType=VARCHAR}, + + + #{ext03,jdbcType=VARCHAR}, + + + #{ext04,jdbcType=VARCHAR}, + + + #{ext05,jdbcType=VARCHAR}, + + + #{supplierName,jdbcType=VARCHAR}, + + + #{isServiceFee,jdbcType=VARCHAR}, + + + #{codeId,jdbcType=VARCHAR}, + + + #{codeName,jdbcType=VARCHAR}, + + + #{gsNum,jdbcType=VARCHAR}, + + + #{oaNum,jdbcType=VARCHAR}, + + + #{collectAmount,jdbcType=DECIMAL}, + + + #{platForm,jdbcType=VARCHAR}, + + + #{chargeChannel,jdbcType=VARCHAR}, + + + #{channelRemark,jdbcType=VARCHAR}, + + + #{ext06,jdbcType=VARCHAR}, + + + #{ext07,jdbcType=VARCHAR}, + + + #{ext08,jdbcType=VARCHAR}, + + + #{ext09,jdbcType=VARCHAR}, + + + #{ext10,jdbcType=VARCHAR}, + + + + + + update supplier_order + + + RECEIVE_NO = #{receiveNo,jdbcType=VARCHAR}, + + + RECEIVE_TIME = #{receiveTime,jdbcType=TIMESTAMP}, + + + SUPPLIER_CODE = #{supplierCode,jdbcType=VARCHAR}, + + + ORDER_NO = #{orderNo,jdbcType=VARCHAR}, + + + LINE_NUM = #{lineNum,jdbcType=VARCHAR}, + + + GOODS = #{goods,jdbcType=VARCHAR}, + + + UOM = #{uom,jdbcType=VARCHAR}, + + + GOODS_NUM = #{goodsNum,jdbcType=VARCHAR}, + + + RECEIVED_NUM = #{receivedNum,jdbcType=VARCHAR}, + + + CURRENCY = #{currency,jdbcType=VARCHAR}, + + + UNIT_PRICE = #{unitPrice,jdbcType=DECIMAL}, + + + AMOUNT = #{amount,jdbcType=DECIMAL}, + + + COMPANY_NAME = #{companyName,jdbcType=VARCHAR}, + + + `SOURCE` = #{source,jdbcType=VARCHAR}, + + + `STATUS` = #{status,jdbcType=BOOLEAN}, + + + COMPANY_CODE = #{companyCode,jdbcType=VARCHAR}, + + + COSTCENTER = #{costCenter,jdbcType=VARCHAR}, + + + ORG_CODE = #{orgCode,jdbcType=VARCHAR}, + + + ITEM_NO = #{itemNo,jdbcType=VARCHAR}, + + + TAX_RATE = #{taxRate,jdbcType=VARCHAR}, + + + `OWNER` = #{owner,jdbcType=VARCHAR}, + + + `DESCRIPTION` = #{description,jdbcType=VARCHAR}, + + + CREATION_TIME = #{creationTime,jdbcType=TIMESTAMP}, + + + UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP}, + + + ORDER_DATE = #{orderDate,jdbcType=DATE}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + SUPPLIER_NAME = #{supplierName,jdbcType=VARCHAR}, + + + IS_SERVICE_FEE = #{isServiceFee,jdbcType=VARCHAR}, + + + CODE_ID = #{codeId,jdbcType=VARCHAR}, + + + CODE_NAME = #{codeName,jdbcType=VARCHAR}, + + + GS_NUM = #{gsNum,jdbcType=VARCHAR}, + + + OA_NUM = #{oaNum,jdbcType=VARCHAR}, + + + COLLECT_AMOUNT = #{collectAmount,jdbcType=DECIMAL}, + + + PLAT_FORM = #{platForm,jdbcType=VARCHAR}, + + + CHARGE_CHANNEL = #{chargeChannel,jdbcType=VARCHAR}, + + + CHANNEL_REMARK = #{channelRemark,jdbcType=VARCHAR}, + + + EXT06 = #{ext06,jdbcType=VARCHAR}, + + + EXT07 = #{ext07,jdbcType=VARCHAR}, + + + EXT08 = #{ext08,jdbcType=VARCHAR}, + + + EXT09 = #{ext09,jdbcType=VARCHAR}, + + + EXT10 = #{ext10,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + + update supplier_order + set STATUS = #{status} + where ID in (${ids}) + + + + + + + + + + + + + + + + delete + from supplier_order + where ORDER_No = #{orderNo} + + + delete from invoice_pf_nc_info where invoice_id = #{invoiceId} + + + delete from supplier_order where ext03 = #{ext02} + + + delete from supplier_order + where ORDER_NO = #{orderNo} and RECEIVE_NO =#{receiveNo} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SupplierStateMapper.xml b/src/main/resources/mapper/SupplierStateMapper.xml new file mode 100644 index 0000000..44f4851 --- /dev/null +++ b/src/main/resources/mapper/SupplierStateMapper.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, + PO, + LINE_NO, + ITEM_NO, + `DESC`, + QUANTITY, + UOM, + UNIT_PRICE, + AMOUNT, + CODE, + `NUMBER`, + EXT01, + EXT02, + EXT03, + EXT04, + EXT05, + EXT06, + EXT07, + EXT08, + EXT09, + EXT10, + CREATE_DATE, + UPDATE_DATE, + CREATE_BY, + UPDATE_BY, + STATUS, + is_del, + currency + + + + insert into supplier_state + (PO, + LINE_NO, + ITEM_NO, + `DESC`, + QUANTITY, + UOM, + UNIT_PRICE, + AMOUNT, + CODE, + `NUMBER`, + EXT01, + EXT02, + EXT03, + EXT04, + EXT05, + EXT06, + EXT07, + EXT08, + EXT09, + EXT10, + STATUS, + CREATE_DATE, + UPDATE_DATE, + CREATE_BY, + UPDATE_BY, + is_del, + currency) + values + (#{po}, + #{lineNo}, + #{itemNo}, + #{desc}, + #{quantity}, + #{uom}, + #{unitPrice}, + #{amount}, + #{code}, + #{number}, + #{ext01}, + #{ext02}, + #{ext03}, + #{ext04}, + #{ext05}, + #{ext06}, + #{ext07}, + #{ext08}, + #{ext09}, + #{ext10}, + #{status}, + #{createDate}, + #{updateDate}, + #{createBy}, + #{updateBy}, + #{isDel}, + #{currency}) + + + + + + + update supplier_state + set is_del = #{isDel} + where po = #{po} + + + update supplier_state + set is_del = 1 + ,update_by = #{userId} + ,update_date = #{date} + where number = #{number} + + + + + diff --git a/src/main/resources/mapper/SupplierUomMappingMapper.xml b/src/main/resources/mapper/SupplierUomMappingMapper.xml new file mode 100644 index 0000000..46dd9a6 --- /dev/null +++ b/src/main/resources/mapper/SupplierUomMappingMapper.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + id,supplier_code,unit,vers_unit,vers_num,remark,ext01,ext02,ext03,ext04,ext05 + + + + + + delete + from supplier_uom_mapping + where id = #{id,jdbcType=INTEGER} + + + insert into supplier_uom_mapping + ( supplier_code,unit,vers_unit,vers_num,remark,ext01,ext02,ext03,ext04,ext05) + values ( #{supplierCode}, #{unit}, #{versUnit}, #{versNum},#{remark}, #{ext01}, #{ext02}, #{ext03}, #{ext04}, #{ext05}) + + + update supplier_uom_mapping + + + supplier_code = #{supplierCode}, + + + unit = #{unit,jdbcType=VARCHAR}, + + + vers_unit = #{versUnit,jdbcType=VARCHAR}, + + + vers_num = #{versNum}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + ext01 = #{ext01,jdbcType=VARCHAR}, + + + ext02 = #{ext02,jdbcType=VARCHAR}, + + + ext03 = #{ext03,jdbcType=VARCHAR}, + + + ext04 = #{ext04,jdbcType=VARCHAR}, + + + ext05 = #{ext05,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + + + + + + diff --git a/src/main/resources/mapper/SysConfigMapper.xml b/src/main/resources/mapper/SysConfigMapper.xml new file mode 100644 index 0000000..13da6c8 --- /dev/null +++ b/src/main/resources/mapper/SysConfigMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + ID, `NAME`, CODE, `VALUE`, `DESC`, CLIENT + + + + + delete + from sys_config + where ID = #{id,jdbcType=INTEGER} + + + insert into sys_config (`NAME`, CODE, `VALUE`, + `DESC`, CLIENT) + values (#{name,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR}, #{value,jdbcType=VARCHAR}, + #{desc,jdbcType=VARCHAR}, #{client,jdbcType=INTEGER}) + + + + update sys_config + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + CODE = #{code,jdbcType=VARCHAR}, + + + `VALUE` = #{value,jdbcType=VARCHAR}, + + + `DESC` = #{desc,jdbcType=VARCHAR}, + + + CLIENT = #{client,jdbcType=INTEGER}, + + + where ID = #{id,jdbcType=INTEGER} + + + + + + + + + + + + diff --git a/src/main/resources/mapper/SysEmpMapper.xml b/src/main/resources/mapper/SysEmpMapper.xml new file mode 100644 index 0000000..e8c0aed --- /dev/null +++ b/src/main/resources/mapper/SysEmpMapper.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, USER_ID, WORK_CODE, LAST_NAME, JOB_LEVEL, SUB_COMPANY_ID, SUB_COMPANY, DEPARTMAENT_ID, + DEPARTMAENT, SUB_DEPARTMAENT_ID, SUB_DEPARTMAENT, IS_DEL, CREATE_BY, CREATE_DATE, + UPDATE_BY, UPDATE_DATE, EXT01, EXT02, EXT03, EXT04, EXT05,EMAIL,ORG_ID,VENDOR_TYPE + + + + delete from sys_emp + where ID = #{id,jdbcType=BIGINT} + + + insert into sys_emp (USER_ID, WORK_CODE, LAST_NAME, + JOB_LEVEL, SUB_COMPANY_ID, SUB_COMPANY, + DEPARTMAENT_ID, DEPARTMAENT, SUB_DEPARTMAENT_ID, + SUB_DEPARTMAENT, IS_DEL, CREATE_BY, + CREATE_DATE, UPDATE_BY, UPDATE_DATE, + EXT01, EXT02, EXT03, + EXT04, EXT05) + values (#{userId,jdbcType=VARCHAR}, #{workCode,jdbcType=VARCHAR}, #{lastName,jdbcType=VARCHAR}, + #{jobLevel,jdbcType=VARCHAR}, #{subCompanyId,jdbcType=VARCHAR}, #{subCompany,jdbcType=VARCHAR}, + #{departmaentId,jdbcType=VARCHAR}, #{departmaent,jdbcType=VARCHAR}, #{subDepartmaentId,jdbcType=VARCHAR}, + #{subDepartmaent,jdbcType=VARCHAR}, #{isDel,jdbcType=BIT}, #{createBy,jdbcType=VARCHAR}, + #{createDate,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateDate,jdbcType=TIMESTAMP}, + #{ext01,jdbcType=VARCHAR}, #{ext02,jdbcType=VARCHAR}, #{ext03,jdbcType=VARCHAR}, + #{ext04,jdbcType=VARCHAR}, #{ext05,jdbcType=VARCHAR}) + + + insert into sys_emp + + + USER_ID, + + + WORK_CODE, + + + LAST_NAME, + + + JOB_LEVEL, + + + SUB_COMPANY_ID, + + + SUB_COMPANY, + + + DEPARTMAENT_ID, + + + DEPARTMAENT, + + + SUB_DEPARTMAENT_ID, + + + SUB_DEPARTMAENT, + + + IS_DEL, + + + CREATE_BY, + + + CREATE_DATE, + + + UPDATE_BY, + + + UPDATE_DATE, + + + EXT01, + + + EXT02, + + + EXT03, + + + EXT04, + + + EXT05, + + + + + #{userId,jdbcType=VARCHAR}, + + + #{workCode,jdbcType=VARCHAR}, + + + #{lastName,jdbcType=VARCHAR}, + + + #{jobLevel,jdbcType=VARCHAR}, + + + #{subCompanyId,jdbcType=VARCHAR}, + + + #{subCompany,jdbcType=VARCHAR}, + + + #{departmaentId,jdbcType=VARCHAR}, + + + #{departmaent,jdbcType=VARCHAR}, + + + #{subDepartmaentId,jdbcType=VARCHAR}, + + + #{subDepartmaent,jdbcType=VARCHAR}, + + + #{isDel,jdbcType=BIT}, + + + #{createBy,jdbcType=VARCHAR}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + #{updateBy,jdbcType=VARCHAR}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + #{ext01,jdbcType=VARCHAR}, + + + #{ext02,jdbcType=VARCHAR}, + + + #{ext03,jdbcType=VARCHAR}, + + + #{ext04,jdbcType=VARCHAR}, + + + #{ext05,jdbcType=VARCHAR}, + + + + + update sys_emp + + + USER_ID = #{userId,jdbcType=VARCHAR}, + + + WORK_CODE = #{workCode,jdbcType=VARCHAR}, + + + LAST_NAME = #{lastName,jdbcType=VARCHAR}, + + + JOB_LEVEL = #{jobLevel,jdbcType=VARCHAR}, + + + SUB_COMPANY_ID = #{subCompanyId,jdbcType=VARCHAR}, + + + SUB_COMPANY = #{subCompany,jdbcType=VARCHAR}, + + + DEPARTMAENT_ID = #{departmaentId,jdbcType=VARCHAR}, + + + DEPARTMAENT = #{departmaent,jdbcType=VARCHAR}, + + + SUB_DEPARTMAENT_ID = #{subDepartmaentId,jdbcType=VARCHAR}, + + + SUB_DEPARTMAENT = #{subDepartmaent,jdbcType=VARCHAR}, + + + IS_DEL = #{isDel,jdbcType=BIT}, + + + CREATE_BY = #{createBy,jdbcType=VARCHAR}, + + + CREATE_DATE = #{createDate,jdbcType=TIMESTAMP}, + + + UPDATE_BY = #{updateBy,jdbcType=VARCHAR}, + + + UPDATE_DATE = #{updateDate,jdbcType=TIMESTAMP}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=BIGINT} + + + update sys_emp + set USER_ID = #{userId,jdbcType=VARCHAR}, + WORK_CODE = #{workCode,jdbcType=VARCHAR}, + LAST_NAME = #{lastName,jdbcType=VARCHAR}, + JOB_LEVEL = #{jobLevel,jdbcType=VARCHAR}, + SUB_COMPANY_ID = #{subCompanyId,jdbcType=VARCHAR}, + SUB_COMPANY = #{subCompany,jdbcType=VARCHAR}, + DEPARTMAENT_ID = #{departmaentId,jdbcType=VARCHAR}, + DEPARTMAENT = #{departmaent,jdbcType=VARCHAR}, + SUB_DEPARTMAENT_ID = #{subDepartmaentId,jdbcType=VARCHAR}, + SUB_DEPARTMAENT = #{subDepartmaent,jdbcType=VARCHAR}, + IS_DEL = #{isDel,jdbcType=BIT}, + CREATE_BY = #{createBy,jdbcType=VARCHAR}, + CREATE_DATE = #{createDate,jdbcType=TIMESTAMP}, + UPDATE_BY = #{updateBy,jdbcType=VARCHAR}, + UPDATE_DATE = #{updateDate,jdbcType=TIMESTAMP}, + EXT01 = #{ext01,jdbcType=VARCHAR}, + EXT02 = #{ext02,jdbcType=VARCHAR}, + EXT03 = #{ext03,jdbcType=VARCHAR}, + EXT04 = #{ext04,jdbcType=VARCHAR}, + EXT05 = #{ext05,jdbcType=VARCHAR} + where ID = #{id,jdbcType=BIGINT} + + + + + + + + + + + + delete from sys_emp + + + diff --git a/src/main/resources/mapper/SysLogoMapper.xml b/src/main/resources/mapper/SysLogoMapper.xml new file mode 100644 index 0000000..36cb1ee --- /dev/null +++ b/src/main/resources/mapper/SysLogoMapper.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + ID, SYS_NAME, PC_LOGO, APP_BASE, APP_LOGO, IS_DEL, EXT01, EXT02, EXT03, EXT04, EXT05, + REMARK + + + + delete from sys_logo + where ID = #{id,jdbcType=BIGINT} + + + insert into sys_logo (SYS_NAME, PC_LOGO, APP_BASE, + APP_LOGO, IS_DEL, EXT01, + EXT02, EXT03, EXT04, + EXT05, REMARK) + values (#{sysName,jdbcType=VARCHAR}, #{pcLogo,jdbcType=VARCHAR}, #{appBase,jdbcType=VARCHAR}, + #{appLogo,jdbcType=VARCHAR}, #{isDel,jdbcType=VARCHAR}, #{ext01,jdbcType=VARCHAR}, + #{ext02,jdbcType=VARCHAR}, #{ext03,jdbcType=VARCHAR}, #{ext04,jdbcType=VARCHAR}, + #{ext05,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}) + + + insert into sys_logo + + + SYS_NAME, + + + PC_LOGO, + + + APP_BASE, + + + APP_LOGO, + + + IS_DEL, + + + EXT01, + + + EXT02, + + + EXT03, + + + EXT04, + + + EXT05, + + + REMARK, + + + + + #{sysName,jdbcType=VARCHAR}, + + + #{pcLogo,jdbcType=VARCHAR}, + + + #{appBase,jdbcType=VARCHAR}, + + + #{appLogo,jdbcType=VARCHAR}, + + + #{isDel,jdbcType=VARCHAR}, + + + #{ext01,jdbcType=VARCHAR}, + + + #{ext02,jdbcType=VARCHAR}, + + + #{ext03,jdbcType=VARCHAR}, + + + #{ext04,jdbcType=VARCHAR}, + + + #{ext05,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + + + update sys_logo + + + SYS_NAME = #{sysName,jdbcType=VARCHAR}, + + + PC_LOGO = #{pcLogo,jdbcType=VARCHAR}, + + + APP_BASE = #{appBase,jdbcType=VARCHAR}, + + + APP_LOGO = #{appLogo,jdbcType=VARCHAR}, + + + IS_DEL = #{isDel,jdbcType=VARCHAR}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=BIGINT} + + + update sys_logo + set SYS_NAME = #{sysName,jdbcType=VARCHAR}, + PC_LOGO = #{pcLogo,jdbcType=VARCHAR}, + APP_BASE = #{appBase,jdbcType=VARCHAR}, + APP_LOGO = #{appLogo,jdbcType=VARCHAR}, + IS_DEL = #{isDel,jdbcType=VARCHAR}, + EXT01 = #{ext01,jdbcType=VARCHAR}, + EXT02 = #{ext02,jdbcType=VARCHAR}, + EXT03 = #{ext03,jdbcType=VARCHAR}, + EXT04 = #{ext04,jdbcType=VARCHAR}, + EXT05 = #{ext05,jdbcType=VARCHAR}, + REMARK = #{remark,jdbcType=VARCHAR} + where ID = #{id,jdbcType=BIGINT} + + + + diff --git a/src/main/resources/mapper/SysMenuMapper.xml b/src/main/resources/mapper/SysMenuMapper.xml new file mode 100644 index 0000000..b70ac51 --- /dev/null +++ b/src/main/resources/mapper/SysMenuMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + ID, PARENT_ID, `NAME`, NAME_CN, ROUTE, `METHOD`, URI, TAG, `STATUS`, SORT, PERMISSION, + IS_BUTTON, PHOTO_URI + + + + + + + + + + delete + from sys_menu + where ID = #{id,jdbcType=INTEGER} + + + insert into sys_menu (PARENT_ID, `NAME`, NAME_CN, + ROUTE, `METHOD`, URI, + TAG, `STATUS`, SORT, + PERMISSION, IS_BUTTON, PHOTO_URI) + values (#{parentId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR}, + #{routeName,jdbcType=VARCHAR}, #{method,jdbcType=VARCHAR}, #{uri,jdbcType=VARCHAR}, + #{tag,jdbcType=VARCHAR}, #{status,jdbcType=SMALLINT}, #{sort,jdbcType=INTEGER}, + #{permission,jdbcType=VARCHAR}, #{isButton,jdbcType=INTEGER}, #{icon,jdbcType=VARCHAR}) + + diff --git a/src/main/resources/mapper/SysOrgMapper.xml b/src/main/resources/mapper/SysOrgMapper.xml new file mode 100644 index 0000000..4d967ab --- /dev/null +++ b/src/main/resources/mapper/SysOrgMapper.xml @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ID, `NAME`, CODE, PID, CLIENT, SORT, CREATE_TIME, `LEVEL`, COMPANY_ID ,IS_BUSINESS, ORG_NAME, LEDGER,COSTCENTER,type,TAX_NO,REMARK + + + + + + + + + + + + + + delete + from sys_org + where ID = #{id,jdbcType=INTEGER} + + + insert into sys_org + + + `NAME`, + + + CODE, + + + PID, + + + CLIENT, + + + SORT, + + + `LEVEL`, + + + COMPANY_ID, + + + IS_BUSINESS, + + + ORG_NAME, + + + type, + + + costcenter, + + + user_id, + + + create_time, + + + TAX_NO, + + + REMARK, + + + + + #{name,jdbcType=VARCHAR}, + + + #{code,jdbcType=VARCHAR}, + + + #{pid,jdbcType=INTEGER}, + + + #{client,jdbcType=INTEGER}, + + + #{sort,jdbcType=INTEGER}, + + + #{level,jdbcType=INTEGER}, + + + #{companyId,jdbcType=INTEGER}, + + + #{isBusiness,jdbcType=BOOLEAN}, + + + #{orgName,jdbcType=VARCHAR}, + + + #{type,jdbcType=VARCHAR}, + + + #{costcenter,jdbcType=VARCHAR}, + + + #{userId,jdbcType=INTEGER}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{taxNo,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + + + update sys_org + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + CODE = #{code,jdbcType=VARCHAR}, + + + PID = #{pid,jdbcType=INTEGER}, + + + CLIENT = #{client,jdbcType=INTEGER}, + + + SORT = #{sort,jdbcType=INTEGER}, + + + CREATE_TIME = #{createTime,jdbcType=TIMESTAMP}, + + + `LEVEL` = #{level,jdbcType=INTEGER}, + + + COMPANY_ID = #{companyId,jdbcType=INTEGER}, + + + IS_BUSINESS = #{isBusiness,jdbcType=BOOLEAN}, + + + ORG_NAME = #{orgName,jdbcType=VARCHAR}, + + + TAX_NO = #{taxNo,jdbcType=VARCHAR}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + + diff --git a/src/main/resources/mapper/SysRoleMapper.xml b/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..7b5860f --- /dev/null +++ b/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + ID, `NAME`,ROLE_TYPE, HOME_PAGE, `STATUS` + + + + + + delete + from sys_role + where ID = #{id,jdbcType=INTEGER} + + + delete + from sys_role_menu + where ROLE_ID = #{id,jdbcType=INTEGER} + + + insert into sys_role (`NAME`, ROLE_TYPE, HOME_PAGE, `STATUS`) + values (#{name,jdbcType=VARCHAR}, #{roleType}, #{homePage}, #{status,jdbcType=SMALLINT}) + + + insert into sys_role + + + `NAME`, + + + ROLE_TYPE, + + + HOME_PAGE, + + + `STATUS`, + + + + + #{name,jdbcType=VARCHAR}, + + + #{roleType}, + + + #{homePage}, + + + #{status,jdbcType=SMALLINT}, + + + + + insert into sys_role_menu (ROLE_ID, MENU_ID) + values (#{id,jdbcType=INTEGER}, #{menu,jdbcType=INTEGER}) + + + update sys_role + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + ROLE_TYPE = #{roleType,jdbcType=VARCHAR}, + + + HOME_PAGE = #{homePage,jdbcType=VARCHAR}, + + + `STATUS` = #{status,jdbcType=SMALLINT}, + + + where ID = #{id,jdbcType=INTEGER} + + + update sys_role + set `NAME` = #{name,jdbcType=VARCHAR}, + ROLE_TYPE = #{roleType,jdbcType=VARCHAR}, + HOME_PAGE = #{homePage,jdbcType=VARCHAR}, + `STATUS` = #{status,jdbcType=SMALLINT} + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/SysRoleMenuMapper.xml b/src/main/resources/mapper/SysRoleMenuMapper.xml new file mode 100644 index 0000000..fa41645 --- /dev/null +++ b/src/main/resources/mapper/SysRoleMenuMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + + insert into sys_role_menu (ROLE_ID, MENU_ID) + values (#{roleId,jdbcType=INTEGER}, #{menuId,jdbcType=INTEGER}) + + + insert into sys_role_menu + + + ROLE_ID, + + + MENU_ID, + + + + + #{roleId,jdbcType=INTEGER}, + + + #{menuId,jdbcType=INTEGER}, + + + + diff --git a/src/main/resources/mapper/SysUserApproveMapper.xml b/src/main/resources/mapper/SysUserApproveMapper.xml new file mode 100644 index 0000000..138af07 --- /dev/null +++ b/src/main/resources/mapper/SysUserApproveMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + USER_ID, AUTHORIZED_ORG, COR_INV_TYPE, DATA_AUTH_TYPE + + + + delete from sys_user_approve + where USER_ID = #{userId,jdbcType=INTEGER} + + + insert into sys_user_approve (USER_ID, AUTHORIZED_ORG, COR_INV_TYPE, DATA_AUTH_TYPE) + values (#{userId,jdbcType=INTEGER}, #{authorizedOrg,jdbcType=VARCHAR}, + #{corInvType,jdbcType=VARCHAR}, #{dataAuthType,jdbcType=INTEGER}) + + + insert into sys_user_approve + + + AUTHORIZED_ORG, + + + COR_INV_TYPE, + + + DATA_AUTH_TYPE, + + + + + #{authorizedOrg,jdbcType=VARCHAR}, + + + #{corInvType,jdbcType=VARCHAR}, + + + #{dataAuthType,jdbcType=INTEGER}, + + + + + update sys_user_approve + + + AUTHORIZED_ORG = #{authorizedOrg,jdbcType=VARCHAR}, + + + COR_INV_TYPE = #{corInvType,jdbcType=VARCHAR}, + + + DATA_AUTH_TYPE = #{dataAuthType,jdbcType=INTEGER}, + + + where USER_ID = #{userId,jdbcType=INTEGER} + + + update sys_user_approve + set AUTHORIZED_ORG = #{authorizedOrg,jdbcType=VARCHAR}, + COR_INV_TYPE = #{corInvType,jdbcType=VARCHAR}, + DATA_AUTH_TYPE = #{dataAuthType,jdbcType=INTEGER} + where USER_ID = #{userId,jdbcType=INTEGER} + + + + + diff --git a/src/main/resources/mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml new file mode 100644 index 0000000..77fc2d3 --- /dev/null +++ b/src/main/resources/mapper/SysUserMapper.xml @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, `NAME`, PWD, AGE, EMAIL, TEL, ADDRESS, CREATE_TIME, IS_ENABLE, IN_ACTIVE, NOTE, USER_NAME, + ORG_ID, ROLE,PWD_FLAG,JOB_NO,`CLIENT` + + + + + + + + + + delete + from sys_user + where ID = #{id,jdbcType=INTEGER} + + + insert into sys_user (`NAME`, PWD, AGE, + EMAIL, TEL, ADDRESS, + CREATE_TIME, IS_ENABLE, IN_ACTIVE, NOTE, + USER_NAME, ORG_ID, ROLE, JOB_NO, CLIENT) + values (#{name,jdbcType=VARCHAR}, #{pwd,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, + #{email,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, + #{createTime,jdbcType=VARCHAR}, #{isEnable}, #{inActive,jdbcType=INTEGER}, #{note,jdbcType=VARCHAR}, + #{userName,jdbcType=VARCHAR}, #{orgId,jdbcType=INTEGER}, #{role,jdbcType=INTEGER}, #{jobNo}), #{client} + + + insert into sys_user + + + `NAME`, + + + PWD, + + + AGE, + + + EMAIL, + + + TEL, + + + ADDRESS, + + + CREATE_TIME, + + + IS_ENABLE, + + + IN_ACTIVE, + + + NOTE, + + + USER_NAME, + + + ORG_ID, + + + `ROLE`, + + + JOB_NO, + + + CLIENT, + + + + + #{name,jdbcType=VARCHAR}, + + + #{pwd,jdbcType=VARCHAR}, + + + #{age,jdbcType=INTEGER}, + + + #{email,jdbcType=VARCHAR}, + + + #{tel,jdbcType=VARCHAR}, + + + #{address,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=VARCHAR}, + + + #{isEnable,jdbcType=INTEGER}, + + + #{inActive,jdbcType=INTEGER}, + + + #{note,jdbcType=VARCHAR}, + + + #{userName,jdbcType=VARCHAR}, + + + #{orgId,jdbcType=INTEGER}, + + + #{role,jdbcType=INTEGER}, + + + #{jobNo,jdbcType=VARCHAR}, + + + #{client}, + + + + + + INSERT INTO corporate_invoice_csv_logs (invoice_id,invoice_number,fh_barcode) + VALUES (#{invoiceId},#{number},#{fh_barcode}) + + + update sys_user + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + PWD = #{pwd,jdbcType=VARCHAR}, + + + AGE = #{age,jdbcType=INTEGER}, + + + EMAIL = #{email,jdbcType=VARCHAR}, + + + TEL = #{tel,jdbcType=VARCHAR}, + + + ADDRESS = #{address,jdbcType=VARCHAR}, + + + CREATE_TIME = #{createTime,jdbcType=VARCHAR}, + + + IS_ENABLE = #{isEnable,jdbcType=INTEGER}, + + + IN_ACTIVE = #{inActive,jdbcType=INTEGER}, + + + NOTE = #{note,jdbcType=VARCHAR}, + + + USER_NAME = #{userName,jdbcType=VARCHAR}, + + + PWD_FLAG = #{pwdFlag,jdbcType=VARCHAR}, + + + ORG_ID = #{orgId,jdbcType=INTEGER}, + + + LAST_UPDATE_TIME = #{lastUpdateTime,jdbcType=VARCHAR}, + + + `ROLE` = #{role,jdbcType=INTEGER}, + + + JOB_NO = #{jobNo,jdbcType=VARCHAR}, + + + CLIENT = #{client}, + + + where ID = #{id,jdbcType=INTEGER} + + + update sys_user + set `NAME` = #{name,jdbcType=VARCHAR}, + PWD = #{pwd,jdbcType=VARCHAR}, + AGE = #{age,jdbcType=INTEGER}, + EMAIL = #{email,jdbcType=VARCHAR}, + TEL = #{tel,jdbcType=VARCHAR}, + ADDRESS = #{address,jdbcType=VARCHAR}, + CREATE_TIME = #{createTime,jdbcType=VARCHAR}, + IS_ENABLE = #{isEnable,jdbcType=INTEGER}, + IN_ACTIVE = #{inActive,jdbcType=INTEGER}, + NOTE = #{note,jdbcType=VARCHAR}, + USER_NAME = #{userName,jdbcType=VARCHAR}, + ORG_ID = #{orgId,jdbcType=INTEGER}, + ROLE = #{role,jdbcType=INTEGER}, + JOB_NO = #{jobNo,jdbcType=VARCHAR}, + CLIENT = #{client} + where ID = #{id,jdbcType=INTEGER} + + + + + + + + + + + + update sys_user set IN_ACTIVE = 1 where ID = #{id} + + + + + + + + + + + diff --git a/src/main/resources/mapper/SysUserOrgMapper.xml b/src/main/resources/mapper/SysUserOrgMapper.xml new file mode 100644 index 0000000..2290b46 --- /dev/null +++ b/src/main/resources/mapper/SysUserOrgMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + USER_ID, AUTHORIZED_ORG, COR_INV_TYPE,DATA_AUTH_TYPE + + + + delete + from sys_user_org + where USER_ID = #{userId,jdbcType=INTEGER} + + + insert into sys_user_org (USER_ID, AUTHORIZED_ORG, COR_INV_TYPE, DATA_AUTH_TYPE) + values (#{userId,jdbcType=INTEGER}, #{authorizedOrg,jdbcType=VARCHAR}, + #{corInvType,jdbcType=VARCHAR}, #{dataAuthType,jdbcType=INTEGER}) + + + update sys_user_org + set AUTHORIZED_ORG = #{authorizedOrg,jdbcType=VARCHAR}, + COR_INV_TYPE = #{corInvType,jdbcType=VARCHAR}, + DATA_AUTH_TYPE = #{dataAuthType,jdbcType=INTEGER} + where USER_ID = #{userId,jdbcType=INTEGER} + + + update sys_user_org + + + AUTHORIZED_ORG = #{authorizedOrg,jdbcType=VARCHAR}, + + + COR_INV_TYPE = #{corInvType,jdbcType=VARCHAR}, + + + DATA_AUTH_TYPE = #{dataAuthType,jdbcType=INTEGER} + + + where USER_ID = #{userId,jdbcType=INTEGER} + + + + + diff --git a/src/main/resources/mapper/SysUserRoleMapper.xml b/src/main/resources/mapper/SysUserRoleMapper.xml new file mode 100644 index 0000000..3a65fca --- /dev/null +++ b/src/main/resources/mapper/SysUserRoleMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + ID, USER_ID, ROLE_ID + + + + delete + from sys_user_role + where ID = #{id,jdbcType=INTEGER} + + + insert into sys_user_role (USER_ID, ROLE_ID) + values (#{userId,jdbcType=INTEGER}, #{roleId,jdbcType=INTEGER}) + + + insert into sys_user_role + + + USER_ID, + + + ROLE_ID, + + + + + #{userId,jdbcType=INTEGER}, + + + #{roleId,jdbcType=INTEGER}, + + + + + update sys_user_role + + + USER_ID = #{userId,jdbcType=INTEGER}, + + + ROLE_ID = #{roleId,jdbcType=INTEGER}, + + + where ID = #{id,jdbcType=INTEGER} + + + update sys_user_role + set USER_ID = #{userId,jdbcType=INTEGER}, + ROLE_ID = #{roleId,jdbcType=INTEGER} + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/TInterfaceLogMapper.xml b/src/main/resources/mapper/TInterfaceLogMapper.xml new file mode 100644 index 0000000..bd8aada --- /dev/null +++ b/src/main/resources/mapper/TInterfaceLogMapper.xml @@ -0,0 +1,262 @@ + + + + + + a.id AS "id", + a.interface_name AS "interfaceName", + a.run_state AS "runState", + a.send_mesg AS "sendMesg", + a.run_mesg AS "runMesg", + a.oper_type AS "operType", + a.is_roll_back AS "isRollBack", + a.run_batch AS "runBatch", + a.interface_flag AS "interfaceFlag", + a.attributer1 AS "attributer1", + a.attributer2 AS "attributer2", + a.attributer3 AS "attributer3", + a.attributer4 AS "attributer4", + a.attributer5 AS "attributer5", + a.attributer6 AS "attributer6", + a.attributer7 AS "attributer7", + a.attributer8 AS "attributer8", + a.attributer9 AS "attributer9", + a.attributer10 AS "attributer10", + a.create_by AS "createBy.id", + a.create_date AS "createDate", + a.update_by AS "updateBy.id", + a.update_date AS "updateDate", + a.remarks AS "remarks", + a.del_flag AS "delFlag" + + + + + + + + + + + + + + + INSERT INTO t_interface_log( + id, + interface_name, + run_state, + send_mesg, + run_mesg, + oper_type, + is_roll_back, + run_batch, + interface_flag, + attributer1, + attributer2, + attributer3, + attributer4, + attributer5, + attributer6, + attributer7, + attributer8, + attributer9, + attributer10, + create_by, + create_date, + update_by, + update_date, + remarks, + del_flag + ) VALUES ( + #{id}, + #{interfaceName}, + #{runState}, + #{sendMesg}, + #{runMesg}, + #{operType}, + #{isRollBack}, + #{runBatch}, + #{interfaceFlag}, + #{attributer1}, + #{attributer2}, + #{attributer3}, + #{attributer4}, + #{attributer5}, + #{attributer6}, + #{attributer7}, + #{attributer8}, + #{attributer9}, + #{attributer10}, + #{createBy.id}, + #{createDate}, + #{updateBy.id}, + #{updateDate}, + #{remarks}, + #{delFlag} + ) + + + + UPDATE t_interface_log SET + interface_name = #{interfaceName}, + run_state = #{runState}, + send_mesg = #{sendMesg}, + run_mesg = #{runMesg}, + oper_type = #{operType}, + is_roll_back = #{isRollBack}, + run_batch = #{runBatch}, + interface_flag = #{interfaceFlag}, + attributer1 = #{attributer1}, + attributer2 = #{attributer2}, + attributer3 = #{attributer3}, + attributer4 = #{attributer4}, + attributer5 = #{attributer5}, + attributer6 = #{attributer6}, + attributer7 = #{attributer7}, + attributer8 = #{attributer8}, + attributer9 = #{attributer9}, + attributer10 = #{attributer10}, + update_by = #{updateBy.id}, + update_date = #{updateDate}, + remarks = #{remarks} + WHERE id = #{id} + + + + + + DELETE FROM t_interface_log + WHERE id = #{id} + + + + + UPDATE t_interface_log SET + del_flag = #{DEL_FLAG_DELETE} + WHERE id = #{id} + + + ${sql} + + + + + + + + + + + diff --git a/src/main/resources/mapper/UserCompanyMapper.xml b/src/main/resources/mapper/UserCompanyMapper.xml new file mode 100644 index 0000000..15547fd --- /dev/null +++ b/src/main/resources/mapper/UserCompanyMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + ID, `USER`, COMPANY + + + + delete + from user_company + where ID = #{id,jdbcType=INTEGER} + + + insert into user_company (`USER`, COMPANY) + values (#{user,jdbcType=INTEGER}, #{company,jdbcType=INTEGER}) + + + insert into user_company + + + `USER`, + + + COMPANY, + + + + + #{user,jdbcType=INTEGER}, + + + #{company,jdbcType=INTEGER}, + + + + + update user_company + + + `USER` = #{user,jdbcType=INTEGER}, + + + COMPANY = #{company,jdbcType=INTEGER}, + + + where ID = #{id,jdbcType=INTEGER} + + + update user_company + set `USER` = #{user,jdbcType=INTEGER}, + COMPANY = #{company,jdbcType=INTEGER} + where ID = #{id,jdbcType=INTEGER} + + diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..8a59f4f --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + USER_ID + , OPENID, UNIONID, USERNAME, PWD, AGE, EMAIL, TEL, IS_DEL, CREATE_TIME, UPDATE_TIME, + LANGUAGE_TYPE, VERIFICATION_CODE, VERIFY_TIME,LANGUAGE_TYPE,COMPANY_ID,`CLIENT`,IS_CHECKED + + + + + delete + from user + where USER_ID = #{userId} + + + insert into user (USER_ID, OPENID, UNIONID, USERNAME, + PWD, AGE, EMAIL, TEL, CREATE_TIME, UPDATE_TIME, + VERIFICATION_CODE, VERIFY_TIME, IS_CHECKED, CLIENT) + values (#{userId}, #{openid}, #{unionid}, #{username}, + MD5(#{pwd}), #{age}, #{email}, #{tel}, now(), now(), + #{verificationCode}, #{verifyTime}, #{checked}, #{client}) + + + update user + + + OPENID = #{openid}, + + + UNIONID = #{unionid}, + + + USERNAME = #{username}, + + + PWD = #{pwd}, + + + AGE = #{age}, + + + EMAIL = #{email}, + + + TEL = #{tel}, + + + IS_DEL = #{isDel}, + + + CREATE_TIME = #{createTime}, + + + UPDATE_TIME = #{updateTime}, + + + LANGUAGE_TYPE = #{languageType}, + + + VERIFICATION_CODE = #{verificationCode}, + + + VERIFY_TIME = #{verifyTime}, + + + IS_CHECKED = #{checked}, + + + + + and OPENID = #{openid} + + + and USER_ID = #{userId} + + + and TEL = #{tel} + + + + + + update user + + + OPENID = #{openid}, + + + UNIONID = #{unionid}, + + + USERNAME = #{username}, + + + PWD = #{pwd}, + + + AGE = #{age}, + + + EMAIL = #{email}, + + + TEL = #{tel}, + + + IS_DEL = #{isDel}, + + + CREATE_TIME = #{createTime}, + + + UPDATE_TIME = #{updateTime}, + + + LANGUAGE_TYPE = #{languageType}, + + + VERIFICATION_CODE = #{verificationCode}, + + + VERIFY_TIME = #{verifyTime}, + + + IS_CHECKED = #{checked}, + + + where USER_ID = #{userId} + + + + update user + set OPENID = #{openid}, + UNIONID = #{unionid}, + USERNAME = #{username}, + PWD = #{pwd}, + AGE = #{age}, + EMAIL = #{email}, + TEL = #{tel}, + IS_DEL = #{isDel}, + CREATE_TIME = #{createTime}, + UPDATE_TIME = #{updateTime}, + LANGUAGE_TYPE = #{languageType}, + VERIFICATION_CODE = #{verificationCode}, + VERIFY_TIME = #{verifyTime}, + IS_CHECKED = #{checked} + where USER_ID = #{userId} + + + + + + + + + + + + + + + + + + + + + + + + update user set UNIONID = #{unionId} where USER_ID = #{id} + + + diff --git a/src/main/resources/mapper/VerifiedUserMapper.xml b/src/main/resources/mapper/VerifiedUserMapper.xml new file mode 100644 index 0000000..6326e3c --- /dev/null +++ b/src/main/resources/mapper/VerifiedUserMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + ID, `NAME`, TEL, LOGIN_ID, CLIENT_ID, SIMILAR_NAMES, COR_INV_SUBMIT, `GROUP`, TAX_NO, `MANUAL`,`type`, +BAND,EXT01,EXT02,EXT03,EXT04,EXT05,VALID_MODE,IS_DEL + + + + + + + + + + + delete + from verified_user + where ID = #{id,jdbcType=INTEGER} + + + insert into verified_user (`NAME`, TEL, LOGIN_ID, + CLIENT_ID, SIMILAR_NAMES, COR_INV_SUBMIT, `GROUP`, TAX_NO, `MANUAL`, `type`, + BAND, EXT01, EXT02, EXT03, EXT04, EXT05, VALID_MODE, IS_DEL) + values (#{name,jdbcType=VARCHAR}, #{tel,jdbcType=VARCHAR}, #{loginId,jdbcType=VARCHAR}, + #{clientId,jdbcType=INTEGER}, #{similarNames,jdbcType=VARCHAR}, #{corInvSubmit,jdbcType=BOOLEAN}, + #{group,jdbcType=VARCHAR}, #{taxNo,jdbcType=VARCHAR}, #{manual,jdbcType=BOOLEAN}, + #{type,jdbcType=VARCHAR}, + #{bandler,jdbcType=VARCHAR}, #{ext01,jdbcType=VARCHAR}, #{ext02,jdbcType=VARCHAR}, + #{ext03,jdbcType=VARCHAR}, + #{ext04,jdbcType=VARCHAR}, #{ext05,jdbcType=VARCHAR}, #{validMode,jdbcType=INTEGER}, + #{isDel,jdbcType=VARCHAR}) + + + update verified_user + + + `NAME` = #{name,jdbcType=VARCHAR}, + + + TEL = #{tel,jdbcType=VARCHAR}, + + + LOGIN_ID = #{loginId,jdbcType=VARCHAR}, + + + CLIENT_ID = #{clientId,jdbcType=INTEGER}, + + + SIMILAR_NAMES = #{similarNames,jdbcType=VARCHAR}, + + + COR_INV_SUBMIT = #{corInvSubmit,jdbcType=BOOLEAN}, + + + `MANUAL` = #{manual,jdbcType=BOOLEAN}, + + + `GROUP` = #{group,jdbcType=VARCHAR}, + + + TAX_NO = #{taxNo,jdbcType=VARCHAR}, + + + `type` = #{type,jdbcType=VARCHAR}, + + + BAND = #{bandler,jdbcType=VARCHAR}, + + + EXT01 = #{ext01,jdbcType=VARCHAR}, + + + EXT02 = #{ext02,jdbcType=VARCHAR}, + + + EXT03 = #{ext03,jdbcType=VARCHAR}, + + + EXT04 = #{ext04,jdbcType=VARCHAR}, + + + EXT05 = #{ext05,jdbcType=VARCHAR}, + + + VALID_MODE = #{validMode,jdbcType=INTEGER}, + + + IS_DEL = #{isDel,jdbcType=VARCHAR}, + + + where ID = #{id,jdbcType=INTEGER} + + + + + + + + + update verified_user set IS_DEL = '0' where ID = #{id} + + + diff --git a/template/creditTemplate.html b/template/creditTemplate.html new file mode 100644 index 0000000..ce3f008 --- /dev/null +++ b/template/creditTemplate.html @@ -0,0 +1,118 @@ + + + + + + + + + +

+ 信用卡凭证 +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
referenceNum${creditItem.referenceNum}
transactionDate${creditItem.transactionDate}
employeeId${creditItem.employeeId}
lastFourDigit${creditItem.lastFourDigit}
cardType${creditItem.cardType}
merchant${creditItem.merchant}
amount${creditItem.amount}
currency${creditItem.currency}
+ +
+ + + diff --git a/template/meetTemplate.html b/template/meetTemplate.html new file mode 100644 index 0000000..ff437a8 --- /dev/null +++ b/template/meetTemplate.html @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + #foreach ( $x in $checkinList ) + + + + + + + + + + + + + + + #end + +
签到时间活动申请ID活动名称参与人类型医院/连锁代码医院/连锁名称参与人代码参与人名字科室/门店是否参会签到状态线上线下
${x.meetDate}${x.reqId}${x.meetName}${x.attendeeType}${x.hospCode}${x.hospName}${x.docCode}${x.docName}${x.deptName}${x.isJoin}${x.status}${x.meetFormat}
+ + + \ No newline at end of file diff --git a/template/printTemplate.btw b/template/printTemplate.btw new file mode 100644 index 0000000..ee60601 Binary files /dev/null and b/template/printTemplate.btw differ diff --git a/template/saleTemplate.html b/template/saleTemplate.html new file mode 100644 index 0000000..e0430d3 --- /dev/null +++ b/template/saleTemplate.html @@ -0,0 +1,103 @@ + + + + + + + + + +

+ 销售货物或者提供应税劳务清单 +

+
+

购买方名称: ${invoice.buyer}

+

销售方名称: ${invoice.seller}

+

所属增值税普通发票代码: ${invoice.invoiceCode} 号码:${invoice.invoiceNum}

+
+ + + + + + + + + + + + + + #foreach ( $x in $lineList ) + + + + + + + + + + + + #end + +
序号货物(劳务)名称规格型号单位数量单价金额税率税额
${x.rowNum}${x.name}${x.specification}${x.unit}${x.quantity}${x.price}${x.total}${x.taxRate}${x.tax}
+ + + \ No newline at end of file diff --git a/template/template.html b/template/template.html new file mode 100644 index 0000000..21d97a6 --- /dev/null +++ b/template/template.html @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + #foreach ( $x in $mileageList ) + + + + + + + + + + #end + +
日期起始地到达地里程系统里程目的来源
${x.itemDate}${x.from}${x.to}${x.mileage}${x.recMileage}${x.reason}${x.source}
+ + + \ No newline at end of file