diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..ed12194
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..d3b06be
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..b432fb2
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..5c9d336
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..f811765
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..2d432d0
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8564f29
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 RuoYi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README-WMS.md b/README-WMS.md
new file mode 100644
index 0000000..541d0d7
--- /dev/null
+++ b/README-WMS.md
@@ -0,0 +1,35 @@
+
+
+
+RuoYi v4.7.3
+基于SpringBoot开发的轻量级Java快速开发框架
+
+
+
+
+
+
+## 平台简介
+
+本系统是基于若依开源平台开发的仓库管理系统,提供现代化仓储一站式服务。
+
+## 内置功能
+
+1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
+3. 岗位管理:配置系统用户所属担任职务。
+4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
+5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
+6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+7. 参数管理:对系统动态配置常用参数。
+8. 通知公告:系统通知公告信息发布维护。
+9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+10. 登录日志:系统登录日志记录查询包含登录异常。
+11. 在线用户:当前系统中活跃用户状态监控。
+12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
+13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
+14. 系统接口:根据业务代码自动生成相关的api接口文档。
+15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
+16. 缓存监控:对系统的缓存查询,删除、清空等操作。
+17. 在线构建器:拖动表单元素生成相应的HTML代码。
+18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
\ No newline at end of file
diff --git a/README.en.md b/README.en.md
new file mode 100644
index 0000000..30df85a
--- /dev/null
+++ b/README.en.md
@@ -0,0 +1,36 @@
+# SmartWms
+
+#### Description
+wms仓库管理平台 若依版
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Instructions
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Contribution
+
+1. Fork the repository
+2. Create Feat_xxx branch
+3. Commit your code
+4. Create Pull Request
+
+
+#### Gitee Feature
+
+1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4. The most valuable open source project [GVP](https://gitee.com/gvp)
+5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/README.md b/README.md
index 13a5ded..45ee362 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,102 @@
-# wms_snN7pp_nantong
+
+
+
+RuoYi v4.7.3
+基于SpringBoot开发的轻量级Java快速开发框架
+
+
+
+
+
-南通深南N7PP
\ No newline at end of file
+## 平台简介
+
+一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
+
+性别男,若依是给女儿取的名字(寓意:你若不离不弃,我必生死相依)
+
+若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
+
+* 前后端分离版本,请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
+* 感谢 [hplus](https://gitee.com/hplus_admin/hplus) 后台主题 UI 框架。
+* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
+* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)
+
+## 内置功能
+
+1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
+3. 岗位管理:配置系统用户所属担任职务。
+4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
+5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
+6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+7. 参数管理:对系统动态配置常用参数。
+8. 通知公告:系统通知公告信息发布维护。
+9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+10. 登录日志:系统登录日志记录查询包含登录异常。
+11. 在线用户:当前系统中活跃用户状态监控。
+12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
+13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
+14. 系统接口:根据业务代码自动生成相关的api接口文档。
+15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
+16. 缓存监控:对系统的缓存查询,删除、清空等操作。
+17. 在线构建器:拖动表单元素生成相应的HTML代码。
+18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
+
+## 在线体验
+
+- admin/admin123
+- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
+
+演示地址:http://ruoyi.vip
+文档地址:http://doc.ruoyi.vip
+
+## 演示图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 若依交流群
+
+QQ群: [](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [](https://jq.qq.com/?_wv=1027&k=5g75dCU) [](https://jq.qq.com/?_wv=1027&k=58cPoHA) [](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [](https://jq.qq.com/?_wv=1027&k=5yugASz) [](https://jq.qq.com/?_wv=1027&k=5Rf3d2P) [](https://jq.qq.com/?_wv=1027&k=5ZIjaeP) [](https://jq.qq.com/?_wv=1027&k=5CJw1jY) [](https://jq.qq.com/?_wv=1027&k=5omzbKc) [](https://jq.qq.com/?_wv=1027&k=qPIKBb7s) [](https://jq.qq.com/?_wv=1027&k=4NsjKbtU) [](https://jq.qq.com/?_wv=1027&k=VD2pkz2G) [](https://jq.qq.com/?_wv=1027&k=HlshFwkJ) [](https://jq.qq.com/?_wv=1027&k=0ARRrO9V) [](https://jq.qq.com/?_wv=1027&k=up9k3ZXJ) [](https://jq.qq.com/?_wv=1027&k=540WfdEr) [](https://jq.qq.com/?_wv=1027&k=ss91fC4t)
\ No newline at end of file
diff --git a/SmartWms.iml b/SmartWms.iml
new file mode 100644
index 0000000..f409c0e
--- /dev/null
+++ b/SmartWms.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bin/clean.bat b/bin/clean.bat
new file mode 100644
index 0000000..24c0974
--- /dev/null
+++ b/bin/clean.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] target·
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause
\ No newline at end of file
diff --git a/bin/package.bat b/bin/package.bat
new file mode 100644
index 0000000..c693ec0
--- /dev/null
+++ b/bin/package.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [Ϣ] Weḅwar/jarļ
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause
\ No newline at end of file
diff --git a/bin/run.bat b/bin/run.bat
new file mode 100644
index 0000000..41efbd0
--- /dev/null
+++ b/bin/run.bat
@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [Ϣ] ʹJarWeb̡
+echo.
+
+cd %~dp0
+cd ../ruoyi-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin.jar
+
+cd bin
+pause
\ No newline at end of file
diff --git a/doc/若依环境使用手册.docx b/doc/若依环境使用手册.docx
new file mode 100644
index 0000000..fa5b62d
--- /dev/null
+++ b/doc/若依环境使用手册.docx
@@ -0,0 +1,89 @@
+ 若依系统开发环境搭建手册
+1. 准备工作
+1.1 前置环境准备 -- -- 安装Maven
+ 若依基于Maven管理项目的构建,需要先安装好相应的版本。
+1.2 开发工具
+ 若依系统采用Eclipse作为开发工具。但不局限于Eclipse。此处仅介绍在Eclipse搭建开发环境所需的操作。
+2. 开发环境搭建
+2.1 开发工具的配置
+2.1.1 配置Maven
+进入Window->Preferences->Maven->Installations页面,设置已经安装好的Maven
+
+2.1.2 配置Maven仓库路径
+进入Window->Preferences->Maven->User Settings页面,配置仓库路径
+
+2.1.4 关闭校验
+进入Window->Preferences->Validation页面,勾选"Suspend all validators",关闭校验
+
+2.2 导入工程
+通过Eclipse导入工程,步骤如下:
+(1)点击左侧项目区域 -- >Import...
+
+(2)选择RuoYi
+
+(3)点击Finish
+
+(4)RuoYi的代码就被导出到Eclipse中了,此时可以在工程视图中看到。
+
+3. 运行若依系统
+3.1 必要的配置
+3.1.1 修改数据库连接
+编辑src/main/ resources目录下的application-druid.yml 文件,修改数据库地址账号信息。
+执行sql/ ry_20180423.sql,quartz.sql 两个文件 日期随版本变化
+3.1.2 开发环境配置
+编辑src/main/ resources目录下的application.yml 文件,
+默认端口为80
+
+3.1.3 代码生成配置
+编辑src/main/ resources目录下的application.yml 文件,
+
+默认为module,根据实际情况修改即可。生成的表要有注释
+
+注:如对模板有特殊需求,可自行修改。编辑src/main/ resources/templates/vm目录下
+
+
+3.1.4 日志配置
+编辑src/main/ resources目录下的logback.yml 文件
+
+改为自己需要的路径
+
+3.2 启动及验证
+启动RuoYiApplication.java 出现如下图表示启动成功
+
+打开浏览器,输入:http://localhost:80/
+若能正确展示登录页面,并能成功登录,登录后菜单及页面展示正常,则表明环境搭建成功。
+默认密码为 admin/admin123
+
+演示地址:http://ruoyi.vip
+
+
+
+4. 部署若依系统
+4.1 war部署方式
+4.1.1 修改pom.xml文件。将jar修改为war
+
+如果是分模块需要修改ruoyi-admin
+
+
+4.1.2 在spring-boot-starter依赖中移除tomcat模块
+
+
+
+ spring-boot-starter-tomcat
+ org.springframework.boot
+
+
+
+4.1.3 部署到tomcat的webapps目录下面
+默认为RuoYi.war
+
+4.1.4 启动及验证
+运行startup.bat 出现如下图即部署成功
+
+4.2 Jar方式部署
+执行命令:java - jar RuoYi.jar
+脚本执行:ry.sh start 启动stop 停止
+
+
+演示地址:ruoyi.vip
+文档地址:doc.ruoyi.vip
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f4c7f65
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,299 @@
+
+
+ 4.0.0
+
+ com.wms
+ wms
+
+ 1.0.0
+
+ SmartWms
+ http://www.ruoyi.vip
+ 智能仓库管理系统
+
+
+ 1.0.0
+ UTF-8
+ UTF-8
+ 1.8
+ 3.1.1
+ 1.9.0
+ 2.1.0
+ 1.2.8
+ 1.21
+ 2.3.2
+ 3.0.0
+ 3.5.8
+ 2.2.2
+ 3.5.1
+ 2.2.2
+ 1.4.1
+ 1.2.80
+ 6.1.2
+ 5.10.0
+ 2.11.0
+ 1.4
+ 4.1.2
+ 2.3
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.5.13
+ pom
+ import
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+
+ com.github.penggle
+ kaptcha
+ ${kaptcha.version}
+
+
+
+
+ org.apache.shiro
+ shiro-core
+ ${shiro.version}
+
+
+
+
+ org.apache.shiro
+ shiro-spring
+ ${shiro.version}
+
+
+
+
+ org.apache.shiro
+ shiro-ehcache
+ ${shiro.version}
+
+
+
+
+ com.github.theborakompanioni
+ thymeleaf-extras-shiro
+ ${thymeleaf.extras.shiro.version}
+
+
+
+
+ eu.bitwalker
+ UserAgentUtils
+ ${bitwalker.version}
+
+
+
+
+
+
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus-spring-boot.version}
+
+
+
+
+
+
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-autoconfigure
+ ${mybatis-spring-boot-autoconfigure.version}
+
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.boot.version}
+
+
+
+
+ com.github.oshi
+ oshi-core
+ ${oshi.version}
+
+
+
+ net.java.dev.jna
+ jna
+ ${jna.version}
+
+
+
+ net.java.dev.jna
+ jna-platform
+ ${jna.version}
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+ ${swagger.version}
+
+
+ io.swagger
+ swagger-models
+
+
+
+
+
+
+ commons-io
+ commons-io
+ ${commons.io.version}
+
+
+
+
+ commons-fileupload
+ commons-fileupload
+ ${commons.fileupload.version}
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+
+ com.wms
+ wms-quartz
+ ${wms.version}
+
+
+
+
+ com.wms
+ wms-generator
+ ${wms.version}
+
+
+
+
+ com.wms
+ wms-framework
+ ${wms.version}
+
+
+
+
+ com.wms
+ wms-system
+ ${wms.version}
+
+
+
+
+ com.wms
+ wms-common
+ ${wms.version}
+
+
+
+
+ com.wms
+ wms-business
+ ${wms.version}
+
+
+
+
+
+
+ wms-admin
+ wms-framework
+ wms-system
+ wms-quartz
+ wms-generator
+ wms-common
+ wms-business
+
+ pom
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/ry.bat b/ry.bat
new file mode 100644
index 0000000..ac1e437
--- /dev/null
+++ b/ry.bat
@@ -0,0 +1,67 @@
+@echo off
+
+rem jarƽĿ¼
+set AppName=ruoyi-admin.jar
+
+rem JVM
+set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+
+
+ECHO.
+ ECHO. [1] %AppName%
+ ECHO. [2] ر%AppName%
+ ECHO. [3] %AppName%
+ ECHO. [4] ״̬ %AppName%
+ ECHO. [5]
+ECHO.
+
+ECHO.ѡĿ:
+set /p ID=
+ IF "%id%"=="1" GOTO start
+ IF "%id%"=="2" GOTO stop
+ IF "%id%"=="3" GOTO restart
+ IF "%id%"=="4" GOTO status
+ IF "%id%"=="5" EXIT
+PAUSE
+:start
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if defined pid (
+ echo %%is running
+ PAUSE
+ )
+
+start javaw %JVM_OPTS% -jar %AppName%
+
+echo starting
+echo Start %AppName% success...
+goto:eof
+
+rem stopͨjpspid
+:stop
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if not defined pid (echo process %AppName% does not exists) else (
+ echo prepare to kill %image_name%
+ echo start kill %pid% ...
+ rem ݽIDkill
+ taskkill /f /pid %pid%
+ )
+goto:eof
+:restart
+ call :stop
+ call :start
+goto:eof
+:status
+ for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
+ set pid=%%a
+ set image_name=%%b
+ )
+ if not defined pid (echo process %AppName% is dead ) else (
+ echo %image_name% is running
+ )
+goto:eof
diff --git a/ry.sh b/ry.sh
new file mode 100644
index 0000000..d6a9cf3
--- /dev/null
+++ b/ry.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
+AppName=ruoyi-admin.jar
+
+# JVM参数
+JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
+APP_HOME=`pwd`
+LOG_PATH=$APP_HOME/logs/$AppName.log
+
+if [ "$1" = "" ];
+then
+ echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
+ exit 1
+fi
+
+if [ "$AppName" = "" ];
+then
+ echo -e "\033[0;31m 未输入应用名 \033[0m"
+ exit 1
+fi
+
+function start()
+{
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+
+ if [ x"$PID" != x"" ]; then
+ echo "$AppName is running..."
+ else
+ nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
+ echo "Start $AppName success..."
+ fi
+}
+
+function stop()
+{
+ echo "Stop $AppName"
+
+ PID=""
+ query(){
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
+ }
+
+ query
+ if [ x"$PID" != x"" ]; then
+ kill -TERM $PID
+ echo "$AppName (pid:$PID) exiting..."
+ while [ x"$PID" != x"" ]
+ do
+ sleep 1
+ query
+ done
+ echo "$AppName exited."
+ else
+ echo "$AppName already stopped."
+ fi
+}
+
+function restart()
+{
+ stop
+ sleep 2
+ start
+}
+
+function status()
+{
+ PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
+ if [ $PID != 0 ];then
+ echo "$AppName is running..."
+ else
+ echo "$AppName is not running..."
+ fi
+}
+
+case $1 in
+ start)
+ start;;
+ stop)
+ stop;;
+ restart)
+ restart;;
+ status)
+ status;;
+ *)
+
+esac
diff --git a/sql/quartz.sql b/sql/quartz.sql
new file mode 100644
index 0000000..cee613b
--- /dev/null
+++ b/sql/quartz.sql
@@ -0,0 +1,174 @@
+DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
+DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
+DROP TABLE IF EXISTS QRTZ_LOCKS;
+DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
+DROP TABLE IF EXISTS QRTZ_CALENDARS;
+
+-- ----------------------------
+-- 1、存储每一个已配置的 jobDetail 的详细信息
+-- ----------------------------
+create table QRTZ_JOB_DETAILS (
+ sched_name varchar(120) not null comment '调度名称',
+ job_name varchar(200) not null comment '任务名称',
+ job_group varchar(200) not null comment '任务组名',
+ description varchar(250) null comment '相关介绍',
+ job_class_name varchar(250) not null comment '执行任务类名称',
+ is_durable varchar(1) not null comment '是否持久化',
+ is_nonconcurrent varchar(1) not null comment '是否并发',
+ is_update_data varchar(1) not null comment '是否更新数据',
+ requests_recovery varchar(1) not null comment '是否接受恢复执行',
+ job_data blob null comment '存放持久化job对象',
+ primary key (sched_name, job_name, job_group)
+) engine=innodb comment = '任务详细信息表';
+
+-- ----------------------------
+-- 2、 存储已配置的 Trigger 的信息
+-- ----------------------------
+create table QRTZ_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_name varchar(200) not null comment '触发器的名字',
+ trigger_group varchar(200) not null comment '触发器所属组的名字',
+ job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键',
+ job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键',
+ description varchar(250) null comment '相关介绍',
+ next_fire_time bigint(13) null comment '上一次触发时间(毫秒)',
+ prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)',
+ priority integer null comment '优先级',
+ trigger_state varchar(16) not null comment '触发器状态',
+ trigger_type varchar(8) not null comment '触发器的类型',
+ start_time bigint(13) not null comment '开始时间',
+ end_time bigint(13) null comment '结束时间',
+ calendar_name varchar(200) null comment '日程表名称',
+ misfire_instr smallint(2) null comment '补偿执行的策略',
+ job_data blob null comment '存放持久化job对象',
+ primary key (sched_name, trigger_name, trigger_group),
+ foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group)
+) engine=innodb comment = '触发器详细信息表';
+
+-- ----------------------------
+-- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
+-- ----------------------------
+create table QRTZ_SIMPLE_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ repeat_count bigint(7) not null comment '重复的次数统计',
+ repeat_interval bigint(12) not null comment '重复的间隔时间',
+ times_triggered bigint(10) not null comment '已经触发的次数',
+ primary key (sched_name, trigger_name, trigger_group),
+ foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) engine=innodb comment = '简单触发器的信息表';
+
+-- ----------------------------
+-- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
+-- ----------------------------
+create table QRTZ_CRON_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ cron_expression varchar(200) not null comment 'cron表达式',
+ time_zone_id varchar(80) comment '时区',
+ primary key (sched_name, trigger_name, trigger_group),
+ foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) engine=innodb comment = 'Cron类型的触发器表';
+
+-- ----------------------------
+-- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
+-- ----------------------------
+create table QRTZ_BLOB_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ blob_data blob null comment '存放持久化Trigger对象',
+ primary key (sched_name, trigger_name, trigger_group),
+ foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) engine=innodb comment = 'Blob类型的触发器表';
+
+-- ----------------------------
+-- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
+-- ----------------------------
+create table QRTZ_CALENDARS (
+ sched_name varchar(120) not null comment '调度名称',
+ calendar_name varchar(200) not null comment '日历名称',
+ calendar blob not null comment '存放持久化calendar对象',
+ primary key (sched_name, calendar_name)
+) engine=innodb comment = '日历信息表';
+
+-- ----------------------------
+-- 7、 存储已暂停的 Trigger 组的信息
+-- ----------------------------
+create table QRTZ_PAUSED_TRIGGER_GRPS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ primary key (sched_name, trigger_group)
+) engine=innodb comment = '暂停的触发器表';
+
+-- ----------------------------
+-- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
+-- ----------------------------
+create table QRTZ_FIRED_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ entry_id varchar(95) not null comment '调度器实例id',
+ trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ instance_name varchar(200) not null comment '调度器实例名',
+ fired_time bigint(13) not null comment '触发的时间',
+ sched_time bigint(13) not null comment '定时器制定的时间',
+ priority integer not null comment '优先级',
+ state varchar(16) not null comment '状态',
+ job_name varchar(200) null comment '任务名称',
+ job_group varchar(200) null comment '任务组名',
+ is_nonconcurrent varchar(1) null comment '是否并发',
+ requests_recovery varchar(1) null comment '是否接受恢复执行',
+ primary key (sched_name, entry_id)
+) engine=innodb comment = '已触发的触发器表';
+
+-- ----------------------------
+-- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
+-- ----------------------------
+create table QRTZ_SCHEDULER_STATE (
+ sched_name varchar(120) not null comment '调度名称',
+ instance_name varchar(200) not null comment '实例名称',
+ last_checkin_time bigint(13) not null comment '上次检查时间',
+ checkin_interval bigint(13) not null comment '检查间隔时间',
+ primary key (sched_name, instance_name)
+) engine=innodb comment = '调度器状态表';
+
+-- ----------------------------
+-- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
+-- ----------------------------
+create table QRTZ_LOCKS (
+ sched_name varchar(120) not null comment '调度名称',
+ lock_name varchar(40) not null comment '悲观锁名称',
+ primary key (sched_name, lock_name)
+) engine=innodb comment = '存储的悲观锁信息表';
+
+-- ----------------------------
+-- 11、 Quartz集群实现同步机制的行锁表
+-- ----------------------------
+create table QRTZ_SIMPROP_TRIGGERS (
+ sched_name varchar(120) not null comment '调度名称',
+ trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
+ trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
+ str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数',
+ str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数',
+ str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数',
+ int_prop_1 int null comment 'int类型的trigger的第一个参数',
+ int_prop_2 int null comment 'int类型的trigger的第二个参数',
+ long_prop_1 bigint null comment 'long类型的trigger的第一个参数',
+ long_prop_2 bigint null comment 'long类型的trigger的第二个参数',
+ dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数',
+ dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数',
+ bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数',
+ bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数',
+ primary key (sched_name, trigger_name, trigger_group),
+ foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) engine=innodb comment = '同步机制的行锁表';
+
+commit;
\ No newline at end of file
diff --git a/sql/ruoyi.html b/sql/ruoyi.html
new file mode 100644
index 0000000..abd2596
--- /dev/null
+++ b/sql/ruoyi.html
@@ -0,0 +1,2890 @@
+
+
+
+
+RuoYi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RuoYi
+ Move the mouse over tables & columns to read the comments.
+
+
+
+
+
+
+ Fk qrtz_blob_triggers_ibfk_1
+qrtz_blob_triggers ref qrtz_triggers ( sched_name, trigger_name, trigger_group )
+
+
+sched_name,trigger_name,trigger_group
+
+
+ Fk qrtz_cron_triggers_ibfk_1
+qrtz_cron_triggers ref qrtz_triggers ( sched_name, trigger_name, trigger_group )
+
+
+sched_name,trigger_name,trigger_group
+
+
+ Fk qrtz_simple_triggers_ibfk_1
+qrtz_simple_triggers ref qrtz_triggers ( sched_name, trigger_name, trigger_group )
+
+
+sched_name,trigger_name,trigger_group
+
+
+ Fk qrtz_simprop_triggers_ibfk_1
+qrtz_simprop_triggers ref qrtz_triggers ( sched_name, trigger_name, trigger_group )
+
+
+sched_name,trigger_name,trigger_group
+
+
+ Fk qrtz_triggers_ibfk_1
+qrtz_triggers ref qrtz_job_details ( sched_name, job_name, job_group )
+
+
+sched_name,job_name,job_group
+
+
+
+
+
+
+
+qrtz_blob_triggers Table ry.qrtz_blob_triggers
+ Pk pk_qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+sched_name sched_name
+* varchar(120)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+trigger_name trigger_name
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ blob_data blob_data
+blob
+~
+
+
+
+
+
+
+
+qrtz_calendars Table ry.qrtz_calendars
+ Pk pk_qrtz_calendars ( sched_name, calendar_name )
+sched_name sched_name
+* varchar(120)
+t Pk pk_qrtz_calendars ( sched_name, calendar_name )
+calendar_name calendar_name
+* varchar(200)
+t calendar calendar
+* blob
+~
+
+
+
+
+
+
+
+qrtz_cron_triggers Table ry.qrtz_cron_triggers
+ Pk pk_qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+sched_name sched_name
+* varchar(120)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+trigger_name trigger_name
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ cron_expression cron_expression
+* varchar(200)
+t time_zone_id time_zone_id
+varchar(80)
+t
+
+
+
+
+
+
+
+qrtz_job_details Table ry.qrtz_job_details
+ Pk pk_qrtz_job_details ( sched_name, job_name, job_group )
+sched_name sched_name
+* varchar(120)
+Referred by qrtz_triggers ( sched_name, job_name, job_group )
+ Pk pk_qrtz_job_details ( sched_name, job_name, job_group )
+job_name job_name
+* varchar(200)
+Referred by qrtz_triggers ( sched_name, job_name, job_group )
+ Pk pk_qrtz_job_details ( sched_name, job_name, job_group )
+job_group job_group
+* varchar(200)
+Referred by qrtz_triggers ( sched_name, job_name, job_group )
+ description description
+varchar(250)
+t job_class_name job_class_name
+* varchar(250)
+t is_durable is_durable
+* varchar(1)
+t is_nonconcurrent is_nonconcurrent
+* varchar(1)
+t is_update_data is_update_data
+* varchar(1)
+t requests_recovery requests_recovery
+* varchar(1)
+t job_data job_data
+blob
+~
+
+
+
+
+
+
+
+qrtz_locks Table ry.qrtz_locks
+ Pk pk_qrtz_locks ( sched_name, lock_name )
+sched_name sched_name
+* varchar(120)
+t Pk pk_qrtz_locks ( sched_name, lock_name )
+lock_name lock_name
+* varchar(40)
+t
+
+
+
+
+
+
+
+qrtz_scheduler_state Table ry.qrtz_scheduler_state
+ Pk pk_qrtz_scheduler_state ( sched_name, instance_name )
+sched_name sched_name
+* varchar(120)
+t Pk pk_qrtz_scheduler_state ( sched_name, instance_name )
+instance_name instance_name
+* varchar(200)
+t last_checkin_time last_checkin_time
+* bigint
+# checkin_interval checkin_interval
+* bigint
+#
+
+
+
+
+
+
+
+qrtz_simple_triggers Table ry.qrtz_simple_triggers
+ Pk pk_qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+sched_name sched_name
+* varchar(120)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+trigger_name trigger_name
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ repeat_count repeat_count
+* bigint
+# repeat_interval repeat_interval
+* bigint
+# times_triggered times_triggered
+* bigint
+#
+
+
+
+
+
+
+
+qrtz_simprop_triggers Table ry.qrtz_simprop_triggers
+ Pk pk_qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+sched_name sched_name
+* varchar(120)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+trigger_name trigger_name
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+References qrtz_triggers ( sched_name, trigger_name, trigger_group )
+ str_prop_1 str_prop_1
+varchar(512)
+t str_prop_2 str_prop_2
+varchar(512)
+t str_prop_3 str_prop_3
+varchar(512)
+t int_prop_1 int_prop_1
+int
+# int_prop_2 int_prop_2
+int
+# long_prop_1 long_prop_1
+bigint
+# long_prop_2 long_prop_2
+bigint
+# dec_prop_1 dec_prop_1
+decimal(13,4)
+# dec_prop_2 dec_prop_2
+decimal(13,4)
+# bool_prop_1 bool_prop_1
+varchar(1)
+t bool_prop_2 bool_prop_2
+varchar(1)
+t
+
+
+
+
+
+
+
+qrtz_triggers Table ry.qrtz_triggers
+ Pk pk_qrtz_triggers ( sched_name, trigger_name, trigger_group ) sched_name ( sched_name, job_name, job_group )
+sched_name sched_name
+* varchar(120)
+References qrtz_job_details ( sched_name, job_name, job_group )
+Referred by qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_triggers ( sched_name, trigger_name, trigger_group )
+trigger_name trigger_name
+* varchar(200)
+Referred by qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+ Pk pk_qrtz_triggers ( sched_name, trigger_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+Referred by qrtz_blob_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_cron_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simple_triggers ( sched_name, trigger_name, trigger_group )
+Referred by qrtz_simprop_triggers ( sched_name, trigger_name, trigger_group )
+ sched_name ( sched_name, job_name, job_group )
+job_name job_name
+* varchar(200)
+References qrtz_job_details ( sched_name, job_name, job_group )
+ sched_name ( sched_name, job_name, job_group )
+job_group job_group
+* varchar(200)
+References qrtz_job_details ( sched_name, job_name, job_group )
+ description description
+varchar(250)
+t next_fire_time next_fire_time
+bigint
+# prev_fire_time prev_fire_time
+bigint
+# priority priority
+int
+# trigger_state trigger_state
+* varchar(16)
+t trigger_type trigger_type
+* varchar(8)
+t start_time start_time
+* bigint
+# end_time end_time
+bigint
+# calendar_name calendar_name
+varchar(200)
+t misfire_instr misfire_instr
+smallint
+# job_data job_data
+blob
+~
+
+
+
+
+
+
+
+sys_dict_data Table ry.sys_dict_data
+ Pk pk_sys_dict_data ( dict_code )
+dict_code dict_code
+* int
+字典编码
+# dict_sort dict_sort
+int default 0
+字典排序
+# dict_label dict_label
+varchar(100) default ''
+字典标签
+t dict_value dict_value
+varchar(100) default ''
+字典键值
+t dict_type dict_type
+varchar(100) default ''
+字典类型
+t status status
+int default 0
+状态(0正常 1禁用)
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注
+t
+
+
+
+
+
+
+
+sys_dict_type Table ry.sys_dict_type
+ Pk pk_sys_dict_type ( dict_id )
+dict_id dict_id
+* int
+字典主键
+# dict_name dict_name
+varchar(100) default ''
+字典名称
+t Unq dict_type ( dict_type )
+dict_type dict_type
+varchar(100) default ''
+字典类型
+t status status
+int default 0
+状态(0正常 1禁用)
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注
+t
+
+
+
+
+
+
+
+sys_job Table ry.sys_job
+ Pk pk_sys_job ( job_id, job_name, job_group )
+job_id job_id
+* int
+任务ID
+# Pk pk_sys_job ( job_id, job_name, job_group )
+job_name job_name
+* varchar(64) default ''
+任务名称
+t Pk pk_sys_job ( job_id, job_name, job_group )
+job_group job_group
+* varchar(64) default ''
+任务组名
+t method_name method_name
+varchar(500) default ''
+任务方法
+t params params
+varchar(200) default ''
+方法参数
+t cron_expression cron_expression
+varchar(255) default ''
+cron执行表达式
+t status status
+int default 0
+状态(0正常 1暂停)
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注信息
+t
+
+
+
+
+
+
+
+sys_job_log Table ry.sys_job_log
+ Pk pk_sys_job_log ( job_log_id )
+job_log_id job_log_id
+* int
+任务日志ID
+# job_name job_name
+* varchar(64)
+任务名称
+t job_group job_group
+* varchar(64)
+任务组名
+t method_name method_name
+varchar(500)
+任务方法
+t params params
+varchar(200) default ''
+方法参数
+t job_message job_message
+varchar(500)
+日志信息
+t is_exception is_exception
+int default 0
+是否异常
+# exception_info exception_info
+text
+异常信息
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d
+
+
+
+
+
+
+
+sys_logininfor Table ry.sys_logininfor
+ Pk pk_sys_logininfor ( info_id )
+info_id info_id
+* int
+访问ID
+# login_name login_name
+varchar(50) default ''
+登录账号
+t ipaddr ipaddr
+varchar(50) default ''
+登录IP地址
+t browser browser
+varchar(50) default ''
+浏览器类型
+t os os
+varchar(50) default ''
+操作系统
+t status status
+int default 0
+登录状态 0成功 1失败
+# msg msg
+varchar(255) default ''
+提示消息
+t login_time login_time
+* timestamp default CURRENT_TIMESTAMP
+访问时间
+d
+
+
+
+
+
+
+
+sys_menu Table ry.sys_menu
+ Pk pk_sys_menu ( menu_id )
+menu_id
+* int
+菜单ID
+# menu_name
+* varchar(50)
+菜单名称
+t parent_id
+int default 0
+父菜单ID
+# order_num
+int
+显示顺序
+# url
+varchar(200) default ''
+请求地址
+t menu_type
+char(1) default ''
+类型:M目录,C菜单,F按钮
+c visible
+int default 0
+菜单状态:0显示,1隐藏
+# perms
+varchar(100) default ''
+权限标识
+t icon
+varchar(100) default ''
+菜单图标
+t create_by
+varchar(64) default ''
+创建者
+t create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by
+varchar(64) default ''
+更新者
+t update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注
+t
+
+
+
+
+
+
+
+sys_oper_log Table ry.sys_oper_log
+ Pk pk_sys_oper_log ( oper_id )
+oper_id oper_id
+* int
+日志主键
+# title title
+varchar(50) default ''
+模块标题
+t action action
+varchar(100) default ''
+功能请求
+t method method
+varchar(100) default ''
+方法名称
+t channel channel
+varchar(20) default ''
+来源渠道
+t login_name login_name
+varchar(50) default ''
+登录账号
+t dept_name dept_name
+varchar(50) default ''
+部门名称
+t oper_url oper_url
+varchar(255) default ''
+请求URL
+t oper_ip oper_ip
+varchar(30) default ''
+主机地址
+t oper_param oper_param
+varchar(255) default ''
+请求参数
+t status status
+int default 0
+操作状态 0正常 1异常
+# error_msg error_msg
+varchar(2000) default ''
+错误消息
+t oper_time oper_time
+* timestamp default CURRENT_TIMESTAMP
+操作时间
+d
+
+
+
+
+
+
+
+sys_post Table ry.sys_post
+ Pk pk_sys_post ( post_id )
+post_id post_id
+* int
+岗位ID
+# post_code post_code
+* varchar(64)
+岗位编码
+t post_name post_name
+* varchar(100)
+岗位名称
+t post_sort post_sort
+* int
+显示顺序
+# status status
+* int
+状态(0正常 1停用)
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注
+t
+
+
+
+
+
+
+
+sys_role Table ry.sys_role
+ Pk pk_sys_role ( role_id )
+role_id role_id
+* int
+角色ID
+# role_name role_name
+* varchar(30)
+角色名称
+t role_key role_key
+* varchar(100)
+角色权限字符串
+t role_sort role_sort
+* int
+显示顺序
+# status status
+int default 0
+角色状态:0正常,1禁用
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d remark
+varchar(500) default ''
+备注
+t
+
+
+
+
+
+
+
+sys_role_menu Table ry.sys_role_menu
+ Pk pk_sys_role_menu ( role_id, menu_id )
+role_id
+* int
+角色ID
+# Pk pk_sys_role_menu ( role_id, menu_id )
+menu_id
+* int
+菜单ID
+#
+
+
+
+
+
+
+
+sys_user Table ry.sys_user
+ Pk pk_sys_user ( user_id )
+user_id user_id
+* int
+用户ID
+# dept_id dept_id
+int
+部门ID
+# login_name login_name
+varchar(30) default ''
+登录账号
+t user_name user_name
+varchar(30) default ''
+用户昵称
+t email email
+varchar(100) default ''
+用户邮箱
+t phonenumber phonenumber
+varchar(20) default ''
+手机号码
+t password password
+varchar(100) default ''
+密码
+t salt salt
+varchar(100) default ''
+盐加密
+t user_type user_type
+char(1) default 'N'
+类型:Y默认用户,N非默认用户
+c status status
+int default 0
+帐号状态:0正常,1禁用
+# refuse_des refuse_des
+varchar(500) default ''
+拒绝登录描述
+t create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d
+
+
+
+
+
+
+
+sys_user_online Table ry.sys_user_online
+ Pk pk_sys_user_online ( sessionId )
+sessionId sessionId
+* varchar(50) default ''
+用户会话id
+t login_name login_name
+varchar(50) default ''
+登录账号
+t dept_name dept_name
+varchar(50) default ''
+部门名称
+t ipaddr ipaddr
+varchar(50) default ''
+登录IP地址
+t browser browser
+varchar(50) default ''
+浏览器类型
+t os os
+varchar(50) default ''
+操作系统
+t status status
+varchar(10) default ''
+在线状态on_line在线off_line离线
+t start_timestamp start_timestamp
+* timestamp default CURRENT_TIMESTAMP
+session创建时间
+d last_access_time last_access_time
+* timestamp default '0000-00-00 00:00:00'
+session最后访问时间
+d expire_time expire_time
+int default 0
+超时时间,单位为分钟
+#
+
+
+
+
+
+
+
+sys_user_post Table ry.sys_user_post
+ Pk pk_sys_user_post ( user_id, post_id )
+user_id user_id
+* varchar(64)
+用户ID
+t Pk pk_sys_user_post ( user_id, post_id )
+post_id post_id
+* varchar(64)
+岗位ID
+t
+
+
+
+
+
+
+
+sys_user_role Table ry.sys_user_role
+ Pk pk_sys_user_role ( user_id, role_id )
+user_id user_id
+* int
+用户ID
+# Pk pk_sys_user_role ( user_id, role_id )
+role_id role_id
+* int
+角色ID
+#
+
+
+
+
+
+
+
+sys_dept Table ry.sys_dept
+ Pk pk_sys_dept ( dept_id )
+dept_id dept_id
+* int
+部门id
+# parent_id parent_id
+int default 0
+父部门id
+# dept_name dept_name
+varchar(30) default ''
+部门名称
+t order_num order_num
+int default 0
+显示顺序
+# leader leader
+varchar(20) default ''
+负责人
+t phone phone
+varchar(20) default ''
+联系电话
+t email email
+varchar(20) default ''
+邮箱
+t status status
+int default 0
+部门状态:0正常,1停用
+# create_by create_by
+varchar(64) default ''
+创建者
+t create_time create_time
+* timestamp default CURRENT_TIMESTAMP
+创建时间
+d update_by update_by
+varchar(64) default ''
+更新者
+t update_time update_time
+* timestamp default '0000-00-00 00:00:00'
+更新时间
+d
+
+
+
+
+
+
+
+qrtz_paused_trigger_grps Table ry.qrtz_paused_trigger_grps
+ Pk pk_qrtz_paused_trigger_grps ( sched_name, trigger_group )
+sched_name sched_name
+* varchar(120)
+t Pk pk_qrtz_paused_trigger_grps ( sched_name, trigger_group )
+trigger_group trigger_group
+* varchar(200)
+t
+
+
+
+
+
+
+
+qrtz_fired_triggers Table ry.qrtz_fired_triggers
+ Pk pk_qrtz_fired_triggers ( sched_name, entry_id )
+sched_name sched_name
+* varchar(120)
+t Pk pk_qrtz_fired_triggers ( sched_name, entry_id )
+entry_id entry_id
+* varchar(95)
+t trigger_name trigger_name
+* varchar(200)
+t trigger_group trigger_group
+* varchar(200)
+t instance_name instance_name
+* varchar(200)
+t fired_time fired_time
+* bigint
+# sched_time sched_time
+* bigint
+# priority priority
+* int
+# state state
+* varchar(16)
+t job_name job_name
+varchar(200)
+t job_group job_group
+varchar(200)
+t is_nonconcurrent is_nonconcurrent
+varchar(1)
+t requests_recovery requests_recovery
+varchar(1)
+t
+
+
+
+
+Table qrtz_blob_triggers
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ sched_name
+ varchar( 120 )
+
+
+
+ *
+ trigger_name
+ varchar( 200 )
+
+
+
+ *
+ trigger_group
+ varchar( 200 )
+
+
+
+
+ blob_data
+ blob
+
+
+Indexes
+ pk_qrtz_blob_triggers
+ ON sched_name, trigger_name, trigger_group
+
+
+Foreign Keys
+
+ qrtz_blob_triggers_ibfk_1
+ ( sched_name, trigger_name, trigger_group ) ref qrtz_triggers (sched_name, trigger_name, trigger_group)
+
+
+
+
+
+
+
+
+
+Table qrtz_cron_triggers
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ sched_name
+ varchar( 120 )
+
+
+
+ *
+ trigger_name
+ varchar( 200 )
+
+
+
+ *
+ trigger_group
+ varchar( 200 )
+
+
+
+ *
+ cron_expression
+ varchar( 200 )
+
+
+
+
+ time_zone_id
+ varchar( 80 )
+
+
+Indexes
+ pk_qrtz_cron_triggers
+ ON sched_name, trigger_name, trigger_group
+
+
+Foreign Keys
+
+ qrtz_cron_triggers_ibfk_1
+ ( sched_name, trigger_name, trigger_group ) ref qrtz_triggers (sched_name, trigger_name, trigger_group)
+
+
+
+
+
+
+
+
+
+
+
+
+Table qrtz_locks
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ sched_name
+ varchar( 120 )
+
+
+
+ *
+ lock_name
+ varchar( 40 )
+
+
+Indexes
+ pk_qrtz_locks
+ ON sched_name, lock_name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Table sys_dept
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ dept_id
+ int AUTOINCREMENT
+ 部门id
+
+
+
+ parent_id
+ int DEFAULT 0
+ 父部门id
+
+
+
+ dept_name
+ varchar( 30 ) DEFAULT ''
+ 部门名称
+
+
+
+ order_num
+ int DEFAULT 0
+ 显示顺序
+
+
+
+ leader
+ varchar( 20 ) DEFAULT ''
+ 负责人
+
+
+
+ phone
+ varchar( 20 ) DEFAULT ''
+ 联系电话
+
+
+
+ email
+ varchar( 20 ) DEFAULT ''
+ 邮箱
+
+
+
+ status
+ int DEFAULT 0
+ 部门状态:0正常,1停用
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+Indexes
+ pk_sys_dept
+ ON dept_id
+
+
+
+
+
+
+Table sys_dict_data
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ dict_code
+ int AUTOINCREMENT
+ 字典编码
+
+
+
+ dict_sort
+ int DEFAULT 0
+ 字典排序
+
+
+
+ dict_label
+ varchar( 100 ) DEFAULT ''
+ 字典标签
+
+
+
+ dict_value
+ varchar( 100 ) DEFAULT ''
+ 字典键值
+
+
+
+ dict_type
+ varchar( 100 ) DEFAULT ''
+ 字典类型
+
+
+
+ status
+ int DEFAULT 0
+ 状态(0正常 1禁用)
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注
+
+Indexes
+ pk_sys_dict_data
+ ON dict_code
+
+
+
+
+
+
+Table sys_dict_type
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ dict_id
+ int AUTOINCREMENT
+ 字典主键
+
+
+
+ dict_name
+ varchar( 100 ) DEFAULT ''
+ 字典名称
+
+
+
+ dict_type
+ varchar( 100 ) DEFAULT ''
+ 字典类型
+
+
+
+ status
+ int DEFAULT 0
+ 状态(0正常 1禁用)
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注
+
+Indexes
+ pk_sys_dict_type
+ ON dict_id
+
+
+ dict_type
+ ON dict_type
+
+
+
+
+
+
+Table sys_job
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ job_id
+ int AUTOINCREMENT
+ 任务ID
+
+
+ *
+ job_name
+ varchar( 64 ) DEFAULT ''
+ 任务名称
+
+
+ *
+ job_group
+ varchar( 64 ) DEFAULT ''
+ 任务组名
+
+
+
+ method_name
+ varchar( 500 ) DEFAULT ''
+ 任务方法
+
+
+
+ params
+ varchar( 200 ) DEFAULT ''
+ 方法参数
+
+
+
+ cron_expression
+ varchar( 255 ) DEFAULT ''
+ cron执行表达式
+
+
+
+ status
+ int DEFAULT 0
+ 状态(0正常 1暂停)
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注信息
+
+Indexes
+ pk_sys_job
+ ON job_id, job_name, job_group
+
+
+
+
+
+
+
+
+
+Table sys_logininfor
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ info_id
+ int AUTOINCREMENT
+ 访问ID
+
+
+
+ login_name
+ varchar( 50 ) DEFAULT ''
+ 登录账号
+
+
+
+ ipaddr
+ varchar( 50 ) DEFAULT ''
+ 登录IP地址
+
+
+
+ browser
+ varchar( 50 ) DEFAULT ''
+ 浏览器类型
+
+
+
+ os
+ varchar( 50 ) DEFAULT ''
+ 操作系统
+
+
+
+ status
+ int DEFAULT 0
+ 登录状态 0成功 1失败
+
+
+
+ msg
+ varchar( 255 ) DEFAULT ''
+ 提示消息
+
+
+ *
+ login_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 访问时间
+
+Indexes
+ pk_sys_logininfor
+ ON info_id
+
+
+
+
+
+
+Table sys_menu
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ menu_id
+ int AUTOINCREMENT
+ 菜单ID
+
+
+ *
+ menu_name
+ varchar( 50 )
+ 菜单名称
+
+
+
+ parent_id
+ int DEFAULT 0
+ 父菜单ID
+
+
+
+ order_num
+ int
+ 显示顺序
+
+
+
+ url
+ varchar( 200 ) DEFAULT ''
+ 请求地址
+
+
+
+ menu_type
+ char( 1 ) DEFAULT ''
+ 类型:M目录,C菜单,F按钮
+
+
+
+ visible
+ int DEFAULT 0
+ 菜单状态:0显示,1隐藏
+
+
+
+ perms
+ varchar( 100 ) DEFAULT ''
+ 权限标识
+
+
+
+ icon
+ varchar( 100 ) DEFAULT ''
+ 菜单图标
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注
+
+Indexes
+ pk_sys_menu
+ ON menu_id
+
+
+
+
+
+
+Table sys_oper_log
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ oper_id
+ int AUTOINCREMENT
+ 日志主键
+
+
+
+ title
+ varchar( 50 ) DEFAULT ''
+ 模块标题
+
+
+
+ action
+ varchar( 100 ) DEFAULT ''
+ 功能请求
+
+
+
+ method
+ varchar( 100 ) DEFAULT ''
+ 方法名称
+
+
+
+ channel
+ varchar( 20 ) DEFAULT ''
+ 来源渠道
+
+
+
+ login_name
+ varchar( 50 ) DEFAULT ''
+ 登录账号
+
+
+
+ dept_name
+ varchar( 50 ) DEFAULT ''
+ 部门名称
+
+
+
+ oper_url
+ varchar( 255 ) DEFAULT ''
+ 请求URL
+
+
+
+ oper_ip
+ varchar( 30 ) DEFAULT ''
+ 主机地址
+
+
+
+ oper_param
+ varchar( 255 ) DEFAULT ''
+ 请求参数
+
+
+
+ status
+ int DEFAULT 0
+ 操作状态 0正常 1异常
+
+
+
+ error_msg
+ varchar( 2000 ) DEFAULT ''
+ 错误消息
+
+
+ *
+ oper_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 操作时间
+
+Indexes
+ pk_sys_oper_log
+ ON oper_id
+
+
+
+
+
+
+Table sys_post
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ post_id
+ int AUTOINCREMENT
+ 岗位ID
+
+
+ *
+ post_code
+ varchar( 64 )
+ 岗位编码
+
+
+ *
+ post_name
+ varchar( 100 )
+ 岗位名称
+
+
+ *
+ post_sort
+ int
+ 显示顺序
+
+
+ *
+ status
+ int
+ 状态(0正常 1停用)
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注
+
+Indexes
+ pk_sys_post
+ ON post_id
+
+
+
+
+
+
+Table sys_role
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ role_id
+ int AUTOINCREMENT
+ 角色ID
+
+
+ *
+ role_name
+ varchar( 30 )
+ 角色名称
+
+
+ *
+ role_key
+ varchar( 100 )
+ 角色权限字符串
+
+
+ *
+ role_sort
+ int
+ 显示顺序
+
+
+
+ status
+ int DEFAULT 0
+ 角色状态:0正常,1禁用
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+
+
+ remark
+ varchar( 500 ) DEFAULT ''
+ 备注
+
+Indexes
+ pk_sys_role
+ ON role_id
+
+
+
+
+
+
+Table sys_role_menu
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ role_id
+ int
+ 角色ID
+
+
+ *
+ menu_id
+ int
+ 菜单ID
+
+Indexes
+ pk_sys_role_menu
+ ON role_id, menu_id
+
+
+
+
+
+
+Table sys_user
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ user_id
+ int AUTOINCREMENT
+ 用户ID
+
+
+
+ dept_id
+ int
+ 部门ID
+
+
+
+ login_name
+ varchar( 30 ) DEFAULT ''
+ 登录账号
+
+
+
+ user_name
+ varchar( 30 ) DEFAULT ''
+ 用户昵称
+
+
+
+ email
+ varchar( 100 ) DEFAULT ''
+ 用户邮箱
+
+
+
+ phonenumber
+ varchar( 20 ) DEFAULT ''
+ 手机号码
+
+
+
+ password
+ varchar( 100 ) DEFAULT ''
+ 密码
+
+
+
+ salt
+ varchar( 100 ) DEFAULT ''
+ 盐加密
+
+
+
+ user_type
+ char( 1 ) DEFAULT 'N'
+ 类型:Y默认用户,N非默认用户
+
+
+
+ status
+ int DEFAULT 0
+ 帐号状态:0正常,1禁用
+
+
+
+ refuse_des
+ varchar( 500 ) DEFAULT ''
+ 拒绝登录描述
+
+
+
+ create_by
+ varchar( 64 ) DEFAULT ''
+ 创建者
+
+
+ *
+ create_time
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ 创建时间
+
+
+
+ update_by
+ varchar( 64 ) DEFAULT ''
+ 更新者
+
+
+ *
+ update_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ 更新时间
+
+Indexes
+ pk_sys_user
+ ON user_id
+
+
+
+
+
+
+Table sys_user_online
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ sessionId
+ varchar( 50 ) DEFAULT ''
+ 用户会话id
+
+
+
+ login_name
+ varchar( 50 ) DEFAULT ''
+ 登录账号
+
+
+
+ dept_name
+ varchar( 50 ) DEFAULT ''
+ 部门名称
+
+
+
+ ipaddr
+ varchar( 50 ) DEFAULT ''
+ 登录IP地址
+
+
+
+ browser
+ varchar( 50 ) DEFAULT ''
+ 浏览器类型
+
+
+
+ os
+ varchar( 50 ) DEFAULT ''
+ 操作系统
+
+
+
+ status
+ varchar( 10 ) DEFAULT ''
+ 在线状态on_line在线off_line离线
+
+
+ *
+ start_timestsamp
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ session创建时间
+
+
+ *
+ last_access_time
+ timestamp DEFAULT '0000-00-00 00:00:00'
+ session最后访问时间
+
+
+
+ expire_time
+ int DEFAULT 0
+ 超时时间,单位为分钟
+
+Indexes
+ pk_sys_user_online
+ ON sessionId
+
+
+
+
+
+
+Table sys_user_post
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ user_id
+ varchar( 64 )
+ 用户ID
+
+
+ *
+ post_id
+ varchar( 64 )
+ 岗位ID
+
+Indexes
+ pk_sys_user_post
+ ON user_id, post_id
+
+
+
+
+
+
+Table sys_user_role
+
+
+Indexes Field Name Data Type Description
+
+
+ *
+ user_id
+ int
+ 用户ID
+
+
+ *
+ role_id
+ int
+ 角色ID
+
+Indexes
+ pk_sys_user_role
+ ON user_id, role_id
+
+
+
+
+
+Powered by DbSchema
\ No newline at end of file
diff --git a/sql/ruoyi.pdm b/sql/ruoyi.pdm
new file mode 100644
index 0000000..78d8504
--- /dev/null
+++ b/sql/ruoyi.pdm
@@ -0,0 +1,4851 @@
+
+
+
+
+
+
+
+
+
+21C20947-ED50-4632-B638-DC1A02BD948A
+ruoyi
+ruoyi
+1524449337
+Administrator
+1538297587
+admin
+[FolderOptions]
+
+[FolderOptions\Physical Objects]
+GenerationCheckModel=Yes
+GenerationPath=
+GenerationOptions=
+GenerationTasks=
+GenerationTargets=
+GenerationSelections=
+RevPkey=Yes
+RevFkey=Yes
+RevAkey=Yes
+RevCheck=Yes
+RevIndx=Yes
+RevOpts=Yes
+RevViewAsTabl=No
+RevViewOpts=Yes
+RevSystAsTabl=Yes
+RevTablPerm=No
+RevViewPerm=No
+RevProcPerm=No
+RevDbpkPerm=No
+RevSqncPerm=No
+RevAdtPerm=No
+RevUserPriv=No
+RevUserOpts=No
+RevGrpePriv=No
+RevRolePriv=No
+RevDtbsOpts=Yes
+RevDtbsPerm=No
+RevViewIndx=Yes
+RevJidxOpts=Yes
+RevStats=No
+RevTspcPerm=No
+RevCaseSensitive=No
+GenTrgrStdMsg=Yes
+GenTrgrMsgTab=
+GenTrgrMsgNo=
+GenTrgrMsgTxt=
+TrgrPreserve=No
+TrgrIns=Yes
+TrgrUpd=Yes
+TrgrDel=Yes
+TrgrC2Ins=Yes
+TrgrC2Upd=Yes
+TrgrC3=Yes
+TrgrC4=Yes
+TrgrC5=Yes
+TrgrC6=Yes
+TrgrC7=Yes
+TrgrC8=Yes
+TrgrC9=Yes
+TrgrC10=Yes
+TrgrC11=Yes
+TrgrC1=Yes
+TrgrC12Ins=Yes
+TrgrC12Upd=Yes
+TrgrC13=Yes
+UpdateTableStatistics=Yes
+UpdateColumnStatistics=Yes
+
+[FolderOptions\Physical Objects\Database Generation]
+GenScriptName=orders.sql
+GenScriptName0=orders.sql
+GenScriptName1=studentsystem.sql
+GenScriptName2=NetCTOSS.sql
+GenScriptName3=product.sql
+GenScriptName4=voteSystem.sql
+GenScriptName5=.sql
+GenScriptName6=enterpriseManagement.sql
+GenScriptName7=crebas.sql
+GenScriptName8=
+GenScriptName9=
+GenPathName=C:\Users\Administrator\Desktop\
+GenSingleFile=Yes
+GenODBC=No
+GenCheckModel=Yes
+GenScriptPrev=Yes
+GenArchiveModel=No
+GenUseSync=No
+GenSyncChoice=0
+GenSyncArch=
+GenSyncRmg=0
+
+[FolderOptions\Physical Objects\Database Generation\Format]
+GenScriptTitle=Yes
+GenScriptNamLabl=No
+GenScriptQDtbs=No
+GenScriptQOwnr=Yes
+GenScriptCase=0
+GenScriptEncoding=ANSI
+GenScriptNAcct=No
+IdentifierDelimiter="
+
+[FolderOptions\Physical Objects\Database Generation\Database]
+Create=Yes
+Open=Yes
+Close=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Database\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Storage]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\User]
+Create=Yes
+Grant=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\User\Create]
+Physical Options=No
+
+[FolderOptions\Physical Objects\Database Generation\Group]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\Role]
+Create=Yes
+Drop=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create]
+Default value=Yes
+Check=Yes
+
+[FolderOptions\Physical Objects\Database Generation\AbstractDataType]
+Create=Yes
+Header=Yes
+Footer=Yes
+Drop=Yes
+Comment=Yes
+Install JAVA class=Yes
+Remove JAVA class=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Rule]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Default]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Sequence]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column]
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create]
+Check=Yes
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column]
+User datatype=No
+Default value=Yes
+Check=Yes
+Physical Options=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key]
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create]
+Constraint declaration=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create]
+Constraint declaration=Yes
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter]
+Primary key=No
+Foreign key=No
+Alternate key=No
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\View\Create]
+Force Column list=No
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewColumn]
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create]
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter]
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DBMSTrigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym\Filter]
+Table=Yes
+View=Yes
+Proc=Yes
+Synonym=Yes
+Database Package=Yes
+Sequence=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Procedure]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Procedure\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DatabasePackage]
+Create=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\WebService]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Dimension]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synchronization]
+GenBackupTabl=1
+GenKeepBackTabl=1
+GenTmpTablDrop=No
+GenKeepTablOpts=No
+
+[FolderOptions\Physical Objects\Test Data]
+GenDataPathName=
+GenDataSinglefile=Yes
+GenDataScriptName=testdata
+GenDataScriptName0=
+GenDataScriptName1=
+GenDataScriptName2=
+GenDataScriptName3=
+GenDataScriptName4=
+GenDataScriptName5=
+GenDataScriptName6=
+GenDataScriptName7=
+GenDataScriptName8=
+GenDataScriptName9=
+GenDataOdbc=0
+GenDataDelOld=No
+GenDataTitle=No
+GenDataDefNumRows=20
+GenDataCommit=0
+GenDataPacket=0
+GenDataOwner=No
+GenDataProfNumb=
+GenDataProfChar=
+GenDataProfDate=
+GenDataCSVSeparator=,
+GenDataFileFormat=CSV
+GenDataUseWizard=No
+
+[FolderOptions\Pdm]
+IndxIQName=%COLUMN%_%INDEXTYPE%
+IndxPK=Yes
+IndxFK=Yes
+IndxAK=Yes
+IndxPKName=%TABLE%_PK
+IndxFKName=%REFR%_FK
+IndxAKName=%AKEY%_AK
+IndxPreserve=No
+IndxThreshold=0
+IndxStats=No
+RefrPreserve=No
+JidxPreserve=No
+RbldMultiFact=Yes
+RbldMultiDim=Yes
+RbldMultiJidx=Yes
+CubePreserve=No
+TablStProcPreserve=No
+ProcDepPreserve=Yes
+TrgrDepPreserve=Yes
+CubeScriptPath=
+CubeScriptCase=0
+CubeScriptEncoding=ANSI
+CubeScriptNacct=No
+CubeScriptHeader=No
+CubeScriptExt=csv
+CubeScriptExt0=txt
+CubeScriptExt1=
+CubeScriptExt2=
+CubeScriptSep=,
+CubeScriptDeli="
+DfltDomnName=D_%.U:VALUE%
+DfltColnName=D_%.U:VALUE%
+DfltReuse=Yes
+DfltDrop=Yes
+[ModelOptions]
+
+[ModelOptions\Physical Objects]
+CaseSensitive=No
+DisplayName=Yes
+EnableTrans=No
+EnableRequirements=No
+DefaultDttp=
+IgnoreOwner=No
+RebuildTrigger=Yes
+RefrUnique=No
+RefrAutoMigrate=Yes
+RefrMigrateReuse=Yes
+RefrMigrateDomain=Yes
+RefrMigrateCheck=Yes
+RefrMigrateRule=Yes
+RefrMigrateExtd=No
+RefrMigrDefaultLink=No
+RefrDfltImpl=D
+RefrPrgtColn=No
+RefrMigrateToEnd=No
+RebuildTriggerDep=No
+ColnFKName=%.3:PARENT%_%COLUMN%
+ColnFKNameUse=No
+DomnCopyDttp=Yes
+DomnCopyChck=No
+DomnCopyRule=No
+DomnCopyMand=No
+DomnCopyExtd=No
+DomnCopyProf=No
+Notation=0
+DomnDefaultMandatory=No
+ColnDefaultMandatory=No
+TablDefaultOwner=
+ViewDefaultOwner=
+TrgrDefaultOwnerTabl=
+TrgrDefaultOwnerView=
+IdxDefaultOwnerTabl=
+IdxDefaultOwnerView=
+JdxDefaultOwner=
+DBPackDefaultOwner=
+SeqDefaultOwner=
+ProcDefaultOwner=
+DBMSTrgrDefaultOwner=
+Currency=USD
+RefrDeleteConstraint=1
+RefrUpdateConstraint=1
+RefrParentMandatory=No
+RefrParentChangeAllow=Yes
+RefrCheckOnCommit=No
+
+[ModelOptions\Physical Objects\NamingOptionsTemplates]
+
+[ModelOptions\Physical Objects\ClssNamingOptions]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()"
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()"
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Connection]
+
+[ModelOptions\Pdm]
+
+[ModelOptions\Generate]
+
+[ModelOptions\Generate\Pdm]
+RRMapping=No
+
+[ModelOptions\Generate\Cdm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+Notation=2
+
+[ModelOptions\Generate\Oom]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=Yes
+ClassPrefix=
+
+[ModelOptions\Generate\Xsm]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=No
+
+[ModelOptions\Generate\Ldm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+
+[ModelOptions\Default Opts]
+
+[ModelOptions\Default Opts\TABL]
+PhysOpts=
+
+[ModelOptions\Default Opts\COLN]
+PhysOpts=
+
+[ModelOptions\Default Opts\INDX]
+PhysOpts=
+
+[ModelOptions\Default Opts\AKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\PKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\STOR]
+PhysOpts=
+
+[ModelOptions\Default Opts\TSPC]
+PhysOpts=
+
+[ModelOptions\Default Opts\SQNC]
+PhysOpts=
+
+[ModelOptions\Default Opts\DTBS]
+PhysOpts=
+
+[ModelOptions\Default Opts\USER]
+PhysOpts=
+
+[ModelOptions\Default Opts\JIDX]
+PhysOpts=
+
+
+AFAD9ECF-F417-4FCE-BEA4-884857D4C1A9
+MySQL 5.0
+MYSQL50
+1524449337
+Administrator
+1524449337
+Administrator
+
+F4F16ECD-F2F1-4006-AF6F-638D5C65F35E
+4BA9F647-DAB1-11D1-9944-006097355D9B
+
+
+
+
+B6C2C4A4-6A8A-41F3-909D-C7B514E1EAE2
+PhysicalDiagram_1
+PhysicalDiagram_1
+1524449325
+Administrator
+1538297386
+admin
+[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Mode=0
+Trunc Length=80
+Word Length=80
+Word Text=!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form>
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+PckgShowStrn=Yes
+Package.Comment=No
+Package.IconPicture=No
+Package_SymbolLayout=
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter=""PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No "Domain or Data type"\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters=""All Columns" PDMCOLNALL ""\r\n"PK Columns" PDMCOLNPK "PRIM \"TRUE\" TRUE"\r\n"Key Columns" PDMCOLNKEY "KEYS \"TRUE\" TRUE"" HasLimit="Yes" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No "Domain or Data type"\r\nIndexIndicator No" HasLimit="Yes" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form>
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=Yes
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form>
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="<<" Suffix=">>" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form>
+File Location=No
+PckgStrn=Yes
+ColnMode=0
+ColnMax=5
+TablOwnr=No
+ColnDttp=Yes
+ColnDomn=No
+ColnShowDomn=No
+ColnKey=Yes
+ColnIndx=No
+ColnMand=No
+ColnStrn=Yes
+VColName=Yes
+VColExpr=No
+VColDttp=No
+VColIndx=No
+VColCMod=0
+VColCMax=5
+ProcOwnr=No
+KeyStrn=Yes
+IndxStrn=Yes
+TrgrStrn=Yes
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=新宋体,8,N
+OBJSTRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LCNMFont=新宋体,8,N
+LCNMFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=Yes
+Keep center=Yes
+Keep size=No
+Width=2400
+Height=2400
+Brush color=255 255 255
+Fill Color=No
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+KeysFont=新宋体,8,N
+KeysFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+TriggersFont=新宋体,8,N
+TriggersFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=178 214 252
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+TemporaryVTablesFont=新宋体,8,N
+TemporaryVTablesFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=208 208 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+OBJXSTRFont=新宋体,8,N
+OBJXSTRFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=新宋体,8,N
+Free TextFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0
+(8268, 11693)
+((315,354), (433,354))
+1
+15
+
+
+1524449375
+1538296407
+-1
+((-38123,15297), (-26435,28269))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1524449886
+-1
+((-23935,12010), (-11861,28282))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296409
+-1
+((-9361,18172), (2713,27845))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1524449886
+-1
+((5214,16547), (17288,27869))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296412
+-1
+((19788,14872), (31862,27845))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296204
+-1
+((-37598,8498), (-29000,12497))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296205
+-1
+((-37674,3548), (-29076,7547))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296308
+-1
+((-37528,-6452), (-28929,-2453))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296401
+-1
+((-24280,-1775), (-11048,10373))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296599
+-1
+((-9182,625), (2892,10298))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538296612
+-1
+((5017,-2538), (17091,10434))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538297772
+-1
+((-39520,-17440), (-26288,-8592))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538297770
+-1
+((-24744,-19106), (-10738,-8608))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538297380
+-1
+((-9749,-20696), (3870,-8548))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1524449375
+1538297383
+-1
+((5261,-17623), (18494,-8774))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1538296083
+1538296211
+-1
+((-37675,-1349), (-29076,2650))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+1538296587
+1538296608
+-1
+((19570,-987), (32030,8687))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+config_id
+1538296632
+1538297253
+((-13950,-17175), (73200,19575))
+4130
+1
+0
+7
+16777215
+16777215
+新宋体,8,N
+
+
+1538297386
+1538297498
+-1
+((19859,-18262), (33092,-8589))
+12615680
+16570034
+12632256
+STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N
+6
+65
+16777215
+
+
+
+
+
+
+
+
+
+
+
+
+BB11FFF9-9DBB-4648-87AA-9A50E1214549
+sys_dept
+sys_dept
+1524449375
+Administrator
+1538297518
+admin
+部门表
+
+
+
+00C66282-419A-4915-8509-DFFFE6352DE8
+dept_id
+dept_id
+1524449375
+Administrator
+1524449375
+Administrator
+部门id
+int(11)
+11
+1
+1
+
+
+5B6FB0B1-5B1E-4E86-AF2A-72C49EBB315E
+parent_id
+parent_id
+1524449375
+Administrator
+1524449375
+Administrator
+父部门id
+0
+int(11)
+11
+
+
+065E33A5-6AB5-44F1-8FEC-A72311EECD66
+ancestors
+ancestors
+1538295690
+admin
+1538295792
+admin
+varchar(50)
+50
+
+
+EBB59EC8-AFD4-40E3-B811-DD5040728D91
+dept_name
+dept_name
+1524449375
+Administrator
+1524449375
+Administrator
+部门名称
+''
+varchar(30)
+30
+
+
+2F26C025-82B0-4AC5-AEE0-32BA07B7B529
+order_num
+order_num
+1524449375
+Administrator
+1524449375
+Administrator
+显示顺序
+0
+int(4)
+4
+
+
+CA504E09-528C-482E-A0C7-F86C559AA3A6
+leader
+leader
+1524449375
+Administrator
+1524449375
+Administrator
+负责人
+''
+varchar(20)
+20
+
+
+9CFC55C4-DF2B-4A90-A789-C3839FAA43A8
+phone
+phone
+1524449375
+Administrator
+1524449375
+Administrator
+联系电话
+''
+varchar(20)
+20
+
+
+1A9407E5-D74E-4CE9-9078-C4EC25393F7B
+email
+email
+1524449375
+Administrator
+1524449375
+Administrator
+邮箱
+''
+varchar(20)
+20
+
+
+B6772812-4B69-4248-871D-FA1B4BA0E5F7
+status
+status
+1524449375
+Administrator
+1538295792
+admin
+部门状态:0正常,1停用
+0
+char(1)
+1
+
+
+6EBD2BFF-861E-4247-BAAB-B37CCBAF6F8D
+del_flag
+del_flag
+1538295690
+admin
+1538295792
+admin
+char(1)
+1
+
+
+2504A090-F6D6-493F-855E-5154E01AF0CA
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+D866AE9E-E7FF-47B2-BF3D-9BC1605A2F39
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+7C6C9836-FC23-4492-8CF1-A4439E01B57C
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+FCED770D-005C-4531-A9D7-D1FD0A054719
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+
+
+15C1774B-9F17-48B6-A61F-728A25220B30
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+AA56FD91-4450-4282-8F31-AE302DF6AFEC
+sys_user
+sys_user
+1524449375
+Administrator
+1538297540
+admin
+用户信息表
+
+
+
+4A920BCE-4040-4F12-89D2-7DF345B90321
+user_id
+user_id
+1524449375
+Administrator
+1524449375
+Administrator
+用户ID
+int(11)
+11
+1
+1
+
+
+174E10B2-4A4D-40FF-80B8-B4D285561E42
+dept_id
+dept_id
+1524449375
+Administrator
+1538297552
+admin
+部门ID
+NULL
+int(11)
+11
+
+
+1D4908A9-5416-4252-BA09-FA122D0194C3
+login_name
+login_name
+1524449375
+Administrator
+1524449375
+Administrator
+登录账号
+''
+varchar(30)
+30
+
+
+2EF63346-9E82-4746-81B7-AB67D727446D
+user_name
+user_name
+1524449375
+Administrator
+1524449375
+Administrator
+用户昵称
+''
+varchar(30)
+30
+
+
+477EA57C-0E0B-4596-9A85-EC91E72F5160
+user_type
+user_type
+1524449375
+Administrator
+1524449375
+Administrator
+类型:Y默认用户,N非默认用户
+N
+char(1)
+1
+
+
+CD16FFF4-F214-473B-A9A8-FA30A3E357D1
+email
+email
+1524449375
+Administrator
+1524449375
+Administrator
+用户邮箱
+''
+varchar(100)
+100
+
+
+61603FA5-3EBC-4389-AED7-1B54D238A563
+phonenumber
+phonenumber
+1524449375
+Administrator
+1524449375
+Administrator
+手机号码
+''
+varchar(20)
+20
+
+
+65E9DE55-ED58-4BD9-B96C-7C081D1119B2
+sex
+sex
+1538295815
+admin
+1538295948
+admin
+char(1)
+1
+
+
+E5E35061-221A-4BB9-AA22-3CF20F1FCCF6
+avatar
+avatar
+1538295815
+admin
+1538295948
+admin
+varchar(100)
+100
+
+
+4ED1C2BF-B826-4A82-9464-EEBF271F4054
+password
+password
+1524449375
+Administrator
+1524449375
+Administrator
+密码
+''
+varchar(100)
+100
+
+
+53E6BB49-3435-46E0-832F-BCAFE1A021CB
+salt
+salt
+1524449375
+Administrator
+1524449375
+Administrator
+盐加密
+''
+varchar(100)
+100
+
+
+245CAD53-B33B-4EED-8CFA-7AA10ED943B8
+status
+status
+1524449375
+Administrator
+1538297540
+admin
+帐号状态:0正常,1禁用
+0
+char(1)
+1
+
+
+7F851464-6CC5-445B-9413-2A89B9CE90CB
+del_flag
+del_flag
+1524449375
+Administrator
+1538295948
+admin
+拒绝登录描述
+''
+char(1)
+1
+
+
+3DC8EC79-D75A-4BF8-8FBC-152E938AC14F
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+48C8C936-7A34-4A97-AACA-A6F07751FFAD
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+6050B4F3-9B26-4B40-AB4C-BA483F179958
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+CD1E7E11-8EB6-4C9C-A69C-39CBCF10573E
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+F9F55D4C-13E6-49A0-BFDB-E0AFE0FA5501
+remark
+remark
+1538295815
+admin
+1538295948
+admin
+varchar(500)
+500
+
+
+
+
+2E35FD67-A7A7-4B10-85E4-85115AD0E143
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+2711A520-532C-4F14-A034-BFF047C9CD6B
+sys_post
+sys_post
+1524449375
+Administrator
+1538297571
+admin
+岗位信息表
+
+
+
+FB04D29E-41F0-49A3-BFDB-58E222843F21
+post_id
+post_id
+1524449375
+Administrator
+1524449375
+Administrator
+岗位ID
+int(11)
+11
+1
+1
+
+
+50010C4E-4F59-47B9-8F08-05E8E071E8B1
+post_code
+post_code
+1524449375
+Administrator
+1524449375
+Administrator
+岗位编码
+varchar(64)
+64
+1
+
+
+0F929250-051E-4344-B22A-C30E071A543B
+post_name
+post_name
+1524449375
+Administrator
+1524449375
+Administrator
+岗位名称
+varchar(100)
+100
+1
+
+
+2BC9005E-350F-46BE-98D6-9B13060F1B20
+post_sort
+post_sort
+1524449375
+Administrator
+1524449375
+Administrator
+显示顺序
+int(4)
+4
+1
+
+
+F6D7AD3E-5EA0-4759-B6BF-6334B7105B78
+status
+status
+1524449375
+Administrator
+1538297565
+admin
+状态(0正常 1停用)
+char(1)
+1
+1
+
+
+CED01369-5063-479D-A444-32936369A486
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+A29528FF-A2B9-4149-B997-1B0204D42E40
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+6026A05D-0C1E-497E-8EAF-FDB704BE6A52
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+DF516F5F-CD82-4347-AC57-BDCB4E5DD75E
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+539CEC34-49F0-49A0-9B7C-B84655FD2233
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注
+''
+varchar(500)
+500
+
+
+
+
+14E893B1-D0BA-46A7-A905-F0FFA089B65A
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+11337551-BA45-43CD-9148-92BE60E2F8F5
+sys_role
+sys_role
+1524449375
+Administrator
+1538297608
+admin
+角色信息表
+
+
+
+A420E2C9-8FE3-452A-9047-C7BEACE8490C
+role_id
+role_id
+1524449375
+Administrator
+1524449375
+Administrator
+角色ID
+int(10)
+10
+1
+1
+
+
+9342763D-5B89-4440-965B-2B55DB4ACD86
+role_name
+role_name
+1524449375
+Administrator
+1524449375
+Administrator
+角色名称
+varchar(30)
+30
+1
+
+
+54480009-0C7E-40F2-AA76-CD914A6D66C5
+role_key
+role_key
+1524449375
+Administrator
+1524449375
+Administrator
+角色权限字符串
+varchar(100)
+100
+1
+
+
+E73F4D0E-12A0-42B5-B3CE-B573D499DD6C
+role_sort
+role_sort
+1524449375
+Administrator
+1538296031
+admin
+显示顺序
+int(10)
+10
+
+
+5F836F54-9EBD-4768-AA3C-F268F5FAFE8D
+data_scope
+data_scope
+1538295973
+admin
+1538296031
+admin
+char(1)
+1
+
+
+424ED799-E4C1-44AD-A172-C2B3C405E9C5
+status
+status
+1524449375
+Administrator
+1538297608
+admin
+角色状态:0正常,1禁用
+0
+char(1)
+1
+
+
+8E034C76-5966-4246-B81B-7B12F37D96A7
+del_flag
+del_flag
+1538295973
+admin
+1538296031
+admin
+char(1)
+1
+
+
+214F6E1F-28B1-454B-ABF0-D1C43220129D
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+1A6D5791-0353-4ABC-8BC2-921BB87A2E5A
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+D6394880-A49C-4B83-B43A-5FDBAA918AA3
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+34285DF5-8E36-452B-A3AA-9F4290C20F7E
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+2FAB98F7-68A2-460B-8A20-5D5DA73F5103
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注
+''
+varchar(500)
+500
+
+
+
+
+4342E67F-D33C-435F-9865-973E053B6075
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+FBC2A590-443B-43C9-82D5-687B850C8B3D
+sys_menu
+sys_menu
+1524449375
+Administrator
+1538297627
+admin
+菜单权限表
+
+
+
+BB061292-3B99-432E-9B96-5362AAD918B9
+menu_id
+menu_id
+1524449375
+Administrator
+1524449375
+Administrator
+菜单ID
+int(11)
+11
+1
+1
+
+
+EA8422AB-37B1-4D60-A3C9-A4BF9039A9D4
+menu_name
+menu_name
+1524449375
+Administrator
+1524449375
+Administrator
+菜单名称
+varchar(50)
+50
+1
+
+
+E56E04A8-63F6-4271-92E3-974DC84DD536
+parent_id
+parent_id
+1524449375
+Administrator
+1524449375
+Administrator
+父菜单ID
+0
+int(11)
+11
+
+
+1809914E-6B09-4CD2-8916-E603D6717557
+order_num
+order_num
+1524449375
+Administrator
+1524449375
+Administrator
+显示顺序
+NULL
+int(4)
+4
+
+
+FCB44D46-3C21-40CB-B942-57823E52E5B1
+url
+url
+1524449375
+Administrator
+1524449375
+Administrator
+请求地址
+''
+varchar(200)
+200
+
+
+667EE044-6805-4668-BAF4-E78B3052051F
+menu_type
+menu_type
+1524449375
+Administrator
+1524449375
+Administrator
+类型:M目录,C菜单,F按钮
+''
+char(1)
+1
+
+
+F7658083-BCAB-46F7-AF31-8A4B1D8749EF
+visible
+visible
+1524449375
+Administrator
+1538297627
+admin
+菜单状态:0显示,1隐藏
+0
+char(1)
+1
+
+
+528611C8-C319-430F-8F00-68FBA60F310B
+perms
+perms
+1524449375
+Administrator
+1524449375
+Administrator
+权限标识
+''
+varchar(100)
+100
+
+
+38004CD7-8DD0-43F1-9E59-B50132CB6F1A
+icon
+icon
+1524449375
+Administrator
+1524449375
+Administrator
+菜单图标
+''
+varchar(100)
+100
+
+
+6927665F-EC42-4E1F-A275-4B27F442B6B8
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+1A6A4D0F-0B0B-4522-B4DA-3F1D592CB889
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+605D7776-4820-4BA9-91E8-AD837B73AEFB
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+4CFF26BB-8736-4864-855E-C7C1B133370B
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+67C6E46C-DF06-480A-BC74-E927406E5D26
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注
+''
+varchar(500)
+500
+
+
+
+
+08EBE713-9E4D-4312-AA7D-2E4E439734E5
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+F8CB66D1-3632-4509-97C4-17016BE261FC
+sys_user_role
+sys_user_role
+1524449375
+Administrator
+1538297676
+admin
+用户和角色关联表
+
+
+
+73701F72-C45B-4CA0-8A62-632890E3DEF0
+user_id
+user_id
+1524449375
+Administrator
+1524449375
+Administrator
+用户ID
+int(11)
+11
+1
+
+
+CABD458B-DA59-46A8-99C3-088AD8D34097
+role_id
+role_id
+1524449375
+Administrator
+1524449375
+Administrator
+角色ID
+int(11)
+11
+1
+
+
+
+
+37C3213B-EF22-4CD4-A91F-9A9A2503FB2A
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+
+9F8C6A9F-3221-410E-AEA4-D1A80026397E
+sys_role_menu
+sys_role_menu
+1524449375
+Administrator
+1538297683
+admin
+角色和菜单关联表
+
+
+
+D2E151A5-6156-46EF-844E-0ADC3070293B
+role_id
+role_id
+1524449375
+Administrator
+1524449375
+Administrator
+角色ID
+int(11)
+11
+1
+
+
+6B8C1E62-FD8B-4504-8FA0-F69917722FBD
+menu_id
+menu_id
+1524449375
+Administrator
+1524449375
+Administrator
+菜单ID
+int(11)
+11
+1
+
+
+
+
+2E72304F-91F0-4392-BAE8-BBF7A4346B7D
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+
+726CB18E-7D5B-4E2E-9CF8-047AD5AF89E3
+sys_user_post
+sys_user_post
+1524449375
+Administrator
+1538297694
+admin
+用户与岗位关联表
+
+
+
+E4A1CAB6-0F63-4917-ACEF-418DE7F894BA
+user_id
+user_id
+1524449375
+Administrator
+1538296306
+admin
+用户ID
+int(11)
+11
+1
+
+
+8E7188D5-B3A5-4F1D-B6CB-D77D652414DE
+post_id
+post_id
+1524449375
+Administrator
+1538296306
+admin
+岗位ID
+int(11)
+11
+1
+
+
+
+
+4091B7D3-2404-4C20-BBCD-B63E22A5E960
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+
+FE347A45-D8EC-423B-9B38-4D315A3ABE42
+sys_oper_log
+sys_oper_log
+1524449375
+Administrator
+1538297699
+admin
+操作日志记录
+
+
+
+F5FC8AC1-7415-4A57-BA2C-EE2E7B9E1EFC
+oper_id
+oper_id
+1524449375
+Administrator
+1524449375
+Administrator
+日志主键
+int(11)
+11
+1
+1
+
+
+2103BC5C-E28D-4369-8369-E898B218587A
+title
+title
+1524449375
+Administrator
+1524449375
+Administrator
+模块标题
+''
+varchar(50)
+50
+
+
+6816377B-3DB6-424A-99ED-1D20FEB30ED4
+business_type
+business_type
+1524449375
+Administrator
+1538296397
+admin
+功能请求
+''
+int(2)
+2
+
+
+9CA3B7C3-F52C-4E2E-893F-8E6EBA7B2667
+method
+method
+1524449375
+Administrator
+1524449375
+Administrator
+方法名称
+''
+varchar(100)
+100
+
+
+A5744803-C050-4108-9D15-7A0B95F03642
+operator_type
+operator_type
+1524449375
+Administrator
+1538296397
+admin
+来源渠道
+''
+int(1)
+1
+
+
+B0DF8235-6BC1-452C-8B30-A56F0430E4F5
+oper_name
+oper_name
+1524449375
+Administrator
+1538296397
+admin
+登录账号
+''
+varchar(50)
+50
+
+
+25315A12-4EB9-4B67-9E2C-9F40F8EF7FAB
+dept_name
+dept_name
+1524449375
+Administrator
+1524449375
+Administrator
+部门名称
+''
+varchar(50)
+50
+
+
+7AF8602B-A1DA-4EA3-BFB2-7638F96A86C0
+oper_url
+oper_url
+1524449375
+Administrator
+1524449375
+Administrator
+请求URL
+''
+varchar(255)
+255
+
+
+F2A56B63-7A56-43FA-8099-411F3578B30D
+oper_ip
+oper_ip
+1524449375
+Administrator
+1524449375
+Administrator
+主机地址
+''
+varchar(30)
+30
+
+
+1EF1BAF6-F5C1-496C-98E0-8B10C37279A1
+oper_param
+oper_param
+1524449375
+Administrator
+1524449375
+Administrator
+请求参数
+''
+varchar(255)
+255
+
+
+AA3F3A4E-D375-4232-B152-01DCFB8F6B6D
+status
+status
+1524449375
+Administrator
+1524449375
+Administrator
+操作状态 0正常 1异常
+0
+int(1)
+1
+
+
+29E44D4A-6AC7-4220-A502-4BFC8746397A
+error_msg
+error_msg
+1524449375
+Administrator
+1524449375
+Administrator
+错误消息
+''
+varchar(2000)
+2000
+
+
+22343C35-D913-485B-862E-2CEF579AAF22
+oper_time
+oper_time
+1524449375
+Administrator
+1524449375
+Administrator
+操作时间
+timestamp
+
+
+
+
+C0561C20-CC22-471B-A764-414C0D378FD6
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+AA2CFBA5-FA97-4AF1-92FE-645370B5848D
+sys_dict_type
+sys_dict_type
+1524449375
+Administrator
+1538297703
+admin
+字典类型表
+
+
+
+79CB7D43-B999-4D92-9477-D3AFEBD94248
+dict_id
+dict_id
+1524449375
+Administrator
+1524449375
+Administrator
+字典主键
+int(11)
+11
+1
+1
+
+
+2490B755-3E0A-4935-97F0-2EFDF9A72D05
+dict_name
+dict_name
+1524449375
+Administrator
+1524449375
+Administrator
+字典名称
+''
+varchar(100)
+100
+
+
+7421238A-82DB-4992-AA28-41726AB6A5D6
+dict_type
+dict_type
+1524449375
+Administrator
+1524449375
+Administrator
+字典类型
+''
+varchar(100)
+100
+
+
+971D2FBD-1A24-4EE4-B943-9367609C7472
+status
+status
+1524449375
+Administrator
+1538296458
+admin
+状态(0正常 1禁用)
+0
+char(1)
+1
+
+
+B8876246-5BBA-4A03-86D7-98CA4EBEE342
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+5237CED2-0853-41DE-ACF4-BE442BC9E112
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+2CACFBC0-8349-4B3A-9183-208B18C9F56F
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+ABEE7806-4F61-4B97-980C-CA081F61CA7C
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+3966B558-B911-45DE-86C6-57F3DB9267BA
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注
+''
+varchar(500)
+500
+
+
+AFC0A0ED-A469-40B2-A6C4-4616444830AA
+unique
+unique
+1524449375
+Administrator
+1524449375
+Administrator
+(dict_type)
+
+
+
+
+BAD40D8E-BC11-44F5-918E-B27CABBCB051
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+493D6B25-21D0-45B1-BBA0-764B9C09B57D
+sys_dict_data
+sys_dict_data
+1524449375
+Administrator
+1538297709
+admin
+字典数据表
+
+
+
+CFDB23A8-AE38-4051-973A-2DABAC8283F9
+dict_code
+dict_code
+1524449375
+Administrator
+1524449375
+Administrator
+字典编码
+int(11)
+11
+1
+1
+
+
+EAA405BD-12A8-472F-A42D-CDA6A82E291A
+dict_sort
+dict_sort
+1524449375
+Administrator
+1524449375
+Administrator
+字典排序
+0
+int(4)
+4
+
+
+F13017F5-2AA0-4DE9-9DC2-A9A3D73A98E6
+dict_label
+dict_label
+1524449375
+Administrator
+1524449375
+Administrator
+字典标签
+''
+varchar(100)
+100
+
+
+EEEC4136-823D-4892-9BB9-BB0B4ADD83E3
+dict_value
+dict_value
+1524449375
+Administrator
+1524449375
+Administrator
+字典键值
+''
+varchar(100)
+100
+
+
+ADF5A383-D055-40BE-BBFC-06E2B93D4E6A
+dict_type
+dict_type
+1524449375
+Administrator
+1524449375
+Administrator
+字典类型
+''
+varchar(100)
+100
+
+
+A0B2DDF2-251D-4701-9B00-6893C74CC449
+css_class
+css_class
+1538296497
+admin
+1538296556
+admin
+varchar(100)
+100
+
+
+3CBFBA8E-7609-458D-9E53-A825C3F307A2
+list_class
+list_class
+1538296497
+admin
+1538296556
+admin
+varchar(100)
+100
+
+
+BA974839-DEE0-4684-BBEF-6D7776C34354
+is_default
+is_default
+1538296497
+admin
+1538296556
+admin
+char(1)
+1
+
+
+1676CDF5-01CA-4749-BA1D-6E5399257BD0
+status
+status
+1524449375
+Administrator
+1524449375
+Administrator
+状态(0正常 1禁用)
+0
+int(1)
+1
+
+
+8798B094-1AAF-4A23-B2F1-4C19DACF1AA3
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+D1CB9293-D762-403C-85CB-4B974ACF7328
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+5A34AF87-B25E-4349-9713-69DC50F6F5F2
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+3204FBAC-1F61-4571-ADC4-BF1BE9CED85A
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+B7DE1842-809C-4401-9C80-C9A37DF9B053
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注
+''
+varchar(500)
+500
+
+
+
+
+2809F417-7FA5-48DA-B613-662C7C28061E
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+0A7C2F56-6E3B-4E70-A549-0EC60779D180
+sys_logininfor
+sys_logininfor
+1524449375
+Administrator
+1538297756
+admin
+系统访问记录
+
+
+
+5CB5D942-D52B-487D-BC86-476481B0FB8D
+info_id
+info_id
+1524449375
+Administrator
+1524449375
+Administrator
+访问ID
+int(11)
+11
+1
+1
+
+
+A1C66DBC-9DB7-428B-9275-3D014B6CE388
+login_name
+login_name
+1524449375
+Administrator
+1524449375
+Administrator
+登录账号
+''
+varchar(50)
+50
+
+
+8E0F50A6-F98D-48B0-8D9D-78F3A76ED171
+ipaddr
+ipaddr
+1524449375
+Administrator
+1524449375
+Administrator
+登录IP地址
+''
+varchar(50)
+50
+
+
+91B70723-1A7E-4277-A100-63B775A504B3
+login_location
+login_location
+1538297350
+admin
+1538297369
+admin
+varchar(255)
+255
+
+
+AA04F533-A044-428B-80F8-515B6BB1A302
+browser
+browser
+1524449375
+Administrator
+1524449375
+Administrator
+浏览器类型
+''
+varchar(50)
+50
+
+
+D37570E9-9EEE-4349-B875-494A5415C736
+os
+os
+1524449375
+Administrator
+1524449375
+Administrator
+操作系统
+''
+varchar(50)
+50
+
+
+CF10A80C-123E-42F3-A2DD-1B770E5F9D86
+status
+status
+1524449375
+Administrator
+1524449375
+Administrator
+登录状态 0成功 1失败
+0
+int(1)
+1
+
+
+9113784E-932A-4FAF-82CB-A75B8C827309
+msg
+msg
+1524449375
+Administrator
+1524449375
+Administrator
+提示消息
+''
+varchar(255)
+255
+
+
+BCA519C6-19C9-45DF-A0B5-F88E9E6D3557
+login_time
+login_time
+1524449375
+Administrator
+1524449375
+Administrator
+访问时间
+timestamp
+
+
+
+
+C14E656C-0645-49EB-8B42-AD82232E0416
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+4DCA223F-E98B-4D8B-A71C-CFB438C15488
+sys_user_online
+sys_user_online
+1524449375
+Administrator
+1538297754
+admin
+在线用户记录
+
+
+
+7FCC57CE-47DD-4948-B949-10401B2FC7B1
+sessionId
+sessionId
+1524449375
+Administrator
+1524449375
+Administrator
+用户会话id
+''
+varchar(50)
+50
+1
+
+
+FDE5B59D-8CF7-4AAE-987F-3FF2AEBE22CB
+login_name
+login_name
+1524449375
+Administrator
+1524449375
+Administrator
+登录账号
+''
+varchar(50)
+50
+
+
+AB65FF92-33A0-42C8-8B3F-454A1FAD5615
+dept_name
+dept_name
+1524449375
+Administrator
+1524449375
+Administrator
+部门名称
+''
+varchar(50)
+50
+
+
+C4DAF2D0-9CDC-476B-A011-FF5D302371EB
+ipaddr
+ipaddr
+1524449375
+Administrator
+1524449375
+Administrator
+登录IP地址
+''
+varchar(50)
+50
+
+
+C8243FB0-425B-4A74-9ADA-C93B15E713EA
+login_location
+login_location
+1538297178
+admin
+1538297216
+admin
+varchar(255)
+255
+
+
+89EC40B0-0C22-4811-90BB-BEA385ACDF20
+browser
+browser
+1524449375
+Administrator
+1524449375
+Administrator
+浏览器类型
+''
+varchar(50)
+50
+
+
+AC455631-CFE0-45BB-A0C5-788D695E4B6C
+os
+os
+1524449375
+Administrator
+1524449375
+Administrator
+操作系统
+''
+varchar(50)
+50
+
+
+5C56E3C9-4591-4762-89E1-C9BBFECB5F11
+status
+status
+1524449375
+Administrator
+1524449375
+Administrator
+在线状态on_line在线off_line离线
+''
+varchar(10)
+10
+
+
+0CAF2F1F-459F-4F78-9075-D95F924A4FF7
+start_timestamp
+start_timestamp
+1524449375
+Administrator
+1524449375
+Administrator
+session创建时间
+timestamp
+
+
+6AE6BDED-823E-4455-9A9F-338EC6F7BDB9
+last_access_time
+last_access_time
+1524449375
+Administrator
+1524449375
+Administrator
+session最后访问时间
+timestamp
+
+
+CE390924-4628-421C-979F-002C2952E99E
+expire_time
+expire_time
+1524449375
+Administrator
+1524449375
+Administrator
+超时时间,单位为分钟
+0
+int(5)
+5
+
+
+
+
+365CC94D-6124-42C7-96BD-376B84B709F7
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+AFCBF4DB-07EC-42D1-ACA7-56B5038F5AC5
+sys_job
+sys_job
+1524449375
+Administrator
+1538297732
+admin
+定时任务调度表
+
+
+
+1658CED4-3885-4094-AB70-F35408EBCD5E
+job_id
+job_id
+1524449375
+Administrator
+1524449375
+Administrator
+任务ID
+int(11)
+11
+1
+1
+
+
+731E7147-E3A4-4D93-8C7C-BB1C6D94DB9E
+job_name
+job_name
+1524449375
+Administrator
+1524449375
+Administrator
+任务名称
+''
+varchar(64)
+64
+1
+
+
+C64B3655-C240-44F0-83B4-F42FB76C8BEA
+job_group
+job_group
+1524449375
+Administrator
+1524449375
+Administrator
+任务组名
+''
+varchar(64)
+64
+1
+
+
+9F7E735D-B823-4ADA-BA3D-8FFFFEC92F5C
+method_name
+method_name
+1524449375
+Administrator
+1524449375
+Administrator
+任务方法
+''
+varchar(500)
+500
+
+
+28EEE4F4-E8E7-4052-8F10-88D6C74C595D
+method_params
+method_params
+1524449375
+Administrator
+1538297298
+admin
+方法参数
+''
+varchar(200)
+200
+
+
+C8986FAD-E2E7-4364-9E8B-B75366B9A4ED
+cron_expression
+cron_expression
+1524449375
+Administrator
+1524449375
+Administrator
+cron执行表达式
+''
+varchar(255)
+255
+
+
+FD188167-AC02-4161-BE89-D63E61412313
+misfire_policy
+misfire_policy
+1538297273
+admin
+1538297298
+admin
+varchar(20)
+20
+
+
+2D4B6C8F-EEE8-4474-9D20-8206A7E80362
+status
+status
+1524449375
+Administrator
+1524449375
+Administrator
+状态(0正常 1暂停)
+0
+int(1)
+1
+
+
+CA78AC7F-19E7-47BC-BF7B-9F31EFB02702
+create_by
+create_by
+1524449375
+Administrator
+1524449375
+Administrator
+创建者
+''
+varchar(64)
+64
+
+
+B8F807AE-9F19-4FCA-BA98-7BF71DD0CA02
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+3FBB42FA-ED0F-4D7C-99D0-5F7AF7B0F1DD
+update_by
+update_by
+1524449375
+Administrator
+1524449375
+Administrator
+更新者
+''
+varchar(64)
+64
+
+
+1C5863D2-A8B9-43DB-AA06-F8BE3E01093B
+update_time
+update_time
+1524449375
+Administrator
+1524449375
+Administrator
+更新时间
+timestamp
+
+
+889C3FF9-BB1E-4EB1-AFE9-1D1155984915
+remark
+remark
+1524449375
+Administrator
+1524449375
+Administrator
+备注信息
+''
+varchar(500)
+500
+
+
+
+
+38106F1A-4FFB-4EC0-B979-55BD6C6C6FF7
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+
+
+CF7C8958-5494-48C6-BE05-83F2CF8C7513
+sys_job_log
+sys_job_log
+1524449375
+Administrator
+1538297742
+admin
+定时任务调度日志表
+
+
+
+308F32A1-A8EC-4002-9993-DF9234A303B7
+job_log_id
+job_log_id
+1524449375
+Administrator
+1524449375
+Administrator
+任务日志ID
+int(11)
+11
+1
+1
+
+
+F4D55B65-BB6B-4182-A6D6-F9CAABC19110
+job_name
+job_name
+1524449375
+Administrator
+1524449375
+Administrator
+任务名称
+varchar(64)
+64
+1
+
+
+8AF383A0-01C0-4947-8384-FF0F13AC00AE
+job_group
+job_group
+1524449375
+Administrator
+1524449375
+Administrator
+任务组名
+varchar(64)
+64
+1
+
+
+96582B76-F1E9-4473-BA51-01B87B5F459E
+method_name
+method_name
+1524449375
+Administrator
+1524449375
+Administrator
+任务方法
+varchar(500)
+500
+
+
+2AB02ABA-02E3-4F72-95BA-4261A7F5729A
+method_params
+method_params
+1524449375
+Administrator
+1538297325
+admin
+方法参数
+''
+varchar(200)
+200
+
+
+8EB39444-CBFF-43AA-AA37-49217EF545B6
+job_message
+job_message
+1524449375
+Administrator
+1524449375
+Administrator
+日志信息
+varchar(500)
+500
+
+
+18CD263C-0F57-4EDF-999E-1B5A7EE2BFF9
+is_exception
+is_exception
+1524449375
+Administrator
+1538297325
+admin
+是否异常
+0
+char(1)
+1
+
+
+634ECD78-2251-43EB-B6CF-DF7FA9DA4354
+exception_info
+exception_info
+1524449375
+Administrator
+1524449375
+Administrator
+异常信息
+text
+
+
+4EC075CC-507B-43D7-860F-34DAAEB1DBBF
+create_time
+create_time
+1524449375
+Administrator
+1524449375
+Administrator
+创建时间
+timestamp
+
+
+
+
+A87DCE10-894A-4CF7-B39C-AF18202C7F86
+Key_1
+Key_1
+1524449375
+Administrator
+1524449375
+Administrator
+
+
+
+
+
+
+
+
+
+
+FD6284E8-B6D4-43AF-A038-9C97DCD403DC
+sys_role_dept
+sys_role_dept
+1538296083
+admin
+1538297689
+admin
+角色和部门关联表
+
+
+
+2BC66204-4193-42E6-BB7B-7AD57C9E5BEF
+role_id
+role_id
+1538296083
+admin
+1538296150
+admin
+用户ID
+int(11)
+11
+1
+
+
+A32BC025-6437-41AB-BAA4-3A150E406781
+dept_id
+dept_id
+1538296083
+admin
+1538296150
+admin
+岗位ID
+int(11)
+11
+1
+
+
+
+
+315FFED5-B0A0-4649-8255-2283896340C9
+Key_1
+Key_1
+1538296083
+admin
+1538296083
+admin
+
+
+
+
+
+
+
+
+
+
+
+45EB995C-F5F6-4818-AEB1-2038DEBA9CEE
+sys_config
+sys_config
+1538296587
+admin
+1538297714
+admin
+参数配置表
+
+
+
+667C4616-146B-475C-8111-4720375D762C
+config_id
+config_id
+1538296587
+admin
+1538296691
+admin
+字典编码
+int(5)
+5
+1
+1
+
+
+EA798E0B-0CBE-4897-B0AF-1F2D3CD6DEF4
+config_name
+config_name
+1538296587
+admin
+1538296691
+admin
+字典排序
+0
+varchar(100)
+100
+
+
+A9A2A6E0-C914-4516-AE4C-F33CE71B92E8
+config_key
+config_key
+1538296587
+admin
+1538296691
+admin
+字典标签
+''
+varchar(100)
+100
+
+
+24CCA897-8671-402E-8229-9ED0C80C176A
+config_value
+config_value
+1538296587
+admin
+1538296691
+admin
+字典键值
+''
+varchar(100)
+100
+
+
+B4E76B1D-BFAF-42F3-8CCA-8B5A8CC7CBFF
+config_type
+config_type
+1538296587
+admin
+1538296691
+admin
+字典类型
+''
+char(1)
+1
+
+
+A6AC1891-F5C4-45B3-8CAB-8F4CE8B8BF08
+create_by
+create_by
+1538296587
+admin
+1538296587
+admin
+创建者
+''
+varchar(64)
+64
+
+
+CC1E0367-A079-49A0-8F0A-FE5F7B3EB6EA
+create_time
+create_time
+1538296587
+admin
+1538296587
+admin
+创建时间
+timestamp
+
+
+081CD54E-AE38-4696-A326-F829B8EA5737
+update_by
+update_by
+1538296587
+admin
+1538296587
+admin
+更新者
+''
+varchar(64)
+64
+
+
+E2118ECE-8F52-4FBA-B18A-F30FFB2BDD20
+update_time
+update_time
+1538296587
+admin
+1538296587
+admin
+更新时间
+timestamp
+
+
+55A16121-8932-465E-8427-EBDA39B2B900
+remark
+remark
+1538296587
+admin
+1538296587
+admin
+备注
+''
+varchar(500)
+500
+
+
+
+
+0F331278-2804-496A-A87B-B0944C80FB82
+Key_1
+Key_1
+1538296587
+admin
+1538296587
+admin
+
+
+
+
+
+
+
+
+
+
+F33DE1D6-C12D-43DB-A502-83BD1615F081
+sys_notice
+sys_notice
+1538297386
+admin
+1538297746
+admin
+通知公告表
+
+
+
+FF4A9744-D7CA-450E-8AD7-B3E7E90075CE
+notice_id
+notice_id
+1538297386
+admin
+1538297496
+admin
+任务日志ID
+int(4)
+4
+1
+1
+
+
+E2B08825-4C94-4209-80B2-21A7AD8CBF2D
+notice_title
+notice_title
+1538297386
+admin
+1538297496
+admin
+任务名称
+varchar(50)
+50
+1
+
+
+04414862-9ABC-4431-B1B7-B44ECC08CB6E
+notice_type
+notice_type
+1538297386
+admin
+1538297496
+admin
+任务组名
+char(2)
+2
+1
+
+
+E829DAD1-E3F9-4AED-A3DE-59CE4340333E
+notice_content
+notice_content
+1538297386
+admin
+1538297496
+admin
+任务方法
+varchar(500)
+500
+
+
+2EABC8DB-6700-4717-89A3-31461C4CB2D5
+status
+status
+1538297386
+admin
+1538297496
+admin
+方法参数
+''
+char(1)
+1
+
+
+448D3EB6-DE24-4BE3-9C29-1FC3C71B0E8D
+create_by
+create_by
+1538297386
+admin
+1538297496
+admin
+日志信息
+varchar(64)
+64
+
+
+770ED87D-D4D7-499C-A266-7A54051B1A84
+create_time1
+create_time1
+1538297386
+admin
+1538297496
+admin
+是否异常
+0
+datetime
+
+
+12DDF399-7CCB-4117-8B05-6AA9BEE845E5
+update_by
+update_by
+1538297386
+admin
+1538297496
+admin
+异常信息
+varchar(64)
+64
+
+
+FE101CE4-9B66-4097-944D-36B01A9E2219
+update_time1
+update_time1
+1538297400
+admin
+1538297496
+admin
+datetime
+
+
+D5F1728C-01D0-4C00-9AD6-AAA14228104B
+remark
+remark
+1538297386
+admin
+1538297496
+admin
+创建时间
+varchar(255)
+255
+
+
+
+
+43C7AC1D-CE7A-4B55-A474-8CB2376D446F
+Key_1
+Key_1
+1538297386
+admin
+1538297386
+admin
+
+
+
+
+
+
+
+
+
+
+
+
+F2EBEA5B-F352-45CB-B349-39158064CEE8
+PUBLIC
+PUBLIC
+1524449325
+Administrator
+1524449325
+Administrator
+
+
+
+
+41740AEF-D7FB-4738-ABDF-47C3287A6AF6
+MySQL 5.0
+MYSQL50
+1524449337
+Administrator
+1538295558
+admin
+file:///%_DBMS%/mysql50.xdb
+F4F16ECD-F2F1-4006-AF6F-638D5C65F35E
+4BA9F647-DAB1-11D1-9944-006097355D9B
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sql/ry_20210924.sql b/sql/ry_20210924.sql
new file mode 100644
index 0000000..1fa768b
--- /dev/null
+++ b/sql/ry_20210924.sql
@@ -0,0 +1,713 @@
+-- ----------------------------
+-- 1、部门表
+-- ----------------------------
+drop table if exists sys_dept;
+create table sys_dept (
+ dept_id bigint(20) not null auto_increment comment '部门id',
+ parent_id bigint(20) default 0 comment '父部门id',
+ ancestors varchar(50) default '' comment '祖级列表',
+ dept_name varchar(30) default '' comment '部门名称',
+ order_num int(4) default 0 comment '显示顺序',
+ leader varchar(20) default null comment '负责人',
+ phone varchar(11) default null comment '联系电话',
+ email varchar(50) default null comment '邮箱',
+ status char(1) default '0' comment '部门状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ primary key (dept_id)
+) engine=innodb auto_increment=200 comment = '部门表';
+
+-- ----------------------------
+-- 初始化-部门表数据
+-- ----------------------------
+insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
+
+
+-- ----------------------------
+-- 2、用户信息表
+-- ----------------------------
+drop table if exists sys_user;
+create table sys_user (
+ user_id bigint(20) not null auto_increment comment '用户ID',
+ dept_id bigint(20) default null comment '部门ID',
+ login_name varchar(30) not null comment '登录账号',
+ user_name varchar(30) default '' comment '用户昵称',
+ user_type varchar(2) default '00' comment '用户类型(00系统用户 01注册用户)',
+ email varchar(50) default '' comment '用户邮箱',
+ phonenumber varchar(11) default '' comment '手机号码',
+ sex char(1) default '0' comment '用户性别(0男 1女 2未知)',
+ avatar varchar(100) default '' comment '头像路径',
+ password varchar(50) default '' comment '密码',
+ salt varchar(20) default '' comment '盐加密',
+ status char(1) default '0' comment '帐号状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ login_ip varchar(128) default '' comment '最后登录IP',
+ login_date datetime comment '最后登录时间',
+ pwd_update_date datetime comment '密码最后更新时间',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (user_id)
+) engine=innodb auto_increment=100 comment = '用户信息表';
+
+-- ----------------------------
+-- 初始化-用户信息表数据
+-- ----------------------------
+insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', null, '管理员');
+insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', null, '测试员');
+
+
+-- ----------------------------
+-- 3、岗位信息表
+-- ----------------------------
+drop table if exists sys_post;
+create table sys_post
+(
+ post_id bigint(20) not null auto_increment comment '岗位ID',
+ post_code varchar(64) not null comment '岗位编码',
+ post_name varchar(50) not null comment '岗位名称',
+ post_sort int(4) not null comment '显示顺序',
+ status char(1) not null comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (post_id)
+) engine=innodb comment = '岗位信息表';
+
+-- ----------------------------
+-- 初始化-岗位信息表数据
+-- ----------------------------
+insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', sysdate(), '', null, '');
+insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', sysdate(), '', null, '');
+insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', sysdate(), '', null, '');
+insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', sysdate(), '', null, '');
+
+
+-- ----------------------------
+-- 4、角色信息表
+-- ----------------------------
+drop table if exists sys_role;
+create table sys_role (
+ role_id bigint(20) not null auto_increment comment '角色ID',
+ role_name varchar(30) not null comment '角色名称',
+ role_key varchar(100) not null comment '角色权限字符串',
+ role_sort int(4) not null comment '显示顺序',
+ data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
+ status char(1) not null comment '角色状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (role_id)
+) engine=innodb auto_increment=100 comment = '角色信息表';
+
+-- ----------------------------
+-- 初始化-角色信息表数据
+-- ----------------------------
+insert into sys_role values('1', '超级管理员', 'admin', 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员');
+insert into sys_role values('2', '普通角色', 'common', 2, 2, '0', '0', 'admin', sysdate(), '', null, '普通角色');
+
+
+-- ----------------------------
+-- 5、菜单权限表
+-- ----------------------------
+drop table if exists sys_menu;
+create table sys_menu (
+ menu_id bigint(20) not null auto_increment comment '菜单ID',
+ menu_name varchar(50) not null comment '菜单名称',
+ parent_id bigint(20) default 0 comment '父菜单ID',
+ order_num int(4) default 0 comment '显示顺序',
+ url varchar(200) default '#' comment '请求地址',
+ target varchar(20) default '' comment '打开方式(menuItem页签 menuBlank新窗口)',
+ menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)',
+ visible char(1) default 0 comment '菜单状态(0显示 1隐藏)',
+ is_refresh char(1) default 1 comment '是否刷新(0刷新 1不刷新)',
+ perms varchar(100) default null comment '权限标识',
+ icon varchar(100) default '#' comment '菜单图标',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default '' comment '备注',
+ primary key (menu_id)
+) engine=innodb auto_increment=2000 comment = '菜单权限表';
+
+-- ----------------------------
+-- 初始化-菜单信息表数据
+-- ----------------------------
+-- 一级菜单
+insert into sys_menu values('1', '系统管理', '0', '1', '#', '', 'M', '0', '1', '', 'fa fa-gear', 'admin', sysdate(), '', null, '系统管理目录');
+insert into sys_menu values('2', '系统监控', '0', '2', '#', '', 'M', '0', '1', '', 'fa fa-video-camera', 'admin', sysdate(), '', null, '系统监控目录');
+insert into sys_menu values('3', '系统工具', '0', '3', '#', '', 'M', '0', '1', '', 'fa fa-bars', 'admin', sysdate(), '', null, '系统工具目录');
+insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', 'menuBlank', 'C', '0', '1', '', 'fa fa-location-arrow', 'admin', sysdate(), '', null, '若依官网地址');
+-- 二级菜单
+insert into sys_menu values('100', '用户管理', '1', '1', '/system/user', '', 'C', '0', '1', 'system:user:view', 'fa fa-user-o', 'admin', sysdate(), '', null, '用户管理菜单');
+insert into sys_menu values('101', '角色管理', '1', '2', '/system/role', '', 'C', '0', '1', 'system:role:view', 'fa fa-user-secret', 'admin', sysdate(), '', null, '角色管理菜单');
+insert into sys_menu values('102', '菜单管理', '1', '3', '/system/menu', '', 'C', '0', '1', 'system:menu:view', 'fa fa-th-list', 'admin', sysdate(), '', null, '菜单管理菜单');
+insert into sys_menu values('103', '部门管理', '1', '4', '/system/dept', '', 'C', '0', '1', 'system:dept:view', 'fa fa-outdent', 'admin', sysdate(), '', null, '部门管理菜单');
+insert into sys_menu values('104', '岗位管理', '1', '5', '/system/post', '', 'C', '0', '1', 'system:post:view', 'fa fa-address-card-o', 'admin', sysdate(), '', null, '岗位管理菜单');
+insert into sys_menu values('105', '字典管理', '1', '6', '/system/dict', '', 'C', '0', '1', 'system:dict:view', 'fa fa-bookmark-o', 'admin', sysdate(), '', null, '字典管理菜单');
+insert into sys_menu values('106', '参数设置', '1', '7', '/system/config', '', 'C', '0', '1', 'system:config:view', 'fa fa-sun-o', 'admin', sysdate(), '', null, '参数设置菜单');
+insert into sys_menu values('107', '通知公告', '1', '8', '/system/notice', '', 'C', '0', '1', 'system:notice:view', 'fa fa-bullhorn', 'admin', sysdate(), '', null, '通知公告菜单');
+insert into sys_menu values('108', '日志管理', '1', '9', '#', '', 'M', '0', '1', '', 'fa fa-pencil-square-o', 'admin', sysdate(), '', null, '日志管理菜单');
+insert into sys_menu values('109', '在线用户', '2', '1', '/monitor/online', '', 'C', '0', '1', 'monitor:online:view', 'fa fa-user-circle', 'admin', sysdate(), '', null, '在线用户菜单');
+insert into sys_menu values('110', '定时任务', '2', '2', '/monitor/job', '', 'C', '0', '1', 'monitor:job:view', 'fa fa-tasks', 'admin', sysdate(), '', null, '定时任务菜单');
+insert into sys_menu values('111', '数据监控', '2', '3', '/monitor/data', '', 'C', '0', '1', 'monitor:data:view', 'fa fa-bug', 'admin', sysdate(), '', null, '数据监控菜单');
+insert into sys_menu values('112', '服务监控', '2', '4', '/monitor/server', '', 'C', '0', '1', 'monitor:server:view', 'fa fa-server', 'admin', sysdate(), '', null, '服务监控菜单');
+insert into sys_menu values('113', '缓存监控', '2', '5', '/monitor/cache', '', 'C', '0', '1', 'monitor:cache:view', 'fa fa-cube', 'admin', sysdate(), '', null, '缓存监控菜单');
+insert into sys_menu values('114', '表单构建', '3', '1', '/tool/build', '', 'C', '0', '1', 'tool:build:view', 'fa fa-wpforms', 'admin', sysdate(), '', null, '表单构建菜单');
+insert into sys_menu values('115', '代码生成', '3', '2', '/tool/gen', '', 'C', '0', '1', 'tool:gen:view', 'fa fa-code', 'admin', sysdate(), '', null, '代码生成菜单');
+insert into sys_menu values('116', '系统接口', '3', '3', '/tool/swagger', '', 'C', '0', '1', 'tool:swagger:view', 'fa fa-gg', 'admin', sysdate(), '', null, '系统接口菜单');
+-- 三级菜单
+insert into sys_menu values('500', '操作日志', '108', '1', '/monitor/operlog', '', 'C', '0', '1', 'monitor:operlog:view', 'fa fa-address-book', 'admin', sysdate(), '', null, '操作日志菜单');
+insert into sys_menu values('501', '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', '1', 'monitor:logininfor:view', 'fa fa-file-image-o', 'admin', sysdate(), '', null, '登录日志菜单');
+-- 用户管理按钮
+insert into sys_menu values('1000', '用户查询', '100', '1', '#', '', 'F', '0', '1', 'system:user:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1001', '用户新增', '100', '2', '#', '', 'F', '0', '1', 'system:user:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1002', '用户修改', '100', '3', '#', '', 'F', '0', '1', 'system:user:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1003', '用户删除', '100', '4', '#', '', 'F', '0', '1', 'system:user:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1004', '用户导出', '100', '5', '#', '', 'F', '0', '1', 'system:user:export', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1005', '用户导入', '100', '6', '#', '', 'F', '0', '1', 'system:user:import', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1006', '重置密码', '100', '7', '#', '', 'F', '0', '1', 'system:user:resetPwd', '#', 'admin', sysdate(), '', null, '');
+-- 角色管理按钮
+insert into sys_menu values('1007', '角色查询', '101', '1', '#', '', 'F', '0', '1', 'system:role:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1008', '角色新增', '101', '2', '#', '', 'F', '0', '1', 'system:role:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1009', '角色修改', '101', '3', '#', '', 'F', '0', '1', 'system:role:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1010', '角色删除', '101', '4', '#', '', 'F', '0', '1', 'system:role:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1011', '角色导出', '101', '5', '#', '', 'F', '0', '1', 'system:role:export', '#', 'admin', sysdate(), '', null, '');
+-- 菜单管理按钮
+insert into sys_menu values('1012', '菜单查询', '102', '1', '#', '', 'F', '0', '1', 'system:menu:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1013', '菜单新增', '102', '2', '#', '', 'F', '0', '1', 'system:menu:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1014', '菜单修改', '102', '3', '#', '', 'F', '0', '1', 'system:menu:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1015', '菜单删除', '102', '4', '#', '', 'F', '0', '1', 'system:menu:remove', '#', 'admin', sysdate(), '', null, '');
+-- 部门管理按钮
+insert into sys_menu values('1016', '部门查询', '103', '1', '#', '', 'F', '0', '1', 'system:dept:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1017', '部门新增', '103', '2', '#', '', 'F', '0', '1', 'system:dept:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1018', '部门修改', '103', '3', '#', '', 'F', '0', '1', 'system:dept:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1019', '部门删除', '103', '4', '#', '', 'F', '0', '1', 'system:dept:remove', '#', 'admin', sysdate(), '', null, '');
+-- 岗位管理按钮
+insert into sys_menu values('1020', '岗位查询', '104', '1', '#', '', 'F', '0', '1', 'system:post:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1021', '岗位新增', '104', '2', '#', '', 'F', '0', '1', 'system:post:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1022', '岗位修改', '104', '3', '#', '', 'F', '0', '1', 'system:post:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1023', '岗位删除', '104', '4', '#', '', 'F', '0', '1', 'system:post:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1024', '岗位导出', '104', '5', '#', '', 'F', '0', '1', 'system:post:export', '#', 'admin', sysdate(), '', null, '');
+-- 字典管理按钮
+insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', 'F', '0', '1', 'system:dict:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', 'F', '0', '1', 'system:dict:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', 'F', '0', '1', 'system:dict:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', 'F', '0', '1', 'system:dict:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', 'F', '0', '1', 'system:dict:export', '#', 'admin', sysdate(), '', null, '');
+-- 参数设置按钮
+insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', 'F', '0', '1', 'system:config:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', 'F', '0', '1', 'system:config:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', 'F', '0', '1', 'system:config:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', 'F', '0', '1', 'system:config:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', 'F', '0', '1', 'system:config:export', '#', 'admin', sysdate(), '', null, '');
+-- 通知公告按钮
+insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', 'F', '0', '1', 'system:notice:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', 'F', '0', '1', 'system:notice:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', 'F', '0', '1', 'system:notice:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', 'F', '0', '1', 'system:notice:remove', '#', 'admin', sysdate(), '', null, '');
+-- 操作日志按钮
+insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', 'F', '0', '1', 'monitor:operlog:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', 'F', '0', '1', 'monitor:operlog:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1041', '详细信息', '500', '3', '#', '', 'F', '0', '1', 'monitor:operlog:detail', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1042', '日志导出', '500', '4', '#', '', 'F', '0', '1', 'monitor:operlog:export', '#', 'admin', sysdate(), '', null, '');
+-- 登录日志按钮
+insert into sys_menu values('1043', '登录查询', '501', '1', '#', '', 'F', '0', '1', 'monitor:logininfor:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1044', '登录删除', '501', '2', '#', '', 'F', '0', '1', 'monitor:logininfor:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', 'F', '0', '1', 'monitor:logininfor:export', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1046', '账户解锁', '501', '4', '#', '', 'F', '0', '1', 'monitor:logininfor:unlock', '#', 'admin', sysdate(), '', null, '');
+-- 在线用户按钮
+insert into sys_menu values('1047', '在线查询', '109', '1', '#', '', 'F', '0', '1', 'monitor:online:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1048', '批量强退', '109', '2', '#', '', 'F', '0', '1', 'monitor:online:batchForceLogout', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1049', '单条强退', '109', '3', '#', '', 'F', '0', '1', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, '');
+-- 定时任务按钮
+insert into sys_menu values('1050', '任务查询', '110', '1', '#', '', 'F', '0', '1', 'monitor:job:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1051', '任务新增', '110', '2', '#', '', 'F', '0', '1', 'monitor:job:add', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1052', '任务修改', '110', '3', '#', '', 'F', '0', '1', 'monitor:job:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1053', '任务删除', '110', '4', '#', '', 'F', '0', '1', 'monitor:job:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1054', '状态修改', '110', '5', '#', '', 'F', '0', '1', 'monitor:job:changeStatus', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1055', '任务详细', '110', '6', '#', '', 'F', '0', '1', 'monitor:job:detail', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1056', '任务导出', '110', '7', '#', '', 'F', '0', '1', 'monitor:job:export', '#', 'admin', sysdate(), '', null, '');
+-- 代码生成按钮
+insert into sys_menu values('1057', '生成查询', '115', '1', '#', '', 'F', '0', '1', 'tool:gen:list', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1058', '生成修改', '115', '2', '#', '', 'F', '0', '1', 'tool:gen:edit', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1059', '生成删除', '115', '3', '#', '', 'F', '0', '1', 'tool:gen:remove', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1060', '预览代码', '115', '4', '#', '', 'F', '0', '1', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, '');
+insert into sys_menu values('1061', '生成代码', '115', '5', '#', '', 'F', '0', '1', 'tool:gen:code', '#', 'admin', sysdate(), '', null, '');
+
+
+-- ----------------------------
+-- 6、用户和角色关联表 用户N-1角色
+-- ----------------------------
+drop table if exists sys_user_role;
+create table sys_user_role (
+ user_id bigint(20) not null comment '用户ID',
+ role_id bigint(20) not null comment '角色ID',
+ primary key(user_id, role_id)
+) engine=innodb comment = '用户和角色关联表';
+
+-- ----------------------------
+-- 初始化-用户和角色关联表数据
+-- ----------------------------
+insert into sys_user_role values ('1', '1');
+insert into sys_user_role values ('2', '2');
+
+
+-- ----------------------------
+-- 7、角色和菜单关联表 角色1-N菜单
+-- ----------------------------
+drop table if exists sys_role_menu;
+create table sys_role_menu (
+ role_id bigint(20) not null comment '角色ID',
+ menu_id bigint(20) not null comment '菜单ID',
+ primary key(role_id, menu_id)
+) engine=innodb comment = '角色和菜单关联表';
+
+-- ----------------------------
+-- 初始化-角色和菜单关联表数据
+-- ----------------------------
+insert into sys_role_menu values ('2', '1');
+insert into sys_role_menu values ('2', '2');
+insert into sys_role_menu values ('2', '3');
+insert into sys_role_menu values ('2', '4');
+insert into sys_role_menu values ('2', '100');
+insert into sys_role_menu values ('2', '101');
+insert into sys_role_menu values ('2', '102');
+insert into sys_role_menu values ('2', '103');
+insert into sys_role_menu values ('2', '104');
+insert into sys_role_menu values ('2', '105');
+insert into sys_role_menu values ('2', '106');
+insert into sys_role_menu values ('2', '107');
+insert into sys_role_menu values ('2', '108');
+insert into sys_role_menu values ('2', '109');
+insert into sys_role_menu values ('2', '110');
+insert into sys_role_menu values ('2', '111');
+insert into sys_role_menu values ('2', '112');
+insert into sys_role_menu values ('2', '113');
+insert into sys_role_menu values ('2', '114');
+insert into sys_role_menu values ('2', '115');
+insert into sys_role_menu values ('2', '116');
+insert into sys_role_menu values ('2', '500');
+insert into sys_role_menu values ('2', '501');
+insert into sys_role_menu values ('2', '1000');
+insert into sys_role_menu values ('2', '1001');
+insert into sys_role_menu values ('2', '1002');
+insert into sys_role_menu values ('2', '1003');
+insert into sys_role_menu values ('2', '1004');
+insert into sys_role_menu values ('2', '1005');
+insert into sys_role_menu values ('2', '1006');
+insert into sys_role_menu values ('2', '1007');
+insert into sys_role_menu values ('2', '1008');
+insert into sys_role_menu values ('2', '1009');
+insert into sys_role_menu values ('2', '1010');
+insert into sys_role_menu values ('2', '1011');
+insert into sys_role_menu values ('2', '1012');
+insert into sys_role_menu values ('2', '1013');
+insert into sys_role_menu values ('2', '1014');
+insert into sys_role_menu values ('2', '1015');
+insert into sys_role_menu values ('2', '1016');
+insert into sys_role_menu values ('2', '1017');
+insert into sys_role_menu values ('2', '1018');
+insert into sys_role_menu values ('2', '1019');
+insert into sys_role_menu values ('2', '1020');
+insert into sys_role_menu values ('2', '1021');
+insert into sys_role_menu values ('2', '1022');
+insert into sys_role_menu values ('2', '1023');
+insert into sys_role_menu values ('2', '1024');
+insert into sys_role_menu values ('2', '1025');
+insert into sys_role_menu values ('2', '1026');
+insert into sys_role_menu values ('2', '1027');
+insert into sys_role_menu values ('2', '1028');
+insert into sys_role_menu values ('2', '1029');
+insert into sys_role_menu values ('2', '1030');
+insert into sys_role_menu values ('2', '1031');
+insert into sys_role_menu values ('2', '1032');
+insert into sys_role_menu values ('2', '1033');
+insert into sys_role_menu values ('2', '1034');
+insert into sys_role_menu values ('2', '1035');
+insert into sys_role_menu values ('2', '1036');
+insert into sys_role_menu values ('2', '1037');
+insert into sys_role_menu values ('2', '1038');
+insert into sys_role_menu values ('2', '1039');
+insert into sys_role_menu values ('2', '1040');
+insert into sys_role_menu values ('2', '1041');
+insert into sys_role_menu values ('2', '1042');
+insert into sys_role_menu values ('2', '1043');
+insert into sys_role_menu values ('2', '1044');
+insert into sys_role_menu values ('2', '1045');
+insert into sys_role_menu values ('2', '1046');
+insert into sys_role_menu values ('2', '1047');
+insert into sys_role_menu values ('2', '1048');
+insert into sys_role_menu values ('2', '1049');
+insert into sys_role_menu values ('2', '1050');
+insert into sys_role_menu values ('2', '1051');
+insert into sys_role_menu values ('2', '1052');
+insert into sys_role_menu values ('2', '1053');
+insert into sys_role_menu values ('2', '1054');
+insert into sys_role_menu values ('2', '1055');
+insert into sys_role_menu values ('2', '1056');
+insert into sys_role_menu values ('2', '1057');
+insert into sys_role_menu values ('2', '1058');
+insert into sys_role_menu values ('2', '1059');
+insert into sys_role_menu values ('2', '1060');
+insert into sys_role_menu values ('2', '1061');
+
+-- ----------------------------
+-- 8、角色和部门关联表 角色1-N部门
+-- ----------------------------
+drop table if exists sys_role_dept;
+create table sys_role_dept (
+ role_id bigint(20) not null comment '角色ID',
+ dept_id bigint(20) not null comment '部门ID',
+ primary key(role_id, dept_id)
+) engine=innodb comment = '角色和部门关联表';
+
+-- ----------------------------
+-- 初始化-角色和部门关联表数据
+-- ----------------------------
+insert into sys_role_dept values ('2', '100');
+insert into sys_role_dept values ('2', '101');
+insert into sys_role_dept values ('2', '105');
+
+-- ----------------------------
+-- 9、用户与岗位关联表 用户1-N岗位
+-- ----------------------------
+drop table if exists sys_user_post;
+create table sys_user_post
+(
+ user_id bigint(20) not null comment '用户ID',
+ post_id bigint(20) not null comment '岗位ID',
+ primary key (user_id, post_id)
+) engine=innodb comment = '用户与岗位关联表';
+
+-- ----------------------------
+-- 初始化-用户与岗位关联表数据
+-- ----------------------------
+insert into sys_user_post values ('1', '1');
+insert into sys_user_post values ('2', '2');
+
+
+-- ----------------------------
+-- 10、操作日志记录
+-- ----------------------------
+drop table if exists sys_oper_log;
+create table sys_oper_log (
+ oper_id bigint(20) not null auto_increment comment '日志主键',
+ title varchar(50) default '' comment '模块标题',
+ business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)',
+ method varchar(100) default '' comment '方法名称',
+ request_method varchar(10) default '' comment '请求方式',
+ operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)',
+ oper_name varchar(50) default '' comment '操作人员',
+ dept_name varchar(50) default '' comment '部门名称',
+ oper_url varchar(255) default '' comment '请求URL',
+ oper_ip varchar(128) default '' comment '主机地址',
+ oper_location varchar(255) default '' comment '操作地点',
+ oper_param varchar(2000) default '' comment '请求参数',
+ json_result varchar(2000) default '' comment '返回参数',
+ status int(1) default 0 comment '操作状态(0正常 1异常)',
+ error_msg varchar(2000) default '' comment '错误消息',
+ oper_time datetime comment '操作时间',
+ primary key (oper_id)
+) engine=innodb auto_increment=100 comment = '操作日志记录';
+
+
+-- ----------------------------
+-- 11、字典类型表
+-- ----------------------------
+drop table if exists sys_dict_type;
+create table sys_dict_type
+(
+ dict_id bigint(20) not null auto_increment comment '字典主键',
+ dict_name varchar(100) default '' comment '字典名称',
+ dict_type varchar(100) default '' comment '字典类型',
+ status char(1) default '0' comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (dict_id),
+ unique (dict_type)
+) engine=innodb auto_increment=100 comment = '字典类型表';
+
+insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', sysdate(), '', null, '用户性别列表');
+insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', sysdate(), '', null, '菜单状态列表');
+insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', sysdate(), '', null, '系统开关列表');
+insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', sysdate(), '', null, '任务状态列表');
+insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', sysdate(), '', null, '任务分组列表');
+insert into sys_dict_type values(6, '系统是否', 'sys_yes_no', '0', 'admin', sysdate(), '', null, '系统是否列表');
+insert into sys_dict_type values(7, '通知类型', 'sys_notice_type', '0', 'admin', sysdate(), '', null, '通知类型列表');
+insert into sys_dict_type values(8, '通知状态', 'sys_notice_status', '0', 'admin', sysdate(), '', null, '通知状态列表');
+insert into sys_dict_type values(9, '操作类型', 'sys_oper_type', '0', 'admin', sysdate(), '', null, '操作类型列表');
+insert into sys_dict_type values(10, '系统状态', 'sys_common_status', '0', 'admin', sysdate(), '', null, '登录状态列表');
+
+
+-- ----------------------------
+-- 12、字典数据表
+-- ----------------------------
+drop table if exists sys_dict_data;
+create table sys_dict_data
+(
+ dict_code bigint(20) not null auto_increment comment '字典编码',
+ dict_sort int(4) default 0 comment '字典排序',
+ dict_label varchar(100) default '' comment '字典标签',
+ dict_value varchar(100) default '' comment '字典键值',
+ dict_type varchar(100) default '' comment '字典类型',
+ css_class varchar(100) default null comment '样式属性(其他样式扩展)',
+ list_class varchar(100) default null comment '表格回显样式',
+ is_default char(1) default 'N' comment '是否默认(Y是 N否)',
+ status char(1) default '0' comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (dict_code)
+) engine=innodb auto_increment=100 comment = '字典数据表';
+
+insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', sysdate(), '', null, '性别男');
+insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别女');
+insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别未知');
+insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单');
+insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '隐藏菜单');
+insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
+insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态');
+insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
+insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态');
+insert into sys_dict_data values(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', sysdate(), '', null, '默认分组');
+insert into sys_dict_data values(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', sysdate(), '', null, '系统分组');
+insert into sys_dict_data values(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是');
+insert into sys_dict_data values(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '系统默认否');
+insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知');
+insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', sysdate(), '', null, '公告');
+insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
+insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '关闭状态');
+insert into sys_dict_data values(18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '其他操作');
+insert into sys_dict_data values(19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '新增操作');
+insert into sys_dict_data values(20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '修改操作');
+insert into sys_dict_data values(21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '删除操作');
+insert into sys_dict_data values(22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作');
+insert into sys_dict_data values(23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作');
+insert into sys_dict_data values(24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作');
+insert into sys_dict_data values(25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '强退操作');
+insert into sys_dict_data values(26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作');
+insert into sys_dict_data values(27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '清空操作');
+insert into sys_dict_data values(28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态');
+insert into sys_dict_data values(29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态');
+
+
+-- ----------------------------
+-- 13、参数配置表
+-- ----------------------------
+drop table if exists sys_config;
+create table sys_config (
+ config_id int(5) not null auto_increment comment '参数主键',
+ config_name varchar(100) default '' comment '参数名称',
+ config_key varchar(100) default '' comment '参数键名',
+ config_value varchar(500) default '' comment '参数键值',
+ config_type char(1) default 'N' comment '系统内置(Y是 N否)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (config_id)
+) engine=innodb auto_increment=100 comment = '参数配置表';
+
+insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
+insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '初始化密码 123456');
+insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '深黑主题theme-dark,浅色主题theme-light,深蓝主题theme-blue');
+insert into sys_config values(4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
+insert into sys_config values(5, '用户管理-密码字符范围', 'sys.account.chrtype', '0', 'Y', 'admin', sysdate(), '', null, '默认任意字符范围,0任意(密码可以输入任意字符),1数字(密码只能为0-9数字),2英文字母(密码只能为a-z和A-Z字母),3字母和数字(密码必须包含字母,数字),4字母数字和特殊字符(目前支持的特殊字符包括:~!@#$%^&*()-=_+)');
+insert into sys_config values(6, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '0', 'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
+insert into sys_config values(7, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
+insert into sys_config values(8, '主框架页-菜单导航显示风格', 'sys.index.menuStyle', 'default', 'Y', 'admin', sysdate(), '', null, '菜单导航显示风格(default为左侧导航菜单,topnav为顶部导航菜单)');
+insert into sys_config values(9, '主框架页-是否开启页脚', 'sys.index.footer', 'true', 'Y', 'admin', sysdate(), '', null, '是否开启底部页脚显示(true显示,false隐藏)');
+insert into sys_config values(10, '主框架页-是否开启页签', 'sys.index.tagsView', 'true', 'Y', 'admin', sysdate(), '', null, '是否开启菜单多页签显示(true显示,false隐藏)');
+
+
+-- ----------------------------
+-- 14、系统访问记录
+-- ----------------------------
+drop table if exists sys_logininfor;
+create table sys_logininfor (
+ info_id bigint(20) not null auto_increment comment '访问ID',
+ login_name varchar(50) default '' comment '登录账号',
+ ipaddr varchar(128) default '' comment '登录IP地址',
+ login_location varchar(255) default '' comment '登录地点',
+ browser varchar(50) default '' comment '浏览器类型',
+ os varchar(50) default '' comment '操作系统',
+ status char(1) default '0' comment '登录状态(0成功 1失败)',
+ msg varchar(255) default '' comment '提示消息',
+ login_time datetime comment '访问时间',
+ primary key (info_id)
+) engine=innodb auto_increment=100 comment = '系统访问记录';
+
+
+-- ----------------------------
+-- 15、在线用户记录
+-- ----------------------------
+drop table if exists sys_user_online;
+create table sys_user_online (
+ sessionId varchar(50) default '' comment '用户会话id',
+ login_name varchar(50) default '' comment '登录账号',
+ dept_name varchar(50) default '' comment '部门名称',
+ ipaddr varchar(128) default '' comment '登录IP地址',
+ login_location varchar(255) default '' comment '登录地点',
+ browser varchar(50) default '' comment '浏览器类型',
+ os varchar(50) default '' comment '操作系统',
+ status varchar(10) default '' comment '在线状态on_line在线off_line离线',
+ start_timestamp datetime comment 'session创建时间',
+ last_access_time datetime comment 'session最后访问时间',
+ expire_time int(5) default 0 comment '超时时间,单位为分钟',
+ primary key (sessionId)
+) engine=innodb comment = '在线用户记录';
+
+
+-- ----------------------------
+-- 16、定时任务调度表
+-- ----------------------------
+drop table if exists sys_job;
+create table sys_job (
+ job_id bigint(20) not null auto_increment comment '任务ID',
+ job_name varchar(64) default '' comment '任务名称',
+ job_group varchar(64) default 'DEFAULT' comment '任务组名',
+ invoke_target varchar(500) not null comment '调用目标字符串',
+ cron_expression varchar(255) default '' comment 'cron执行表达式',
+ misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
+ concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)',
+ status char(1) default '0' comment '状态(0正常 1暂停)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default '' comment '备注信息',
+ primary key (job_id, job_name, job_group)
+) engine=innodb auto_increment=100 comment = '定时任务调度表';
+
+insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
+insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
+insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
+
+
+-- ----------------------------
+-- 17、定时任务调度日志表
+-- ----------------------------
+drop table if exists sys_job_log;
+create table sys_job_log (
+ job_log_id bigint(20) not null auto_increment comment '任务日志ID',
+ job_name varchar(64) not null comment '任务名称',
+ job_group varchar(64) not null comment '任务组名',
+ invoke_target varchar(500) not null comment '调用目标字符串',
+ job_message varchar(500) comment '日志信息',
+ status char(1) default '0' comment '执行状态(0正常 1失败)',
+ exception_info varchar(2000) default '' comment '异常信息',
+ create_time datetime comment '创建时间',
+ primary key (job_log_id)
+) engine=innodb comment = '定时任务调度日志表';
+
+
+-- ----------------------------
+-- 18、通知公告表
+-- ----------------------------
+drop table if exists sys_notice;
+create table sys_notice (
+ notice_id int(4) not null auto_increment comment '公告ID',
+ notice_title varchar(50) not null comment '公告标题',
+ notice_type char(1) not null comment '公告类型(1通知 2公告)',
+ notice_content varchar(2000) default null comment '公告内容',
+ status char(1) default '0' comment '公告状态(0正常 1关闭)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(255) default null comment '备注',
+ primary key (notice_id)
+) engine=innodb auto_increment=10 comment = '通知公告表';
+
+-- ----------------------------
+-- 初始化-公告信息表数据
+-- ----------------------------
+insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员');
+insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', sysdate(), '', null, '管理员');
+
+
+-- ----------------------------
+-- 19、代码生成业务表
+-- ----------------------------
+drop table if exists gen_table;
+create table gen_table (
+ table_id bigint(20) not null auto_increment comment '编号',
+ table_name varchar(200) default '' comment '表名称',
+ table_comment varchar(500) default '' comment '表描述',
+ sub_table_name varchar(64) default null comment '关联子表的表名',
+ sub_table_fk_name varchar(64) default null comment '子表关联的外键名',
+ class_name varchar(100) default '' comment '实体类名称',
+ tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作 sub主子表操作)',
+ package_name varchar(100) comment '生成包路径',
+ module_name varchar(30) comment '生成模块名',
+ business_name varchar(30) comment '生成业务名',
+ function_name varchar(50) comment '生成功能名',
+ function_author varchar(50) comment '生成功能作者',
+ gen_type char(1) default '0' comment '生成代码方式(0zip压缩包 1自定义路径)',
+ gen_path varchar(200) default '/' comment '生成路径(不填默认项目路径)',
+ options varchar(1000) comment '其它生成选项',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (table_id)
+) engine=innodb auto_increment=1 comment = '代码生成业务表';
+
+
+-- ----------------------------
+-- 20、代码生成业务表字段
+-- ----------------------------
+drop table if exists gen_table_column;
+create table gen_table_column (
+ column_id bigint(20) not null auto_increment comment '编号',
+ table_id varchar(64) comment '归属表编号',
+ column_name varchar(200) comment '列名称',
+ column_comment varchar(500) comment '列描述',
+ column_type varchar(100) comment '列类型',
+ java_type varchar(500) comment 'JAVA类型',
+ java_field varchar(200) comment 'JAVA字段名',
+ is_pk char(1) comment '是否主键(1是)',
+ is_increment char(1) comment '是否自增(1是)',
+ is_required char(1) comment '是否必填(1是)',
+ is_insert char(1) comment '是否为插入字段(1是)',
+ is_edit char(1) comment '是否编辑字段(1是)',
+ is_list char(1) comment '是否列表字段(1是)',
+ is_query char(1) comment '是否查询字段(1是)',
+ query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)',
+ html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
+ dict_type varchar(200) default '' comment '字典类型',
+ sort int comment '排序',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ primary key (column_id)
+) engine=innodb auto_increment=1 comment = '代码生成业务表字段';
\ No newline at end of file
diff --git a/wms-admin/pom.xml b/wms-admin/pom.xml
new file mode 100644
index 0000000..6e93bdd
--- /dev/null
+++ b/wms-admin/pom.xml
@@ -0,0 +1,144 @@
+
+
+
+ wms
+ com.wms
+ 1.0.0
+
+ 4.0.0
+ war
+ wms-admin
+
+
+ 前端管理服务
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+
+
+
+
+ io.swagger
+ swagger-models
+ 1.6.2
+
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ com.wms
+ wms-framework
+
+
+
+
+ com.wms
+ wms-quartz
+
+
+
+
+ com.wms
+ wms-generator
+
+
+
+
+ com.wms
+ wms-business
+
+
+ org.projectlombok
+ lombok
+ 1.18.14
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.1.1.RELEASE
+
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.0.0
+
+ false
+ ${project.artifactId}
+
+
+
+
+ ${project.artifactId}
+
+
+
\ No newline at end of file
diff --git a/wms-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/wms-admin/src/main/java/com/ruoyi/RuoYiApplication.java
new file mode 100644
index 0000000..00aa9c8
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -0,0 +1,32 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * 启动程序
+ *
+ * @author ruoyi
+ */
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@EnableTransactionManagement
+public class RuoYiApplication
+{
+ public static void main(String[] args)
+ {
+// System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication.run(RuoYiApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ WMS 系统启动 ლ(´ڡ`ლ)゙ \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
+ }
+}
\ No newline at end of file
diff --git a/wms-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/wms-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
new file mode 100644
index 0000000..6de67dc
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web容器中进行部署
+ *
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer
+{
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+ {
+ return application.sources(RuoYiApplication.class);
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/ComingInspectionController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ComingInspectionController.java
new file mode 100644
index 0000000..55b58a0
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ComingInspectionController.java
@@ -0,0 +1,192 @@
+package com.ruoyi.web.controller.business;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.business.domain.TEbsRecord;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITEbsRecordService;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.framework.web.service.DictService;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 在线检验不合格Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/comingInspection")
+public class ComingInspectionController extends BaseController {
+ private String prefix = "business/comingInspection";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:comingInspection:view")
+ @GetMapping()
+ public String stock(ModelMap mmap) throws Exception {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/comingInspection";
+ }
+
+ /**
+ * 查询
+ */
+ @RequiresPermissions("business:comingInspection:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TMiStock tMiStock)
+ {
+ startPage();
+ tMiStock.setSts(dict.getType("stock_sts").get(5).getDictValue());
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 更改物料状态
+ *
+ * @param locationIds
+ * @return
+ */
+ @Log(title = "更改物料状态", businessType = BusinessType.UPDATE)
+ @RequiresPermissions("business:comingInspection:edit")
+ @PostMapping("/stsChange")
+ @ResponseBody
+ public AjaxResult stsChange(String locationIds) throws Exception {
+ // 查找对应库存
+ String[] locations = StringUtils.split(locationIds.trim(), ",");
+ TMiStock stockForQuery = new TMiStock();
+ stockForQuery.setSts("5");
+ for (int i = 0; i < locations.length; i++) {
+ stockForQuery.setLocationId(locations[i]);
+ List list = tMiStockService.selectStock(stockForQuery);
+ if (list.size() < 1) {
+ return error("当前库位无待检库存");
+ }
+ // 更改库存状态,同时转移子库存至合格库
+ TMiStock stock = list.get(0);
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stock,
+ list.get(0).getWhseloc(),
+ "121-108"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stock.getGoodsId(), stock.getGoodsName(), stock.getProduclotid(), stock.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stock.getGoodsId(), stock.getGoodsName(), stock.getProduclotid(), stock.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stock.getGoodsId(), stock.getGoodsName(), stock.getProduclotid(), stock.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ JSONObject resultJsonWmsSubInvProc = (JSONObject) JSON.parseObject(resultWmsSubInvProc).get("obj");
+ List dataWmsSubInvProc = JSON.parseArray(resultJsonWmsSubInvProc.getString("rows"), JSONObject.class);
+ if (!dataWmsSubInvProc.get(0).getString("processStatus").equals("PROCESSING")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stock.getGoodsId(), stock.getGoodsName(), stock.getProduclotid(), stock.getShelvesNum()));
+ return error(dataWmsSubInvProc.get(0).getString("errorMsg"));
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stock.getGoodsId(), stock.getGoodsName(), stock.getProduclotid(), stock.getShelvesNum()));
+ stock.setSts(dict.getType("stock_sts").get(0).getDictValue());
+ stock.setWhseloc("121-108");
+ // 更新本地库存
+ if (tMiStockService.updateTMiStock(stock) < 1) {
+ return error("更新库存失败");
+ }
+ }
+ return success("来料检验成功");
+ }
+
+ /**
+ * 创建参数Json(子库存转移)
+ * @return
+ */
+ public JSONObject createJsonWmsSubInvProc(TMiStock wmsStock, String fromSubInventoryCode, String toSubInventoryCode) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "wmsSubInvProc");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "E");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("transTypeId", 2);
+ businessData.put("organizationId", configService.selectConfigByKey("organizationId"));
+ businessData.put("itemId", wmsStock.getGoodsTypeid());
+ businessData.put("quantity", wmsStock.getShelvesNum());
+ businessData.put("subInventory", fromSubInventoryCode);
+ businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(fromSubInventoryCode));
+ businessData.put("transDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ businessData.put("transUom", wmsStock.getGoodsMeasureId());
+ businessData.put("transSubInventory", toSubInventoryCode);
+ businessData.put("transLocatorId", EbsUtils.LOCATOR_AREA_MAP.get(toSubInventoryCode));
+ businessData.put("transLotNumber", wmsStock.getProduclotid());
+ businessData.put("sourceHeaderId", 1);
+ businessData.put("sourceLineId", 1);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java
new file mode 100644
index 0000000..d75bb2d
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java
@@ -0,0 +1,576 @@
+package com.ruoyi.web.controller.business;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.business.domain.EbsStock;
+import com.ruoyi.business.domain.TBaseGoods;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITBaseGoodsService;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * EBS现有量
+ *
+ * @author 梁州
+ */
+@Controller
+@RequestMapping("/business/ebsConfirm")
+public class EbsConfirmController extends BaseController {
+ private String prefix = "business/ebsConfirm";
+ // 现有量记录报表(导出用)
+ List ebsStockListForExport;
+ // 现有量记录报表(导出用)-按批次
+ List ebsStockLotListForExport;
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private ITBaseGoodsService goodsService;
+
+ /**
+ * EBS现有量界面
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:ebsConfirm:view")
+ @GetMapping("/ebsConfirm")
+ public String ebsConfirm(ModelMap mmap) {
+ mmap.put("ebsStock", new EbsStock());
+ return prefix + "/ebsConfirm";
+ }
+
+ /**
+ * EBS现有量界面(按批次)
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:ebsConfirm:view")
+ @GetMapping("/ebsConfirmLot")
+ public String ebsConfirmLot(ModelMap mmap) {
+ mmap.put("ebsStock", new EbsStock());
+ return prefix + "/ebsConfirmLot";
+ }
+
+ /**
+ * EBS现有量主界面
+ */
+ @RequiresPermissions("business:ebsConfirm:list")
+ @Log(title = "查询EBS现有量", businessType = BusinessType.INSERT)
+ @PostMapping("/ebsConfirm/main")
+ @ResponseBody
+ public TableDataInfo ebsConfirmMain(EbsStock ebsStock) throws Exception {
+ TMiStock stockForQuery = new TMiStock();
+ stockForQuery.setGoodsId(ebsStock.getGoodsId());
+ stockForQuery.setWhseloc(ebsStock.getSubInventory());
+ // 库存信息
+ List stockList = tMiStockService.selectTMiStockOutList(stockForQuery);
+ // EBS现有量查询结果
+ List ebsStockList = new LinkedList<>();
+ if (stockList.size() < 1) {
+ return getDataTable(ebsStockList);
+ }
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ // 一起查询
+ String params = JSON.toJSONString(createJsonList(stockList, ebsStock.getSubInventory(), null));
+ String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString());
+ JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj");
+ List datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class);
+ // 生成现有量数据
+ for (TMiStock stock : stockList) {
+ // 插入的EBS现有量数据
+ EbsStock temp = new EbsStock();
+ // 查询结果返回的总量
+ int sum = 0;
+ for (ExistingStock existingStock : datas) {
+ if (stock.getGoodsId().equals(existingStock.getItemCode())) {
+ sum += existingStock.getTransactionQuantity();
+ }
+ }
+ // 设定EBS现有量的数据
+ temp.setGoodsId(stock.getGoodsId());
+ temp.setGoodsName(stock.getGoodsName());
+ temp.setSubInventory(ebsStock.getSubInventory());
+ temp.setEbsNum(BigDecimal.valueOf(sum));
+ temp.setWmsNum(stock.getShelvesNum());
+ if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) {
+ temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+ temp.setSts("0");
+ } else {
+ temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+ temp.setSts("1");
+ }
+ ebsStockList.add(temp);
+ }
+
+ // 更新逻辑
+ // 1. 传参变化:只传子库
+// String params = JSON.toJSONString(createJsonGetAll(ebsStock.getSubInventory()));
+// String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString());
+// JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj");
+// List datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class);
+// // 根据本地中库存生成一次现有量数据
+// for (TMiStock stock : stockList) {
+// // 插入的EBS现有量数据
+// EbsStock temp = new EbsStock();
+// // 查询结果返回的总量
+// int sum = 0;
+// for (ExistingStock existingStock : datas) {
+// if (stock.getGoodsId().equals(existingStock.getItemCode())) {
+// sum += existingStock.getTransactionQuantity();
+// }
+// }
+// // 设定EBS现有量的数据
+// temp.setGoodsId(stock.getGoodsId());
+// temp.setGoodsName(stock.getGoodsName());
+// temp.setSubInventory(ebsStock.getSubInventory());
+// temp.setEbsNum(BigDecimal.valueOf(sum));
+// temp.setWmsNum(stock.getShelvesNum());
+// if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) {
+// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+// temp.setSts("0");
+// } else {
+// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+// temp.setSts("1");
+// }
+// ebsStockList.add(temp);
+// }
+// // 将本地库存中不存在的数据添加进现有量列表
+// for (ExistingStock existingStock : datas) {
+// // 判断当前物料是否已经存在
+// if (ebsStockList.stream().anyMatch(ebsStock1 -> ebsStock1.getGoodsId().equals(existingStock.getItemCode()))) {
+// continue;
+// }
+// // 插入的EBS现有量数据
+// EbsStock temp = new EbsStock();
+// // 对不存在的库存数据进行处理
+// int sum = 0;
+// for (ExistingStock existingStock1 : datas) {
+// if (existingStock.getItemCode().equals(existingStock1.getItemCode())) {
+// sum += existingStock1.getTransactionQuantity();
+// }
+// }
+// // 先查询物料表,根据当前的物料编码
+// TBaseGoods goodsTemp = goodsService.selectTBaseGoodsByGoodsId(existingStock.getItemCode());
+// // 设定EBS现有量的数据
+// temp.setGoodsId(existingStock.getItemCode());
+// if (goodsTemp != null) {
+// temp.setGoodsName(goodsTemp.getGoodsName());
+// }
+// temp.setSubInventory(existingStock.getSubinventoryCode());
+// temp.setEbsNum(BigDecimal.valueOf(sum));
+// temp.setWmsNum(BigDecimal.valueOf(0));
+// temp.setDiffNum(BigDecimal.valueOf(sum));
+// temp.setSts("0");
+// ebsStockList.add(temp);
+// }
+
+ // 将不平衡的放到前面
+ ebsStockList.sort(Comparator.comparing(EbsStock::getSts));
+ // 将当前查询出的现有量保存到导出缓存中
+ ebsStockListForExport = new ArrayList<>(ebsStockList);
+ logger.info("当前现有量数据:{}", JSON.toJSONString(ebsStockListForExport));
+
+ // 返回分页数据
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+ TableDataInfo rspData = new TableDataInfo();
+ // 分页数据设置
+ rspData.setCode(0);
+ rspData.setRows(PageUtils.startPageByList(ebsStockList, pageNum, pageSize));
+ rspData.setTotal(new PageInfo(ebsStockList).getTotal());
+ return rspData;
+ }
+
+ /**
+ * EBS现有量(按批次)主界面
+ */
+ @RequiresPermissions("business:ebsConfirm:list")
+ @Log(title = "查询EBS现有量(按批次)", businessType = BusinessType.INSERT)
+ @PostMapping("/ebsConfirmLot/main")
+ @ResponseBody
+ public TableDataInfo ebsConfirmLotMain(EbsStock ebsStock) throws Exception {
+ TMiStock stockForQuery = new TMiStock();
+ stockForQuery.setGoodsId(ebsStock.getGoodsId());
+ stockForQuery.setProduclotid(ebsStock.getLotNumber());
+ stockForQuery.setWhseloc(ebsStock.getSubInventory());
+ // 库存信息
+ List stockList = tMiStockService.selectTMiStockOutListByLot(stockForQuery);
+ // EBS现有量查询结果
+ List ebsStockList = new LinkedList<>();
+ if (stockList.size() < 1) {
+ return getDataTable(ebsStockList);
+ }
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ // 一起查询
+ String params = JSON.toJSONString(createJsonList(stockList, ebsStock.getSubInventory(), null));
+ String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString());
+ JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj");
+ List datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class);
+ // 生成现有量数据
+ for (TMiStock stock : stockList) {
+ // 插入的EBS现有量数据
+ EbsStock temp = new EbsStock();
+ // 查询结果返回的总量
+ int sum = 0;
+ for (ExistingStock existingStock : datas) {
+ if (stock.getGoodsId().equals(existingStock.getItemCode()) && stock.getProduclotid().equals(existingStock.getLotNumber())) {
+ sum += existingStock.getTransactionQuantity();
+ }
+ }
+ // 设定EBS现有量的数据
+ temp.setGoodsId(stock.getGoodsId());
+ temp.setGoodsName(stock.getGoodsName());
+ temp.setLotNumber(stock.getProduclotid());
+ temp.setSubInventory(ebsStock.getSubInventory());
+ temp.setEbsNum(BigDecimal.valueOf(sum));
+ temp.setWmsNum(stock.getShelvesNum());
+ if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) {
+ temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+ temp.setSts("0");
+ } else {
+ temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+ temp.setSts("1");
+ }
+ ebsStockList.add(temp);
+ }
+
+ // 更新逻辑
+ // 1. 传参变化:只传子库
+// String params = JSON.toJSONString(createJsonGetAll(ebsStock.getSubInventory()));
+// String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString());
+// JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj");
+// List datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class);
+// // 根据本地中库存生成一次现有量数据
+// for (TMiStock stock : stockList) {
+// // 插入的EBS现有量数据
+// EbsStock temp = new EbsStock();
+// // 查询结果返回的总量
+// int sum = 0;
+// if (StringUtils.isEmpty(stock.getProduclotid())) {// 本地库存批次号为空
+// for (ExistingStock existingStock : datas) {
+// if (stock.getGoodsId().equals(existingStock.getItemCode())) {
+// sum += existingStock.getTransactionQuantity();
+// }
+// }
+// } else {
+// for (ExistingStock existingStock : datas) {
+// if (StringUtils.isEmpty(existingStock.getLotNumber())) {// 批次号为空
+// continue;
+// }
+// if (stock.getGoodsId().equals(existingStock.getItemCode()) && stock.getProduclotid().equals(existingStock.getLotNumber())) {
+// sum += existingStock.getTransactionQuantity();
+// }
+// }
+// }
+// // 设定EBS现有量的数据
+// temp.setGoodsId(stock.getGoodsId());
+// temp.setGoodsName(stock.getGoodsName());
+// temp.setLotNumber(stock.getProduclotid());
+// temp.setSubInventory(ebsStock.getSubInventory());
+// temp.setEbsNum(BigDecimal.valueOf(sum));
+// temp.setWmsNum(stock.getShelvesNum());
+// if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) {
+// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+// temp.setSts("0");
+// } else {
+// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum()));
+// temp.setSts("1");
+// }
+// ebsStockList.add(temp);
+// }
+// // 将本地库存中不存在的数据添加进现有量列表
+// for (ExistingStock existingStock : datas) {
+// if (StringUtils.isEmpty(existingStock.getLotNumber())) {
+// continue;
+// }
+// // 判断当前物料是否已经存在
+// if (ebsStockList.stream().anyMatch(ebsStock1 -> ebsStock1.getGoodsId().equals(existingStock.getItemCode()) && ebsStock1.getLotNumber().equals(existingStock.getLotNumber()))) {
+// continue;
+// }
+// // 插入的EBS现有量数据
+// EbsStock temp = new EbsStock();
+// // 对不存在的库存数据进行处理
+// int sum = 0;
+// for (ExistingStock existingStock1 : datas) {
+// if (existingStock.getItemCode().equals(existingStock1.getItemCode()) && existingStock.getLotNumber().equals(existingStock1.getLotNumber())) {
+// sum += existingStock1.getTransactionQuantity();
+// }
+// }
+// // 先查询物料表,根据当前的物料编码
+// TBaseGoods goodsTemp = goodsService.selectTBaseGoodsByGoodsId(existingStock.getItemCode());
+// // 设定EBS现有量的数据
+// temp.setGoodsId(existingStock.getItemCode());
+// if (goodsTemp != null) {
+// temp.setGoodsName(goodsTemp.getGoodsName());
+// }
+// temp.setLotNumber(existingStock.getLotNumber());
+// temp.setSubInventory(existingStock.getSubinventoryCode());
+// temp.setEbsNum(BigDecimal.valueOf(sum));
+// temp.setWmsNum(BigDecimal.valueOf(0));
+// temp.setDiffNum(BigDecimal.valueOf(sum));
+// temp.setSts("0");
+// ebsStockList.add(temp);
+// }
+
+ // 将不平衡的放到前面
+ ebsStockList.sort(Comparator.comparing(EbsStock::getSts));
+ // 将当前查询出的现有量保存到导出缓存中
+ ebsStockLotListForExport = new ArrayList<>(ebsStockList);
+ logger.info("当前现有量数据(带批次):{}", JSON.toJSONString(ebsStockLotListForExport));
+
+ // 返回分页数据
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+ TableDataInfo rspData = new TableDataInfo();
+ rspData.setCode(0);
+ rspData.setRows(PageUtils.startPageByList(ebsStockList, pageNum, pageSize));
+ rspData.setTotal(new PageInfo(ebsStockList).getTotal());
+ return rspData;
+ }
+
+ /**
+ * 导出EBS现有量记录
+ */
+ @RequiresPermissions("business:ebsConfirm:export")
+ @Log(title = "导出EBS现有量记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/ebsConfirm/export")
+ @ResponseBody
+ public AjaxResult export() {
+ ExcelUtil util = new ExcelUtil(EbsStock.class);
+ return util.exportExcel(ebsStockListForExport, "EBS现有量");
+ }
+
+ /**
+ * 导出EBS现有量记录
+ */
+ @RequiresPermissions("business:ebsConfirm:export")
+ @Log(title = "导出EBS现有量(按批次)记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/ebsConfirmLot/export")
+ @ResponseBody
+ public AjaxResult exportLot() {
+ ExcelUtil util = new ExcelUtil(EbsStock.class);
+ return util.exportExcel(ebsStockLotListForExport, "EBS现有量(按批次)");
+ }
+
+ /**
+ * 创建参数Json
+ *
+ * @return
+ */
+ public JSONObject createJsonGetAll(String subInventoryCode) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", OrderCodeFactory.getOrderCode("ebs", ""));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getExistingStock");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+ baseQueryParams.put("startPosition", 1);
+ baseQueryParams.put("rowsCnt", 2000);
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("itemCode", null);
+ businessData.put("subInventoryCode", subInventoryCode);
+ businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(subInventoryCode));
+ businessData.put("lotNumber", null);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 创建参数Json
+ *
+ * @return
+ */
+ public JSONObject createJsonList(List stocks, String subInventoryCode, String locatorId) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getExistingStock");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+ baseQueryParams.put("startPosition", 1);
+ baseQueryParams.put("rowsCnt", 2000);
+
+ // 创建数据(一起查询)
+ JSONArray jsonArray = new JSONArray();
+ String itemCode = "";
+ String lotNumber = "";
+ for (int i = 0; i < stocks.size(); i++) {
+ if (i == 0) {
+ itemCode = stocks.get(i).getGoodsId();
+ if (StringUtils.isNotEmpty(stocks.get(i).getProduclotid())) {
+ lotNumber = stocks.get(i).getProduclotid();
+ }
+ } else {
+ itemCode += "," + stocks.get(i).getGoodsId();
+ if (StringUtils.isNotEmpty(stocks.get(i).getProduclotid())) {
+ lotNumber += "," + stocks.get(i).getProduclotid();
+ }
+ }
+ }
+ JSONObject businessData = new JSONObject();
+ businessData.put("itemCode", itemCode);
+ businessData.put("subInventoryCode", subInventoryCode);
+ businessData.put("locatorId", locatorId);
+ businessData.put("lotNumber", lotNumber);
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ static class ExistingStock {
+ public String getInventoryItemId() {
+ return inventoryItemId;
+ }
+
+ public void setInventoryItemId(String inventoryItemId) {
+ this.inventoryItemId = inventoryItemId;
+ }
+
+ public String getItemCode() {
+ return itemCode;
+ }
+
+ public void setItemCode(String itemCode) {
+ this.itemCode = itemCode;
+ }
+
+ public String getLotNumber() {
+ return lotNumber;
+ }
+
+ public void setLotNumber(String lotNumber) {
+ this.lotNumber = lotNumber;
+ }
+
+ public String getSubinventoryCode() {
+ return subinventoryCode;
+ }
+
+ public void setSubinventoryCode(String subinventoryCode) {
+ this.subinventoryCode = subinventoryCode;
+ }
+
+ public String getExpirationDate() {
+ return expirationDate;
+ }
+
+ public void setExpirationDate(String expirationDate) {
+ this.expirationDate = expirationDate;
+ }
+
+ public String getOriginationDate() {
+ return originationDate;
+ }
+
+ public void setOriginationDate(String originationDate) {
+ this.originationDate = originationDate;
+ }
+
+ public int getTransactionQuantity() {
+ return transactionQuantity;
+ }
+
+ public void setTransactionQuantity(int transactionQuantity) {
+ this.transactionQuantity = transactionQuantity;
+ }
+
+ public int getPnalQty() {
+ return pnalQty;
+ }
+
+ public void setPnalQty(int pnalQty) {
+ this.pnalQty = pnalQty;
+ }
+
+ public int getOrganizationId() {
+ return organizationId;
+ }
+
+ public void setOrganizationId(int organizationId) {
+ this.organizationId = organizationId;
+ }
+
+ private String inventoryItemId;
+ private String itemCode;
+ private String lotNumber;
+ private String subinventoryCode;
+ private String expirationDate;
+ private String originationDate;
+ private int transactionQuantity;
+ private int pnalQty;
+ private int organizationId;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsReportController.java
new file mode 100644
index 0000000..bda8068
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsReportController.java
@@ -0,0 +1,302 @@
+package com.ruoyi.web.controller.business;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.business.domain.TCkOrderdetail;
+import com.ruoyi.business.domain.TEbsRecord;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITEbsRecordService;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 库存Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/ebsReport")
+public class EbsReportController extends BaseController {
+ private String prefix = "/business/ebsReport";
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @RequiresPermissions("business:ebsReport:view")
+ @GetMapping()
+ public String ebsReport(ModelMap mmap) throws Exception {
+ // 查询账户别名出库的结果
+ TEbsRecord wmsOthersProcResForQuery = new TEbsRecord("wmsOthersProc", 2, configService.selectConfigByKey("ebs_ip"), "", "", "0", "账户别名发放", "", "", "" , null);
+ List wmsOthersProcResList = tEbsRecordService.selectTEbsRecordList(wmsOthersProcResForQuery);
+ // 查询子库存转移的结果
+ TEbsRecord WmsSubInvProcResForQuery = new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"), "", "", "0", "子库存转移", "", "", "" , null);
+ List WmsSubInvProcResList = tEbsRecordService.selectTEbsRecordList(WmsSubInvProcResForQuery);
+ if (wmsOthersProcResList.size() < 1 && WmsSubInvProcResList.size() < 1) {
+ return prefix + "/ebsReport";
+ }
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ // 账户别名发放结果查询
+ for (TEbsRecord wmsOthersProcRes : wmsOthersProcResList) {
+ JSONObject resultJsonWmsOthersProc = (JSONObject) JSON.parseObject(wmsOthersProcRes.getResult()).get("obj");
+ List dataWmsOthersProc = JSON.parseArray(resultJsonWmsOthersProc.getString("rows"), JSONObject.class);
+ String requestId = dataWmsOthersProc.get(0).getString("requestId");
+ String lastUpdateDate = dataWmsOthersProc.get(0).getString("lastUpdateDate");
+ String paramGetOthersInf = JSON.toJSONString(createJsonGetOthersInf(requestId, lastUpdateDate));
+ String resultGetOthersInf = "";
+ try {
+ resultGetOthersInf = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramGetOthersInf, token.get("access_token").toString());
+ } catch (Exception e) {
+ // 接口调用失败
+ return prefix + "/ebsReport";
+ }
+ System.out.println(resultGetOthersInf);
+ JSONObject resultJsonGetOthersInf = (JSONObject) JSON.parseObject(resultGetOthersInf).get("obj");
+ List dataGetOthersInf = JSON.parseArray(resultJsonGetOthersInf.getString("rows"), JSONObject.class);
+ if (dataGetOthersInf.size() > 0 && dataGetOthersInf.get(0).getString("processStatus").equals("SUCCESS")) {
+ // 更新账户别名发放结果
+ wmsOthersProcRes.setStatus("1");
+ wmsOthersProcRes.setResult(resultGetOthersInf);
+ tEbsRecordService.updateTEbsRecord(wmsOthersProcRes);
+ } else if (dataGetOthersInf.size() > 0 && dataGetOthersInf.get(0).getString("processStatus").equals("ERROR")) {
+ // 更新账户别名发放结果
+ wmsOthersProcRes.setStatus("-1");
+ wmsOthersProcRes.setResult(resultGetOthersInf);
+ tEbsRecordService.updateTEbsRecord(wmsOthersProcRes);
+ }
+ }
+ // 子库存转移结果查询
+ for (TEbsRecord WmsSubInvProcRes : WmsSubInvProcResList) {
+ JSONObject resultJsonWmsSubInvProc = (JSONObject) JSON.parseObject(WmsSubInvProcRes.getResult()).get("obj");
+ List dataWmsSubInvProc = JSON.parseArray(resultJsonWmsSubInvProc.getString("rows"), JSONObject.class);
+ String requestId = dataWmsSubInvProc.get(0).getString("requestId");
+ String lastUpdateDate = dataWmsSubInvProc.get(0).getString("lastUpdateDate");
+ String paramGetSubinvInf = JSON.toJSONString(createJsonGetSubinvIntf(requestId, lastUpdateDate));
+ String resultGetSubinvInf = "";
+ try {
+ resultGetSubinvInf = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramGetSubinvInf, token.get("access_token").toString());
+ } catch (Exception e) {
+ // 接口调用失败
+ return prefix + "/ebsReport";
+ }
+ System.out.println(resultGetSubinvInf);
+ JSONObject resultJsonGetSubinvInf = (JSONObject) JSON.parseObject(resultGetSubinvInf).get("obj");
+ List dataGetSubinvInf = JSON.parseArray(resultJsonGetSubinvInf.getString("rows"), JSONObject.class);
+ if (dataGetSubinvInf.size() > 0 && dataGetSubinvInf.get(0).getString("processStatus").equals("SUCCESS")) {
+ // 更新子库存转移
+ WmsSubInvProcRes.setStatus("1");
+ WmsSubInvProcRes.setResult(resultGetSubinvInf);
+ tEbsRecordService.updateTEbsRecord(WmsSubInvProcRes);
+ } else if (dataGetSubinvInf.size() > 0 && dataGetSubinvInf.get(0).getString("processStatus").equals("ERROR")) {
+ // 更新子库存转移
+ WmsSubInvProcRes.setStatus("-1");
+ WmsSubInvProcRes.setResult(resultGetSubinvInf);
+ tEbsRecordService.updateTEbsRecord(WmsSubInvProcRes);
+ }
+ }
+ return prefix + "/ebsReport";
+ }
+
+ @RequiresPermissions("business:ekpReport:view")
+ @GetMapping("/ekp")
+ public String ekpReport(ModelMap mmap) throws Exception {
+ return prefix + "/ekpReport";
+ }
+
+ /**
+ * 查询EBS接口记录
+ */
+ @RequiresPermissions("business:ebsReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TEbsRecord ebsRecord)
+ {
+ startPage();
+ // 子查询写入的ebs。
+ ebsRecord.setApiId(2);
+ List list = tEbsRecordService.selectTEbsRecordList(ebsRecord);
+ return getDataTable(list);
+ }
+
+ /**
+ * 查询ekp申报记录
+ */
+ @RequiresPermissions("business:ekpReport:list")
+ @PostMapping("/ekp/list")
+ @ResponseBody
+ public TableDataInfo ekpList(TEbsRecord ebsRecord)
+ {
+ startPage();
+ // 子查询写入的ebs。
+ ebsRecord.setApiId(3);
+ List list = tEbsRecordService.selectTEbsRecordList(ebsRecord);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出ebs接口记录
+ */
+ @RequiresPermissions("business:ebsReport:export")
+ @Log(title = "导出ebs接口记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TEbsRecord ebsRecord)
+ {
+ // 子查询写入的ebs。
+ ebsRecord.setApiId(2);
+ List list = tEbsRecordService.selectTEbsRecordList(ebsRecord);
+ ExcelUtil util = new ExcelUtil(TEbsRecord.class);
+ return util.exportExcel(list, "ebs接口记录表");
+ }
+
+ /**
+ * 导出ekp申报记录
+ */
+ @RequiresPermissions("business:ekpReport:export")
+ @Log(title = "导出ekp申报记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/ekp/export")
+ @ResponseBody
+ public AjaxResult ekpExport(TEbsRecord ebsRecord)
+ {
+ ebsRecord.setApiId(3);
+ List list = tEbsRecordService.selectTEbsRecordList(ebsRecord);
+ ExcelUtil util = new ExcelUtil(TEbsRecord.class);
+ return util.exportExcel(list, "ekp申报记录");
+ }
+
+ /**
+ * 创建参数Json(子库存转移结果查询)
+ * @return
+ */
+ public JSONObject createJsonGetSubinvIntf(String requestId, String lastUpdateDate) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getSubinvIntf");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("lastUpdateDateF", lastUpdateDate);
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("requestId", requestId);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 创建参数Json(账户别名发放结果查询)
+ * @return
+ */
+ public JSONObject createJsonGetOthersInf(String requestId, String lastUpdateDate) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getOthersIntf");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("lastUpdateDateF", lastUpdateDate);
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("requestId", requestId);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 创建参数Json(EKP申报过期结果查询)
+ * @return
+ */
+ public JSONObject createJsonGetEkpExpireItem(String fdId) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "WMS");
+ systemParams.put("sourceSystem", "WMS");
+ systemParams.put("targetSystem", "EKP");
+ systemParams.put("serviceName", "getEkpExpireItem");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("fdId", fdId);
+ businessData.put("itemNo", "");
+ businessData.put("lotNumber", "");
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyCtlController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyCtlController.java
new file mode 100644
index 0000000..261efee
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyCtlController.java
@@ -0,0 +1,144 @@
+package com.ruoyi.web.controller.business;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.ITBaseHcService;
+import com.ruoyi.business.service.ITOngoodsshelfService;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/business/emptyCtl")
+public class EmptyCtlController extends BaseController {
+ private String prefix = "business/emptyCtl";
+
+ @Autowired
+ private ITBaseHcService tBaseHcService;
+
+ @Autowired
+ private ITOngoodsshelfService tOngoodsshelfService;
+
+ /**
+ * 空托调度
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:emptyCtl:view")
+ @GetMapping()
+ public String ebsConfirm(ModelMap mmap) {
+ mmap.put("hc", new TBaseHC());
+ return prefix + "/emptyCtlControl";
+ }
+
+ /**
+ * 查询缓存位列表
+ */
+ @RequiresPermissions("business:emptyCtl:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TBaseHC tBaseHC)
+ {
+ startPage();
+ List list = tBaseHcService.list(new LambdaQueryWrapper()
+ .eq(StringUtils.isNotEmpty(tBaseHC.getAreaCode()), TBaseHC::getAreaCode, tBaseHC.getAreaCode()));
+ return getDataTable(list);
+ }
+
+ /**
+ * 选择移库库位
+ */
+ @RequiresPermissions("business:emptyCtl:edit")
+ @GetMapping("/emptyCtlInputModal/{areaCode}")
+ public String selMoveLocation(@PathVariable("areaCode") String areaCode, ModelMap mmap)
+ {
+ mmap.put("areaCode", areaCode);
+ return prefix + "/emptyCtlInputModal";
+ }
+
+ /**
+ * 生成空托->缓存位任务
+ */
+ @RequiresPermissions("business:emptyCtl:edit")
+ @Log(title = "生成空托->缓存位任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/inEmptyCtl")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult inEmptyCtl(TBaseHC tBaseHC) {
+ if (tBaseHC == null || StringUtils.isEmpty(tBaseHC.getAreaCode())
+ || StringUtils.isEmpty(tBaseHC.getLastCtl())) {
+ return error("参数缺少缓存位或托盘号。");
+ }
+ // 查询当前缓存位是否已经有任务
+ TOngoodsshelf query = new TOngoodsshelf();
+ query.setTasktype(String.valueOf(11));
+ query.setAgvbgn("D00591");
+ query.setAgvend(tBaseHC.getAreaCode());
+ List oldTaskList = tOngoodsshelfService.selectTOngoodsshelfList(query);
+ if (oldTaskList != null && oldTaskList.size() > 0) {
+ return error("当前缓存位已有任务,请勿重复下发。");
+ }
+ // 生成任务
+ TOngoodsshelf newTask = new TOngoodsshelf();
+ newTask.setLotId(OrderCodeFactory.getOrderCode("INEMPTY", ""));
+ newTask.setTasktype(String.valueOf(11));
+ newTask.setInstatus("0");
+ newTask.setAgvbgn("D00591");
+ newTask.setAgvend(tBaseHC.getAreaCode());
+ int insertResult = tOngoodsshelfService.insertTOngoodsshelf(newTask);
+ if (insertResult > 0) {
+ return success("生成任务成功。");
+ } else {
+ return error("生成任务失败。");
+ }
+ }
+
+ /**
+ * 生成缓存位->月台任务
+ */
+ @RequiresPermissions("business:emptyCtl:edit")
+ @Log(title = "生成缓存位->月台任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/outEmptyCtl")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult outEmptyCtl(TBaseHC tBaseHC) {
+ if (tBaseHC == null || StringUtils.isEmpty(tBaseHC.getAreaCode())) {
+ return error("参数缺少缓存位。");
+ }
+ TOngoodsshelf query = new TOngoodsshelf();
+ query.setTasktype(String.valueOf(12));
+ query.setAgvbgn(tBaseHC.getAreaCode());
+ query.setAgvend("PPS02");
+ List oldTaskList = tOngoodsshelfService.selectTOngoodsshelfList(query);
+ if (oldTaskList != null && oldTaskList.size() > 0) {
+ return error("当前缓存位已有任务,请勿重复下发。");
+ }
+ // 生成任务
+ TOngoodsshelf newTask = new TOngoodsshelf();
+ newTask.setLotId(OrderCodeFactory.getOrderCode("OUTEMPTY", ""));
+ newTask.setTasktype(String.valueOf(12));
+ newTask.setInstatus("0");
+ newTask.setAgvbgn(tBaseHC.getAreaCode());
+ newTask.setAgvend("PPS02");
+ int insertResult = tOngoodsshelfService.insertTOngoodsshelf(newTask);
+ if (insertResult > 0) {
+ return success("生成任务成功。");
+ } else {
+ return error("生成任务失败。");
+ }
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyStockController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyStockController.java
new file mode 100644
index 0000000..7a26da7
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EmptyStockController.java
@@ -0,0 +1,83 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import com.ruoyi.framework.web.service.DictService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 空托盘库存表Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/emptyReport")
+public class EmptyStockController extends BaseController
+{
+ private String prefix = "business/stockReport";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:emptyReport:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/emptyReport";
+ }
+
+ /**
+ * 查询空托盘库存
+ */
+ @RequiresPermissions("business:emptyReport:list")
+ @PostMapping("/empty")
+ @ResponseBody
+ public TableDataInfo empty(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectStockEmpty(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出库存列表
+ */
+ @RequiresPermissions("business:emptyReport:export")
+ @Log(title = "空托盘库存表", businessType = BusinessType.EXPORT)
+ @PostMapping("/emptyExport")
+ @ResponseBody
+ public AjaxResult emptyExport(TMiStock tMiStock)
+ {
+ List list = tMiStockService.selectStockEmpty(tMiStock);
+ ExcelUtil util = new ExcelUtil(TMiStock.class);
+ return util.exportExcel(list, "空托盘库存表");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodReportController.java
new file mode 100644
index 0000000..f399c6e
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodReportController.java
@@ -0,0 +1,113 @@
+package com.ruoyi.web.controller.business;
+
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.service.DictService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 库存Controller
+ *
+ * @author wms
+ * @date 2022-07-26
+ */
+@Controller
+@RequestMapping("/business/goodsReport")
+public class GoodReportController extends BaseController {
+ private String prefix = "business/goodsReport";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:goodsReport:view")
+ @GetMapping()
+ public String goodReport(ModelMap mmap)
+ {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/goodReport";
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:goodsReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TMiStock tMiStock)
+ {
+ startPage();
+// tMiStock.setSts(dict.getType("stock_sts").get(0).getDictValue());
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出库存列表
+ */
+ @RequiresPermissions("business:goodsReport:export")
+ @Log(title = "库存", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TMiStock tMiStock)
+ {
+ List list = tMiStockService.selectStock(tMiStock);
+ ExcelUtil util = new ExcelUtil(TMiStock.class);
+ return util.exportExcel(list, "库存数据");
+ }
+
+ /**
+ * 新增库存
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/stockModal";
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+
+ /**
+ * 根据状态筛选库存数据
+ */
+ @PostMapping("/filter/{sts}")
+ @ResponseBody
+ public TableDataInfo filter(@PathVariable("sts") String sts)
+ {
+ startPage();
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setSts(sts);
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodsScrapController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodsScrapController.java
new file mode 100644
index 0000000..28b7f47
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/GoodsScrapController.java
@@ -0,0 +1,122 @@
+package com.ruoyi.web.controller.business;
+
+import com.ruoyi.business.domain.TCkPickingwavegoods;
+import com.ruoyi.business.domain.TConveyorStatus;
+import com.ruoyi.business.service.ITCkPickingwavegoodsService;
+import com.ruoyi.business.service.ITConveyorStatusService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 报废管理Controller
+ *
+ * @author hw
+ * @date 2022-06-25
+ */
+@Controller
+@RequestMapping("/business/goodsScrap")
+public class GoodsScrapController extends BaseController
+{
+ private String prefix = "business/goodsScrap";
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITConveyorStatusService itConveyorStatusService;
+
+ @RequiresPermissions("business:goodsScrap:view")
+ @GetMapping()
+ public String goodsScrapInit(ModelMap mmap)
+ {
+ // 获取当前用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+
+ TConveyorStatus tConveyorStatus = new TConveyorStatus();
+ // 用户登录IP
+ tConveyorStatus.setPcip(ShiroUtils.getIp());
+ List tConveyorStatusList = itConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ if (tConveyorStatusList != null && tConveyorStatusList.size() > 0) {
+ tConveyorStatus = tConveyorStatusList.get(0);
+ // 获取用户登录的站台号
+ sysUser.setOutStand(tConveyorStatus.getConveryorId());
+ }
+ mmap.put("sysUser", sysUser);
+ return prefix + "/goodsScrap";
+ }
+
+ /**
+ * 查询出库物料明细列表
+ */
+ @RequiresPermissions("business:goodsScrap:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 修改出库任务
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @Log(title = "出库物料明细", businessType = BusinessType.UPDATE)
+ @PostMapping("/updateResult")
+ @ResponseBody
+ public AjaxResult updateResult(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(tCkPickingwavegoods));
+ }
+
+ /**
+ * 判断站台上的空托盘是否为空,如果不为空,根据托盘号获取出库任务信息
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @GetMapping("/queryByCtl")
+ @ResponseBody
+ public AjaxResult queryByCtl()
+ {
+ TConveyorStatus tConveyorStatus = new TConveyorStatus();
+ // 用户登录IP
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tConveyorStatus.setPcip(ShiroUtils.getIp());
+
+ List tConveyorStatusList = itConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ if (tConveyorStatusList != null && tConveyorStatusList.size() > 0) {
+ tConveyorStatus = tConveyorStatusList.get(0);
+
+ // 判断当前站台上的托盘是否为空,不为空时,根据托盘获取出库任务数据
+ if (StringUtils.isNotEmpty(tConveyorStatus.getBarcode())) {
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ // 托盘号
+ tCkPickingwavegoods.setCtl(tConveyorStatus.getBarcode());
+ // 状态
+ tCkPickingwavegoods.setOutstatus("0");
+ // 站台号
+ tCkPickingwavegoods.setOutstand(tConveyorStatus.getConveryorId());
+ // 获取任务列表
+ List tCkPickingwavegoodsList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (tCkPickingwavegoodsList != null && tCkPickingwavegoodsList.size() > 0) {
+ return success(tCkPickingwavegoodsList.get(0));
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/InspectReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/InspectReportController.java
new file mode 100644
index 0000000..9d712c8
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/InspectReportController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+
+import com.ruoyi.business.domain.TInspectReport;
+import com.ruoyi.business.service.ITInspectReportService;
+import com.ruoyi.framework.web.service.DictService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 检验记录报表Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/inspectReport")
+public class InspectReportController extends BaseController
+{
+ private String prefix = "business/inspectReport";
+
+ @Autowired
+ private ITInspectReportService tInspectReportService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:inspectReport:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("tInspectReport", new TInspectReport());
+ return prefix + "/inspectReportMain";
+ }
+
+ /**
+ * 查询检验记录报表
+ */
+ @RequiresPermissions("business:inspectReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo empty(TInspectReport tInspectReport)
+ {
+ startPage();
+ List list = tInspectReportService.selectTInspectReportList(tInspectReport);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出检验记录报表
+ */
+ @RequiresPermissions("business:inspectReport:export")
+ @Log(title = "导出检验记录表", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult emptyExport(TInspectReport tInspectReport)
+ {
+ List list = tInspectReportService.selectTInspectReportList(tInspectReport);
+ ExcelUtil util = new ExcelUtil(TInspectReport.class);
+ return util.exportExcel(list, "检验记录报表");
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/LocationController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/LocationController.java
new file mode 100644
index 0000000..5a3df80
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/LocationController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.web.controller.business;
+
+import com.ruoyi.business.domain.TBaseStorageAreaLocation;
+import com.ruoyi.business.domain.TOngoodsshelf;
+import com.ruoyi.business.domain.Task;
+import com.ruoyi.business.service.ITBaseStorageAreaLocationService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("/business/locationMonitor")
+public class LocationController extends BaseController {
+ private String prefix = "business/locationMonitor";
+ @Autowired
+ private ITBaseStorageAreaLocationService locationService;
+
+ @RequiresPermissions("business:locationMonitor:view")
+ @GetMapping()
+ public String locationMonitor(ModelMap mmap)
+ {
+ mmap.put("locationMonitor", new TBaseStorageAreaLocation());
+ return prefix + "/locationMonitor";
+ }
+
+ /**
+ * 查询库位列表
+ */
+ @RequiresPermissions("business:locationMonitor:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TBaseStorageAreaLocation location)
+ {
+ startPage();
+ return getDataTable(locationService.selectTBaseStorageAreaLocationList(location));
+ }
+
+ /**
+ * 是否锁定库位
+ */
+ @Log(title = "是否锁定库位", businessType = BusinessType.UPDATE)
+ @PostMapping("/lockLocation")
+ @ResponseBody
+ @RequiresPermissions("business:locationMonitor:update")
+ public AjaxResult lockLocation(TBaseStorageAreaLocation location) {
+ try {
+ TBaseStorageAreaLocation currentLocation = locationService.selectTBaseStorageAreaLocationByLocationId(location.getLocationId());
+ if (currentLocation != null && StringUtils.isNotEmpty(location.getIslock())) {
+ currentLocation.setIslock(location.getIslock());
+ locationService.updateTBaseStorageAreaLocation(currentLocation);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+
+ /**
+ * 是否占用库位
+ */
+ @Log(title = "是否占用库位", businessType = BusinessType.UPDATE)
+ @PostMapping("/occupyLocation")
+ @ResponseBody
+ @RequiresPermissions("business:locationMonitor:update")
+ public AjaxResult occupyLocation(TBaseStorageAreaLocation location) {
+ try {
+ TBaseStorageAreaLocation currentLocation = locationService.selectTBaseStorageAreaLocationByLocationId(location.getLocationId());
+ if (currentLocation != null && StringUtils.isNotEmpty(location.getStatus())) {
+ currentLocation.setStatus(location.getStatus());
+ locationService.updateTBaseStorageAreaLocation(currentLocation);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/MesTaskManageController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/MesTaskManageController.java
new file mode 100644
index 0000000..7bdbc6b
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/MesTaskManageController.java
@@ -0,0 +1,556 @@
+package com.ruoyi.web.controller.business;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.framework.web.service.DictService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * Mes出库任务控制类
+ *
+ * @author liangzhou
+ * @date 2022-09-29
+ */
+@Controller
+@RequestMapping("/business/mesManage")
+public class MesTaskManageController extends BaseController {
+ private String prefix = "business/mesManage";
+
+ @Autowired
+ private ITConveyorStatusService tConveyorStatusService;
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITConveyorStatusService itConveyorStatusService;
+
+ @Autowired
+ private ITCkOrderdetailService tCkOrderdetailService;
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private IVehicleService vehicleService;
+
+ @Autowired
+ private IOrderManageService orderManageService;
+
+ @Autowired
+ private ITCkPicktaskService tCkPicktaskService;
+
+ @Autowired
+ private DictService dict;
+
+ /**
+ * 工单出库界面
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:orderTask:view")
+ @GetMapping("/orderTaskOut")
+ public String orderTaskOut(ModelMap mmap) {
+ // 获取当前用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+
+ TConveyorStatus tConveyorStatus = new TConveyorStatus();
+ // 用户登录IP
+ tConveyorStatus.setPcip(ShiroUtils.getIp());
+ sysUser.setLoginIp(ShiroUtils.getIp());
+
+ List tConveyorStatusList = itConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ if (tConveyorStatusList != null && tConveyorStatusList.size() > 0) {
+ tConveyorStatus = tConveyorStatusList.get(0);
+ // 获取用户登录的站台号
+ sysUser.setOutStand(tConveyorStatus.getConveryorId());
+ }
+ mmap.put("sysUser", sysUser);
+ mmap.put("orderManage", new OrderManage());
+ return prefix + "/orderTaskOut";
+ }
+
+ /**
+ * 工单出库界面详情
+ */
+ @RequiresPermissions("business:orderTask:list")
+ @PostMapping("/orderTaskOut/main")
+ @ResponseBody
+ public TableDataInfo taskOutMain(TCkPickingwavegoods tCkPickingwavegoods) {
+ startPage();
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 工单出库任务执行
+ */
+ @RequiresPermissions("business:orderTask:add")
+ @Log(title = "工单出库", businessType = BusinessType.INSERT)
+ @PostMapping("/orderTaskOut/updateTask")
+ @ResponseBody
+ public AjaxResult updateTask(TCkOrderdetail tCkOrderdetail) {
+ // 检查当前站台是否有正在出库的任务
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ tCkPickingwavegoods.setOutstand(tCkOrderdetail.getOutStand());
+ List outTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (outTaskList.size() > 0) {
+ return success("-2");
+ }
+
+ // 更新(未选择则默认选择第一条)
+ OrderManage orderManageForSel = new OrderManage();
+ orderManageForSel.setGoodsId(tCkOrderdetail.getGoodId());
+ orderManageForSel.setStatus("0");
+ List mesTaskList = orderManageService.selectOrderListForOut(orderManageForSel);
+ if (mesTaskList.size() < 0) {
+ // 返回无任务
+ return success("-3");
+ }
+
+ // start 检查当前库存是否充足(只查合格品)
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setGoodsId(mesTaskList.get(0).getGoodsId());
+ tMiStock.setSts("0");
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ if (list.size() > 0) {
+ if (list.get(0).getShelvesNum().compareTo(mesTaskList.get(0).getWaitNum()) >= 0) {// 库存充足
+ TCkOrderdetail tCkOrderdetailForOut = new TCkOrderdetail();
+ tCkOrderdetailForOut.setGoodId(mesTaskList.get(0).getGoodsId());
+ tCkOrderdetailForOut.setOutStand(tCkOrderdetail.getOutStand());
+ tCkOrderdetailForOut.setPickNum(mesTaskList.get(0).getWaitNum());
+ tCkOrderdetailForOut.setCkId(OrderCodeFactory.getOrderCode("CK", ""));
+ tCkOrderdetailForOut.setCkType("4");
+ tCkOrderdetailForOut.setStatus("0");
+ tCkOrderdetailForOut.setAddtime(new Date());
+ // 用户名为MES
+ tCkOrderdetailForOut.setUserName("MES");
+ return toAjax(tCkOrderdetailService.insertTCkOrderdetail(tCkOrderdetailForOut));
+ } else {// 库存不足
+ return success("0");
+ }
+ }
+ // end 检查当前库存是否充足
+ return success("-1");
+ }
+
+ /**
+ * 工单拣选
+ */
+ @RequiresPermissions("business:orderTask:add")
+ @Log(title = "工单拣选出库", businessType = BusinessType.INSERT)
+ @PostMapping("/orderTaskOut/checkOut")
+ @ResponseBody
+ public AjaxResult orderCheckOut(TCkPickingwavegoods tCkPickingwavegoods) {
+ // 查询当前操作工单
+ OrderManage orderManageForUpdate = orderManageService.selectOrderManageByOrderId(tCkPickingwavegoods.getOutId());
+ // 插入任务成功,同时更新当前的工单信息,并且导出下一条待出库工单
+ if (orderManageForUpdate.getWaitNum().compareTo(tCkPickingwavegoods.getPickingNum()) < 0) {// 发料数量不够
+ // 更新已发数量
+ orderManageForUpdate.setFinishNum(orderManageForUpdate.getFinishNum().add(tCkPickingwavegoods.getPickingNum()));
+ // 更新待发数量
+ orderManageForUpdate.setWaitNum(orderManageForUpdate.getWaitNum().subtract(tCkPickingwavegoods.getPickingNum()));
+ // 更新当前出库任务信息为可回库
+ tCkPickingwavegoods.setOutstatus("3");
+ List waitForScanTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForScanTaskList.size() < 1) {
+ return error("0");
+ }
+ TCkPickingwavegoods scanTask = waitForScanTaskList.get(0);
+ scanTask.setOutstatus("4");
+ if (tCkPickingwavegoodsService.updateScanGoodsResult(scanTask) < 1) {
+ return error("-2");
+ }
+ } else {
+ // 更新已发数量
+ orderManageForUpdate.setFinishNum(orderManageForUpdate.getNeedNum());
+ // 更新待发数量
+ orderManageForUpdate.setWaitNum(BigDecimal.ZERO);
+ // 状态置为完成
+ orderManageForUpdate.setStatus("1");
+ // 插入任务
+ if (!createPickTask(tCkPickingwavegoods)) {
+ return error("-2");
+ }
+ }
+ if (orderManageService.updateOrderManage(orderManageForUpdate) > 0) {
+ // 获取下一条工单
+ return success(orderManageService.selectNextOrder(tCkPickingwavegoods.getGoodId()));
+ } else {
+ // 更新当前出库任务信息为可回库
+ tCkPickingwavegoods.setOutstatus("3");
+ List waitForScanTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForScanTaskList.size() < 1) {
+ return error("0");
+ }
+ TCkPickingwavegoods scanTask = waitForScanTaskList.get(0);
+ scanTask.setOutstatus("4");
+ if (tCkPickingwavegoodsService.updateScanGoodsResult(scanTask) < 1) {
+ return error("-2");
+ }
+ }
+
+ return success();
+ }
+
+ /**
+ * 结束本次发料
+ */
+ @RequiresPermissions("business:orderTask:add")
+ @Log(title = "结束本次发料", businessType = BusinessType.INSERT)
+ @PostMapping("/orderTaskOut/endGoodsOut")
+ @ResponseBody
+ public AjaxResult endGoodsOut(TCkPickingwavegoods tCkPickingwavegoods) {
+ // 更新当前出库任务信息为可回库
+ tCkPickingwavegoods.setOutstatus("3");
+ List waitForScanTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForScanTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods scanTask = waitForScanTaskList.get(0);
+ scanTask.setOutstatus("4");
+ if (tCkPickingwavegoodsService.updateScanGoodsResult(scanTask) < 1) {
+ return success("-2");
+ }
+ return success("1");
+ }
+
+ /**
+ * 生成一个工单任务
+ *
+ * @param tCkPickingwavegoods
+ * @return
+ */
+ private boolean createPickTask(TCkPickingwavegoods tCkPickingwavegoods) {
+ TCkPicktask tCkPicktask = new TCkPicktask();
+ // 任务号
+ tCkPicktask.setTaskid(OrderCodeFactory.getOrderCode("CK", ""));
+ // 任务类型
+ tCkPicktask.setTaskType(2);
+ // 起始站台号
+ tCkPicktask.setOrigin(Objects.equals(tCkPickingwavegoods.getOutstand(), "1001") ? "306" : "406");
+ // 托盘号
+ Vehicle vehicle_sel = new Vehicle();
+ vehicle_sel.setStandId(Objects.equals(tCkPickingwavegoods.getOutstand(), "1001") ? "305" : "405");
+ vehicle_sel.setStatus("0");
+ List vehicleSelList = vehicleService.selectVehicleList(vehicle_sel);
+ if (vehicleSelList.size() < 1) {
+ return false;
+ }
+ tCkPicktask.setVesselNo(vehicleSelList.get(0).getVehicleId());
+ // 任务状态
+ tCkPicktask.setTaskStatus(0);
+ // 创建时间
+ tCkPicktask.setCreateTime(new Date());
+ // 工单
+ tCkPicktask.setWipentity(tCkPickingwavegoods.getCustomermemberid());
+ // 物料编码
+ tCkPicktask.setGoodsId(tCkPickingwavegoods.getGoodId());
+ // 数量
+ tCkPicktask.setGoodsNum(tCkPickingwavegoods.getPickingNum());
+ // 批次号
+ tCkPicktask.setBatchNo(tCkPickingwavegoods.getProduclotid());
+
+ return tCkPicktaskService.insertTCkPicktask(tCkPicktask) > 0;
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/orderTaskOut/pickingTask")
+ public String pickingTask() {
+ return prefix + "/pickingTask";
+ }
+
+ /**
+ * 查询工单出库任务列表
+ */
+ @RequiresPermissions("business:orderTask:list")
+ @PostMapping("/orderTaskOut/query")
+ @ResponseBody
+ public TableDataInfo pickingTaskQuery(OrderManage orderManage) {
+ startPage();
+ List list = orderManageService.selectOrderListForOut(orderManage);
+ return getDataTable(list);
+ }
+
+ /**
+ * 工单管理界面
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:orderTaskManage:view")
+ @GetMapping("/orderTaskManage")
+ public String orderTaskManage(ModelMap mmap) {
+ mmap.put("orderManage", new OrderManage());
+ return prefix + "/orderTaskManage";
+ }
+
+ /**
+ * 工单管理界面详情
+ */
+ @RequiresPermissions("business:orderTaskManage:list")
+ @PostMapping("/orderTaskManage/main")
+ @ResponseBody
+ public TableDataInfo taskMain(OrderManage orderManage) {
+ startPage();
+ List list = orderManageService.selectOrderManageList(orderManage);
+ return getDataTable(list);
+ }
+
+ /**
+ * 更改工单顺序
+ */
+ @RequiresPermissions("business:orderTaskManage:update")
+ @Log(title = "更改工单顺序", businessType = BusinessType.UPDATE)
+ @PostMapping("/orderTaskManage/reorder")
+ @ResponseBody
+ public AjaxResult reorder(OrderManage orderManage) {
+ // 查询需要调整的工单
+ OrderManage orM = orderManageService.selectOrderManageList(orderManage).get(0);
+ // 查询上一条工单
+ OrderManage preOrder = orderManageService.selectPreOrder(orM);
+ // 更新顺序
+ orderManage.setSortIndex(preOrder.getSortIndex());
+ return success(orderManageService.upOneOrder(orderManage) > 0 ? "1" : "0");
+ }
+
+ /**
+ * 工单取消
+ *
+ * @param orderIds
+ * @return
+ */
+ @Log(title = "工单取消", businessType = BusinessType.UPDATE)
+ @RequiresPermissions("business:orderTaskManage:cancel")
+ @PostMapping("/orderTaskManage/cancelOrder")
+ @ResponseBody
+ public AjaxResult cancelOrder(String orderIds) {
+ // 取消工单
+ if (orderManageService.cancelOrdersByOrderIds(orderIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 载具A界面
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:vehicle:view")
+ @GetMapping("/vehicleA")
+ public String vehicleA(ModelMap mmap) {
+ // 站台状态---是否启用
+ String switchA = "1";
+ TConveyorStatus status = new TConveyorStatus();
+ status.setConveryorId("1001");
+ List tConveyorStatuses = tConveyorStatusService.selectTConveyorStatusList(status);
+ if(tConveyorStatuses != null && tConveyorStatuses.size() > 0) {
+ switchA = tConveyorStatuses.get(0).getMovests();
+ }
+ mmap.put("switchA", switchA);
+ mmap.put("vehicleA", new Vehicle());
+ return prefix + "/vehicleA";
+ }
+
+ /**
+ * 查询载具A的详情
+ */
+ @RequiresPermissions("business:vehicle:list")
+ @PostMapping("/vehicleA/vehicleInfo")
+ @ResponseBody
+ public TableDataInfo vehicleAInfo(Vehicle vehicleA) {
+ startPage();
+ vehicleA.setStandId("A");
+ List list = vehicleService.selectVehicleList(vehicleA);
+ return getDataTable(list);
+ }
+
+ /**
+ * 载具A更改状态为已出库
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "更改载具状态", businessType = BusinessType.UPDATE)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleA/checkOut")
+ @ResponseBody
+ public AjaxResult checkOutA(String vehicleIds) {
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 取消此条agv任务,同时重新下发一条agv取载具的命令
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "呼叫AGV工单出库", businessType = BusinessType.INSERT)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleA/callAgvOut")
+ @ResponseBody
+ public AjaxResult callAgvOutA(String vehicleIds) {
+ // TODO: 2022/11/7 具体实现未确定
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 呼叫AGV取空载具
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "呼叫AGV取空载具", businessType = BusinessType.INSERT)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleA/callAgvTakeEmpty")
+ @ResponseBody
+ public AjaxResult callAgvTakeEmptyA(String vehicleIds) {
+ // TODO: 2022/11/7 具体实现未确定
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 载具B界面
+ *
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:vehicle:view")
+ @GetMapping("/vehicleB")
+ public String vehicleB(ModelMap mmap) {
+ // 站台状态---是否启用
+ String switchB = "1";
+ TConveyorStatus status = new TConveyorStatus();
+ status.setConveryorId("1002");
+ List tConveyorStatuses = tConveyorStatusService.selectTConveyorStatusList(status);
+ if(tConveyorStatuses != null && tConveyorStatuses.size() > 0) {
+ switchB = tConveyorStatuses.get(0).getMovests();
+ }
+ mmap.put("switchB", switchB);
+ mmap.put("vehicleB", new Vehicle());
+ return prefix + "/vehicleB";
+ }
+
+ /**
+ * 查询载具B的详情
+ */
+ @RequiresPermissions("business:vehicle:list")
+ @PostMapping("/vehicleB/vehicleInfo")
+ @ResponseBody
+ public TableDataInfo vehicleBInfo(Vehicle vehicleB) {
+ startPage();
+ vehicleB.setStandId("B");
+ List list = vehicleService.selectVehicleList(vehicleB);
+ return getDataTable(list);
+ }
+
+ /**
+ * 载具B更改状态为已出库
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "更改载具状态", businessType = BusinessType.INSERT)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleB/checkOut")
+ @ResponseBody
+ public AjaxResult checkOutB(String vehicleIds) {
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 取消此条agv任务,同时重新下发一条agv取载具的命令
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "呼叫AGV工单出库", businessType = BusinessType.INSERT)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleB/callAgvOut")
+ @ResponseBody
+ public AjaxResult callAgvOutB(String vehicleIds) {
+ // TODO: 2022/11/7 具体实现未确定
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 呼叫AGV取空载具
+ *
+ * @param vehicleIds
+ * @return
+ */
+ @Log(title = "呼叫AGV取空载具", businessType = BusinessType.INSERT)
+ @RequiresPermissions("business:vehicle:update")
+ @PostMapping("/vehicleB/callAgvTakeEmpty")
+ @ResponseBody
+ public AjaxResult callAgvTakeEmptyB(String vehicleIds) {
+ // TODO: 2022/11/7 具体实现未确定
+ // 更改载具状态
+ if (vehicleService.updateVehicleStsByVehicleIds(vehicleIds) > 0) {
+ return success();
+ }
+ return error();
+ }
+
+ /**
+ * 回库
+ */
+ @Log(title = "返库", businessType = BusinessType.UPDATE)
+ @PostMapping("/backStock")
+ @ResponseBody
+ public AjaxResult backStock(TCkPickingwavegoods tCkPickingwavegoods) {
+ TCkPickingwavegoods forSel = new TCkPickingwavegoods();
+ forSel.setOutstand(tCkPickingwavegoods.getOutstand());
+ forSel.setOutstatus("4");
+ List waitForBackTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(forSel);
+ if (waitForBackTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods backTask = waitForBackTaskList.get(0);
+ backTask.setOutstatus("2");
+ // 更新实际拣货数量
+ backTask.setPickingNum(tCkPickingwavegoods.getPickingNum());
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(backTask));
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/OnlineInspectionController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/OnlineInspectionController.java
new file mode 100644
index 0000000..f6bd8a2
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/OnlineInspectionController.java
@@ -0,0 +1,270 @@
+package com.ruoyi.web.controller.business;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.business.domain.TEbsRecord;
+import com.ruoyi.business.domain.TInspectReport;
+import com.ruoyi.business.service.ITEbsRecordService;
+import com.ruoyi.business.service.ITInspectReportService;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.framework.web.service.DictService;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 在线检验不合格Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/onlineInspection")
+public class OnlineInspectionController extends BaseController
+{
+ private String prefix = "business/onlineInspection";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITInspectReportService tInspectReportService;
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:onlineInspection:view")
+ @GetMapping()
+ public String stock(ModelMap mmap) throws Exception {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/onlineInspection";
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:onlineInspection:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TMiStock tMiStock)
+ {
+ startPage();
+// tMiStock.setSts(dict.getType("stock_sts").get(0).getDictValue());
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 在线检验界面
+ */
+ @RequiresPermissions("business:onlineInspection:edit")
+ @GetMapping("/edit/{data}")
+ public String edit(@PathVariable("data") String data, ModelMap mmap)
+ {
+ Map dataMap = JSON.parseObject(data);
+ TMiStock tMiStockQuery = new TMiStock();
+ tMiStockQuery.setGoodsId(String.valueOf(dataMap.get("goodsId")));
+ tMiStockQuery.setProduclotid(String.valueOf(dataMap.get("produclotid")));
+ tMiStockQuery.setCtl(String.valueOf(dataMap.get("ctl")));
+// tMiStockQuery.setGoodsId(goodsId);
+ TMiStock tMiStock = tMiStockService.selectStock(tMiStockQuery).get(0);
+ mmap.put("tMiStock", tMiStock);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 更新库存状态
+ */
+ @Log(title = "更新库存状态", businessType = BusinessType.UPDATE)
+ @RequiresPermissions("business:onlineInspection:edit")
+ @PostMapping("/update")
+ @ResponseBody
+ public AjaxResult update(TMiStock tMiStock) throws Exception {
+ TMiStock tMiStockSel = new TMiStock();
+ tMiStockSel.setGoodsId(tMiStock.getGoodsId());
+ tMiStockSel.setProduclotid(tMiStock.getProduclotid());
+ tMiStockSel.setCtl(tMiStock.getCtl());
+ TMiStock tMiStockUpdate = tMiStockService.selectStock(tMiStockSel).get(0);
+ tMiStockUpdate.setMark(tMiStock.getMark());
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ if (Objects.equals(tMiStockUpdate.getSts(), dict.getType("stock_sts").get(0).getDictValue())) {
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(tMiStockUpdate,
+ tMiStockUpdate.getWhseloc(),
+ "121-124"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ tMiStockUpdate.setSts(dict.getType("stock_sts").get(1).getDictValue());
+ tMiStockUpdate.setWhseloc("121-124");
+ } else {
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(tMiStockUpdate,
+ tMiStockUpdate.getWhseloc(),
+ "121-108"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ JSONObject resultJsonWmsSubInvProc = (JSONObject) JSON.parseObject(resultWmsSubInvProc).get("obj");
+ List dataWmsSubInvProc = JSON.parseArray(resultJsonWmsSubInvProc.getString("rows"), JSONObject.class);
+ if (!dataWmsSubInvProc.get(0).getString("processStatus").equals("PROCESSING")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ return error(dataWmsSubInvProc.get(0).getString("errorMsg"));
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", tMiStockUpdate.getGoodsId(), tMiStockUpdate.getGoodsName(), tMiStockUpdate.getProduclotid(), tMiStockUpdate.getShelvesNum()));
+ tMiStockUpdate.setSts(dict.getType("stock_sts").get(0).getDictValue());
+ tMiStockUpdate.setWhseloc("121-108");
+ }
+
+ // 库存状态更新成功之后,插入检验记录表
+ if (tMiStockService.updateTMiStock(tMiStockUpdate) > 0) {
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ TInspectReport tInspectReport = new TInspectReport();
+ tInspectReport.setInspectid(OrderCodeFactory.getOrderCode("JY", ""));
+ tInspectReport.setGoodsid(tMiStockUpdate.getGoodsId());
+ tInspectReport.setCtl(tMiStockUpdate.getCtl());
+ tInspectReport.setGoodsname(tMiStockUpdate.getGoodsName());
+ tInspectReport.setProductlotid(tMiStockUpdate.getProduclotid());
+ tInspectReport.setProvider(tMiStockUpdate.getProviderId());
+ tInspectReport.setProductiondate(tMiStockUpdate.getProductionDate());
+ tInspectReport.setExpirationdate(tMiStockUpdate.getExpirationDate());
+ tInspectReport.setShelfnum(tMiStockUpdate.getShelvesNum().toString());
+ tInspectReport.setCreateTime(new Date());
+ tInspectReport.setUsername(sysUser.getUserName());
+ tInspectReport.setStatus(tMiStockUpdate.getSts());
+ tInspectReport.setLocation(tMiStockUpdate.getLocationId());
+ if (tInspectReportService.insertTInspectReport(tInspectReport) > 0) {
+ return success();
+ }
+ }
+ return error();
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+
+ /**
+ * 创建参数Json(子库存转移)
+ * @return
+ */
+ public JSONObject createJsonWmsSubInvProc(TMiStock wmsStock, String fromSubInventoryCode, String toSubInventoryCode) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "wmsSubInvProc");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "E");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("transTypeId", 2);
+ businessData.put("organizationId", configService.selectConfigByKey("organizationId"));
+ businessData.put("itemId", wmsStock.getGoodsTypeid());
+ businessData.put("quantity", wmsStock.getShelvesNum());
+ businessData.put("subInventory", fromSubInventoryCode);
+ businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(fromSubInventoryCode));
+ businessData.put("transDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ businessData.put("transUom", wmsStock.getGoodsMeasureId());
+ businessData.put("transSubInventory", toSubInventoryCode);
+ businessData.put("transLocatorId", EbsUtils.LOCATOR_AREA_MAP.get(toSubInventoryCode));
+ businessData.put("transLotNumber", wmsStock.getProduclotid());
+ businessData.put("sourceHeaderId", 1);
+ businessData.put("sourceLineId", 1);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/QualityInspectController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/QualityInspectController.java
new file mode 100644
index 0000000..f16b026
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/QualityInspectController.java
@@ -0,0 +1,216 @@
+package com.ruoyi.web.controller.business;
+
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 品质检验Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/qualityInspect")
+public class QualityInspectController extends BaseController {
+ private String prefix = "business/qualityInspect";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITCkPickingwavegoodsBackService tCkPickingwavegoodsBackService;
+
+ @Autowired
+ private ITCkOrderdetailService tCkOrderdetailService;
+
+ @Autowired
+ private ITConveyorStatusService itConveyorStatusService;
+
+ @RequiresPermissions("business:qualityInspect:view")
+ @GetMapping()
+ public String main(ModelMap mmap)
+ {
+ // 获取当前用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+
+ TConveyorStatus tConveyorStatus = new TConveyorStatus();
+ // 用户登录IP
+ tConveyorStatus.setPcip(ShiroUtils.getIp());
+ sysUser.setLoginIp(ShiroUtils.getIp());
+
+ List tConveyorStatusList = itConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ if (tConveyorStatusList != null && tConveyorStatusList.size() > 0) {
+ tConveyorStatus = tConveyorStatusList.get(0);
+ // 获取用户登录的站台号
+ sysUser.setOutStand(tConveyorStatus.getConveryorId());
+ }
+ mmap.put("sysUser", sysUser);
+ mmap.put("tCkPickingwavegoods", new TCkPickingwavegoods());
+ return prefix + "/qualityInspect";
+ }
+
+ /**
+ * 查询退货信息列表
+ */
+ @RequiresPermissions("business:qualityInspect:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 添加品质检验任务
+ */
+ @RequiresPermissions("business:qualityInspect:add")
+ @Log(title = "品质检验", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TCkOrderdetail tCkOrderdetail)
+ {
+ // start 检查当前站台是否有正在出库的任务
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ tCkPickingwavegoods.setOutstand(tCkOrderdetail.getOutStand());
+ List outTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (outTaskList.size() > 0) {
+ return success("-2");
+ }
+ // end 检查当前站台是否有正在出库的任务
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setGoodsId(tCkOrderdetail.getGoodId());
+ tMiStock.setProduclotid(tCkOrderdetail.getPutinId());
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ if (list.size() > 0) {
+ tCkOrderdetail.setCkId(OrderCodeFactory.getOrderCode("ZJ", ""));
+ tCkOrderdetail.setPickNum(BigDecimal.ZERO);
+ tCkOrderdetail.setStatus("0");
+ tCkOrderdetail.setAddtime(new Date());
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tCkOrderdetail.setUserName(sysUser.getUserName());
+ return toAjax(tCkOrderdetailService.insertTCkOrderdetail(tCkOrderdetail));
+ }
+
+ return success("-1");
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/stockSelect";
+ }
+
+ /**
+ * 查询出库用库存列表
+ */
+ @RequiresPermissions("business:qualityInspect:list")
+ @PostMapping("/query")
+ @ResponseBody
+ public TableDataInfo query(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 回库
+ */
+ @Log(title = "返库", businessType = BusinessType.UPDATE)
+ @PostMapping("/backStock")
+ @ResponseBody
+ public AjaxResult backStock(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ tCkPickingwavegoods.setOutstatus("4");
+ List waitForBackTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForBackTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods backTask = waitForBackTaskList.get(0);
+ backTask.setOutstatus("2");
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(backTask));
+ }
+
+ /**
+ * 品质检验记录报表画面
+ * @return
+ */
+ @RequiresPermissions("business:qualityInspect:view")
+ @GetMapping("/report")
+ public String report()
+ {
+ return prefix + "/qualityInspectReport";
+ }
+
+ /**
+ * 查询品质检验记录列表
+ */
+ @RequiresPermissions("business:qualityInspect:list")
+ @PostMapping("/report")
+ @ResponseBody
+ public TableDataInfo reportList(DateCover date)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "5", date.getSearch());
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出品质检验记录报表
+ */
+ @RequiresPermissions("business:qualityInspect:export")
+ @Log(title = "导出品质检验记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DateCover date)
+ {
+// tCkPickingwavegoodsBack.setCkType("5");
+// List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBackWithoutEmpty(tCkPickingwavegoodsBack);
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "5", date.getSearch());
+ ExcelUtil util = new ExcelUtil(TCkPickingwavegoodsBack.class);
+ return util.exportExcel(list, "品质检验记录表");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsController.java
new file mode 100644
index 0000000..7d9ff25
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsController.java
@@ -0,0 +1,191 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.Date;
+import java.util.List;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 退货Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/returnGoods")
+public class ReturnGoodsController extends BaseController
+{
+ private String prefix = "business/returnGoods";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITCkOrderdetailService tCkOrderdetailService;
+
+ @Autowired
+ private ITBaseStorageAreaLocationService locationService;
+
+ @RequiresPermissions("business:returnGoods:view")
+ @GetMapping()
+ public String main(ModelMap mmap)
+ {
+ // 获取当前用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ mmap.put("tCkPickingwavegoods", new TCkPickingwavegoods());
+ return prefix + "/returnGoods";
+ }
+
+ /**
+ * 查询退货信息列表
+ */
+ @RequiresPermissions("business:returnGoods:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 添加不合格品出库任务
+ */
+ @RequiresPermissions("business:returnGoods:add")
+ @Log(title = "不合格品退货", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult addSave(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ logger.info("接收到退货请求:{}", JSON.toJSONString(tCkPickingwavegoods));
+ try {
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setGoodsId(tCkPickingwavegoods.getGoodId());
+ tMiStock.setProduclotid(tCkPickingwavegoods.getProduclotid());
+ tMiStock.setCtl(tCkPickingwavegoods.getCtl());
+ List list = tMiStockService.selectTMiStockList(tMiStock);
+ if (list.size() > 0) {
+ TMiStock stock = list.get(0);
+ stock.setFlag("1");
+ tMiStockService.updateTMiStock(stock);
+ logger.info("更新库存状态成功");
+ // 填写库存信息
+ TCkPickingwavegoods temp = new TCkPickingwavegoods();
+ temp.setGoodId(tCkPickingwavegoods.getGoodId());
+ temp.setProduclotid(tCkPickingwavegoods.getProduclotid());
+ temp.setGoodsName(stock.getGoodsName());
+ temp.setMistockNum(stock.getShelvesNum());
+ temp.setPickingNum(tCkPickingwavegoods.getPickingNum());
+ temp.setLocId(stock.getLocationId());
+ temp.setProductionDate(stock.getProductionDate());
+ temp.setExpiryDate(stock.getExpirationDate());
+ temp.setCtl(stock.getCtl());
+ temp.setPickingid(OrderCodeFactory.getOrderCode("TH", ""));
+ temp.setPutinId(stock.getPutinId());
+ temp.setOutstatus("0");
+ temp.setSts("0");
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ temp.setUserName(sysUser.getUserName());
+ temp.setCreateTime(new Date());
+ temp.setOutstand(selectOutStand(stock.getLocationId()));
+ temp.setCkType("6");
+ logger.info("插入入库任务表");
+ if (tCkPickingwavegoodsService.insertTCkPickingwavegoods(temp) < 1) {
+ stock.setFlag("0");
+ tMiStockService.updateTMiStock(stock);
+ return error("生成出库任务失败,请重试");
+ }
+ return success("出库成功");
+ } else {
+ return error("无对应库存");
+ }
+
+ } catch (Exception e) {
+ logger.error("错误:{}", JSON.toJSONString(e));
+ return error("错误");
+ }
+ }
+
+ /**
+ * 判断哪个站台
+ * @param locationId 库位编号
+ * @return 对应的出库站台
+ */
+ public String selectOutStand(String locationId){
+ TBaseStorageAreaLocation location = locationService.selectTBaseStorageAreaLocationByLocationId(locationId);
+ if (location.getAbcId().equals("2")) {
+ return "D58400";
+ } else if (location.getAbcId().equals("1")) {
+ return "D58300";
+ }
+ return "null";
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/badStockModal";
+ }
+
+ /**
+ * 查询出库用库存列表
+ */
+ @RequiresPermissions("business:returnGoods:list")
+ @PostMapping("/query")
+ @ResponseBody
+ public TableDataInfo query(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 回库
+ */
+ @Log(title = "返库", businessType = BusinessType.UPDATE)
+ @PostMapping("/backStock")
+ @ResponseBody
+ public AjaxResult backStock(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ tCkPickingwavegoods.setOutstatus("4");
+ List waitForBackTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForBackTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods backTask = waitForBackTaskList.get(0);
+ backTask.setOutstatus("2");
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(backTask));
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsReportController.java
new file mode 100644
index 0000000..d5cf722
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnGoodsReportController.java
@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.business.domain.DateCover;
+import com.ruoyi.business.domain.TCkPickingwavegoodsBack;
+import com.ruoyi.business.service.ITCkPickingwavegoodsBackService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 退货记录表 Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/returnGoodsReport")
+public class ReturnGoodsReportController extends BaseController
+{
+ private String prefix = "business/returnGoods";
+
+ @Autowired
+ private ITCkPickingwavegoodsBackService tCkPickingwavegoodsBackService;
+
+ @RequiresPermissions("business:returnGoodsReport:view")
+ @GetMapping()
+ public String outReportMain(ModelMap mmap)
+ {
+ // 获取用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ return prefix + "/returnGoodsReport";
+ }
+
+ /**
+ * 查询退货记录列表
+ */
+ @RequiresPermissions("business:returnGoodsReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(DateCover date)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "6", date.getSearch());
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出出库任务单列表
+ */
+ @RequiresPermissions("business:returnGoodsReport:export")
+ @Log(title = "导出退货记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DateCover date)
+ {
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "6", date.getSearch());
+// tCkPickingwavegoodsBack.setCkType("6");
+// List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBackWithoutEmpty(tCkPickingwavegoodsBack);
+ ExcelUtil util = new ExcelUtil(TCkPickingwavegoodsBack.class);
+ return util.exportExcel(list, "退货记录表");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnStockController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnStockController.java
new file mode 100644
index 0000000..de64966
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ReturnStockController.java
@@ -0,0 +1,183 @@
+package com.ruoyi.web.controller.business;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 退库Controller
+ *
+ * @author
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/returnStock")
+public class ReturnStockController extends BaseController
+{
+ private String prefix = "business/returnStock";
+
+ @Autowired
+ private ITOngoodsshelfService tOngoodsshelfService;
+
+ @Autowired
+ private ITOngoodsshelfBakService tOngoodsshelfServiceBak;
+ @Autowired
+ private ITConveyorStatusService tConveyorStatusService;
+
+ @RequiresPermissions("business:returnStock:view")
+ @GetMapping()
+ public String returnStock(ModelMap mmap)
+ {
+ // 获取用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ return prefix + "/returnStock";
+ }
+
+ /**
+ * 查询入库任务单列表
+ */
+ @RequiresPermissions("business:returnStock:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TOngoodsshelf tOngoodsshelf)
+ {
+ startPage();
+// List list = tOngoodsshelfService.selectTOngoodsshelfList(tOngoodsshelf);
+ List list = new ArrayList<>();
+ return getDataTable(list);
+ }
+
+ @GetMapping(value = "/getBarcode")
+ @ResponseBody
+ public AjaxResult getbarcode(){
+ List tConveyorStatuses = getTConveyorStatus();
+ if(tConveyorStatuses != null && tConveyorStatuses.size() > 0) {
+ return success(tConveyorStatuses.get(0));
+ }
+ logger.error("没有查询到该设备对应的站台信息………………………………");
+ return toAjax(false);
+ }
+
+ /**
+ * 结束入库
+ */
+ @RequiresPermissions("business:returnStock:add")
+ @Log(title = "入库", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/finishNoErpIn",consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public AjaxResult finishNoErpIn(@RequestBody List tOngoodsshelves){
+ logger.info("接收到入库请求:{}",tOngoodsshelves);
+ if(tOngoodsshelves.size() <= 0){
+ logger.error("提交入库的数据为空");
+ return error();
+ }
+ // 入库id
+ String lotId = OrderCodeFactory.getOrderCode("TK", "");
+ // 创建日期
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ for (TOngoodsshelf s:
+ tOngoodsshelves) {
+ s.setTasktype("1");
+ s.setLotId(lotId);
+ s.setOrderId(initOrderId());
+ s.setCreateDate(sdf.format(date));
+ s.setInstatus("0");
+ s.setUserName(sysUser.getUserName());
+ }
+ return toAjax(tOngoodsshelfService.insertTOngoodsshelfValues(tOngoodsshelves));
+ }
+
+ /**
+ * 退库记录报表界面
+ * @return
+ */
+ @RequiresPermissions("business:returnStock:view")
+ @GetMapping("/report")
+ public String report()
+ {
+ return prefix + "/returnStockReport";
+ }
+
+ /**
+ * 查询退库任务单列表
+ */
+ @RequiresPermissions("business:returnStock:list")
+ @PostMapping("/report")
+ @ResponseBody
+ public TableDataInfo reportList(DateCover date)
+ {
+ startPage();
+ List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "1", date.getSearch());
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出退库任务单列表
+ */
+ @RequiresPermissions("business:returnStock:export")
+ @Log(title = "导出退库记录报表", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DateCover date)
+ {
+// tOngoodsshelfBak.setTasktype("1");
+// List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakWithoutEmpty(tOngoodsshelfBak);
+ List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "1", date.getSearch());
+ ExcelUtil util = new ExcelUtil(TOngoodsshelfBak.class);
+ return util.exportExcel(list, "退库记录报表");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+
+ /**
+ * 生成订单号
+ */
+ private String initOrderId() {
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ return "SJD" + sdf.format(date) + (int)(Math.random() * 10);
+ }
+
+ private List getTConveyorStatus(){
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ String loginIp = ShiroUtils.getIp();
+ TConveyorStatus status = new TConveyorStatus();
+ status.setPcip(loginIp);
+ List tConveyorStatuses = tConveyorStatusService.selectTConveyorStatusList(status);
+ return tConveyorStatuses;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/ScrapReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ScrapReportController.java
new file mode 100644
index 0000000..9470fce
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/ScrapReportController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+
+import com.ruoyi.business.domain.TScrapReport;
+import com.ruoyi.business.service.ITScrapReportService;
+import com.ruoyi.framework.web.service.DictService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 报废记录报表Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/scrapReport")
+public class ScrapReportController extends BaseController
+{
+ private String prefix = "business/scrapReport";
+
+ @Autowired
+ private ITScrapReportService tScrapReportService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:scrapReport:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("tScrapReport", new TScrapReport());
+ return prefix + "/scrapReportMain";
+ }
+
+ /**
+ * 查询报废记录报表
+ */
+ @RequiresPermissions("business:scrapReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo empty(TScrapReport tScrapReport)
+ {
+ startPage();
+ List list = tScrapReportService.selectTScrapReportList(tScrapReport);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出报废记录报表
+ */
+ @RequiresPermissions("business:scrapReport:export")
+ @Log(title = "导出报废记录报表", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult emptyExport(TScrapReport tScrapReport)
+ {
+ List list = tScrapReportService.selectTScrapReportList(tScrapReport);
+ ExcelUtil util = new ExcelUtil(TScrapReport.class);
+ return util.exportExcel(list, "报废记录报表");
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TBaseGoodsController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TBaseGoodsController.java
new file mode 100644
index 0000000..f29d8e1
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TBaseGoodsController.java
@@ -0,0 +1,136 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TBaseGoods;
+import com.ruoyi.business.service.ITBaseGoodsService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 商品资料Controller
+ *
+ * @author wms
+ * @date 2022-05-07
+ */
+@Controller
+@RequestMapping("/business/goods")
+public class TBaseGoodsController extends BaseController
+{
+ private String prefix = "business/goods";
+
+ @Autowired
+ private ITBaseGoodsService tBaseGoodsService;
+
+ @RequiresPermissions("business:goods:view")
+ @GetMapping()
+ public String goods()
+ {
+ return prefix + "/goods";
+ }
+
+ /**
+ * 查询商品资料列表
+ */
+ @RequiresPermissions("business:goods:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TBaseGoods tBaseGoods)
+ {
+ startPage();
+ List list = tBaseGoodsService.selectTBaseGoodsList(tBaseGoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品资料列表
+ */
+ @RequiresPermissions("business:goods:export")
+ @Log(title = "商品资料", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TBaseGoods tBaseGoods)
+ {
+ List list = tBaseGoodsService.selectTBaseGoodsList(tBaseGoods);
+ ExcelUtil util = new ExcelUtil(TBaseGoods.class);
+ return util.exportExcel(list, "商品资料数据");
+ }
+
+ /**
+ * 新增商品资料
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存商品资料
+ */
+ @RequiresPermissions("business:goods:add")
+ @Log(title = "商品资料", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TBaseGoods tBaseGoods)
+ {
+ return toAjax(tBaseGoodsService.insertTBaseGoods(tBaseGoods));
+ }
+
+ /**
+ * 修改商品资料
+ */
+ @RequiresPermissions("business:goods:edit")
+ @GetMapping("/edit/{goodsId}")
+ public String edit(@PathVariable("goodsId") String goodsId, ModelMap mmap)
+ {
+ TBaseGoods tBaseGoods = tBaseGoodsService.selectTBaseGoodsByGoodsId(goodsId);
+ mmap.put("tBaseGoods", tBaseGoods);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存商品资料
+ */
+ @RequiresPermissions("business:goods:edit")
+ @Log(title = "商品资料", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TBaseGoods tBaseGoods)
+ {
+ return toAjax(tBaseGoodsService.updateTBaseGoods(tBaseGoods));
+ }
+
+ /**
+ * 删除商品资料
+ */
+ @RequiresPermissions("business:goods:remove")
+ @Log(title = "商品资料", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tBaseGoodsService.deleteTBaseGoodsByGoodsIds(ids));
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/goodsModal";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkOrderdetailController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkOrderdetailController.java
new file mode 100644
index 0000000..339164e
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkOrderdetailController.java
@@ -0,0 +1,163 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.Date;
+import java.util.List;
+
+import com.ruoyi.business.domain.TCkPickingwavegoods;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITCkPickingwavegoodsService;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.OrderUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TCkOrderdetail;
+import com.ruoyi.business.service.ITCkOrderdetailService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 出库物料明细Controller
+ *
+ * @author wms
+ * @date 2022-06-11
+ */
+@Controller
+@RequestMapping("/business/orderdetail")
+public class TCkOrderdetailController extends BaseController
+{
+ private String prefix = "business/orderdetail";
+
+ @Autowired
+ private ITCkOrderdetailService tCkOrderdetailService;
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @RequiresPermissions("business:orderdetail:view")
+ @GetMapping()
+ public String orderdetail()
+ {
+ return prefix + "/orderdetail";
+ }
+
+ /**
+ * 查询出库物料明细列表
+ */
+ @RequiresPermissions("business:orderdetail:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCkOrderdetail tCkOrderdetail)
+ {
+ startPage();
+ List list = tCkOrderdetailService.selectTCkOrderdetailList(tCkOrderdetail);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出出库物料明细列表
+ */
+ @RequiresPermissions("business:orderdetail:export")
+ @Log(title = "导出出库物料明细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TCkOrderdetail tCkOrderdetail)
+ {
+ List list = tCkOrderdetailService.selectTCkOrderdetailList(tCkOrderdetail);
+ ExcelUtil util = new ExcelUtil(TCkOrderdetail.class);
+ return util.exportExcel(list, "出库物料明细数据");
+ }
+
+ /**
+ * 新增出库物料明细
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存出库物料明细
+ */
+ @RequiresPermissions("business:orderdetail:add")
+ @Log(title = "出库", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TCkOrderdetail tCkOrderdetail)
+ {
+ // start 检查当前库存是否充足(只查合格品)
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setGoodsId(tCkOrderdetail.getGoodId());
+ tMiStock.setProduclotid(tCkOrderdetail.getPutinId());
+ tMiStock.setSts("0");
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ if (list.size() > 0) {
+ if (list.get(0).getShelvesNum().compareTo(tCkOrderdetail.getPickNum()) >= 0) {// 库存充足
+ tCkOrderdetail.setCkId(OrderCodeFactory.getOrderCode("CK", ""));
+ tCkOrderdetail.setStatus("0");
+ tCkOrderdetail.setAddtime(new Date());
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tCkOrderdetail.setUserName(sysUser.getUserName());
+ return toAjax(tCkOrderdetailService.insertTCkOrderdetail(tCkOrderdetail));
+ } else {// 库存不足
+ return success("0");
+ }
+ }
+ // end 检查当前库存是否充足
+ return success("-1");
+ }
+
+ /**
+ * 修改出库物料明细
+ */
+ @RequiresPermissions("business:orderdetail:edit")
+ @GetMapping("/edit/{ckId}")
+ public String edit(@PathVariable("ckId") String ckId, ModelMap mmap)
+ {
+ TCkOrderdetail tCkOrderdetail = tCkOrderdetailService.selectTCkOrderdetailByCkId(ckId);
+ mmap.put("tCkOrderdetail", tCkOrderdetail);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存出库物料明细
+ */
+ @RequiresPermissions("business:orderdetail:edit")
+ @Log(title = "出库物料明细", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TCkOrderdetail tCkOrderdetail)
+ {
+ return toAjax(tCkOrderdetailService.updateTCkOrderdetail(tCkOrderdetail));
+ }
+
+ /**
+ * 删除出库物料明细
+ */
+ @RequiresPermissions("business:orderdetail:remove")
+ @Log(title = "出库物料明细", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tCkOrderdetailService.deleteTCkOrderdetailByCkIds(ids));
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkPickingwavegoodsController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkPickingwavegoodsController.java
new file mode 100644
index 0000000..97c7e01
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCkPickingwavegoodsController.java
@@ -0,0 +1,586 @@
+package com.ruoyi.web.controller.business;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.framework.web.service.DictService;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 出库物料明细Controller
+ *
+ * @author tony.wu
+ * @date 2022-05-31
+ */
+@Controller
+@RequestMapping("/business/pickingwavegoods")
+public class TCkPickingwavegoodsController extends BaseController
+{
+ private String prefix = "business/pickingwavegoods";
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITConveyorStatusService itConveyorStatusService;
+
+ @Autowired
+ private ITCkOrderdetailService tCkOrderdetailService;
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private ITBaseStorageAreaLocationService locationService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:pickingwavegoods:view")
+ @GetMapping()
+ public String pickingwavegoods(ModelMap mmap)
+ {
+ // 获取当前用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/pickingwavegoods";
+ }
+
+ /**
+ * 查询出库物料明细列表
+ */
+ @RequiresPermissions("business:pickingwavegoods:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ startPage();
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出出库物料明细列表
+ */
+ @RequiresPermissions("business:pickingwavegoods:export")
+ @Log(title = "导出出库物料明细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ List list = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ ExcelUtil util = new ExcelUtil(TCkPickingwavegoods.class);
+ return util.exportExcel(list, "出库物料明细数据");
+ }
+
+ /**
+ * 新增出库物料明细
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存出库物料明细
+ */
+ @RequiresPermissions("business:pickingwavegoods:add")
+ @Log(title = "出库物料明细", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult addSave(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ TMiStock stockForQuery = new TMiStock();
+ stockForQuery.setGoodsId(tCkPickingwavegoods.getGoodId());
+ stockForQuery.setProduclotid(tCkPickingwavegoods.getProduclotid());
+ stockForQuery.setSts("0");
+
+ BigDecimal allNum = tCkPickingwavegoods.getPickingNum();
+ List stocks = tMiStockService.selectTMiStockList(stockForQuery);
+ for (TMiStock stock : stocks) {
+ if (allNum.compareTo(stock.getShelvesNum()) > 0) {
+ stock.setFlag("1");
+ tMiStockService.updateTMiStock(stock);
+ // 填写库存信息
+ TCkPickingwavegoods temp = new TCkPickingwavegoods();
+ temp.setGoodId(tCkPickingwavegoods.getGoodId());
+ temp.setProduclotid(tCkPickingwavegoods.getProduclotid());
+ temp.setGoodsName(stock.getGoodsName());
+ temp.setMistockNum(stock.getShelvesNum());
+ temp.setPickingNum(stock.getShelvesNum());
+ temp.setLocId(stock.getLocationId());
+ temp.setProductionDate(stock.getProductionDate());
+ temp.setExpiryDate(stock.getExpirationDate());
+ temp.setCtl(stock.getCtl());
+ temp.setPickingid(OrderCodeFactory.getOrderCode("CK", ""));
+ temp.setPutinId(stock.getPutinId());
+ temp.setSts("0");
+ temp.setOutstatus("0");
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ temp.setUserName(sysUser.getUserName());
+ temp.setCreateTime(new Date());
+ temp.setOutstand(selectOutStand(stock.getLocationId()));
+ temp.setCkType("6");
+ if (tCkPickingwavegoodsService.insertTCkPickingwavegoods(temp) < 1) {
+ stock.setFlag("0");
+ tMiStockService.updateTMiStock(stock);
+ return error("生成出库任务失败,请重试");
+ }
+ allNum = allNum.subtract(stock.getShelvesNum());
+ } else {
+ stock.setFlag("1");
+ tMiStockService.updateTMiStock(stock);
+ // 填写库存信息
+ TCkPickingwavegoods temp = new TCkPickingwavegoods();
+ temp.setGoodId(tCkPickingwavegoods.getGoodId());
+ temp.setProduclotid(tCkPickingwavegoods.getProduclotid());
+ temp.setGoodsName(stock.getGoodsName());
+ temp.setMistockNum(stock.getShelvesNum());
+ temp.setPickingNum(allNum);
+ temp.setLocId(stock.getLocationId());
+ temp.setProductionDate(stock.getProductionDate());
+ temp.setExpiryDate(stock.getExpirationDate());
+ temp.setCtl(stock.getCtl());
+ temp.setPickingid(OrderCodeFactory.getOrderCode("CK", ""));
+ temp.setPutinId(stock.getPutinId());
+ temp.setSts("0");
+ temp.setOutstatus("0");
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ temp.setUserName(sysUser.getUserName());
+ temp.setCreateTime(new Date());
+ temp.setOutstand(selectOutStand(stock.getLocationId()));
+ temp.setCkType("6");
+ if (tCkPickingwavegoodsService.insertTCkPickingwavegoods(temp) < 1) {
+ stock.setFlag("0");
+ tMiStockService.updateTMiStock(stock);
+ return error("生成出库任务失败,请重试");
+ }
+ break;
+ }
+
+ }
+ return success("生成出库任务成功");
+ }
+
+ /**
+ * 判断哪个站台
+ * @param locationId 库位编号
+ * @return 对应的出库站台
+ */
+ public String selectOutStand(String locationId){
+ TBaseStorageAreaLocation location = locationService.selectTBaseStorageAreaLocationByLocationId(locationId);
+ if (location.getAbcId().equals("2")) {
+ return "D58700";
+ } else if (location.getAbcId().equals("1")) {
+ return "D00580";
+ }
+ return "null";
+ }
+
+ /**
+ * 修改出库物料明细
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @GetMapping("/edit/{pickingid}")
+ public String edit(@PathVariable("pickingid") String pickingid, ModelMap mmap)
+ {
+ TCkPickingwavegoods tCkPickingwavegoods = tCkPickingwavegoodsService.selectTCkPickingwavegoodsByPickingid(pickingid);
+ mmap.put("tCkPickingwavegoods", tCkPickingwavegoods);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存出库物料明细
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @Log(title = "出库物料明细", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ return toAjax(tCkPickingwavegoodsService.updateTCkPickingwavegoods(tCkPickingwavegoods));
+ }
+
+ /**
+ * 修改出库任务
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @Log(title = "出库物料明细", businessType = BusinessType.UPDATE)
+ @PostMapping("/updateResult")
+ @ResponseBody
+ public AjaxResult updateResult(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(tCkPickingwavegoods));
+ }
+
+ /**
+ * 删除出库物料明细
+ */
+ @RequiresPermissions("business:pickingwavegoods:remove")
+ @Log(title = "出库物料明细", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tCkPickingwavegoodsService.deleteTCkPickingwavegoodsByPickingids(ids));
+ }
+
+ /**
+ * 判断站台上的空托盘是否为空,如果不为空,根据托盘号获取出库任务信息
+ */
+ @RequiresPermissions("business:pickingwavegoods:edit")
+ @GetMapping("/queryByCtl")
+ @ResponseBody
+ public AjaxResult queryByCtl()
+ {
+ TConveyorStatus tConveyorStatus = new TConveyorStatus();
+ // 用户登录IP
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tConveyorStatus.setPcip(ShiroUtils.getIp());
+
+ List tConveyorStatusList = itConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ if (tConveyorStatusList != null && tConveyorStatusList.size() > 0) {
+ tConveyorStatus = tConveyorStatusList.get(0);
+
+ // 判断当前站台上的托盘是否为空,不为空时,根据托盘获取出库任务数据
+ if (StringUtils.isNotEmpty(tConveyorStatus.getBarcode())) {
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ // 托盘号
+ tCkPickingwavegoods.setCtl(tConveyorStatus.getBarcode());
+ // 状态
+ tCkPickingwavegoods.setOutstatus("0");
+ // 站台号
+ tCkPickingwavegoods.setOutstand(tConveyorStatus.getConveryorId());
+ // 获取任务列表
+ List tCkPickingwavegoodsList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (tCkPickingwavegoodsList != null && tCkPickingwavegoodsList.size() > 0) {
+ return success(tCkPickingwavegoodsList.get(0));
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 出库扫码校验
+ */
+ @Log(title = "出库扫码校验", businessType = BusinessType.UPDATE)
+ @PostMapping("/scanGoods")
+ @ResponseBody
+ public AjaxResult scanGoods(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ tCkPickingwavegoods.setOutstatus("3");
+ List waitForScanTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForScanTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods scanTask = waitForScanTaskList.get(0);
+ scanTask.setOutstatus("4");
+ return toAjax(tCkPickingwavegoodsService.updateScanGoodsResult(scanTask));
+ }
+
+ /**
+ * 回库
+ */
+ @Log(title = "返库", businessType = BusinessType.UPDATE)
+ @PostMapping("/backStock")
+ @ResponseBody
+ public AjaxResult backStock(TCkPickingwavegoods tCkPickingwavegoods)
+ {
+ tCkPickingwavegoods.setOutstatus("4");
+ List waitForBackTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (waitForBackTaskList.size() < 1) {
+ return success("0");
+ }
+ TCkPickingwavegoods backTask = waitForBackTaskList.get(0);
+ backTask.setOutstatus("2");
+ return toAjax(tCkPickingwavegoodsService.updateGoodsOutResult(backTask));
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/selEbsAccountName")
+ public String table()
+ {
+ return prefix + "/ebsAccountName";
+ }
+
+ /**
+ * 获取账户别名
+ */
+ @RequiresPermissions("business:pickingwavegoods:list")
+ @PostMapping("/getEbsAccountName")
+ @ResponseBody
+ public TableDataInfo getEbsAccountName(EbsAccountName ebsAccountName) throws Exception {
+ // 返回分页数据
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+ TableDataInfo rspData = new TableDataInfo();
+ List ebsAccountNames = new LinkedList();
+
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+// tEbsRecordService.insertTEbsRecord(new TEbsRecord("token", 1, "http://10.10.90.193:8899/oauth/token?grant_type=client_credentials",
+// "", JSON.toJSONString(token), "1", "获取token"));
+ // 获取账户别名
+ String paramsGetEbsAccountName = JSON.toJSONString(createJsonGetEbsAccountName());
+ String resultGetEbsAccountName = "";
+ try {
+ resultGetEbsAccountName = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsGetEbsAccountName, token.get("access_token").toString());
+ } catch (Exception e) {
+// tEbsRecordService.insertTEbsRecord(new TEbsRecord("getEbsAccountName", 2, "http://10.10.90.193:9000/esb/intergrateService",
+// paramsGetEbsAccountName, resultGetEbsAccountName, "-1", "获取账户别名"));
+ // 接口失败
+ return getDataTable(ebsAccountNames);
+ }
+ System.out.println(resultGetEbsAccountName);
+// tEbsRecordService.insertTEbsRecord(new TEbsRecord("getEbsAccountName", 2, "http://10.10.90.193:9000/esb/intergrateService",
+// paramsGetEbsAccountName, resultGetEbsAccountName, "1", "获取账户别名"));
+ JSONObject resultJsonGetEbsAccountName = (JSONObject) JSON.parseObject(resultGetEbsAccountName).get("obj");
+ List dataGetEbsAccountNames = JSON.parseArray(resultJsonGetEbsAccountName.getString("rows"), JSONObject.class);
+ for (JSONObject dataEbsAccountName : dataGetEbsAccountNames) {
+ EbsAccountName tempName = new EbsAccountName();
+ tempName.setDispositionId(dataEbsAccountName.getIntValue("dispositionId"));
+ tempName.setDescription(dataEbsAccountName.getString("description"));
+ tempName.setSegment1(dataEbsAccountName.getString("segment1"));
+ ebsAccountNames.add(tempName);
+ }
+
+ rspData.setCode(0);
+ rspData.setRows(PageUtils.startPageByList(ebsAccountNames, pageNum, pageSize));
+ rspData.setTotal(new PageInfo(ebsAccountNames).getTotal());
+ return rspData;
+ }
+
+ /**
+ * 账户别名出库
+ */
+ @RequiresPermissions("business:orderdetail:add")
+ @Log(title = "账户别名出库", businessType = BusinessType.INSERT)
+ @PostMapping("/othersProc")
+ @ResponseBody
+ public AjaxResult othersProc(TCkOrderdetail tCkOrderdetail) throws Exception {
+ // start 检查当前站台是否有正在出库的任务
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ tCkPickingwavegoods.setOutstand(tCkOrderdetail.getOutStand());
+ List outTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+ if (outTaskList.size() > 0) {
+ return error("当前站台有出库任务未结束");
+ }
+ // end 检查当前站台是否有正在出库的任务
+ // start 检查当前库存是否充足(只查合格品)
+ TMiStock tMiStock = new TMiStock();
+ tMiStock.setGoodsId(tCkOrderdetail.getGoodId());
+ tMiStock.setProduclotid(tCkOrderdetail.getPutinId());
+ tMiStock.setSts("0");
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ if (list.size() > 0) {
+ if (list.get(0).getShelvesNum().compareTo(tCkOrderdetail.getPickNum()) >= 0) {// 库存充足
+ tCkOrderdetail.setCkId(OrderCodeFactory.getOrderCode("CK", ""));
+ tCkOrderdetail.setStatus("0");
+ tCkOrderdetail.setAddtime(new Date());
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tCkOrderdetail.setUserName(sysUser.getUserName());
+ // 开始账户别名出库
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+// tEbsRecordService.insertTEbsRecord(new TEbsRecord("token", 1, "http://10.10.90.193:8899/oauth/token?grant_type=client_credentials",
+// "", JSON.toJSONString(token), "1", "获取token"));
+ // 账户别名发放
+ List stockForOthersProc = tMiStockService.selectStock(tMiStock);
+ String paramsWmsOthersProc = JSON.toJSONString(createJsonWmsOthersProc(stockForOthersProc.get(0), tCkOrderdetail));
+ String resultWmsOthersProc = "";
+ try {
+ resultWmsOthersProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsOthersProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsOthersProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsOthersProc, resultWmsOthersProc, "-1", "账户别名发放", list.get(0).getGoodsId(), list.get(0).getGoodsName(), tCkOrderdetail.getPutinId(), tCkOrderdetail.getPickNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsOthersProc);
+ if (!JSON.parseObject(resultWmsOthersProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsOthersProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsOthersProc, resultWmsOthersProc, "-1", "账户别名发放", list.get(0).getGoodsId(), list.get(0).getGoodsName(), tCkOrderdetail.getPutinId(), tCkOrderdetail.getPickNum()));
+ return error("账户别名发放失败:" + JSON.parseObject(resultWmsOthersProc).getString("msg"));
+ }
+ JSONObject resultJsonWmsOthersProc = (JSONObject) JSON.parseObject(resultWmsOthersProc).get("obj");
+ List dataWmsOthersProc = JSON.parseArray(resultJsonWmsOthersProc.getString("rows"), JSONObject.class);
+ if (!dataWmsOthersProc.get(0).getString("processStatus").equals("PROCESSING")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsOthersProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsOthersProc, resultWmsOthersProc, "-1", "账户别名发放", list.get(0).getGoodsId(), list.get(0).getGoodsName(), tCkOrderdetail.getPutinId(), tCkOrderdetail.getPickNum()));
+ return error(dataWmsOthersProc.get(0).getString("errorMsg"));
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsOthersProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsOthersProc, resultWmsOthersProc, "0", "账户别名发放", list.get(0).getGoodsId(), list.get(0).getGoodsName(), tCkOrderdetail.getPutinId(), tCkOrderdetail.getPickNum()));
+ if (tCkOrderdetailService.insertTCkOrderdetail(tCkOrderdetail) < 1) {
+ return error("插入出库任务失败");
+ }
+ } else {// 库存不足
+ return error("合格品库存不足");
+ }
+ }
+ // end 检查当前库存是否充足
+ return success("创建出库任务成功");
+ }
+
+ /**
+ * 创建参数Json(获取账户别名)
+ * @return
+ */
+ public JSONObject createJsonGetEbsAccountName() {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getEbsAccountName");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 创建参数Json(账户别名出库)
+ * @return
+ */
+ public JSONObject createJsonWmsOthersProc(TMiStock stock, TCkOrderdetail order) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "wmsOthersProc");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "E");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("transTypeId", 31);
+ businessData.put("organizationId", configService.selectConfigByKey("organizationId"));
+ businessData.put("itemId", stock.getGoodsTypeid());
+ businessData.put("subInventory", stock.getWhseloc());
+ businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(stock.getWhseloc()));
+ businessData.put("transSourceName", order.getSpecification());
+ businessData.put("transSourceId", order.getBusinessid());
+ businessData.put("transLotNumber", stock.getProduclotid());
+ businessData.put("quantity", Math.negateExact(order.getPickNum().intValue()));
+ businessData.put("transDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ businessData.put("transUom", stock.getGoodsMeasureId());
+ businessData.put("sourceHeaderId", 1);
+ businessData.put("sourceLineId", 1);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ static class EbsAccountName {
+ private int dispositionId;
+ private String segment1;
+ private String description;
+
+ public int getDispositionId() {
+ return dispositionId;
+ }
+
+ public void setDispositionId(int dispositionId) {
+ this.dispositionId = dispositionId;
+ }
+
+ public String getSegment1() {
+ return segment1;
+ }
+
+ public void setSegment1(String segment1) {
+ this.segment1 = segment1;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TConveyorStatusController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TConveyorStatusController.java
new file mode 100644
index 0000000..dfe47f6
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TConveyorStatusController.java
@@ -0,0 +1,127 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TConveyorStatus;
+import com.ruoyi.business.service.ITConveyorStatusService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author wms
+ * @date 2022-06-11
+ */
+@Controller
+@RequestMapping("/business/status")
+public class TConveyorStatusController extends BaseController
+{
+ private String prefix = "business/status";
+
+ @Autowired
+ private ITConveyorStatusService tConveyorStatusService;
+
+ @RequiresPermissions("business:status:view")
+ @GetMapping()
+ public String status()
+ {
+ return prefix + "/status";
+ }
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:status:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TConveyorStatus tConveyorStatus)
+ {
+ startPage();
+ List list = tConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:status:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TConveyorStatus tConveyorStatus)
+ {
+ List list = tConveyorStatusService.selectTConveyorStatusList(tConveyorStatus);
+ ExcelUtil util = new ExcelUtil(TConveyorStatus.class);
+ return util.exportExcel(list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:status:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TConveyorStatus tConveyorStatus)
+ {
+ return toAjax(tConveyorStatusService.insertTConveyorStatus(tConveyorStatus));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("business:status:edit")
+ @GetMapping("/edit/{converyorId}")
+ public String edit(@PathVariable("converyorId") String converyorId, ModelMap mmap)
+ {
+ TConveyorStatus tConveyorStatus = tConveyorStatusService.selectTConveyorStatusByConveryorId(converyorId);
+ mmap.put("tConveyorStatus", tConveyorStatus);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:status:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TConveyorStatus tConveyorStatus)
+ {
+ return toAjax(tConveyorStatusService.updateTConveyorStatus(tConveyorStatus));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("business:status:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tConveyorStatusService.deleteTConveyorStatusByConveryorIds(ids));
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCusCustomerController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCusCustomerController.java
new file mode 100644
index 0000000..6551bc9
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TCusCustomerController.java
@@ -0,0 +1,136 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TCusCustomer;
+import com.ruoyi.business.service.ITCusCustomerService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author wms
+ * @date 2022-06-12
+ */
+@Controller
+@RequestMapping("/business/customer")
+public class TCusCustomerController extends BaseController
+{
+ private String prefix = "business/customer";
+
+ @Autowired
+ private ITCusCustomerService tCusCustomerService;
+
+ @RequiresPermissions("business:customer:view")
+ @GetMapping()
+ public String customer()
+ {
+ return prefix + "/customer";
+ }
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:customer:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCusCustomer tCusCustomer)
+ {
+ startPage();
+ List list = tCusCustomerService.selectTCusCustomerList(tCusCustomer);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:customer:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TCusCustomer tCusCustomer)
+ {
+ List list = tCusCustomerService.selectTCusCustomerList(tCusCustomer);
+ ExcelUtil util = new ExcelUtil(TCusCustomer.class);
+ return util.exportExcel(list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:customer:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TCusCustomer tCusCustomer)
+ {
+ return toAjax(tCusCustomerService.insertTCusCustomer(tCusCustomer));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("business:customer:edit")
+ @GetMapping("/edit/{customerId}")
+ public String edit(@PathVariable("customerId") String customerId, ModelMap mmap)
+ {
+ TCusCustomer tCusCustomer = tCusCustomerService.selectTCusCustomerByCustomerId(customerId);
+ mmap.put("tCusCustomer", tCusCustomer);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:customer:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TCusCustomer tCusCustomer)
+ {
+ return toAjax(tCusCustomerService.updateTCusCustomer(tCusCustomer));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("business:customer:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tCusCustomerService.deleteTCusCustomerByCustomerIds(ids));
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/customerModal";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TInReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TInReportController.java
new file mode 100644
index 0000000..568a553
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TInReportController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.web.controller.business;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.druid.sql.ast.statement.SQLUnionQuery;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.ShiroUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hpsf.GUID;
+import org.apache.poi.openxml4j.opc.internal.ContentType;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import static java.lang.System.out;
+
+/**
+ * 入库报表Controller
+ *
+ * @author liangzhou
+ * @date 2022-06-20
+ */
+@Controller
+@RequestMapping("/business/inreport")
+public class TInReportController extends BaseController
+{
+ private String prefix = "business/inreport";
+
+ @Autowired
+ private ITOngoodsshelfBakService tOngoodsshelfServiceBak;
+
+ @RequiresPermissions("business:inreport:view")
+ @GetMapping()
+ public String inReportMain(ModelMap mmap)
+ {
+ // 获取用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ return prefix + "/inreportmain";
+ }
+
+ /**
+ * 查询入库任务单列表
+ */
+ @RequiresPermissions("business:inreport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(DateCover date)
+ {
+ startPage();
+ List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "0", date.getSearch());
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出入库任务单列表
+ */
+ @RequiresPermissions("business:inreport:export")
+ @Log(title = "导出入库任务单", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DateCover date)
+ {
+ List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "0", date.getSearch());
+// tOngoodsshelfBak.setTasktype("0");
+// List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakWithoutEmpty(tOngoodsshelfBak);
+ ExcelUtil util = new ExcelUtil(TOngoodsshelfBak.class);
+ return util.exportExcel(list, "入库任务单数据");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+
+ /**
+ * 筛选入库任务单
+ */
+ @PostMapping("/filter/{date}")
+ @ResponseBody
+ public TableDataInfo filter(@PathVariable("date") String date)
+ {
+ startPage();
+ Map dateMap = JSON.parseObject(date);
+ List list = tOngoodsshelfServiceBak.selectTOngoodsshelfBakByCreateDate(
+ String.valueOf(dateMap.get("startDate")).replace("-", ""),
+ String.valueOf(dateMap.get("endDate")).replace("-", ""), "0", "");
+ return getDataTable(list);
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TMiStockController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TMiStockController.java
new file mode 100644
index 0000000..4eaa5e1
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TMiStockController.java
@@ -0,0 +1,150 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TMiStock;
+import com.ruoyi.business.service.ITMiStockService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 库存Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/stock")
+public class TMiStockController extends BaseController
+{
+ private String prefix = "business/stock";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @RequiresPermissions("business:stock:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/stock";
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:stock:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectTMiStockList(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出库存列表
+ */
+ @RequiresPermissions("business:stock:export")
+ @Log(title = "库存", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TMiStock tMiStock)
+ {
+ List list = tMiStockService.selectTMiStockList(tMiStock);
+ ExcelUtil util = new ExcelUtil(TMiStock.class);
+ return util.exportExcel(list, "库存数据");
+ }
+
+ /**
+ * 新增库存
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存库存
+ */
+ @RequiresPermissions("business:stock:add")
+ @Log(title = "库存", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TMiStock tMiStock)
+ {
+ return toAjax(tMiStockService.insertTMiStock(tMiStock));
+ }
+
+ /**
+ * 修改库存
+ */
+ @RequiresPermissions("business:stock:edit")
+ @GetMapping("/edit/{stockId}")
+ public String edit(@PathVariable("stockId") String stockId, ModelMap mmap)
+ {
+ TMiStock tMiStock = tMiStockService.selectTMiStockByStockId(stockId);
+ mmap.put("tMiStock", tMiStock);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存库存
+ */
+ @RequiresPermissions("business:stock:edit")
+ @Log(title = "库存", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TMiStock tMiStock)
+ {
+ return toAjax(tMiStockService.updateTMiStock(tMiStock));
+ }
+
+ /**
+ * 删除库存
+ */
+ @RequiresPermissions("business:stock:remove")
+ @Log(title = "库存", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tMiStockService.deleteTMiStockByStockIds(ids));
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/stockModal";
+ }
+
+ /**
+ * 查询出库用库存列表
+ */
+ @RequiresPermissions("business:stock:outlist")
+ @PostMapping("/outlist")
+ @ResponseBody
+ public TableDataInfo outList(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectTMiStockOutList(tMiStock);
+ return getDataTable(list);
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOngoodsshelfController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOngoodsshelfController.java
new file mode 100644
index 0000000..e826a4c
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOngoodsshelfController.java
@@ -0,0 +1,807 @@
+package com.ruoyi.web.controller.business;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hpsf.GUID;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 入库任务单Controller
+ *
+ * @author tony.wu
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/ongoodsshelf")
+public class TOngoodsshelfController extends BaseController
+{
+ private String prefix = "business/ongoodsshelf";
+
+ @Autowired
+ private ITOngoodsshelfService tOngoodsshelfService;
+
+ @Autowired
+ private ITOngoodsshelfBakService tOngoodsshelfBakService;
+
+ @Autowired
+ private ITCkOrderdetailService tckOrderdetailService;
+
+ @Autowired
+ private ITConveyorStatusService tConveyorStatusService;
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private ITEbsOrderService itEbsOrderService;
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ITBaseGoodsService goodsService;
+
+ @RequiresPermissions("business:ongoodsshelf:view")
+ @GetMapping()
+ public String ongoodsshelf(ModelMap mmap)
+ {
+ // 获取用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ return prefix + "/ongoodsshelf";
+ }
+
+ /**
+ * 查询入库任务单列表
+ */
+ @RequiresPermissions("business:ongoodsshelf:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TOngoodsshelf tOngoodsshelf)
+ {
+ startPage();
+ List list = new ArrayList<>();
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出入库任务单列表
+ */
+ @RequiresPermissions("business:ongoodsshelf:export")
+ @Log(title = "导出入库任务单", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TOngoodsshelf tOngoodsshelf)
+ {
+ List list = tOngoodsshelfService.selectTOngoodsshelfList(tOngoodsshelf);
+ ExcelUtil util = new ExcelUtil(TOngoodsshelf.class);
+ return util.exportExcel(list, "入库任务单数据");
+ }
+
+ /**
+ * 新增入库任务单
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+
+ @GetMapping(value = "/getBarcode")
+ @ResponseBody
+ public AjaxResult getbarcode(){
+ List tConveyorStatuses = getTConveyorStatus();
+ if(tConveyorStatuses != null && tConveyorStatuses.size() > 0) {
+ return success(tConveyorStatuses.get(0));
+ }
+ logger.error("没有查询到该设备对应的站台信息………………………………");
+ return toAjax(false);
+ }
+
+ /**
+ * 结束入库
+ */
+ @Log(title = "入库", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/finishIn",consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public AjaxResult finishIn(@RequestBody List tOngoodsshelves) throws Exception {
+ logger.info("接收到入库请求:{}",tOngoodsshelves.toString());
+ if(tOngoodsshelves.size() == 0){
+ logger.error("提交入库的数据为空");
+ return error();
+ }
+ // 入库id
+ String lotId = OrderCodeFactory.getOrderCode("RK", "");
+ // 创建日期
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SysUser sysUser = new SysUser();
+ if (StringUtils.isEmpty(tOngoodsshelves.get(0).getUserName())) {
+ // 获取用户名
+ sysUser = ShiroUtils.getCurrentUser();
+ } else {
+ sysUser.setUserName(tOngoodsshelves.get(0).getUserName());
+ }
+ for (TOngoodsshelf s:
+ tOngoodsshelves) {
+ s.setAgvsts("0");
+ s.setTasktype("0");
+ s.setLotId(lotId);
+ s.setOrderId(initOrderId());
+ s.setCreateDate(sdf.format(date));
+ s.setInstatus("0");
+ s.setUserName(sysUser.getUserName());
+ // 设置子库ID
+ s.setWhseloc("121-108");
+ }
+
+ // 开始对接ebs
+ String ebsCongfirmResult = ebsConfirm(tOngoodsshelves);
+ if (StringUtils.isNotEmpty(ebsCongfirmResult)) {
+ return error(ebsCongfirmResult);
+ }
+ if (tOngoodsshelfService.insertTOngoodsshelfValues(tOngoodsshelves) < 1) {
+ return error("生成入库任务失败");
+ }
+ return success("生成入库任务成功");
+ }
+
+ /**
+ * 写入Ebs
+ */
+ @Log(title = "写入Ebs", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/wmsRcvProc",consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public AjaxResult wmsRcvProc(@RequestBody List tOngoodsshelves) throws Exception {
+ logger.info("接收写入参数:{}", tOngoodsshelves.toString());
+ // 查询任务
+ TOngoodsshelf queryOnTask = new TOngoodsshelf();
+ queryOnTask.setInstand(tOngoodsshelves.get(0).getInstand());
+ queryOnTask.setInstatus(tOngoodsshelves.get(0).getInstatus());
+ List tOngoodsshelvesNew = tOngoodsshelfService.selectTOngoodsshelfList(queryOnTask);
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ for (TOngoodsshelf tOngoodsshelve : tOngoodsshelvesNew) {
+ // 获取本地缓存过的订单信息
+ TEbsOrder queryOrder = new TEbsOrder();
+ queryOrder.setPhaSegment1(tOngoodsshelve.getWmsorderid());// 订单号
+ queryOrder.setItemId(Integer.parseInt(tOngoodsshelve.getGoodsTypeid()));
+ TEbsOrder ebsOrder = itEbsOrderService.selectTEbsOrderList(queryOrder).get(0);
+ // 开始写入EBS
+ String paramsWmsRcvProc = JSON.toJSONString(createJsonWmsRcvProc(ebsOrder, tOngoodsshelve));
+ logger.info("写入EBS参数:{}", paramsWmsRcvProc);
+ String resultWmsRcvProc = "";
+ try {
+ resultWmsRcvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsRcvProc, token.get("access_token").toString());
+ logger.info("写入EBS响应结果:{}", resultWmsRcvProc);
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsRcvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsRcvProc, resultWmsRcvProc, "-1", "写入EBS", tOngoodsshelve.getGoodsid(), ebsOrder.getItemDescription(), tOngoodsshelve.getProduclotid(), tOngoodsshelve.getShelfNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsRcvProc);
+ if (!JSON.parseObject(resultWmsRcvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsRcvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsRcvProc, resultWmsRcvProc, "-1", "物料入库写入EBS", tOngoodsshelve.getGoodsid(), ebsOrder.getItemDescription(), tOngoodsshelve.getProduclotid(), tOngoodsshelve.getShelfNum()));
+ return error("写入EBS失败:" + JSON.parseObject(resultWmsRcvProc).getString("msg"));
+ }
+ JSONObject resultJsonWmsRcvProc = (JSONObject) JSON.parseObject(resultWmsRcvProc).get("obj");
+ JSONObject dataWmsRcvProc = JSON.parseArray(resultJsonWmsRcvProc.getString("rows"), JSONObject.class).get(0);
+ if (!dataWmsRcvProc.getString("processStatus").equals("SUCCESS")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsRcvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsRcvProc, resultWmsRcvProc, "-1", "物料入库写入EBS", tOngoodsshelve.getGoodsid(), ebsOrder.getItemDescription(), tOngoodsshelve.getProduclotid(), tOngoodsshelve.getShelfNum()));
+ return error("写入EBS失败");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsRcvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsRcvProc, resultWmsRcvProc, "0", "物料入库写入EBS", tOngoodsshelve.getGoodsid(), ebsOrder.getItemDescription(), tOngoodsshelve.getProduclotid(), tOngoodsshelve.getShelfNum()));
+ // 用于查询检验结果
+ tOngoodsshelve.setDecid(dataWmsRcvProc.getString("lineLocationId"));
+ // 待检----待检状态无法出库
+ tOngoodsshelve.setAccStatus("5");
+ // 更新信息
+ tOngoodsshelfService.updateTOngoodsshelf(tOngoodsshelve);
+ }
+
+ return success("写入EBS成功");
+ }
+
+ /**
+ * 对接ebs
+ *
+ * @param tOngoodsshelves
+ * @return
+ * @throws Exception
+ */
+ public String ebsConfirm(List tOngoodsshelves) {
+ try {
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ // 查询物料ID
+ for (TOngoodsshelf tOngoodsshelve : tOngoodsshelves) {
+ // 物料id
+ int itemId;
+ // 先查询物料表,根据当前的物料编码
+ TBaseGoods goodsTemp = goodsService.selectTBaseGoodsByGoodsId(tOngoodsshelve.getGoodsid());
+ if (goodsTemp != null) {
+ itemId = Integer.parseInt(goodsTemp.getGoodsTypeId());
+ } else {
+ JSONObject dataGetInvItemId = getInvItemId(tOngoodsshelve.getGoodsid(), token.get("access_token").toString());
+ logger.info("查询到的物料ID结果:{}", JSON.toJSONString(dataGetInvItemId));
+ itemId = dataGetInvItemId.getIntValue("inventoryItemId");
+ // 将查到的信息存放到Goods表
+ TBaseGoods newGoods = new TBaseGoods();
+ // 物料ID
+ newGoods.setGoodsTypeId(String.valueOf(dataGetInvItemId.getIntValue("inventoryItemId")));
+ // 物料编码
+ newGoods.setGoodsId(dataGetInvItemId.getString("itemCode"));
+ // 物料描述
+ newGoods.setGoodsName(dataGetInvItemId.getString("itemDesc"));
+ // 单位
+ newGoods.setUnit(dataGetInvItemId.getString("primaryUnitOfMeasure"));
+ goodsService.insertTBaseGoods(newGoods);
+ }
+ // 订单号
+ String poOrder = tOngoodsshelve.getWmsorderid();
+ // 根据物料Id和订单号获取EBS内订单
+ List targetOrders;
+ // 先查询本地数据库中是否已经缓存过
+ TEbsOrder queryOrder = new TEbsOrder();
+ queryOrder.setPhaSegment1(poOrder);// 订单号
+ queryOrder.setItemId(itemId);
+ List ebsOrders = itEbsOrderService.selectTEbsOrderList(queryOrder);
+ logger.info("查询到的本地缓存订单:{}", JSON.toJSONString(ebsOrders));
+ if (ebsOrders.size() > 0) {// 本地数据库中缓存过
+ targetOrders = ebsOrders;
+ } else {
+ targetOrders = getLinesAll(itemId, poOrder, token.get("access_token").toString());
+ logger.info("通过ebs查询到的订单信息:{}", JSON.toJSONString(targetOrders));
+ if (targetOrders == null) {
+ return "当前入库物料在EBS中没有对应订单!";
+ }
+ // 插入ebsOrder表
+ for (TEbsOrder targetOrder : targetOrders) {
+ itEbsOrderService.insertTEbsOrder(targetOrder);
+ }
+ }
+ // 当前任务的入库数量
+ double tempInQuantity = tOngoodsshelve.getShelfNum().doubleValue();
+ for (TEbsOrder targetOrder : targetOrders) {
+ // 获取数量
+ double msQuantity = targetOrder.getMsQuantity();
+ if (msQuantity >= tempInQuantity) {
+ // 更新本地的可接收数量
+ targetOrder.setMsQuantity(msQuantity - tempInQuantity);
+ // 物料描述
+ tOngoodsshelve.setGoodsname(targetOrder.getItemDescription());
+ // 单位
+ tOngoodsshelve.setGoodsMeasureId(targetOrder.getUnitMeasLookupCode());
+ // itemID
+ tOngoodsshelve.setGoodsTypeid(targetOrder.getItemId().toString());
+ // 供应商名称
+ tOngoodsshelve.setCustomerId(targetOrder.getVendorName());
+ // 更新剩余入库数量
+ tempInQuantity = 0;
+ break;
+ } else {
+ // 更新本地的可接收数量
+ targetOrder.setMsQuantity(0.0);
+ // 物料描述
+ tOngoodsshelve.setGoodsname(targetOrder.getItemDescription());
+ // 单位
+ tOngoodsshelve.setGoodsMeasureId(targetOrder.getUnitMeasLookupCode());
+ // itemID
+ tOngoodsshelve.setGoodsTypeid(targetOrder.getItemId().toString());
+ // 供应商名称
+ tOngoodsshelve.setCustomerId(targetOrder.getVendorName());
+ // 更新剩余入库数量
+ tempInQuantity -= msQuantity;
+ }
+ }
+ if (tempInQuantity > 0) {
+ // 报错信息:入库数量超过EBS内订单数量。这条订单无法同步EBS。
+ return "入库数量超过EBS内订单可接收数量。这条订单无法同步EBS。";
+ } else {
+ for (TEbsOrder targetOrder : targetOrders) {
+ // 更新EBS缓存的订单信息
+ itEbsOrderService.updateTEbsOrder(targetOrder);
+ }
+ }
+ }
+ } catch (Exception e) {
+ logger.error("出现异常:{}", JSON.toJSONString(e));
+ return "出现异常";
+ }
+
+ return null;
+ }
+
+ /**
+ * 结束入库
+ */
+ @Log(title = "入库", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/finishNoErpIn",consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public AjaxResult finishNoErpIn(@RequestBody List tOngoodsshelves) throws Exception {
+ logger.info("接收到入库请求:{}",tOngoodsshelves);
+ if(tOngoodsshelves.size() == 0){
+ logger.error("提交入库的数据为空");
+ return error();
+ }
+ // 入库id
+ String lotId = OrderCodeFactory.getOrderCode("RK", "");
+ // 创建日期
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SysUser sysUser = new SysUser();
+ if (StringUtils.isEmpty(tOngoodsshelves.get(0).getUserName())) {
+ // 获取用户名
+ sysUser = ShiroUtils.getCurrentUser();
+ } else {
+ sysUser.setUserName(tOngoodsshelves.get(0).getUserName());
+ }
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ for (TOngoodsshelf s:
+ tOngoodsshelves) {
+ s.setAgvsts("0");
+ s.setTasktype("0");
+ s.setLotId(lotId);
+ s.setOrderId(initOrderId());
+ s.setCreateDate(sdf.format(date));
+ s.setInstatus("0");
+ s.setUserName(sysUser.getUserName());
+ // 设置子库ID
+ s.setWhseloc("121-108");
+ // 合格
+ s.setAccStatus("0");
+ JSONObject dataGetInvItemId = getInvItemId(s.getGoodsid(), token.get("access_token").toString());
+ // 物料描述
+ s.setGoodsname(dataGetInvItemId.getString("itemDesc"));
+ // 单位
+ s.setGoodsMeasureId(dataGetInvItemId.getString("primaryUnitOfMeasure"));
+ // itemID
+ s.setGoodsTypeid(dataGetInvItemId.getString("inventoryItemId"));
+ }
+ return toAjax(tOngoodsshelfService.insertTOngoodsshelfValues(tOngoodsshelves));
+ }
+
+ /**
+ * 更新库存
+ */
+ @Log(title = "更新库存", businessType = BusinessType.INSERT)
+ @PostMapping(value = "/MistockIn",consumes = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult MistockIn(@RequestBody TOngoodsshelf tOngoodsshelve) throws Exception {
+ // 查找对应任务
+ TOngoodsshelf temp = tOngoodsshelfService.selectTOngoodsshelfByLotId(tOngoodsshelve.getLotId());
+ logger.info("根据lotId{}查询到的入库任务信息:{}", tOngoodsshelve.getLotId(), JSON.toJSONString(temp));
+ // 将任务插入备份表
+ TOngoodsshelfBak tempBak = new TOngoodsshelfBak();
+ tempBak.setWmsorderid(temp.getWmsorderid());
+ tempBak.setGoodsid(temp.getGoodsid());
+ tempBak.setGoodsname(temp.getGoodsname());
+ tempBak.setProduclotid(temp.getProduclotid());
+ tempBak.setShelfNum(temp.getShelfNum());
+ tempBak.setProductionDate(temp.getProductionDate());
+ tempBak.setExpirationDate(temp.getExpirationDate());
+ tempBak.setProviderId(temp.getProviderId());
+ tempBak.setWgh(temp.getWgh());
+ tempBak.setLocationId(temp.getLocationId());
+ tempBak.setInstand(temp.getInstand());
+ tempBak.setCtl(temp.getCtl());
+ tempBak.setUserName(temp.getUserName());
+ tempBak.setCreateDate(temp.getCreateDate());
+ tempBak.setLotId(temp.getLotId());
+ tempBak.setStoNum(temp.getStoNum());
+ tempBak.setAccNum(temp.getAccNum());
+ tempBak.setStockNum(temp.getStockNum());
+ tempBak.setOndate(temp.getOndate());
+ tempBak.setOnshelfuserid(temp.getOnshelfuserid());
+ tempBak.setStorageId(temp.getStorageId());
+ tempBak.setStorageAreaId(temp.getStorageAreaId());
+ tempBak.setUpgoodsId(temp.getUpgoodsId());
+ tempBak.setHasvolume(temp.getHasvolume());
+ tempBak.setGoodsTypeid(temp.getGoodsTypeid());
+ tempBak.setStorageMode(temp.getStorageMode());
+ tempBak.setGoodsvolume(temp.getGoodsvolume());
+ tempBak.setBarcode(temp.getBarcode());
+ tempBak.setCustomerId(temp.getCustomerId());
+ tempBak.setPlcid(temp.getPlcid());
+ tempBak.setHigh(temp.getHigh());
+ tempBak.setInstatus(temp.getInstatus());
+ tempBak.setUnit(temp.getUnit());
+ tempBak.setBaozhiqi(temp.getBaozhiqi());
+ tempBak.setWhseloc(temp.getWhseloc());
+ tempBak.setDecid(temp.getDecid());
+ tempBak.setTasktype(temp.getTasktype());
+ tempBak.setGoodsMeasureId(temp.getGoodsMeasureId());
+ tempBak.setPackingNum(temp.getPackingNum());
+ tempBak.setDamageNum(temp.getDamageNum());
+ tempBak.setDamageLocation(temp.getDamageLocation());
+ tempBak.setWarehousingId(temp.getWarehousingId());
+ tempBak.setNetWeigh(temp.getNetWeigh());
+ tempBak.setRoughWeight(temp.getRoughWeight());
+ tempBak.setScaleUnit(temp.getScaleUnit());
+ tempBak.setTotalVolume(temp.getTotalVolume());
+ tempBak.setTotalRoughWeight(temp.getTotalRoughWeight());
+ tempBak.setTotalNetWeigh(temp.getTotalNetWeigh());
+ tempBak.setTotalMoney(temp.getTotalMoney());
+ tempBak.setFlag(temp.getFlag());
+ tempBak.setStandard(temp.getStandard());
+ tempBak.setInnerBatchNo(temp.getInnerBatchNo());
+ tempBak.setPrintsts(temp.getPrintsts());
+ tempBak.setPrintcs(temp.getPrintcs());
+ tempBak.setPurchasetype(temp.getPurchasetype());
+ tempBak.setAccStatus(temp.getAccStatus());
+ tempBak.setManualTrayState(temp.getManualTrayState());
+ tempBak.setAcceId(temp.getAcceId());
+ tempBak.setSpec(temp.getSpec());
+ tempBak.setBatchno(temp.getBatchno());
+ tempBak.setPrintusid(temp.getPrintusid());
+ tempBak.setAgvsts(temp.getAgvsts());
+ tempBak.setAgvbgn(temp.getAgvbgn());
+ tempBak.setAgvend(temp.getAgvend());
+ tempBak.setOrderId(temp.getOrderId());
+
+ // 插入库存表
+ TMiStock stockTemp = new TMiStock();
+ stockTemp.setShelvesNum(temp.getShelfNum());
+ stockTemp.setSts("0");
+ stockTemp.setFlag("0");
+ stockTemp.setStockId(String.valueOf(temp.getPlcid()));
+ stockTemp.setStorageId("SCC");
+ stockTemp.setGoodsId(temp.getGoodsid());
+ stockTemp.setGoodsName(temp.getGoodsname());
+ stockTemp.setGoodsTypeid(temp.getGoodsTypeid());
+ stockTemp.setAreaId(temp.getLotId());
+ stockTemp.setCtl(temp.getCtl());
+ stockTemp.setLocationId(temp.getLocationId());
+ stockTemp.setProduclotid(temp.getProduclotid());
+ stockTemp.setProviderId(temp.getProviderId());
+ stockTemp.setPutinId(new GUID().toString());
+ stockTemp.setWareDate(new Date());
+ stockTemp.setBarcode(temp.getBarcode());
+ stockTemp.setWgh(temp.getWgh());
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ stockTemp.setProductionDate(sdf.parse("20" + temp.getProductionDate()));
+ stockTemp.setExpirationDate(sdf.parse("20" + temp.getExpirationDate()));
+ stockTemp.setCustomerId(temp.getCustomerId());
+ stockTemp.setWhseloc(temp.getWhseloc());
+ stockTemp.setGoodsMeasureId(temp.getGoodsMeasureId());
+
+ try {
+ // 插入任务备份表
+ tOngoodsshelfBakService.insertTOngoodsshelfBak(tempBak);
+ logger.info("插入入库任务记录成功:{}", JSON.toJSONString(tempBak));
+ // 删除入库任务
+ tOngoodsshelfService.deleteTOngoodsshelfByLotId(temp.getLotId());
+ logger.info("删除入库任务成功:{}", JSON.toJSONString(temp));
+ // 插入库存
+ tMiStockService.insertTMiStock(stockTemp);
+ logger.info("插入库存成功:{}", JSON.toJSONString(stockTemp));
+ } catch (Exception e) {
+ return error(JSON.toJSONString(e));
+ }
+ return success();
+ }
+
+ /**
+ * 生成订单号
+ */
+ private String initOrderId() {
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ return "SJD" + sdf.format(date) + (int)(Math.random() * 10);
+ }
+
+ /**
+ * 新增保存入库任务单
+ */
+ @RequiresPermissions("business:ongoodsshelf:add")
+ @Log(title = "入库任务单", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TOngoodsshelf tOngoodsshelf)
+ {
+ return toAjax(tOngoodsshelfService.insertTOngoodsshelf(tOngoodsshelf));
+ }
+
+ /**
+ * 修改入库任务单
+ */
+ @RequiresPermissions("business:ongoodsshelf:edit")
+ @GetMapping("/edit/{lotId}")
+ public String edit(@PathVariable("lotId") String lotId, ModelMap mmap)
+ {
+ TOngoodsshelf tOngoodsshelf = tOngoodsshelfService.selectTOngoodsshelfByLotId(lotId);
+ mmap.put("tOngoodsshelf", tOngoodsshelf);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存入库任务单
+ */
+ @RequiresPermissions("business:ongoodsshelf:edit")
+ @Log(title = "入库任务单", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TOngoodsshelf tOngoodsshelf)
+ {
+ return toAjax(tOngoodsshelfService.updateTOngoodsshelf(tOngoodsshelf));
+ }
+
+ /**
+ * 空托入库
+ */
+
+ @Log(title = "空托入库",businessType = BusinessType.INSERT)
+ @GetMapping("/emptyPalletIn")
+ @ResponseBody
+ public AjaxResult emptyPalletIn(){
+ logger.info("空托入库开始");
+ TOngoodsshelf tOngoodsshelf = new TOngoodsshelf();
+ tOngoodsshelf.setTasktype("0");
+ tOngoodsshelf.setLotId(OrderCodeFactory.getOrderCode("RK", ""));
+ tOngoodsshelf.setGoodsid("000000000");
+ tOngoodsshelf.setShelfNum(BigDecimal.ONE);
+ tOngoodsshelf.setWgh("0");
+ tOngoodsshelf.setInstatus("0");
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ tOngoodsshelf.setCreateDate(sdf.format(new Date()));
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tOngoodsshelf.setUserName(sysUser.getUserName());
+ return toAjax(tOngoodsshelfService.insertTOngoodsshelf(tOngoodsshelf));
+ }
+
+ /**
+ * 空托出库
+ */
+ @Log(title = "空托出库",businessType = BusinessType.INSERT)
+ @GetMapping("/emptyPalletOut")
+ @ResponseBody
+ public AjaxResult emptyPalletOut(){
+ logger.info("空托出库开始");
+ TCkOrderdetail tCkOrderdetail = new TCkOrderdetail();
+ tCkOrderdetail.setCkId(OrderCodeFactory.getOrderCode("CK",null));
+ tCkOrderdetail.setGoodId("000000000");
+ tCkOrderdetail.setCreateTime(new Date());
+ tCkOrderdetail.setPickNum(BigDecimal.ONE);
+ tCkOrderdetail.setStatus("0");
+ tCkOrderdetail.setAddtime(new Date());
+ // 获取用户名
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ tCkOrderdetail.setUserName(sysUser.getUserName());
+ return toAjax(tckOrderdetailService.insertTCkOrderdetail(tCkOrderdetail));
+ }
+
+ private List getTConveyorStatus(){
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ String loginIp = ShiroUtils.getIp();
+ TConveyorStatus status = new TConveyorStatus();
+ status.setPcip(loginIp);
+ List tConveyorStatuses = tConveyorStatusService.selectTConveyorStatusList(status);
+ return tConveyorStatuses;
+ }
+
+ /**
+ * 删除入库任务单
+ */
+ @RequiresPermissions("business:ongoodsshelf:remove")
+ @Log(title = "入库任务单", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tOngoodsshelfService.deleteTOngoodsshelfByLotIds(ids));
+ }
+
+ /**
+ * 创建参数Json(写入ebs)
+ * @return
+ */
+ public JSONObject createJsonWmsRcvProc(TEbsOrder dataGetAll, TOngoodsshelf tOngoodsshelve) throws ParseException {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "wmsRcvProc");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "E");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("organizationId", configService.selectConfigByKey("organizationId"));
+ businessData.put("poHeaderId", dataGetAll.getPoHeaderId());
+ businessData.put("poLineId", dataGetAll.getPoLineId());
+ businessData.put("lineLocationId", dataGetAll.getLineLocationId());
+ businessData.put("poDistributionId", dataGetAll.getPoDistributionId());
+ businessData.put("itemId", dataGetAll.getItemId());
+ businessData.put("quantity", tOngoodsshelve.getShelfNum());
+ businessData.put("subInventory", "");
+// businessData.put("subInventory", tOngoodsshelve.getWhseloc());
+ businessData.put("locatorId", null);
+// businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(tOngoodsshelve.getWhseloc()));
+ if (!"不控制".equals(dataGetAll.getLotControl())) {
+ businessData.put("lotNumber", tOngoodsshelve.getProduclotid());
+ }
+ businessData.put("receiptDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ businessData.put("expirationDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new SimpleDateFormat("yyyyMMdd").parse("20" + tOngoodsshelve.getExpirationDate())));
+ businessData.put("OriginationDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new SimpleDateFormat("yyyyMMdd").parse("20" + tOngoodsshelve.getProductionDate())));
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 获取物料ID
+ * @param goodsId 物料编码
+ * @return
+ */
+ public JSONObject getInvItemId (String goodsId, String token) {
+ String paramsGetInvItemId = JSON.toJSONString(createJsonGetInvItemInfosForPcbAps(goodsId));
+ logger.info("通过EBS查询物料ID参数:{}", paramsGetInvItemId);
+ String resultGetInvItemId = "";
+ try {
+ resultGetInvItemId = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsGetInvItemId, token);
+ } catch (Exception e) {
+ // 接口失败
+ return null;
+ }
+ JSONObject resultJsonGetInvItemId = (JSONObject) JSON.parseObject(resultGetInvItemId).get("obj");
+ return JSON.parseArray(resultJsonGetInvItemId.getString("rows"), JSONObject.class).get(0);
+ }
+
+ /**
+ * 根据物料ID和订单号获取EBS内订单
+ * @param itemId
+ * @param poOrder
+ * @return
+ */
+ public List getLinesAll(int itemId, String poOrder, String token) {
+ String paramsGetAll = JSON.toJSONString(createJsonGetLinesAll(itemId, poOrder));
+ logger.info("通过EBS查询订单参数:{}", paramsGetAll);
+ String resultGetAll = "";
+ try {
+ resultGetAll = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsGetAll, token);
+ } catch (Exception e) {
+ // 接口失败
+ return null;
+ }
+ JSONObject resultJsonGetAll = (JSONObject) JSON.parseObject(resultGetAll).get("obj");
+ if (resultJsonGetAll.getIntValue("total") < 1) {
+ return null;
+ }
+ return JSON.parseArray(resultJsonGetAll.getString("rows"), TEbsOrder.class);
+ }
+
+ /**
+ * 创建参数Json(获取物料ID)
+ * @return
+ */
+ public JSONObject createJsonGetInvItemInfosForPcbAps(String itemCode) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "PCB_APS");
+ systemParams.put("sourceSystem", "APS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getInvItemInfosForPcbAps");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+ baseQueryParams.put("startPosition", 1);
+ baseQueryParams.put("rowsCnt", 500);
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("itemCode", itemCode);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+ /**
+ * 创建参数Json(根据物料ID和订单号获取EBS内订单)
+ * @return
+ */
+ public JSONObject createJsonGetLinesAll(int itemId, String poOrder) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "getLinesAll");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "S");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+ baseQueryParams.put("organizationId", configService.selectConfigByKey("organizationId"));
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("poOrder", poOrder);
+ businessData.put("itemId", itemId);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOutReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOutReportController.java
new file mode 100644
index 0000000..e86698e
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOutReportController.java
@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.business;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.business.domain.DateCover;
+import com.ruoyi.business.domain.TCkPickingwavegoods;
+import com.ruoyi.business.domain.TCkPickingwavegoodsBack;
+import com.ruoyi.business.domain.TOngoodsshelfBak;
+import com.ruoyi.business.service.ITCkPickingwavegoodsBackService;
+import com.ruoyi.business.service.ITCkPickingwavegoodsService;
+import com.ruoyi.business.service.ITOngoodsshelfBakService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 入库报表Controller
+ *
+ * @author liangzhou
+ * @date 2022-06-20
+ */
+@Controller
+@RequestMapping("/business/outreport")
+public class TOutReportController extends BaseController {
+ private String prefix = "business/outreport";
+
+ @Autowired
+ private ITCkPickingwavegoodsBackService tCkPickingwavegoodsBackService;
+
+ @RequiresPermissions("business:outreport:view")
+ @GetMapping()
+ public String outReportMain(ModelMap mmap) {
+ // 获取用户
+ SysUser sysUser = ShiroUtils.getCurrentUser();
+ mmap.put("sysUser", sysUser);
+ return prefix + "/outreportmain";
+ }
+
+ /**
+ * 查询出库任务单列表
+ */
+ @RequiresPermissions("business:outreport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(DateCover date) {
+ startPage();
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "4", date.getSearch());
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出出库任务单列表
+ */
+ @RequiresPermissions("business:outreport:export")
+ @Log(title = "导出出库记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DateCover date) {
+// tCkPickingwavegoodsBack.setCkType("4");
+// List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBackWithoutEmpty(tCkPickingwavegoodsBack);
+ List list = tCkPickingwavegoodsBackService.selectTCkPickingwavegoodsBakByCreateDate(
+ date.getStartDate(),
+ date.getEndDate(), "4", date.getSearch());
+ ExcelUtil util = new ExcelUtil(TCkPickingwavegoodsBack.class);
+ return util.exportExcel(list, "出库记录表");
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe() {
+ return prefix + "/stsdescribe";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOwnerController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOwnerController.java
new file mode 100644
index 0000000..495e33a
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TOwnerController.java
@@ -0,0 +1,136 @@
+package com.ruoyi.web.controller.business;
+
+import java.util.List;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.business.domain.TCusCustomer;
+import com.ruoyi.business.service.ITCusCustomerService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 货主管理Controller
+ *
+ * @author wms
+ * @date 2022-06-24
+ */
+@Controller
+@RequestMapping("/business/owner")
+public class TOwnerController extends BaseController
+{
+ private String prefix = "business/owner";
+
+ @Autowired
+ private ITCusCustomerService tCusCustomerService;
+
+ @RequiresPermissions("business:owner:view")
+ @GetMapping()
+ public String customer()
+ {
+ return prefix + "/ownerMain";
+ }
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:owner:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TCusCustomer tCusCustomer)
+ {
+ startPage();
+ List list = tCusCustomerService.selectTCusCustomerList(tCusCustomer);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出【请填写功能名称】列表
+ */
+ @RequiresPermissions("business:owner:export")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TCusCustomer tCusCustomer)
+ {
+ List list = tCusCustomerService.selectTCusCustomerList(tCusCustomer);
+ ExcelUtil util = new ExcelUtil(TCusCustomer.class);
+ return util.exportExcel(list, "【请填写功能名称】数据");
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:owner:add")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(TCusCustomer tCusCustomer)
+ {
+ return toAjax(tCusCustomerService.insertTCusCustomer(tCusCustomer));
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @RequiresPermissions("business:owner:edit")
+ @GetMapping("/edit/{customerId}")
+ public String edit(@PathVariable("customerId") String customerId, ModelMap mmap)
+ {
+ TCusCustomer tCusCustomer = tCusCustomerService.selectTCusCustomerByCustomerId(customerId);
+ mmap.put("tCusCustomer", tCusCustomer);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存【请填写功能名称】
+ */
+ @RequiresPermissions("business:owner:edit")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(TCusCustomer tCusCustomer)
+ {
+ return toAjax(tCusCustomerService.updateTCusCustomer(tCusCustomer));
+ }
+
+ /**
+ * 删除【请填写功能名称】
+ */
+ @RequiresPermissions("business:owner:remove")
+ @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
+ @PostMapping( "/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ return toAjax(tCusCustomerService.deleteTCusCustomerByCustomerIds(ids));
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/customerModal";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TStockReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TStockReportController.java
new file mode 100644
index 0000000..6d6ebe7
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TStockReportController.java
@@ -0,0 +1,657 @@
+package com.ruoyi.web.controller.business;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.business.utils.EbsUtils;
+import com.ruoyi.business.utils.OrderCodeFactory;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DictUtils;
+import com.ruoyi.common.utils.ShiroUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.framework.web.service.DictService;
+import com.ruoyi.system.service.ISysConfigService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 库存Controller
+ *
+ * @author wms
+ * @date 2022-05-29
+ */
+@Controller
+@RequestMapping("/business/stockReport")
+public class TStockReportController extends BaseController
+{
+ private String prefix = "business/stockReport";
+
+ @Autowired
+ private ITMiStockService tMiStockService;
+
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private ITEbsRecordService tEbsRecordService;
+
+ @Autowired
+ private ITTransferRecordService tTransferRecordService;
+
+ @Autowired
+ private ITTaskMoveService tTaskMoveService;
+
+ @Autowired
+ private ITBaseStorageAreaLocationService tBaseStorageAreaLocationService;
+
+ @Autowired
+ private DictService dict;
+
+ @RequiresPermissions("business:stockReport:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/stockReport";
+ }
+
+ /**
+ * 移库
+ * @param mmap
+ * @return
+ */
+ @RequiresPermissions("business:stockReport:view")
+ @GetMapping("/moveStock")
+ public String ebsConfirm(ModelMap mmap) {
+ mmap.put("tMiStock", new TMiStock());
+ return prefix + "/stockForMove";
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:stockReport:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(TMiStock tMiStock)
+ {
+ startPage();
+ List list = tMiStockService.selectStock(tMiStock);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出库存列表
+ */
+ @RequiresPermissions("business:stockReport:export")
+ @Log(title = "导出库存表", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(TMiStock tMiStock)
+ {
+ List list = tMiStockService.selectStock(tMiStock);
+ ExcelUtil util = new ExcelUtil(TMiStock.class);
+ return util.exportExcel(list, "库存数据");
+ }
+
+ /**
+ * 导入库存列表
+ */
+ @RequiresPermissions("business:stockReport:import")
+ @Log(title = "导入库存表", businessType = BusinessType.EXPORT)
+ @PostMapping("/importExcel")
+ @ResponseBody
+ public AjaxResult importExcel(TMiStock tMiStock) {
+ InputStream is = null;
+ try {
+ is = new FileInputStream("D:\\库存数据.xlsx");
+ } catch (FileNotFoundException e) {
+ return error(e.getMessage());
+ }
+ ExcelUtil util = new ExcelUtil(TMiStock.class);
+ List stockList;
+ try {
+ stockList = util.importExcel(is);
+ } catch (Exception e) {
+ return error(e.getMessage());
+ }
+ for (TMiStock stock : stockList) {
+ if (tMiStockService.insertTMiStock(stock) < 1) {
+ return error("导入数据失败");
+ }
+ }
+ return success("导入成功");
+ }
+
+ /**
+ * 新增库存
+ */
+ @GetMapping("/add")
+ public String add()
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 弹框表格
+ */
+ @GetMapping("/modalPage")
+ public String table()
+ {
+ return prefix + "/stockModal";
+ }
+
+ /**
+ * 状态说明弹框
+ */
+ @GetMapping("/stsDescribe")
+ public String stsDescribe()
+ {
+ return prefix + "/stsdescribe";
+ }
+
+ /**
+ * 更新库存状态
+ */
+ @RequiresPermissions("business:stockReport:edit")
+ @GetMapping("/changeStockSts/{stock}")
+ public String edit(@PathVariable("stock") String stock, ModelMap mmap)
+ {
+ Map stockMap = JSON.parseObject(stock);
+ TMiStock tMiStockQuery = new TMiStock();
+ tMiStockQuery.setGoodsId(String.valueOf(stockMap.get("goodsId")));
+ tMiStockQuery.setProduclotid(String.valueOf(stockMap.get("produclotid")));
+ tMiStockQuery.setCtl(String.valueOf(stockMap.get("ctl")));
+ tMiStockQuery.setSts(String.valueOf(stockMap.get("sts")));
+ TMiStock tMiStock = tMiStockService.selectStock(tMiStockQuery).get(0);
+ mmap.put("tMiStock", tMiStock);
+ return prefix + "/changeStockSts";
+ }
+
+ /**
+ * 选择移库库位
+ */
+ @RequiresPermissions("business:stockReport:edit")
+ @GetMapping("/selDestinationLocation/{stock}")
+ public String selMoveLocation(@PathVariable("stock") String stock, ModelMap mmap)
+ {
+ // 请求库存信息
+ TMiStock requestStock = JSON.parseObject(stock, TMiStock.class);
+ // 当前库位信息
+ TBaseStorageAreaLocation currentLocation = tBaseStorageAreaLocationService.getOne(
+ new LambdaQueryWrapper()
+ .select(TBaseStorageAreaLocation::getLocationId, TBaseStorageAreaLocation::getLocationHeight)
+ .eq(TBaseStorageAreaLocation::getLocationId, requestStock.getLocationId())
+ );
+
+ // 移库信息
+ TTaskMove moveTask = new TTaskMove();
+ moveTask.setVehicleId(requestStock.getCtl());
+ moveTask.setOrigin(requestStock.getLocationId());
+ mmap.put("moveTask", moveTask);
+ List destinations = new ArrayList<>();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .select(TBaseStorageAreaLocation::getLocationId)
+ .eq(TBaseStorageAreaLocation::getStatus, "0")
+ .eq(TBaseStorageAreaLocation::getIslock, "0");
+// if (Objects.equals(currentLocation.getLocationHeight(), "2")) {
+// queryWrapper.eq(TBaseStorageAreaLocation::getLocationHeight, "2");
+// }
+ List locations = tBaseStorageAreaLocationService.list(queryWrapper);
+ for (TBaseStorageAreaLocation location : locations) {
+ destinations.add(location.getLocationId());
+ }
+ mmap.put("locations", destinations);
+ return prefix + "/moveDestinationSelect";
+ }
+
+ /**
+ * 生成移库任务
+ */
+ @RequiresPermissions("business:stockReport:edit")
+ @Log(title = "生成移库任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/generateMoveTask")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult generateMoveTask(TTaskMove moveTask) {
+ if (moveTask == null || StringUtils.isEmpty(moveTask.getVehicleId())
+ || StringUtils.isEmpty(moveTask.getOrigin())
+ ||StringUtils.isEmpty(moveTask.getDestination())) {
+ return error("缺少必填项");
+ }
+ TBaseStorageAreaLocation originLocation = tBaseStorageAreaLocationService.getOne(
+ new LambdaQueryWrapper()
+ .select(TBaseStorageAreaLocation::getLocationId, TBaseStorageAreaLocation::getLocationHeight, TBaseStorageAreaLocation::getAbcId)
+ .eq(TBaseStorageAreaLocation::getLocationId, moveTask.getOrigin()));
+ TBaseStorageAreaLocation destinationLocation = tBaseStorageAreaLocationService.getOne(
+ new LambdaQueryWrapper()
+ .select(TBaseStorageAreaLocation::getLocationId, TBaseStorageAreaLocation::getLocationHeight, TBaseStorageAreaLocation::getAbcId, TBaseStorageAreaLocation::getIslock, TBaseStorageAreaLocation::getStatus)
+ .eq(TBaseStorageAreaLocation::getLocationId, moveTask.getDestination())
+ );
+ if (originLocation == null || destinationLocation == null) {
+ return error("库位错误,查不到指定库位");
+ }
+// if (Objects.equals(originLocation.getLocationHeight(), "2") && Objects.equals(destinationLocation.getLocationHeight(), "1")) {
+// return error("高位不能移入低位");
+// }
+ if (!Objects.equals(destinationLocation.getIslock(), "0") || !Objects.equals(destinationLocation.getStatus(), "0")) {
+ return error("所选库位不可使用,请重新选择可用库位");
+ }
+ // 查询库存是否可用
+ TMiStock moveStock = tMiStockService.getOne(
+ new LambdaQueryWrapper()
+ .select(TMiStock::getCtl, TMiStock::getFlag)
+ .eq(TMiStock::getCtl, moveTask.getVehicleId()));
+ if (moveStock == null || !Objects.equals(moveStock.getFlag(), "0")) {
+ return error("当前库存不可移库");
+ }
+ TTaskMove newMove = new TTaskMove();
+ newMove.setTaskId(OrderCodeFactory.getOrderCode("MOVE_", ""));
+ newMove.setTaskType(1);
+ newMove.setTaskStatus(0);
+ newMove.setVehicleId(moveTask.getVehicleId());
+ newMove.setOrigin(originLocation.getLocationId());
+ newMove.setDestination(destinationLocation.getLocationId());
+ if (!Objects.equals(originLocation.getAbcId(), destinationLocation.getAbcId())) {
+ newMove.setIsCrossTunnel(1);// 跨巷道
+ } else {
+ newMove.setIsCrossTunnel(0);// 本巷道
+ }
+ try {
+ // 生成移库任务
+ tTaskMoveService.save(newMove);
+ // 锁定库位
+ tBaseStorageAreaLocationService.update(new LambdaUpdateWrapper()
+ .set(TBaseStorageAreaLocation::getStatus, "1")
+ .eq(TBaseStorageAreaLocation::getLocationId, moveTask.getDestination()));
+ // 锁定库存
+ tMiStockService.update(new LambdaUpdateWrapper()
+ .set(TMiStock::getFlag, "1")
+ .eq(TMiStock::getCtl, moveTask.getVehicleId()));
+ return success("生成移库任务成功");
+ } catch (Exception e) {
+ // 回滚事务
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return error("生成移库任务失败");
+ }
+ }
+
+ /**
+ * 更新库存状态
+ */
+ @Log(title = "更新库存状态", businessType = BusinessType.UPDATE)
+ @PostMapping("/updateStockSts")
+ @ResponseBody
+ public AjaxResult update(@RequestBody TMiStock tMiStock) throws Exception {
+ logger.info("接收子库转移请求:{}", JSON.toJSONString(tMiStock));
+ if (StringUtils.isEmpty(tMiStock.getGoodsId())
+ || StringUtils.isEmpty(tMiStock.getProduclotid())
+ || StringUtils.isEmpty(tMiStock.getCtl())
+ || StringUtils.isEmpty(tMiStock.getSts())) {
+ return error("请求缺少必须信息,物料编码、批次号、托盘号、更新后的状态为必须信息。");
+ }
+ TMiStock stockForSelOrigin = new TMiStock();
+ stockForSelOrigin.setGoodsId(tMiStock.getGoodsId());
+ stockForSelOrigin.setProduclotid(tMiStock.getProduclotid());
+ stockForSelOrigin.setCtl(tMiStock.getCtl());
+ // 原来的库存信息
+ List origins = tMiStockService.selectStock(stockForSelOrigin);
+ logger.info("根据请求参数查询到的库存数量: {}", origins.size());
+ if (origins.size() > 0) {// 库中存在的库存转移子库
+ // 原来的库存信息
+ TMiStock stockOrigin = origins.get(0);
+ // 更新后的库存
+ TMiStock stockAfter = new TMiStock();
+ BeanUtils.copyProperties(stockOrigin, stockAfter);
+ logger.info("原始库存: {}", JSON.toJSONString(stockOrigin));
+
+ if (StringUtils.isEmpty(stockOrigin.getGoodsId())) {
+ return error("对应库存缺少物料编码");
+ }
+
+ if (StringUtils.isEmpty(stockOrigin.getProduclotid())) {
+ return error("对应库存缺少批次号");
+ }
+
+ if (StringUtils.isEmpty(stockOrigin.getGoodsMeasureId())) {
+ return error("对应库存缺少单位");
+ }
+
+ if (StringUtils.isEmpty(stockOrigin.getGoodsTypeid())) {
+ return error("对应库存缺少item_id");
+ }
+
+ if (StringUtils.isEmpty(stockOrigin.getWhseloc())) {
+ return error("对应库存缺少子库编码");
+ }
+
+ // 分库存状态来操作
+ if ("0".equals(tMiStock.getSts())) {// 合格
+ // 待检-》合格
+ stockAfter.setSts(tMiStock.getSts());
+ stockAfter.setWhseloc("121-108");
+ } else if ("1".equals(tMiStock.getSts())) {// 不合格
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stockOrigin,
+ stockOrigin.getWhseloc(),
+ "121-124"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ stockAfter.setSts(tMiStock.getSts());
+ // 不合格原因
+ stockAfter.setMark(tMiStock.getMark());
+ stockAfter.setWhseloc("121-124");
+ } else if ("2".equals(tMiStock.getSts())) {// 延期
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stockOrigin,
+ stockOrigin.getWhseloc(),
+ "121-121"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ stockAfter.setSts(tMiStock.getSts());
+ // 将有效日期设置为延期日期
+ stockAfter.setExpirationDate(tMiStock.getExpirationDate());
+ stockAfter.setWhseloc("121-121");
+ } else if ("3".equals(tMiStock.getSts())) {// 报废
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stockOrigin,
+ stockOrigin.getWhseloc(),
+ "121-127"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ stockAfter.setSts(tMiStock.getSts());
+ // 报废流程编号
+ stockAfter.setMark(tMiStock.getMark());
+ stockAfter.setWhseloc("121-127");
+ } else if ("4".equals(tMiStock.getSts())) {// 锁定
+ // 合格-》锁定
+ stockAfter.setSts(tMiStock.getSts());
+ } else if ("-1".equals(tMiStock.getSts())){// 出库
+ logger.info("出库请求");
+ logger.info("出库请求原始库存:{}", stockOrigin.getWhseloc());
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stockOrigin,
+ "121-108",
+ "121-141"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stockOrigin.getGoodsId(), stockOrigin.getGoodsName(), stockOrigin.getProduclotid(), stockOrigin.getShelvesNum()));
+ stockAfter.setSts(tMiStock.getSts());
+ // 设定子库
+ stockAfter.setWhseloc("121-141");
+ }
+
+ // 库存状态更新成功之后,插入检验记录表
+ if (tMiStockService.updateTMiStock(stockAfter) > 0) {
+ TTransferRecord transferRecord = new TTransferRecord();
+ if ("0".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("HG", ""));
+ } else if ("1".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("BHG", ""));
+ } else if ("2".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("YQ", ""));
+ transferRecord.setDelaydate(stockAfter.getExpirationDate());
+ } else if ("3".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("BF", ""));
+ } else if ("4".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("SD", ""));
+ } else if ("-1".equals(stockAfter.getSts())) {
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("CK", ""));
+ }
+ transferRecord.setGoodsid(stockAfter.getGoodsId());
+ transferRecord.setGoodsname(stockAfter.getGoodsName());
+ transferRecord.setProductlotid(stockAfter.getProduclotid());
+ transferRecord.setShelfnum(stockAfter.getShelvesNum().toString());
+ transferRecord.setLocation(stockAfter.getLocationId());
+ transferRecord.setCtl(stockAfter.getCtl());
+ transferRecord.setProductiondate(stockOrigin.getProductionDate());
+ transferRecord.setExpirationdate(stockOrigin.getExpirationDate());
+ transferRecord.setCreateTime(new Date());
+ transferRecord.setFromstatus(stockOrigin.getSts());
+ transferRecord.setTostatus(stockAfter.getSts());
+ if (tTransferRecordService.insertTTransferRecord(transferRecord) > 0) {
+ return success();
+ }
+ }
+ } else {// 退库时转移子库
+ logger.info("退库请求");
+ // 退库后新生成的库存
+ TMiStock stockAfter = new TMiStock();
+ BeanUtils.copyProperties(tMiStock, stockAfter);
+ logger.info("退库请求的库存:{}", stockAfter.getWhseloc());
+ logger.info("接收子库转移请求:{}", JSON.toJSONString(stockAfter));
+
+ if (StringUtils.isEmpty(stockAfter.getGoodsId())) {
+ return error("缺少物料编码");
+ }
+
+ if (StringUtils.isEmpty(stockAfter.getProduclotid())) {
+ return error("缺少批次号");
+ }
+
+ if (StringUtils.isEmpty(stockAfter.getGoodsMeasureId())) {
+ return error("缺少单位");
+ }
+
+ if (StringUtils.isEmpty(stockAfter.getGoodsTypeid())) {
+ return error("缺少item_id");
+ }
+
+ if (StringUtils.isEmpty(stockAfter.getWhseloc())) {
+ return error("缺少子库编码");
+ }
+
+ // 获取token
+ JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", ""));
+ String paramsWmsSubInvProc = JSON.toJSONString(createJsonWmsSubInvProc(stockAfter,
+ "121-141",
+ "121-108"));
+ String resultWmsSubInvProc = "";
+ try {
+ resultWmsSubInvProc = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), paramsWmsSubInvProc, token.get("access_token").toString());
+ } catch (Exception e) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockAfter.getGoodsId(), stockAfter.getGoodsName(), stockAfter.getProduclotid(), stockAfter.getShelvesNum()));
+ // 接口失败
+ return error("连接EBS失败");
+ }
+ System.out.println(resultWmsSubInvProc);
+ // 子库存转移结果
+ if (!JSON.parseObject(resultWmsSubInvProc).getBoolean("success")) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockAfter.getGoodsId(), stockAfter.getGoodsName(), stockAfter.getProduclotid(), stockAfter.getShelvesNum()));
+ return error("子库存转移失败");
+ }
+ if (JSON.parseObject(JSON.parseObject(resultWmsSubInvProc).getString("obj")).getIntValue("total") < 1) {
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "-1", "子库存转移", stockAfter.getGoodsId(), stockAfter.getGoodsName(), stockAfter.getProduclotid(), stockAfter.getShelvesNum()));
+ return error("无转移子库存的物料");
+ }
+ tEbsRecordService.insertTEbsRecord(new TEbsRecord("wmsSubInvProc", 2, configService.selectConfigByKey("ebs_ip"),
+ paramsWmsSubInvProc, resultWmsSubInvProc, "0", "子库存转移", stockAfter.getGoodsId(), stockAfter.getGoodsName(), stockAfter.getProduclotid(), stockAfter.getShelvesNum()));
+
+ TTransferRecord transferRecord = new TTransferRecord();
+ transferRecord.setTransferid(OrderCodeFactory.getOrderCode("TK", ""));
+ transferRecord.setGoodsid(stockAfter.getGoodsId());
+ transferRecord.setGoodsname(stockAfter.getGoodsName());
+ transferRecord.setProductlotid(stockAfter.getProduclotid());
+ transferRecord.setShelfnum(stockAfter.getShelvesNum().toString());
+ transferRecord.setLocation(stockAfter.getLocationId());
+ transferRecord.setCtl(stockAfter.getCtl());
+ transferRecord.setProductiondate(stockAfter.getProductionDate());
+ transferRecord.setExpirationdate(stockAfter.getExpirationDate());
+ transferRecord.setCreateTime(new Date());
+ transferRecord.setFromstatus(stockAfter.getSts());
+ transferRecord.setTostatus(stockAfter.getSts());
+ if (tTransferRecordService.insertTTransferRecord(transferRecord) > 0) {
+ return success();
+ }
+ }
+
+ return error();
+ }
+
+ /**
+ * 创建参数Json(子库存转移)
+ * @return
+ */
+ public JSONObject createJsonWmsSubInvProc(TMiStock wmsStock, String fromSubInventoryCode, String toSubInventoryCode) {
+ // 创建系统参数
+ JSONObject systemParams = new JSONObject();
+ systemParams.put("requestId", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
+ systemParams.put("application", "NT_WMS");
+ systemParams.put("sourceSystem", "NT_WMS");
+ systemParams.put("targetSystem", "EBS");
+ systemParams.put("serviceName", "wmsSubInvProc");
+ systemParams.put("nonce", 1);
+ systemParams.put("timestamp", 1);
+ systemParams.put("serviceOperation", "E");
+ systemParams.put("serviceVersion", "1.0");
+ systemParams.put("token", "fd");
+
+ // 创建查询参数
+ JSONObject baseQueryParams = new JSONObject();
+
+ // 创建数据
+ JSONObject businessData = new JSONObject();
+ businessData.put("transTypeId", 2);
+ businessData.put("organizationId", configService.selectConfigByKey("organizationId"));
+ businessData.put("itemId", wmsStock.getGoodsTypeid());
+ businessData.put("quantity", wmsStock.getShelvesNum());
+ businessData.put("subInventory", fromSubInventoryCode);
+ businessData.put("locatorId", EbsUtils.LOCATOR_AREA_MAP.get(fromSubInventoryCode));
+ businessData.put("transDate", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+ businessData.put("transUom", wmsStock.getGoodsMeasureId());
+ businessData.put("transSubInventory", toSubInventoryCode);
+ businessData.put("transLocatorId", EbsUtils.LOCATOR_AREA_MAP.get(toSubInventoryCode));
+ businessData.put("transLotNumber", wmsStock.getProduclotid());
+ businessData.put("sourceHeaderId", 1);
+ businessData.put("sourceLineId", 1);
+
+ JSONArray jsonArray = new JSONArray();
+ jsonArray.add(businessData);
+
+ JSONObject result = new JSONObject();
+ result.put("systemParams", systemParams);
+ result.put("baseQueryParams", baseQueryParams);
+ result.put("businessData", jsonArray);
+
+ return result;
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/TaskController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TaskController.java
new file mode 100644
index 0000000..62465b5
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/TaskController.java
@@ -0,0 +1,377 @@
+package com.ruoyi.web.controller.business;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.ruoyi.business.domain.*;
+import com.ruoyi.business.service.*;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author liangzhou
+ * @Description 任务监视画面
+ */
+@Controller
+@RequestMapping("/business/taskMonitor")
+public class TaskController extends BaseController {
+
+ private String prefix = "business/taskMonitor";
+
+ @Autowired
+ private ITOngoodsshelfService tOngoodsshelfService;
+
+ @Autowired
+ private ITCkPickingwavegoodsService tCkPickingwavegoodsService;
+
+ @Autowired
+ private ITBaseStorageAreaLocationService locationService;
+
+ @Autowired
+ private ITMiStockService stockService;
+
+ @Autowired
+ private ITEbsOrderService itEbsOrderService;
+
+ @Autowired
+ private ITTaskMoveService taskMoveService;
+
+ @RequiresPermissions("business:taskMonitor:view")
+ @GetMapping()
+ public String stock(ModelMap mmap)
+ {
+ mmap.put("taskMonitor", new Task());
+ return prefix + "/taskMonitor";
+ }
+
+ @RequiresPermissions("business:taskMonitor:view")
+ @GetMapping("/moveTask")
+ public String moveTask(ModelMap mmap)
+ {
+ mmap.put("moveTaskMonitor", new TTaskMove());
+ return prefix + "/moveTaskMonitor";
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:taskMonitor:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(Task taskMonitor)
+ {
+ startPage();
+ // 如果任务Id非空
+ if (StringUtils.isNotEmpty(taskMonitor.getTaskId())) {
+ return getDataTable(selectTaskByTaskId(taskMonitor.getTaskId()));
+ }
+
+ return getDataTable(selectTask());
+ }
+
+ /**
+ * 查询库存列表
+ */
+ @RequiresPermissions("business:taskMonitor:list")
+ @PostMapping("/moveTask/list")
+ @ResponseBody
+ public TableDataInfo moveTaskList(TTaskMove moveTask)
+ {
+ startPage();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(moveTask.getVehicleId())) {
+ queryWrapper.eq(TTaskMove::getVehicleId, moveTask.getVehicleId());
+ }
+
+ return getDataTable(taskMoveService.list(queryWrapper));
+ }
+
+ /**
+ * 修改移库任务状态
+ */
+ @Log(title = "修改移库任务状态", businessType = BusinessType.UPDATE)
+ @PostMapping("/moveTask/changeMoveTask")
+ @ResponseBody
+ @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ public AjaxResult changeMoveTask(TTaskMove moveTask) {
+ if (moveTask == null || StringUtils.isEmpty(moveTask.getTaskId()) || moveTask.getTaskStatus() == null) {
+ return error("缺少必填项");
+ }
+ TTaskMove needUpdateTask = taskMoveService.getOne(
+ new LambdaQueryWrapper()
+ .eq(TTaskMove::getTaskId, moveTask.getTaskId())
+ );
+ if (needUpdateTask == null) {
+ return error("移库任务不存在");
+ }
+ if (moveTask.getTaskStatus() == 0 || moveTask.getTaskStatus() == 2) {// 重置或者完成任务
+ needUpdateTask.setTaskStatus(moveTask.getTaskStatus());
+ try {
+ taskMoveService.update(needUpdateTask, new LambdaUpdateWrapper().eq(TTaskMove::getTaskId, moveTask.getTaskId()));
+ return success("更改移库任务状态成功");
+ } catch (Exception e) {
+ // 回滚事务
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return error("更改移库任务状态发生异常");
+ }
+ }
+ if (moveTask.getTaskStatus() == 9) {// 取消任务
+ try {
+ // 恢复库存状态
+ LambdaUpdateWrapper stockUpdateWrapper = new LambdaUpdateWrapper()
+ .set(TMiStock::getFlag, "0")
+ .eq(TMiStock::getCtl, needUpdateTask.getVehicleId());
+ stockService.update(stockUpdateWrapper);
+ // 还原库位状态
+ LambdaUpdateWrapper locationUpdateWrapper = new LambdaUpdateWrapper()
+ .set(TBaseStorageAreaLocation::getStatus, "0")
+ .eq(TBaseStorageAreaLocation::getLocationId, needUpdateTask.getDestination());
+ locationService.update(locationUpdateWrapper);
+ // 删除移库任务
+ taskMoveService.remove(new LambdaQueryWrapper().eq(TTaskMove::getTaskId, moveTask.getTaskId()));
+ return success("取消移库任务成功");
+ } catch (Exception e) {
+ // 回滚事务
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return error("取消移库任务发生异常");
+ }
+ }
+ return error("没有可进行的操作");
+ }
+
+ /**
+ * 删除任务
+ */
+ @Log(title = "删除任务", businessType = BusinessType.DELETE)
+ @PostMapping("/delTask")
+ @ResponseBody
+ public AjaxResult delTask(Task taskMonitor) {
+ try {
+ if (taskMonitor.getTaskMode().equals("1")) {
+ // 查询到需要删除的任务
+ TOngoodsshelf targetTask = tOngoodsshelfService.selectTOngoodsshelfByLotId(taskMonitor.getTaskNo());
+ // 删除入库任务
+ tOngoodsshelfService.deleteTOngoodsshelfByLotId(targetTask.getLotId());
+ // 恢复库位状态
+ TBaseStorageAreaLocation targetLocation = locationService.selectTBaseStorageAreaLocationByLocationId(targetTask.getLocationId());
+ targetLocation.setStatus("0");
+ locationService.updateTBaseStorageAreaLocation(targetLocation);
+ // 查询本地缓存的对应的订单信息
+ TEbsOrder ebsOrder = new TEbsOrder();
+ ebsOrder.setPhaSegment1(targetTask.getWmsorderid());// 订单号
+ ebsOrder.setItemId(Integer.valueOf(targetTask.getGoodsTypeid()));
+ // 删除本地缓存的订单
+ itEbsOrderService.deleteTEbsOrder(ebsOrder);
+ } else {
+ // 查询到需要删除的任务
+ TCkPickingwavegoods targetTask = tCkPickingwavegoodsService.selectTCkPickingwavegoodsByPickingid(taskMonitor.getTaskNo());
+ // 删除出库任务
+ tCkPickingwavegoodsService.deleteTCkPickingwavegoodsByPickingid(targetTask.getPickingid());
+ // 恢复库存状态
+ TMiStock query = new TMiStock();
+ query.setLocationId(targetTask.getLocId());
+ query.setCtl(targetTask.getCtl());
+ List targetStockList = stockService.selectTMiStockList(query);
+ if (targetStockList.size() < 1) {
+ return error("0");
+ }
+ TMiStock targetStock = targetStockList.get(0);
+ targetStock.setFlag("0");
+ stockService.updateTMiStock(targetStock);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+
+ /**
+ * 已处理任务
+ */
+ @Log(title = "已处理任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/solveTask")
+ @ResponseBody
+ public AjaxResult solveTask(Task taskMonitor) {
+ try {
+ if (taskMonitor.getTaskMode().equals("1")) {
+ // 查询到需要的任务
+ TOngoodsshelf targetTask = tOngoodsshelfService.selectTOngoodsshelfByLotId(taskMonitor.getTaskNo());
+ // 更新入库任务状态为已完成
+ targetTask.setInstatus("2");
+ tOngoodsshelfService.updateTOngoodsshelf(targetTask);
+ } else {
+ // 查询到需要删除的任务
+ TCkPickingwavegoods targetTask = tCkPickingwavegoodsService.selectTCkPickingwavegoodsByPickingid(taskMonitor.getTaskNo());
+ // 更新出库任务状态为完成
+ targetTask.setOutstatus("2");
+ tCkPickingwavegoodsService.updateTCkPickingwavegoods(targetTask);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+
+ /**
+ * 已处理任务
+ */
+ @Log(title = "已处理任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/agvComplete")
+ @ResponseBody
+ public AjaxResult agvComplete(Task taskMonitor) {
+ try {
+ if (taskMonitor.getTaskMode().equals("1")) {
+ // 查询到需要的任务
+ TOngoodsshelf targetTask = tOngoodsshelfService.selectTOngoodsshelfByLotId(taskMonitor.getTaskNo());
+ // 更新AGV任务状态为已完成
+ targetTask.setAgvsts("2");
+ tOngoodsshelfService.updateTOngoodsshelf(targetTask);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+
+ /**
+ * 重置任务
+ */
+ @Log(title = "重置任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/rebootTask")
+ @ResponseBody
+ public AjaxResult rebootTask(Task taskMonitor) {
+ try {
+ if (taskMonitor.getTaskMode().equals("1")) {
+ // 查询到需要的任务
+ TOngoodsshelf targetTask = tOngoodsshelfService.selectTOngoodsshelfByLotId(taskMonitor.getTaskNo());
+ // 更新入库任务状态为已完成
+ targetTask.setInstatus("0");
+ tOngoodsshelfService.updateTOngoodsshelf(targetTask);
+ } else {
+ // 查询到需要删除的任务
+ TCkPickingwavegoods targetTask = tCkPickingwavegoodsService.selectTCkPickingwavegoodsByPickingid(taskMonitor.getTaskNo());
+ // 更新出库任务状态为完成
+ targetTask.setOutstatus("0");
+ tCkPickingwavegoodsService.updateTCkPickingwavegoods(targetTask);
+ }
+ } catch (Exception e) {
+ return error("-1");
+ }
+ return success("1");
+ }
+
+ /**
+ * 根据任务Id查找任务
+ * @param taskId
+ * @return
+ */
+ public List selectTaskByTaskId(String taskId) {
+ // 获取入库任务列表
+ TOngoodsshelf tOngoodsshelf = new TOngoodsshelf();
+ tOngoodsshelf.setPlcid(Long.valueOf(taskId));
+ List inTaskList = tOngoodsshelfService.selectTOngoodsshelfList(tOngoodsshelf);
+ // 获取出库任务列表
+ TCkPickingwavegoods tCkPickingwavegoods = new TCkPickingwavegoods();
+ tCkPickingwavegoods.setPlcid(taskId);
+ List outTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(tCkPickingwavegoods);
+
+ return setTask(inTaskList, outTaskList);
+ }
+
+ /**
+ * 查询所有任务
+ * @return
+ */
+ public List selectTask() {
+ // 获取入库任务列表
+ List inTaskList = tOngoodsshelfService.selectTOngoodsshelfList(new TOngoodsshelf());
+ // 获取出库任务列表
+ List outTaskList = tCkPickingwavegoodsService.selectTCkPickingwavegoodsList(new TCkPickingwavegoods());
+
+ return setTask(inTaskList, outTaskList);
+ }
+
+ /**
+ * 根据入库任务,出库任务设置任务列表
+ * @param inTaskList
+ * @param outTaskList
+ * @return
+ */
+ private List setTask(List inTaskList, List outTaskList) {
+ // 生成任务监控列表
+ List taskList = new ArrayList();
+ // 日期
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ // 入库任务插入任务列表
+ for (TOngoodsshelf inTask : inTaskList) {
+ Task tempTask = new Task();
+ // 任务编号
+ tempTask.setTaskNo(inTask.getLotId());
+ // 任务时间
+ tempTask.setTaskTime(inTask.getCreateDate());
+ // 任务ID
+ tempTask.setTaskId(String.valueOf(inTask.getPlcid()));
+ // 物料编号
+ tempTask.setGoodsId(inTask.getGoodsid());
+ // 数量
+ tempTask.setOpNumber(inTask.getShelfNum());
+ // 起始货位
+ tempTask.setStartLocation(inTask.getInstand());
+ // 目标货位
+ tempTask.setTargetLocation(inTask.getLocationId());
+ // 托盘号
+ tempTask.setCtl(inTask.getCtl());
+ // 任务模式
+ tempTask.setTaskMode("1");
+ // 任务状态
+ tempTask.setStatus(inTask.getInstatus());
+
+ taskList.add(tempTask);
+ }
+
+ // 出库任务插入任务列表
+ for (TCkPickingwavegoods outTask : outTaskList) {
+ Task tempTask = new Task();
+ // 任务编号
+ tempTask.setTaskNo(outTask.getPickingid());
+ // 任务时间
+ tempTask.setTaskTime(sdf.format(outTask.getCreateTime()));
+ // 任务ID
+ tempTask.setTaskId(outTask.getPlcid());
+ // 物料编号
+ tempTask.setGoodsId(outTask.getGoodId());
+ // 数量
+ tempTask.setOpNumber(outTask.getPickingNum());
+ // 起始货位
+ tempTask.setStartLocation(outTask.getLocId());
+ // 目标货位
+ tempTask.setTargetLocation(outTask.getOutstand());
+ // 托盘号
+ tempTask.setCtl(outTask.getCtl());
+ // 任务模式
+ tempTask.setTaskMode("2");
+ // 任务状态
+ tempTask.setStatus(outTask.getOutstatus());
+
+ taskList.add(tempTask);
+ }
+
+ return taskList;
+ }
+}
\ No newline at end of file
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
new file mode 100644
index 0000000..afb1b52
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -0,0 +1,166 @@
+package com.ruoyi.web.controller.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.config.ServerConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+
+/**
+ * 通用请求处理
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/common")
+public class CommonController
+{
+ private static final Logger log = LoggerFactory.getLogger(CommonController.class);
+
+ @Autowired
+ private ServerConfig serverConfig;
+
+ private static final String FILE_DELIMETER = ",";
+
+ /**
+ * 通用下载请求
+ *
+ * @param fileName 文件名称
+ * @param delete 是否删除
+ */
+ @GetMapping("/download")
+ public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
+ {
+ try
+ {
+ if (!FileUtils.checkAllowDownload(fileName))
+ {
+ throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
+ }
+ String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
+ String filePath = RuoYiConfig.getDownloadPath() + fileName;
+
+ response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+ FileUtils.setAttachmentResponseHeader(response, realFileName);
+ FileUtils.writeBytes(filePath, response.getOutputStream());
+ if (delete)
+ {
+ FileUtils.deleteFile(filePath);
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("下载文件失败", e);
+ }
+ }
+
+ /**
+ * 通用上传请求(单个)
+ */
+ @PostMapping("/upload")
+ @ResponseBody
+ public AjaxResult uploadFile(MultipartFile file) throws Exception
+ {
+ try
+ {
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath();
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+ String url = serverConfig.getUrl() + fileName;
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("url", url);
+ ajax.put("fileName", fileName);
+ ajax.put("newFileName", FileUtils.getName(fileName));
+ ajax.put("originalFilename", file.getOriginalFilename());
+ return ajax;
+ }
+ catch (Exception e)
+ {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 通用上传请求(多个)
+ */
+ @PostMapping("/uploads")
+ @ResponseBody
+ public AjaxResult uploadFiles(List files) throws Exception
+ {
+ try
+ {
+ // 上传文件路径
+ String filePath = RuoYiConfig.getUploadPath();
+ List urls = new ArrayList();
+ List fileNames = new ArrayList();
+ List newFileNames = new ArrayList();
+ List originalFilenames = new ArrayList();
+ for (MultipartFile file : files)
+ {
+ // 上传并返回新文件名称
+ String fileName = FileUploadUtils.upload(filePath, file);
+ String url = serverConfig.getUrl() + fileName;
+ urls.add(url);
+ fileNames.add(fileName);
+ newFileNames.add(FileUtils.getName(fileName));
+ originalFilenames.add(file.getOriginalFilename());
+ }
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+ ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+ ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+ ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+ return ajax;
+ }
+ catch (Exception e)
+ {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 本地资源通用下载
+ */
+ @GetMapping("/download/resource")
+ public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
+ throws Exception
+ {
+ try
+ {
+ if (!FileUtils.checkAllowDownload(resource))
+ {
+ throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
+ }
+ // 本地资源路径
+ String localPath = RuoYiConfig.getProfile();
+ // 数据库资源地址
+ String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
+ // 下载名称
+ String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
+ response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+ FileUtils.setAttachmentResponseHeader(response, downloadName);
+ FileUtils.writeBytes(downloadPath, response.getOutputStream());
+ }
+ catch (Exception e)
+ {
+ log.error("下载文件失败", e);
+ }
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java
new file mode 100644
index 0000000..3030057
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoDialogController.java
@@ -0,0 +1,98 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * 模态窗口
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/modal")
+public class DemoDialogController
+{
+ private String prefix = "demo/modal";
+
+ /**
+ * 模态窗口
+ */
+ @GetMapping("/dialog")
+ public String dialog()
+ {
+ return prefix + "/dialog";
+ }
+
+ /**
+ * 弹层组件
+ */
+ @GetMapping("/layer")
+ public String layer()
+ {
+ return prefix + "/layer";
+ }
+
+ /**
+ * 表单
+ */
+ @GetMapping("/form")
+ public String form()
+ {
+ return prefix + "/form";
+ }
+
+ /**
+ * 表格
+ */
+ @GetMapping("/table")
+ public String table()
+ {
+ return prefix + "/table";
+ }
+
+ /**
+ * 表格check
+ */
+ @GetMapping("/check")
+ public String check()
+ {
+ return prefix + "/table/check";
+ }
+
+ /**
+ * 表格radio
+ */
+ @GetMapping("/radio")
+ public String radio()
+ {
+ return prefix + "/table/radio";
+ }
+
+ /**
+ * 表格回传父窗体
+ */
+ @GetMapping("/parent")
+ public String parent()
+ {
+ return prefix + "/table/parent";
+ }
+
+ /**
+ * 多层窗口frame1
+ */
+ @GetMapping("/frame1")
+ public String frame1()
+ {
+ return prefix + "/table/frame1";
+ }
+
+ /**
+ * 多层窗口frame2
+ */
+ @GetMapping("/frame2")
+ public String frame2()
+ {
+ return prefix + "/table/frame2";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java
new file mode 100644
index 0000000..ec7d4c8
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoFormController.java
@@ -0,0 +1,390 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.CxSelect;
+import com.ruoyi.common.json.JSONObject;
+import com.ruoyi.common.json.JSONObject.JSONArray;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 表单相关
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/form")
+public class DemoFormController
+{
+ private String prefix = "demo/form";
+
+ private final static List users = new ArrayList();
+ {
+ users.add(new UserFormModel(1, "1000001", "测试1", "15888888888"));
+ users.add(new UserFormModel(2, "1000002", "测试2", "15666666666"));
+ users.add(new UserFormModel(3, "1000003", "测试3", "15666666666"));
+ users.add(new UserFormModel(4, "1000004", "测试4", "15666666666"));
+ users.add(new UserFormModel(5, "1000005", "测试5", "15666666666"));
+ }
+
+ /**
+ * 按钮页
+ */
+ @GetMapping("/button")
+ public String button()
+ {
+ return prefix + "/button";
+ }
+
+ /**
+ * 下拉框
+ */
+ @GetMapping("/select")
+ public String select()
+ {
+ return prefix + "/select";
+ }
+
+ /**
+ * 时间轴
+ */
+ @GetMapping("/timeline")
+ public String timeline()
+ {
+ return prefix + "/timeline";
+ }
+
+ /**
+ * 表单校验
+ */
+ @GetMapping("/validate")
+ public String validate()
+ {
+ return prefix + "/validate";
+ }
+
+ /**
+ * 功能扩展(包含文件上传)
+ */
+ @GetMapping("/jasny")
+ public String jasny()
+ {
+ return prefix + "/jasny";
+ }
+
+ /**
+ * 拖动排序
+ */
+ @GetMapping("/sortable")
+ public String sortable()
+ {
+ return prefix + "/sortable";
+ }
+
+ /**
+ * 单据打印
+ */
+ @GetMapping("/invoice")
+ public String invoice()
+ {
+ return prefix + "/invoice";
+ }
+
+ /**
+ * 标签 & 提示
+ */
+ @GetMapping("/labels_tips")
+ public String labels_tips()
+ {
+ return prefix + "/labels_tips";
+ }
+
+ /**
+ * 选项卡 & 面板
+ */
+ @GetMapping("/tabs_panels")
+ public String tabs_panels()
+ {
+ return prefix + "/tabs_panels";
+ }
+
+ /**
+ * 栅格
+ */
+ @GetMapping("/grid")
+ public String grid()
+ {
+ return prefix + "/grid";
+ }
+
+ /**
+ * 表单向导
+ */
+ @GetMapping("/wizard")
+ public String wizard()
+ {
+ return prefix + "/wizard";
+ }
+
+ /**
+ * 文件上传
+ */
+ @GetMapping("/upload")
+ public String upload()
+ {
+ return prefix + "/upload";
+ }
+
+ /**
+ * 日期和时间页
+ */
+ @GetMapping("/datetime")
+ public String datetime()
+ {
+ return prefix + "/datetime";
+ }
+
+ /**
+ * 左右互选组件
+ */
+ @GetMapping("/duallistbox")
+ public String duallistbox()
+ {
+ return prefix + "/duallistbox";
+ }
+
+ /**
+ * 基本表单
+ */
+ @GetMapping("/basic")
+ public String basic()
+ {
+ return prefix + "/basic";
+ }
+
+ /**
+ * 卡片列表
+ */
+ @GetMapping("/cards")
+ public String cards()
+ {
+ return prefix + "/cards";
+ }
+
+ /**
+ * summernote 富文本编辑器
+ */
+ @GetMapping("/summernote")
+ public String summernote()
+ {
+ return prefix + "/summernote";
+ }
+
+ /**
+ * 搜索自动补全
+ */
+ @GetMapping("/autocomplete")
+ public String autocomplete()
+ {
+ return prefix + "/autocomplete";
+ }
+
+ /**
+ * 多级联动下拉
+ */
+ @GetMapping("/cxselect")
+ public String cxselect(ModelMap mmap)
+ {
+ CxSelect cxSelectTB = new CxSelect();
+ cxSelectTB.setN("淘宝");
+ cxSelectTB.setV("taobao");
+ CxSelect cxSelectTm = new CxSelect();
+ cxSelectTm.setN("天猫");
+ cxSelectTm.setV("tm");
+ CxSelect cxSelectJhs = new CxSelect();
+ cxSelectJhs.setN("聚划算");
+ cxSelectJhs.setV("jhs");
+ List tmList = new ArrayList();
+ tmList.add(cxSelectTm);
+ tmList.add(cxSelectJhs);
+ cxSelectTB.setS(tmList);
+
+ CxSelect cxSelectJD = new CxSelect();
+ cxSelectJD.setN("京东");
+ cxSelectJD.setV("jd");
+ CxSelect cxSelectCs = new CxSelect();
+ cxSelectCs.setN("京东超市");
+ cxSelectCs.setV("jdcs");
+ CxSelect cxSelectSx = new CxSelect();
+ cxSelectSx.setN("京东生鲜");
+ cxSelectSx.setV("jdsx");
+ List jdList = new ArrayList();
+ jdList.add(cxSelectCs);
+ jdList.add(cxSelectSx);
+ cxSelectJD.setS(jdList);
+
+ List cxList = new ArrayList();
+ cxList.add(cxSelectTB);
+ cxList.add(cxSelectJD);
+
+ mmap.put("data", JSON.toJSON(cxList));
+ return prefix + "/cxselect";
+ }
+
+ /**
+ * 局部刷新
+ */
+ @GetMapping("/localrefresh")
+ public String localRefresh(ModelMap mmap)
+ {
+ JSONArray list = new JSONArray();
+ JSONObject item = new JSONObject();
+ item.put("name", "这条任务数据是由ModelMap传递到页面的,点击添加按钮后会将这条数据替换为新数据");
+ item.put("type", "默认");
+ item.put("date", "2020.06.10");
+ list.add(item);
+ mmap.put("tasks", list);
+ mmap.put("min", 2);
+ mmap.put("max", 10);
+ return prefix + "/localrefresh";
+ }
+
+ /**
+ * 局部刷新-添加任务
+ *
+ * @param fragment 页面中的模板名称
+ * @param taskName 任务名称
+ */
+ @PostMapping("/localrefresh/task")
+ public String localRefreshTask(String fragment, String taskName, ModelMap mmap)
+ {
+ JSONArray list = new JSONArray();
+ JSONObject item = new JSONObject();
+ item.put("name", StringUtils.defaultIfBlank(taskName, "通过电话销售过程中了解各盛市的设备仪器使用、采购情况及相关重要追踪人"));
+ item.put("type", "新增");
+ item.put("date", "2018.06.10");
+ list.add(item);
+ item = new JSONObject();
+ item.put("name", "提高自己电话营销技巧,灵活专业地与客户进行电话交流");
+ item.put("type", "新增");
+ item.put("date", "2018.06.12");
+ list.add(item);
+ mmap.put("tasks", list);
+ return prefix + "/localrefresh::" + fragment;
+ }
+
+ /**
+ * 模拟数据
+ */
+ @GetMapping("/cityData")
+ @ResponseBody
+ public String cityData()
+ {
+ String data = "[{\"n\":\"湖南省\",\"s\":[{\"n\":\"长沙市\",\"s\":[{\"n\":\"芙蓉区\"},{\"n\":\"天心区\"},{\"n\":\"岳麓区\"},{\"n\":\"开福区\"},{\"n\":\"雨花区\"},{\"n\":\"望城区\"},{\"n\":\"长沙县\"},{\"n\":\"宁乡县\"},{\"n\":\"浏阳市\"}]},{\"n\":\"株洲市\",\"s\":[{\"n\":\"荷塘区\"},{\"n\":\"芦淞区\"},{\"n\":\"石峰区\"},{\"n\":\"天元区\"},{\"n\":\"株洲县\"},{\"n\":\"攸县\"},{\"n\":\"茶陵县\"},{\"n\":\"炎陵县\"},{\"n\":\"醴陵市\"}]},{\"n\":\"湘潭市\",\"s\":[{\"n\":\"雨湖区\"},{\"n\":\"岳塘区\"},{\"n\":\"湘潭县\"},{\"n\":\"湘乡市\"},{\"n\":\"韶山市\"}]},{\"n\":\"衡阳市\",\"s\":[{\"n\":\"珠晖区\"},{\"n\":\"雁峰区\"},{\"n\":\"石鼓区\"},{\"n\":\"蒸湘区\"},{\"n\":\"南岳区\"},{\"n\":\"衡阳县\"},{\"n\":\"衡南县\"},{\"n\":\"衡山县\"},{\"n\":\"衡东县\"},{\"n\":\"祁东县\"},{\"n\":\"耒阳市\"},{\"n\":\"常宁市\"}]},{\"n\":\"邵阳市\",\"s\":[{\"n\":\"双清区\"},{\"n\":\"大祥区\"},{\"n\":\"北塔区\"},{\"n\":\"邵东县\"},{\"n\":\"新邵县\"},{\"n\":\"邵阳县\"},{\"n\":\"隆回县\"},{\"n\":\"洞口县\"},{\"n\":\"绥宁县\"},{\"n\":\"新宁县\"},{\"n\":\"城步苗族自治县\"},{\"n\":\"武冈市\"}]},{\"n\":\"岳阳市\",\"s\":[{\"n\":\"岳阳楼区\"},{\"n\":\"云溪区\"},{\"n\":\"君山区\"},{\"n\":\"岳阳县\"},{\"n\":\"华容县\"},{\"n\":\"湘阴县\"},{\"n\":\"平江县\"},{\"n\":\"汨罗市\"},{\"n\":\"临湘市\"}]},{\"n\":\"常德市\",\"s\":[{\"n\":\"武陵区\"},{\"n\":\"鼎城区\"},{\"n\":\"安乡县\"},{\"n\":\"汉寿县\"},{\"n\":\"澧县\"},{\"n\":\"临澧县\"},{\"n\":\"桃源县\"},{\"n\":\"石门县\"},{\"n\":\"津市市\"}]},{\"n\":\"张家界市\",\"s\":[{\"n\":\"永定区\"},{\"n\":\"武陵源区\"},{\"n\":\"慈利县\"},{\"n\":\"桑植县\"}]},{\"n\":\"益阳市\",\"s\":[{\"n\":\"资阳区\"},{\"n\":\"赫山区\"},{\"n\":\"南县\"},{\"n\":\"桃江县\"},{\"n\":\"安化县\"},{\"n\":\"沅江市\"}]},{\"n\":\"郴州市\",\"s\":[{\"n\":\"北湖区\"},{\"n\":\"苏仙区\"},{\"n\":\"桂阳县\"},{\"n\":\"宜章县\"},{\"n\":\"永兴县\"},{\"n\":\"嘉禾县\"},{\"n\":\"临武县\"},{\"n\":\"汝城县\"},{\"n\":\"桂东县\"},{\"n\":\"安仁县\"},{\"n\":\"资兴市\"}]},{\"n\":\"永州市\",\"s\":[{\"n\":\"零陵区\"},{\"n\":\"冷水滩区\"},{\"n\":\"祁阳县\"},{\"n\":\"东安县\"},{\"n\":\"双牌县\"},{\"n\":\"道县\"},{\"n\":\"江永县\"},{\"n\":\"宁远县\"},{\"n\":\"蓝山县\"},{\"n\":\"新田县\"},{\"n\":\"江华瑶族自治县\"}]},{\"n\":\"怀化市\",\"s\":[{\"n\":\"鹤城区\"},{\"n\":\"中方县\"},{\"n\":\"沅陵县\"},{\"n\":\"辰溪县\"},{\"n\":\"溆浦县\"},{\"n\":\"会同县\"},{\"n\":\"麻阳苗族自治县\"},{\"n\":\"新晃侗族自治县\"},{\"n\":\"芷江侗族自治县\"},{\"n\":\"靖州苗族侗族自治县\"},{\"n\":\"通道侗族自治县\"},{\"n\":\"洪江市\"}]},{\"n\":\"娄底市\",\"s\":[{\"n\":\"娄星区\"},{\"n\":\"双峰县\"},{\"n\":\"新化县\"},{\"n\":\"冷水江市\"},{\"n\":\"涟源市\"}]},{\"n\":\"湘西土家族苗族自治州\",\"s\":[{\"n\":\"吉首市\"},{\"n\":\"泸溪县\"},{\"n\":\"凤凰县\"},{\"n\":\"花垣县\"},{\"n\":\"保靖县\"},{\"n\":\"古丈县\"},{\"n\":\"永顺县\"},{\"n\":\"龙山县\"}]}]},{\"n\":\"广东省\",\"s\":[{\"n\":\"广州市\",\"s\":[{\"n\":\"荔湾区\"},{\"n\":\"越秀区\"},{\"n\":\"海珠区\"},{\"n\":\"天河区\"},{\"n\":\"白云区\"},{\"n\":\"黄埔区\"},{\"n\":\"番禺区\"},{\"n\":\"花都区\"},{\"n\":\"南沙区\"},{\"n\":\"萝岗区\"},{\"n\":\"增城市\"},{\"n\":\"从化市\"}]},{\"n\":\"韶关市\",\"s\":[{\"n\":\"武江区\"},{\"n\":\"浈江区\"},{\"n\":\"曲江区\"},{\"n\":\"始兴县\"},{\"n\":\"仁化县\"},{\"n\":\"翁源县\"},{\"n\":\"乳源瑶族自治县\"},{\"n\":\"新丰县\"},{\"n\":\"乐昌市\"},{\"n\":\"南雄市\"}]},{\"n\":\"深圳市\",\"s\":[{\"n\":\"罗湖区\"},{\"n\":\"福田区\"},{\"n\":\"南山区\"},{\"n\":\"宝安区\"},{\"n\":\"龙岗区\"},{\"n\":\"盐田区\"}]},{\"n\":\"珠海市\",\"s\":[{\"n\":\"香洲区\"},{\"n\":\"斗门区\"},{\"n\":\"金湾区\"}]},{\"n\":\"汕头市\",\"s\":[{\"n\":\"龙湖区\"},{\"n\":\"金平区\"},{\"n\":\"濠江区\"},{\"n\":\"潮阳区\"},{\"n\":\"潮南区\"},{\"n\":\"澄海区\"},{\"n\":\"南澳县\"}]},{\"n\":\"佛山市\",\"s\":[{\"n\":\"禅城区\"},{\"n\":\"南海区\"},{\"n\":\"顺德区\"},{\"n\":\"三水区\"},{\"n\":\"高明区\"}]},{\"n\":\"江门市\",\"s\":[{\"n\":\"蓬江区\"},{\"n\":\"江海区\"},{\"n\":\"新会区\"},{\"n\":\"台山市\"},{\"n\":\"开平市\"},{\"n\":\"鹤山市\"},{\"n\":\"恩平市\"}]},{\"n\":\"湛江市\",\"s\":[{\"n\":\"赤坎区\"},{\"n\":\"霞山区\"},{\"n\":\"坡头区\"},{\"n\":\"麻章区\"},{\"n\":\"遂溪县\"},{\"n\":\"徐闻县\"},{\"n\":\"廉江市\"},{\"n\":\"雷州市\"},{\"n\":\"吴川市\"}]},{\"n\":\"茂名市\",\"s\":[{\"n\":\"茂南区\"},{\"n\":\"茂港区\"},{\"n\":\"电白县\"},{\"n\":\"高州市\"},{\"n\":\"化州市\"},{\"n\":\"信宜市\"}]},{\"n\":\"肇庆市\",\"s\":[{\"n\":\"端州区\"},{\"n\":\"鼎湖区\"},{\"n\":\"广宁县\"},{\"n\":\"怀集县\"},{\"n\":\"封开县\"},{\"n\":\"德庆县\"},{\"n\":\"高要市\"},{\"n\":\"四会市\"}]},{\"n\":\"惠州市\",\"s\":[{\"n\":\"惠城区\"},{\"n\":\"惠阳区\"},{\"n\":\"博罗县\"},{\"n\":\"惠东县\"},{\"n\":\"龙门县\"}]},{\"n\":\"梅州市\",\"s\":[{\"n\":\"梅江区\"},{\"n\":\"梅县\"},{\"n\":\"大埔县\"},{\"n\":\"丰顺县\"},{\"n\":\"五华县\"},{\"n\":\"平远县\"},{\"n\":\"蕉岭县\"},{\"n\":\"兴宁市\"}]},{\"n\":\"汕尾市\",\"s\":[{\"n\":\"城区\"},{\"n\":\"海丰县\"},{\"n\":\"陆河县\"},{\"n\":\"陆丰市\"}]},{\"n\":\"河源市\",\"s\":[{\"n\":\"源城区\"},{\"n\":\"紫金县\"},{\"n\":\"龙川县\"},{\"n\":\"连平县\"},{\"n\":\"和平县\"},{\"n\":\"东源县\"}]},{\"n\":\"阳江市\",\"s\":[{\"n\":\"江城区\"},{\"n\":\"阳西县\"},{\"n\":\"阳东县\"},{\"n\":\"阳春市\"}]},{\"n\":\"清远市\",\"s\":[{\"n\":\"清城区\"},{\"n\":\"清新区\"},{\"n\":\"佛冈县\"},{\"n\":\"阳山县\"},{\"n\":\"连山壮族瑶族自治县\"},{\"n\":\"连南瑶族自治县\"},{\"n\":\"英德市\"},{\"n\":\"连州市\"}]},{\"n\":\"东莞市\"},{\"n\":\"中山市\"},{\"n\":\"潮州市\",\"s\":[{\"n\":\"湘桥区\"},{\"n\":\"潮安区\"},{\"n\":\"饶平县\"}]},{\"n\":\"揭阳市\",\"s\":[{\"n\":\"榕城区\"},{\"n\":\"揭东区\"},{\"n\":\"揭西县\"},{\"n\":\"惠来县\"},{\"n\":\"普宁市\"}]},{\"n\":\"云浮市\",\"s\":[{\"n\":\"云城区\"},{\"n\":\"新兴县\"},{\"n\":\"郁南县\"},{\"n\":\"云安县\"},{\"n\":\"罗定市\"}]}]}]";
+ return data;
+ }
+
+ /**
+ * 获取用户数据
+ */
+ @GetMapping("/userModel")
+ @ResponseBody
+ public AjaxResult userModel()
+ {
+ AjaxResult ajax = new AjaxResult();
+
+ ajax.put("code", 200);
+ ajax.put("value", users);
+ return ajax;
+ }
+
+ /**
+ * 获取数据集合
+ */
+ @GetMapping("/collection")
+ @ResponseBody
+ public AjaxResult collection()
+ {
+ String[] array = { "ruoyi 1", "ruoyi 2", "ruoyi 3", "ruoyi 4", "ruoyi 5" };
+ AjaxResult ajax = new AjaxResult();
+ ajax.put("value", array);
+ return ajax;
+ }
+}
+
+class UserFormModel
+{
+ /** 用户ID */
+ private int userId;
+
+ /** 用户编号 */
+ private String userCode;
+
+ /** 用户姓名 */
+ private String userName;
+
+ /** 用户手机 */
+ private String userPhone;
+
+ public UserFormModel()
+ {
+
+ }
+
+ public UserFormModel(int userId, String userCode, String userName, String userPhone)
+ {
+ this.userId = userId;
+ this.userCode = userCode;
+ this.userName = userName;
+ this.userPhone = userPhone;
+ }
+
+ public int getUserId()
+ {
+ return userId;
+ }
+
+ public void setUserId(int userId)
+ {
+ this.userId = userId;
+ }
+
+ public String getUserCode()
+ {
+ return userCode;
+ }
+
+ public void setUserCode(String userCode)
+ {
+ this.userCode = userCode;
+ }
+
+ public String getUserName()
+ {
+ return userName;
+ }
+
+ public void setUserName(String userName)
+ {
+ this.userName = userName;
+ }
+
+ public String getUserPhone()
+ {
+ return userPhone;
+ }
+
+ public void setUserPhone(String userPhone)
+ {
+ this.userPhone = userPhone;
+ }
+
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java
new file mode 100644
index 0000000..b6884cc
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoIconController.java
@@ -0,0 +1,35 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * 图标相关
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/icon")
+public class DemoIconController
+{
+ private String prefix = "demo/icon";
+
+ /**
+ * FontAwesome图标
+ */
+ @GetMapping("/fontawesome")
+ public String fontAwesome()
+ {
+ return prefix + "/fontawesome";
+ }
+
+ /**
+ * Glyphicons图标
+ */
+ @GetMapping("/glyphicons")
+ public String glyphicons()
+ {
+ return prefix + "/glyphicons";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java
new file mode 100644
index 0000000..18cb90a
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoOperateController.java
@@ -0,0 +1,326 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.web.controller.demo.domain.CustomerModel;
+import com.ruoyi.web.controller.demo.domain.UserOperateModel;
+
+/**
+ * 操作控制
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/operate")
+public class DemoOperateController extends BaseController
+{
+ private String prefix = "demo/operate";
+
+ private final static Map users = new LinkedHashMap();
+ {
+ users.put(1, new UserOperateModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
+ users.put(2, new UserOperateModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
+ users.put(3, new UserOperateModel(3, "1000003", "测试3", "0", "15666666666", "ry@qq.com", 110.0, "1"));
+ users.put(4, new UserOperateModel(4, "1000004", "测试4", "1", "15666666666", "ry@qq.com", 220.0, "1"));
+ users.put(5, new UserOperateModel(5, "1000005", "测试5", "0", "15666666666", "ry@qq.com", 140.0, "1"));
+ users.put(6, new UserOperateModel(6, "1000006", "测试6", "1", "15666666666", "ry@qq.com", 330.0, "1"));
+ users.put(7, new UserOperateModel(7, "1000007", "测试7", "0", "15666666666", "ry@qq.com", 160.0, "1"));
+ users.put(8, new UserOperateModel(8, "1000008", "测试8", "1", "15666666666", "ry@qq.com", 170.0, "1"));
+ users.put(9, new UserOperateModel(9, "1000009", "测试9", "0", "15666666666", "ry@qq.com", 180.0, "1"));
+ users.put(10, new UserOperateModel(10, "1000010", "测试10", "0", "15666666666", "ry@qq.com", 210.0, "1"));
+ users.put(11, new UserOperateModel(11, "1000011", "测试11", "1", "15666666666", "ry@qq.com", 110.0, "1"));
+ users.put(12, new UserOperateModel(12, "1000012", "测试12", "0", "15666666666", "ry@qq.com", 120.0, "1"));
+ users.put(13, new UserOperateModel(13, "1000013", "测试13", "1", "15666666666", "ry@qq.com", 380.0, "1"));
+ users.put(14, new UserOperateModel(14, "1000014", "测试14", "0", "15666666666", "ry@qq.com", 280.0, "1"));
+ users.put(15, new UserOperateModel(15, "1000015", "测试15", "0", "15666666666", "ry@qq.com", 570.0, "1"));
+ users.put(16, new UserOperateModel(16, "1000016", "测试16", "1", "15666666666", "ry@qq.com", 260.0, "1"));
+ users.put(17, new UserOperateModel(17, "1000017", "测试17", "1", "15666666666", "ry@qq.com", 210.0, "1"));
+ users.put(18, new UserOperateModel(18, "1000018", "测试18", "1", "15666666666", "ry@qq.com", 340.0, "1"));
+ users.put(19, new UserOperateModel(19, "1000019", "测试19", "1", "15666666666", "ry@qq.com", 160.0, "1"));
+ users.put(20, new UserOperateModel(20, "1000020", "测试20", "1", "15666666666", "ry@qq.com", 220.0, "1"));
+ users.put(21, new UserOperateModel(21, "1000021", "测试21", "1", "15666666666", "ry@qq.com", 120.0, "1"));
+ users.put(22, new UserOperateModel(22, "1000022", "测试22", "1", "15666666666", "ry@qq.com", 130.0, "1"));
+ users.put(23, new UserOperateModel(23, "1000023", "测试23", "1", "15666666666", "ry@qq.com", 490.0, "1"));
+ users.put(24, new UserOperateModel(24, "1000024", "测试24", "1", "15666666666", "ry@qq.com", 570.0, "1"));
+ users.put(25, new UserOperateModel(25, "1000025", "测试25", "1", "15666666666", "ry@qq.com", 250.0, "1"));
+ users.put(26, new UserOperateModel(26, "1000026", "测试26", "1", "15666666666", "ry@qq.com", 250.0, "1"));
+ }
+
+ /**
+ * 表格
+ */
+ @GetMapping("/table")
+ public String table()
+ {
+ return prefix + "/table";
+ }
+
+ /**
+ * 其他
+ */
+ @GetMapping("/other")
+ public String other()
+ {
+ return prefix + "/other";
+ }
+
+ /**
+ * 查询数据
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(UserOperateModel userModel)
+ {
+ TableDataInfo rspData = new TableDataInfo();
+ List userList = new ArrayList(users.values());
+ // 查询条件过滤
+ if (StringUtils.isNotEmpty(userModel.getSearchValue()))
+ {
+ userList.clear();
+ for (Map.Entry entry : users.entrySet())
+ {
+ if (entry.getValue().getUserName().equals(userModel.getSearchValue()))
+ {
+ userList.add(entry.getValue());
+ }
+ }
+ }
+ else if (StringUtils.isNotEmpty(userModel.getUserName()))
+ {
+ userList.clear();
+ for (Map.Entry entry : users.entrySet())
+ {
+ if (entry.getValue().getUserName().equals(userModel.getUserName()))
+ {
+ userList.add(entry.getValue());
+ }
+ }
+ }
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize())
+ {
+ rspData.setRows(userList);
+ rspData.setTotal(userList.size());
+ return rspData;
+ }
+ Integer pageNum = (pageDomain.getPageNum() - 1) * 10;
+ Integer pageSize = pageDomain.getPageNum() * 10;
+ if (pageSize > userList.size())
+ {
+ pageSize = userList.size();
+ }
+ rspData.setRows(userList.subList(pageNum, pageSize));
+ rspData.setTotal(userList.size());
+ return rspData;
+ }
+
+ /**
+ * 新增用户
+ */
+ @GetMapping("/add")
+ public String add(ModelMap mmap)
+ {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存用户
+ */
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(UserOperateModel user)
+ {
+ Integer userId = users.size() + 1;
+ user.setUserId(userId);
+ return AjaxResult.success(users.put(userId, user));
+ }
+
+ /**
+ * 新增保存主子表信息
+ */
+ @PostMapping("/customer/add")
+ @ResponseBody
+ public AjaxResult addSave(CustomerModel customerModel)
+ {
+ System.out.println(customerModel.toString());
+ return AjaxResult.success();
+ }
+
+ /**
+ * 修改用户
+ */
+ @GetMapping("/edit/{userId}")
+ public String edit(@PathVariable("userId") Integer userId, ModelMap mmap)
+ {
+ mmap.put("user", users.get(userId));
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存用户
+ */
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(UserOperateModel user)
+ {
+ return AjaxResult.success(users.put(user.getUserId(), user));
+ }
+
+ /**
+ * 导出
+ */
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(UserOperateModel user)
+ {
+ List list = new ArrayList(users.values());
+ ExcelUtil util = new ExcelUtil(UserOperateModel.class);
+ return util.exportExcel(list, "用户数据");
+ }
+
+ /**
+ * 下载模板
+ */
+ @GetMapping("/importTemplate")
+ @ResponseBody
+ public AjaxResult importTemplate()
+ {
+ ExcelUtil util = new ExcelUtil(UserOperateModel.class);
+ return util.importTemplateExcel("用户数据");
+ }
+
+ /**
+ * 导入数据
+ */
+ @PostMapping("/importData")
+ @ResponseBody
+ public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+ {
+ ExcelUtil util = new ExcelUtil(UserOperateModel.class);
+ List userList = util.importExcel(file.getInputStream());
+ String message = importUser(userList, updateSupport);
+ return AjaxResult.success(message);
+ }
+
+ /**
+ * 删除用户
+ */
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids)
+ {
+ Integer[] userIds = Convert.toIntArray(ids);
+ for (Integer userId : userIds)
+ {
+ users.remove(userId);
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 查看详细
+ */
+ @GetMapping("/detail/{userId}")
+ public String detail(@PathVariable("userId") Integer userId, ModelMap mmap)
+ {
+ mmap.put("user", users.get(userId));
+ return prefix + "/detail";
+ }
+
+ @PostMapping("/clean")
+ @ResponseBody
+ public AjaxResult clean()
+ {
+ users.clear();
+ return success();
+ }
+
+ /**
+ * 导入用户数据
+ *
+ * @param userList 用户数据列表
+ * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+ * @return 结果
+ */
+ public String importUser(List userList, Boolean isUpdateSupport)
+ {
+ if (StringUtils.isNull(userList) || userList.size() == 0)
+ {
+ throw new ServiceException("导入用户数据不能为空!");
+ }
+ int successNum = 0;
+ int failureNum = 0;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder failureMsg = new StringBuilder();
+ for (UserOperateModel user : userList)
+ {
+ try
+ {
+ // 验证是否存在这个用户
+ boolean userFlag = false;
+ for (Map.Entry entry : users.entrySet())
+ {
+ if (entry.getValue().getUserName().equals(user.getUserName()))
+ {
+ userFlag = true;
+ break;
+ }
+ }
+ if (!userFlag)
+ {
+ Integer userId = users.size() + 1;
+ user.setUserId(userId);
+ users.put(userId, user);
+ successNum++;
+ successMsg.append(" " + successNum + "、用户 " + user.getUserName() + " 导入成功");
+ }
+ else if (isUpdateSupport)
+ {
+ users.put(user.getUserId(), user);
+ successNum++;
+ successMsg.append(" " + successNum + "、用户 " + user.getUserName() + " 更新成功");
+ }
+ else
+ {
+ failureNum++;
+ failureMsg.append(" " + failureNum + "、用户 " + user.getUserName() + " 已存在");
+ }
+ }
+ catch (Exception e)
+ {
+ failureNum++;
+ String msg = " " + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
+ failureMsg.append(msg + e.getMessage());
+ }
+ }
+ if (failureNum > 0)
+ {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ }
+ else
+ {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java
new file mode 100644
index 0000000..6101008
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoReportController.java
@@ -0,0 +1,53 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * 报表
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/report")
+public class DemoReportController
+{
+ private String prefix = "demo/report";
+
+ /**
+ * 百度ECharts
+ */
+ @GetMapping("/echarts")
+ public String echarts()
+ {
+ return prefix + "/echarts";
+ }
+
+ /**
+ * 图表插件
+ */
+ @GetMapping("/peity")
+ public String peity()
+ {
+ return prefix + "/peity";
+ }
+
+ /**
+ * 线状图插件
+ */
+ @GetMapping("/sparkline")
+ public String sparkline()
+ {
+ return prefix + "/sparkline";
+ }
+
+ /**
+ * 图表组合
+ */
+ @GetMapping("/metrics")
+ public String metrics()
+ {
+ return prefix + "/metrics";
+ }
+}
diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java
new file mode 100644
index 0000000..71f411a
--- /dev/null
+++ b/wms-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java
@@ -0,0 +1,846 @@
+package com.ruoyi.web.controller.demo.controller;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.annotation.Excel.ColumnType;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+
+/**
+ * 表格相关
+ *
+ * @author ruoyi
+ */
+@Controller
+@RequestMapping("/demo/table")
+public class DemoTableController extends BaseController
+{
+ private String prefix = "demo/table";
+
+ private final static List users = new ArrayList();
+ {
+ users.add(new UserTableModel(1, "1000001", "测试1", "0", "15888888888", "ry@qq.com", 150.0, "0"));
+ users.add(new UserTableModel(2, "1000002", "测试2", "1", "15666666666", "ry@qq.com", 180.0, "1"));
+ users.add(new UserTableModel(3, "1000003", "测试3", "0", "15666666666", "ry@qq.com", 110.0, "1"));
+ users.add(new UserTableModel(4, "1000004", "测试4", "1", "15666666666", "ry@qq.com", 220.0, "1"));
+ users.add(new UserTableModel(5, "1000005", "测试5", "0", "15666666666", "ry@qq.com", 140.0, "1"));
+ users.add(new UserTableModel(6, "1000006", "测试6", "1", "15666666666", "ry@qq.com", 330.0, "1"));
+ users.add(new UserTableModel(7, "1000007", "测试7", "0", "15666666666", "ry@qq.com", 160.0, "1"));
+ users.add(new UserTableModel(8, "1000008", "测试8", "1", "15666666666", "ry@qq.com", 170.0, "1"));
+ users.add(new UserTableModel(9, "1000009", "测试9", "0", "15666666666", "ry@qq.com", 180.0, "1"));
+ users.add(new UserTableModel(10, "1000010", "测试10", "0", "15666666666", "ry@qq.com", 210.0, "1"));
+ users.add(new UserTableModel(11, "1000011", "测试11", "1", "15666666666", "ry@qq.com", 110.0, "1"));
+ users.add(new UserTableModel(12, "1000012", "测试12", "0", "15666666666", "ry@qq.com", 120.0, "1"));
+ users.add(new UserTableModel(13, "1000013", "测试13", "1", "15666666666", "ry@qq.com", 380.0, "1"));
+ users.add(new UserTableModel(14, "1000014", "测试14", "0", "15666666666", "ry@qq.com", 280.0, "1"));
+ users.add(new UserTableModel(15, "1000015", "测试15", "0", "15666666666", "ry@qq.com", 570.0, "1"));
+ users.add(new UserTableModel(16, "1000016", "测试16", "1", "15666666666", "ry@qq.com", 260.0, "1"));
+ users.add(new UserTableModel(17, "1000017", "测试17", "1", "15666666666", "ry@qq.com", 210.0, "1"));
+ users.add(new UserTableModel(18, "1000018", "测试18", "1", "15666666666", "ry@qq.com", 340.0, "1"));
+ users.add(new UserTableModel(19, "1000019", "测试19", "1", "15666666666", "ry@qq.com", 160.0, "1"));
+ users.add(new UserTableModel(20, "1000020", "测试20", "1", "15666666666", "ry@qq.com", 220.0, "1"));
+ users.add(new UserTableModel(21, "1000021", "测试21", "1", "15666666666", "ry@qq.com", 120.0, "1"));
+ users.add(new UserTableModel(22, "1000022", "测试22", "1", "15666666666", "ry@qq.com", 130.0, "1"));
+ users.add(new UserTableModel(23, "1000023", "测试23", "1", "15666666666", "ry@qq.com", 490.0, "1"));
+ users.add(new UserTableModel(24, "1000024", "测试24", "1", "15666666666", "ry@qq.com", 570.0, "1"));
+ users.add(new UserTableModel(25, "1000025", "测试25", "1", "15666666666", "ry@qq.com", 250.0, "1"));
+ users.add(new UserTableModel(26, "1000026", "测试26", "1", "15666666666", "ry@qq.com", 250.0, "1"));
+ }
+
+ private final static List areas = new ArrayList();
+ {
+ areas.add(new AreaModel(1, 0, "广东省", "440000", "GDS", "GuangDongSheng", 1));
+ areas.add(new AreaModel(2, 0, "湖南省", "430000", "HNS", "HuNanSheng", 1));
+ areas.add(new AreaModel(3, 0, "河南省", "410000", "HNS", "HeNanSheng", 0));
+ areas.add(new AreaModel(4, 0, "湖北省", "420000", "HBS", "HuBeiSheng", 0));
+ areas.add(new AreaModel(5, 0, "辽宁省", "210000", "LNS", "LiaoNingSheng", 0));
+ areas.add(new AreaModel(6, 0, "山东省", "370000", "SDS", "ShanDongSheng", 0));
+ areas.add(new AreaModel(7, 0, "陕西省", "610000", "SXS", "ShanXiSheng", 0));
+ areas.add(new AreaModel(8, 0, "贵州省", "520000", "GZS", "GuiZhouSheng", 0));
+ areas.add(new AreaModel(9, 0, "上海市", "310000", "SHS", "ShangHaiShi", 0));
+ areas.add(new AreaModel(10, 0, "重庆市", "500000", "CQS", "ChongQingShi", 0));
+ areas.add(new AreaModel(11, 0, "若依省", "666666", "YYS", "RuoYiSheng", 0));
+ areas.add(new AreaModel(12, 0, "安徽省", "340000", "AHS", "AnHuiSheng", 0));
+ areas.add(new AreaModel(13, 0, "福建省", "350000", "FJS", "FuJianSheng", 0));
+ areas.add(new AreaModel(14, 0, "海南省", "460000", "HNS", "HaiNanSheng", 0));
+ areas.add(new AreaModel(15, 0, "江苏省", "320000", "JSS", "JiangSuSheng", 0));
+ areas.add(new AreaModel(16, 0, "青海省", "630000", "QHS", "QingHaiSheng", 0));
+ areas.add(new AreaModel(17, 0, "广西壮族自治区", "450000", "GXZZZZQ", "GuangXiZhuangZuZiZhiQu", 0));
+ areas.add(new AreaModel(18, 0, "宁夏回族自治区", "640000", "NXHZZZQ", "NingXiaHuiZuZiZhiQu", 0));
+ areas.add(new AreaModel(19, 0, "内蒙古自治区", "150000", "NMGZZQ", "NeiMengGuZiZhiQu", 0));
+ areas.add(new AreaModel(20, 0, "新疆维吾尔自治区", "650000", "XJWWEZZQ", "XinJiangWeiWuErZiZhiQu", 0));
+ areas.add(new AreaModel(21, 0, "江西省", "360000", "JXS", "JiangXiSheng", 0));
+ areas.add(new AreaModel(22, 0, "浙江省", "330000", "ZJS", "ZheJiangSheng", 0));
+ areas.add(new AreaModel(23, 0, "河北省", "130000", "HBS", "HeBeiSheng", 0));
+ areas.add(new AreaModel(24, 0, "天津市", "120000", "TJS", "TianJinShi", 0));
+ areas.add(new AreaModel(25, 0, "山西省", "140000", "SXS", "ShanXiSheng", 0));
+ areas.add(new AreaModel(26, 0, "台湾省", "710000", "TWS", "TaiWanSheng", 0));
+ areas.add(new AreaModel(27, 0, "甘肃省", "620000", "GSS", "GanSuSheng", 0));
+ areas.add(new AreaModel(28, 0, "四川省", "510000", "SCS", "SiChuanSheng", 0));
+ areas.add(new AreaModel(29, 0, "云南省", "530000", "YNS", "YunNanSheng", 0));
+ areas.add(new AreaModel(30, 0, "北京市", "110000", "BJS", "BeiJingShi", 0));
+ areas.add(new AreaModel(31, 0, "香港特别行政区", "810000", "XGTBXZQ", "XiangGangTeBieXingZhengQu", 0));
+ areas.add(new AreaModel(32, 0, "澳门特别行政区", "820000", "AMTBXZQ", "AoMenTeBieXingZhengQu", 0));
+
+ areas.add(new AreaModel(100, 1, "深圳市", "440300", "SZS", "ShenZhenShi", 1));
+ areas.add(new AreaModel(101, 1, "广州市", "440100", "GZS", "GuangZhouShi", 0));
+ areas.add(new AreaModel(102, 1, "东莞市", "441900", "DGS", "DongGuanShi", 0));
+ areas.add(new AreaModel(103, 2, "长沙市", "410005", "CSS", "ChangShaShi", 1));
+ areas.add(new AreaModel(104, 2, "岳阳市", "414000", "YYS", "YueYangShi", 0));
+
+ areas.add(new AreaModel(1000, 100, "龙岗区", "518172", "LGQ", "LongGangQu", 0));
+ areas.add(new AreaModel(1001, 100, "南山区", "518051", "NSQ", "NanShanQu", 0));
+ areas.add(new AreaModel(1002, 100, "宝安区", "518101", "BAQ", "BaoAnQu", 0));
+ areas.add(new AreaModel(1003, 100, "福田区", "518081", "FTQ", "FuTianQu", 0));
+ areas.add(new AreaModel(1004, 103, "天心区", "410004", "TXQ", "TianXinQu", 0));
+ areas.add(new AreaModel(1005, 103, "开福区", "410008", "KFQ", "KaiFuQu", 0));
+ areas.add(new AreaModel(1006, 103, "芙蓉区", "410011", "FRQ", "FuRongQu", 0));
+ areas.add(new AreaModel(1007, 103, "雨花区", "410011", "YHQ", "YuHuaQu", 0));
+ }
+
+ private final static List columns = new ArrayList();
+ {
+ columns.add(new UserTableColumn("用户ID", "userId"));
+ columns.add(new UserTableColumn("用户编号", "userCode"));
+ columns.add(new UserTableColumn("用户姓名", "userName"));
+ columns.add(new UserTableColumn("用户手机", "userPhone"));
+ columns.add(new UserTableColumn("用户邮箱", "userEmail"));
+ columns.add(new UserTableColumn("用户状态", "status"));
+ }
+
+ /**
+ * 搜索相关
+ */
+ @GetMapping("/search")
+ public String search()
+ {
+ return prefix + "/search";
+ }
+
+ /**
+ * 数据汇总
+ */
+ @GetMapping("/footer")
+ public String footer()
+ {
+ return prefix + "/footer";
+ }
+
+ /**
+ * 组合表头
+ */
+ @GetMapping("/groupHeader")
+ public String groupHeader()
+ {
+ return prefix + "/groupHeader";
+ }
+
+ /**
+ * 表格导出
+ */
+ @GetMapping("/export")
+ public String export()
+ {
+ return prefix + "/export";
+ }
+
+ /**
+ * 表格导出选择列
+ */
+ @GetMapping("/exportSelected")
+ public String exportSelected()
+ {
+ return prefix + "/exportSelected";
+ }
+
+ /**
+ * 导出数据
+ */
+ @PostMapping("/exportData")
+ @ResponseBody
+ public AjaxResult exportSelected(UserTableModel userModel, String userIds)
+ {
+ List userList = new ArrayList