李林
2023-08-08 b71d454f550a53dde29b1849acfebd06e34f7299
迁移仓库
已添加131个文件
已修改1个文件
7386 ■■■■■ 文件已修改
.gitignore 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/pom.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/Swagger3.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/Jwt.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java 622 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/vo/Result.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/.gitignore 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InspectionItemMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/RawInsProductMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/RawInspectMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/pom.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inventory-server/src/main/resources/mapper/RepertoryMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/.gitignore 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/DeviceMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/MaterialMapper.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/OrdersMapper.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/ProductMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/SpecificationsMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/StandardMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/TechnologyMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/pom.xml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-dev.yml 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-prod.yml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application.yml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/logback-spring.xml 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/mysqldump.exe 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/pom.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/pojo/User.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/UserService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.log
*.jar
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
README.md
@@ -1,4 +1,39 @@
## mom-before
# åŽç«¯ä¸­å¤©æµ·æ´‹
mom前端
#### ä»‹ç»
{**以下是 Gitee å¹³å°è¯´æ˜Žï¼Œæ‚¨å¯ä»¥æ›¿æ¢æ­¤ç®€ä»‹**
Gitee æ˜¯ OSCHINA æŽ¨å‡ºçš„基于 Git çš„代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
无论是个人、团队、或是企业,都能够用 Gitee å®žçŽ°ä»£ç æ‰˜ç®¡ã€é¡¹ç›®ç®¡ç†ã€åä½œå¼€å‘ã€‚ä¼ä¸šé¡¹ç›®è¯·çœ‹ [https://gitee.com/enterprises](https://gitee.com/enterprises)}
#### è½¯ä»¶æž¶æž„
软件架构说明
#### å®‰è£…教程
1.  xxxx
2.  xxxx
3.  xxxx
#### ä½¿ç”¨è¯´æ˜Ž
1.  xxxx
2.  xxxx
3.  xxxx
#### å‚与贡献
1.  Fork æœ¬ä»“库
2.  æ–°å»º Feat_xxx åˆ†æ”¯
3.  æäº¤ä»£ç 
4.  æ–°å»º Pull Request
#### ç‰¹æŠ€
1.  ä½¿ç”¨ Readme\_XXX.md æ¥æ”¯æŒä¸åŒçš„语言,例如 Readme\_en.md, Readme\_zh.md
2.  Gitee å®˜æ–¹åšå®¢ [blog.gitee.com](https://blog.gitee.com)
3.  ä½ å¯ä»¥ [https://gitee.com/explore](https://gitee.com/explore) è¿™ä¸ªåœ°å€æ¥äº†è§£ Gitee ä¸Šçš„优秀开源项目
4.  [GVP](https://gitee.com/gvp) å…¨ç§°æ˜¯ Gitee æœ€æœ‰ä»·å€¼å¼€æºé¡¹ç›®ï¼Œæ˜¯ç»¼åˆè¯„定出的优秀开源项目
5.  Gitee å®˜æ–¹æä¾›çš„使用手册 [https://gitee.com/help](https://gitee.com/help)
6.  Gitee å°é¢äººç‰©æ˜¯ä¸€æ¡£ç”¨æ¥å±•示 Gitee ä¼šå‘˜é£Žé‡‡çš„æ ç›® [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
framework/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <artifactId>framework</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>framework</name>
    <description>framework</description>
    <packaging>jar</packaging>
    <dependencies>
        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--redis jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--jwt-->
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
        </dependency>
    </dependencies>
</project>
framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.yuanchu.mom.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DruidConfig {
    //加载application.yaml中的Druid配置
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid(){
        return  new DruidDataSource();
    }
    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();
        initParams.put("loginUsername","root");
        initParams.put("loginPassword","123456");
        initParams.put("allow","");//默认就是允许所有访问
//        initParams.put("deny","192.168.15.21"); ç¦æ­¢è¯¥IP访问
        bean.setInitParameters(initParams);
        return bean;
    }
    //2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }
}
framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
package com.yuanchu.mom.config;
import com.alibaba.druid.pool.vendor.NullExceptionSorter;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.utils.RedisUtil;
import com.yuanchu.mom.vo.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@Component
public class FiferConfig implements HandlerInterceptor {
    @Value("${server.port}")
    private String serverPort;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
            return true;
        }
        String[] strs = request.getRequestURL().toString().split(serverPort);
        AtomicBoolean judge = new AtomicBoolean(false);
        list.forEach(a -> {
            if (strs[1].equals(a)) {
                judge.set(true);
                return;
            } else if (a.indexOf("/**") > -1) {
                if (strs[1].indexOf(a.replace("/**", "")) == 0) {
                    judge.set(true);
                    return;
                }
            }
        });
        if (judge.get()) return true;
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.setCharacterEncoding("UTF-8");
        String token = request.getHeader("token");
        Map<String, String> map = new Jwt().readJWT(token);
        if (map.get("state").equals("0")) {
            String redisToken = String.valueOf(RedisUtil.get(JackSonUtil.unmarshal(map.get("data"), Map.class).get("id").toString()));
            if (!redisToken.equals(token)) {
                map.put("info", "不存在的token");
                map.put("state", "2");
            } else {
                return true;
            }
        }
        PrintWriter out = response.getWriter();
        out.print(new Result<>().fail(401,map.get("info")));
        switch (map.get("state")){
            case "1":
                response.setStatus(401);
                break;
            case "2":
                response.setStatus(402);
                break;
        }
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        System.out.println("-------------------------拦截器校验通过---------------------------");
    }
    private List<String> list;
    public FiferConfig() {
        List<String> list = new ArrayList<>();
        // swagger放行
        list.add("/doc.html/**");
        list.add("/webjars/**");
        list.add("/swagger-resources");
        list.add("/api-docs");
        list.add("/v3/api-docs");
        list.add("/user/enter");
        list.add("/user/refresh");
        this.list = list;
    }
}
framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.mom.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允许所有域名进行跨域调用
        config.addAllowedOriginPattern("*");//替换这个
        //允许跨越发送cookie
        config.setAllowCredentials(true);
        //放行全部原始头信息
        config.addAllowedHeader("*");
        //允许所有请求方法跨域调用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
//@Configuration
public class OpenFifer extends WebMvcConfigurationSupport {
    @Autowired
    private FiferConfig fiferConfig;
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(fiferConfig).addPathPatterns("/**")
                .excludePathPatterns();
        super.addInterceptors(registry);
    }
}
framework/src/main/java/com/yuanchu/mom/config/Swagger3.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
package com.yuanchu.mom.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Configuration
@EnableOpenApi
public class Swagger3 {
    // è·¯å¾„http://localhost:8080/doc.html
    @Value("${swagger.enabled}")
    private boolean enable;
    private final String swaggerPackage = "com.yuanchu.mom";
    /**
     * æ·»åŠ æ‘˜è¦ä¿¡æ¯
     */
    private ApiInfo apiInfo() {
        // ç”¨ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // è®¾ç½®æ ‡é¢˜
                .title("中天海洋mom")
                // æè¿°
                .description("中天海洋mom")
                // ä½œè€…信息
                .contact(new Contact("鵷雏", null, null))
                // ç‰ˆæœ¬
                .version("版本号:V.1")
                //协议
                .license("The Apache License")
                //协议url
                .licenseUrl("http://www.baidu.com")
                .build();
    }
    /**
     * åˆ›å»ºAPI
     * http:IP:端口号/swagger-ui/index.html åŽŸç”Ÿåœ°å€
     * http:IP:端口号/doc.html bootStrap-UI地址
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30).pathMapping("/")
                // ç”¨æ¥åˆ›å»ºè¯¥API的基本信息,展示在文档的页面中(自定义展示的信息)
                .enable(enable)
                .apiInfo(apiInfo())
                // è®¾ç½®å“ªäº›æŽ¥å£æš´éœ²ç»™Swagger展示
                .select()
                // æ‰«ææ‰€æœ‰æœ‰æ³¨è§£çš„api,用这种方式更灵活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // æ‰«ææŒ‡å®šåŒ…中的swagger注解
                .apis(RequestHandlerSelectors.basePackage(swaggerPackage))
                // æ‰«ææ‰€æœ‰ .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.regex("(?!/ApiError.*).*"))
                .paths(PathSelectors.any())
                .build()
                // æ”¯æŒçš„通讯协议集合
                .protocols(newHashSet("https", "http"))
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
    }
    /**
     * æ”¯æŒçš„通讯协议集合
     * @param type1
     * @param type2
     * @return
     */
    private Set<String> newHashSet(String type1, String type2){
        Set<String> set = new HashSet<>();
        set.add(type1);
        set.add(type2);
        return set;
    }
    /**
     * è®¤è¯çš„安全上下文
     */
    private List<SecurityScheme> securitySchemes() {
        List<SecurityScheme> securitySchemes = new ArrayList<>();
        securitySchemes.add((SecurityScheme) new ApiKey("token", "token", "header"));
        return securitySchemes;
    }
    /**
     * æŽˆæƒä¿¡æ¯å…¨å±€åº”用
     */
    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.any()).build());
        return securityContexts;
    }
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }
}
framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.mom.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Value("${file.path}")
    private String filePath;
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //配置拦截器访问静态资源
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        //设置文件虚拟路径映射
        registry.addResourceHandler("/img/**").addResourceLocations("file:"+filePath+"/")
                .addResourceLocations("file:"+filePath+"/");
    }
}
framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,243 @@
package com.yuanchu.mom.handler;
import com.yuanchu.mom.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.ConversionNotSupportedException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @Autowired
    HttpServletResponse response;
    @ExceptionHandler(SQLException.class)
    public Result<?> handlerSQLException(SQLException e) {
        log.error(e.getMessage().toLowerCase(), e);
        response.setStatus(500);
        return Result.fail("数据操作失败!请联系管理员");
    }
    /**
     * å”¯ä¸€å€¼åœ¨æ•°æ®åº“中重复
     * Duplicate entry ' ' for key ' '
     *
     * @param e:重复键异常
     * @return 199
     */
    @ExceptionHandler
    public Result<?> DuplicateKeyException(DuplicateKeyException e) {
        log.error(String.valueOf(e));
        String message = e.getCause().getMessage();
        String[] split = message.split("'");
        response.setStatus(500);
        return Result.fail("重复添加:【" + split[1] + "】操作失败!");
    }
    @ExceptionHandler
    public Result<?> NullPointerException(NullPointerException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("部分参数为空,请检查!");
    }
    /**
     * è¿è¡Œæ—¶å¼‚常
     */
    @ExceptionHandler(RuntimeException.class)
    public Result<?> runtimeExceptionHandler(RuntimeException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("运行时异常");
    }
    /**
     * ç±»åž‹è½¬æ¢å¼‚常
     */
    @ExceptionHandler(ClassCastException.class)
    public Result<?> classCastExceptionHandler(ClassCastException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("类型转换异常");
    }
    /**
     * æ–‡ä»¶æœªæ‰¾åˆ°å¼‚常
     */
    @ExceptionHandler(FileNotFoundException.class)
    public Result<?> FileNotFoundException(FileNotFoundException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("文件未找到异常");
    }
    /**
     * æ•°å­—格式异常
     */
    @ExceptionHandler(NumberFormatException.class)
    public Result<?> NumberFormatException(NumberFormatException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("数字格式异常");
    }
    /**
     * å®‰å…¨å¼‚常
     */
    @ExceptionHandler(SecurityException.class)
    public Result<?> SecurityException(SecurityException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("安全异常");
    }
    /**
     * ç±»åž‹ä¸å­˜åœ¨å¼‚常
     */
    @ExceptionHandler(TypeNotPresentException.class)
    public Result<?> TypeNotPresentException(TypeNotPresentException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("类型不存在异常");
    }
    /**
     * IO异常
     */
    @ExceptionHandler(IOException.class)
    public Result<?> iOExceptionHandler(IOException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("IO异常");
    }
    /**
     * æœªçŸ¥æ–¹æ³•异常
     */
    @ExceptionHandler(NoSuchMethodException.class)
    public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("未知方法异常");
    }
    /**
     * æ•°ç»„越界异常
     */
    @ExceptionHandler(IndexOutOfBoundsException.class)
    public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("数组越界异常");
    }
    /**
     * sql语法错误异常
     */
    @ExceptionHandler(BadSqlGrammarException.class)
    public Result<?> BadSqlGrammarException(BadSqlGrammarException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("sql语法错误异常");
    }
    /**
     * æ— æ³•注入bean异常
     */
    @ExceptionHandler(NoSuchBeanDefinitionException.class)
    public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("无法注入bean");
    }
    /**
     * Http消息不可读异常
     */
    @ExceptionHandler({HttpMessageNotReadableException.class})
    public Result<?> requestNotReadable(HttpMessageNotReadableException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("Http消息不可读");
    }
    /**
     * 400错误
     */
    @ExceptionHandler({TypeMismatchException.class})
    public Result<?> requestTypeMismatch(TypeMismatchException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("服务器异常");
    }
    /**
     * 500错误
     */
    @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
    public Result<?> server500(RuntimeException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("服务器异常");
    }
    /**
     * æ ˆæº¢å‡º
     */
    @ExceptionHandler({StackOverflowError.class})
    public Result<?> requestStackOverflow(StackOverflowError e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("栈溢出异常");
    }
    /**
     * é™¤æ•°ä¸èƒ½ä¸º0
     */
    @ExceptionHandler({ArithmeticException.class})
    public Result<?> arithmeticException(ArithmeticException e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("除数不能为0异常");
    }
    /**
     * å‚数检验
     */
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Result<?> methodArgumentNotValidException(MethodArgumentNotValidException e) {
        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
        String message = allErrors.stream().map(s -> s.getDefaultMessage()).collect(Collectors.joining(";"));
        return Result.fail(message);
    }
    /** å…¶ä»–错误 */
    /**
     * å…¶ä»–错误
     */
    @ExceptionHandler({Exception.class})
    public Result<?> exception(Exception e) {
        e.printStackTrace();
        response.setStatus(500);
        return Result.fail("网络连接失败,请退出后再试");
    }
}
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.yuanchu.mom.mybatis_config;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
 * è‡ªå®šä¹‰æ·»åŠ mybatis-plus批量添加
 * @param <T>
 */
public interface MyBaseMapper <T> extends BaseMapper<T> {
    int insertBatchSomeColumn(List<T> entityList);
}
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.yuanchu.mom.mybatis_config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
//     ä¹è§‚锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
    /**
     * å¼€å¯æ‰¹é‡æ·»åŠ 
     * @return
     */
    @Bean
    public MySqlInjector sqlInjector() {
        return new MySqlInjector();
    }
    /**
     * éœ€è¦é…ç½®æ‹¦æˆªå™¨ï¼Œä¸ç„¶åœ¨AddDevice中的total无法获取到
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.yuanchu.mom.mybatis_config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐使用)
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐使用)
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        // update的时候使用,更新的时候强制进行填充
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // èµ·å§‹ç‰ˆæœ¬ 3.3.0(推荐)
    }
}
framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.yuanchu.mom.mybatis_config;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import java.util.List;
/**
 * æ‰¹é‡æ·»åŠ 
 */
public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        //增加自定义方法,字段注解上不等于FieldFill.DEFAULT的字段才会插入
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.DEFAULT));
        return methodList;
    }
}
framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.yuanchu.mom.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * ä¿å­˜æ–‡ä»¶å·¥å…·
 */
@Slf4j
@Component
public class FileSaveUtil {
    // å–yml中的路径 + /
//    @Value("${file.path}")
    private String FILE_PATH;
    /**
     * å­˜å‚¨æ–‡ä»¶ä¸»å‡½æ•°
     * @param content æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @param originalFilename æ–‡ä»¶åç§°
     * @return è¿”回文件名称用于存储数据库
     */
    public String StoreFile(byte[] content, String originalFilename) {
        // ç”Ÿæˆéšæœºåç§°ï¼šæ—¶é—´_随机6位数字
        String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        // åç§°æ‹¼æŽ¥
        String fileName = FileName + suffix;
        // è¿›è¡Œå­˜å‚¨
        storeFileWithFileName(content, fileName);
        return fileName;
    }
    /**
     * å­˜å‚¨æ–‡ä»¶å‡½æ•°
     * @param content æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @param fileName æ–‡ä»¶åç§°
     */
    private void storeFileWithFileName(byte[] content, String fileName) {
        // å­˜å‚¨è·¯å¾„
        String path = FILE_PATH + java.io.File.separatorChar;
        // ç›®å½•不存在则创建
        java.io.File file = new java.io.File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        // å¼€å§‹å­˜å‚¨
        try (FileOutputStream os = new FileOutputStream(path + fileName);
             ByteArrayInputStream is = new ByteArrayInputStream(content)) {
             IOUtils.copy(is, os);
        } catch (IOException e) {
            MyUtil.PrintLog("存储文件异常:" + e);
        }
    }
}
framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,131 @@
package com.yuanchu.mom.utils;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * JSON解析处理
 *
 * @author å¼ å®¾
 */
@Component
public class JackSonUtil {
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    private static final ObjectWriter OBJECT_WRITER = OBJECT_MAPPER.writerWithDefaultPrettyPrinter();
    public static void marshal(File file, Object value) throws Exception {
        try {
            OBJECT_WRITER.writeValue(file, value);
        } catch (JsonGenerationException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static void marshal(OutputStream os, Object value) throws Exception {
        try {
            OBJECT_WRITER.writeValue(os, value);
        } catch (JsonGenerationException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static String marshal(Object value) throws Exception {
        try {
            return OBJECT_WRITER.writeValueAsString(value);
        } catch (JsonGenerationException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static byte[] marshalBytes(Object value) throws Exception {
        try {
            return OBJECT_WRITER.writeValueAsBytes(value);
        } catch (JsonGenerationException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static <T> T unmarshal(File file, Class<T> valueType) throws Exception {
        try {
            return OBJECT_MAPPER.readValue(file, valueType);
        } catch (JsonParseException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception {
        try {
            return OBJECT_MAPPER.readValue(is, valueType);
        } catch (JsonParseException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    /**
     * å­—符串转对象
     * @param str
     * @param valueType
     * @return
     * @param <T>
     * @throws Exception
     */
    public static <T> T unmarshal(String str, Class<T> valueType) throws Exception {
        try {
            return OBJECT_MAPPER.readValue(str, valueType);
        } catch (JsonParseException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
    public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception {
        try {
            if (bytes == null) {
                bytes = new byte[0];
            }
            return OBJECT_MAPPER.readValue(bytes, 0, bytes.length, valueType);
        } catch (JsonParseException e) {
            throw new Exception(e);
        } catch (JsonMappingException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        }
    }
}
framework/src/main/java/com/yuanchu/mom/utils/Jwt.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.yuanchu.mom.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.Component;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Component
public class Jwt {
    private final String SECRET = "value";
    public String createJwt(String name,int id, int time) {
        HashMap<String, Object> headers = new HashMap<>();
        Calendar expires = Calendar.getInstance();
        expires.add(Calendar.MINUTE, time);
        String jwtToken = JWT.create()
                // ç¬¬ä¸€éƒ¨åˆ†Header
                .withHeader(headers)
                // ç¬¬äºŒéƒ¨åˆ†Payload
                .withClaim("name", name)
                .withClaim("id", id)
                .withExpiresAt(expires.getTime())
                // ç¬¬ä¸‰éƒ¨åˆ†Signature
                .sign(Algorithm.HMAC256(SECRET));
        return jwtToken;
    }
    public Map<String, String> readJWT(String token) {
        Map<String, String> map = new HashMap<>();
        map.put("state", "0");
        map.put("info", "正常");
        map.put("data", null);
        // åˆ›å»ºä¸€ä¸ªéªŒè¯çš„对象
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
        DecodedJWT verify;
        try {
            verify = jwtVerifier.verify(token);
            Map<String, String> maps = new HashMap<>();
            maps.put("id",verify.getClaim("id").toString());
            maps.put("name",verify.getClaim("name").toString());
            map.put("data", JackSonUtil.marshal(maps));
        } catch (Exception e) {
            String info = ("" + e).contains("expired") ? "已过期" : "无效签名";
            String state = ("" + e).contains("expired") ? "1" : "2";
            map.put("state", "1");
            map.put("info", info);
        }
        return map;
    }
}
framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.yuanchu.mom.utils;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
@Component
public class MyUtil<T> {
    /**
     * è‡ªå®šä¹‰è°ƒè¯•工具类
     * @return
     */
    public static void PrintLog(String str){
        // ç±»å
        String className = Thread.currentThread().getStackTrace()[2].getClassName();
        // å‡½æ•°å
        String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
        System.out.println("\033[1;94m" + className + "-->" + methodName + "-->"  + str + "\033[0m");
    }
    /**
     * æ—¥æœŸå·¥å…·ç±»
     * @return
     */
    public static String MyDateFormat(){
        //获取日期
        //导 import java.util.Date; ä¸‹çš„包
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        return sdf.format(date);
    }
    /**
     * èŽ·å–éšæœºåŠ å¯†ç›
     * @param n ä½æ•°
     * @return è¿”回随机加密盐
     */
    public static String getSalt(int n) {
        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()+-=/[];~.".toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            char c = chars[new Random().nextInt(chars.length)];
            sb.append(c);
        }
        return sb.toString();
    }
    /**
     * èŽ·å–éšæœºæ•°å­—
     * @param n ä½æ•°
     * @return è¿”回随机值
     */
    public static String getNumber(int n) {
        char[] chars = "1234567890".toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            char c = chars[new Random().nextInt(chars.length)];
            sb.append(c);
        }
        return sb.toString();
    }
}
framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,622 @@
package com.yuanchu.mom.utils;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
    private static RedisTemplate<String, Object> redisTemplate;
    public static RedisTemplate<String, Object> getRedisTemplate() {
        return redisTemplate;
    }
    @Autowired
    private RedisUtil(RedisConnectionFactory redisConnectionFactory){
        // redisTemplate模板初始化
        redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // å°†å¯¹è±¡åºåˆ—化
        ObjectMapper om=new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        // String的序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // json序列化配置
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        //key采用String的序列化方式
        redisTemplate.setKeySerializer(stringRedisSerializer);
        //hash的key也采用String çš„序列化方式
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        //value的序列化方式采用jackson的方式
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//        //hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
    }
    // =============================common============================
    /**
     * æŒ‡å®šç¼“存失效时间
     * @param key  é”®
     * @param time æ—¶é—´(秒)
     */
    public static boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * æ ¹æ®key èŽ·å–è¿‡æœŸæ—¶é—´
     * @param key é”® ä¸èƒ½ä¸ºnull
     * @return æ—¶é—´(秒) è¿”回0代表为永久有效
     */
    public static long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }
    /**
     * åˆ¤æ–­key是否存在
     * @param key é”®
     * @return true å­˜åœ¨ false不存在
     */
    public static boolean hasKey(String key) {
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * åˆ é™¤ç¼“å­˜
     * @param key å¯ä»¥ä¼ ä¸€ä¸ªå€¼ æˆ–多个
     */
//    @SuppressWarnings("unchecked")
    public static void del(String... key) {
        if (key != null && key.length > 0) {
            if (key.length == 1) {
                redisTemplate.delete(key[0]);
            } else {
                redisTemplate.delete(Arrays.asList(key));
//                redisTemplate.delete(CollectionUtils.arrayToList(key));
            }
        }
    }
    /**
     * èŽ·å–å¹¶åˆ é™¤ç¼“å­˜
     * @param key é”®
     * @return å€¼
     */
    public static Object getAndDelete(String key) {
        try{
            return key == null ? null : get(key);
        }finally {
            del(key);
        }
    }
    // ============================String=============================
    /**
     * æ™®é€šç¼“存获取
     * @param key é”®
     * @return å€¼
     */
    public static Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }
    /**
     * æ™®é€šç¼“存放入
     * @param key   é”®
     * @param value å€¼
     * @return true成功 false失败
     */
    public static boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * æ™®é€šç¼“存放入并设置时间
     * @param key   é”®
     * @param value å€¼
     * @param time  æ—¶é—´(秒) time要大于0 å¦‚æžœtime小于等于0 å°†è®¾ç½®æ— é™æœŸ
     * @return true成功 false å¤±è´¥
     */
    public static boolean set(String key, Object value, long time) {
        try {
            if (time > 0) {
                redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
            } else {
                // åªä¿®æ”¹å‚数不修改ttl
                redisTemplate.opsForValue().set(key, value, 0);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * é€’增
     * @param key   é”®
     * @param delta è¦å¢žåР几(大于0)
     */
    public static long incr(String key, long delta) {
        if (delta < 0) {
            throw new RuntimeException("递增因子必须大于0");
        }
        return redisTemplate.opsForValue().increment(key, delta);
    }
    /**
     * é€’减
     * @param key   é”®
     * @param delta è¦å‡å°‘几(小于0)
     */
    public static long decr(String key, long delta) {
        if (delta < 0) {
            throw new RuntimeException("递减因子必须大于0");
        }
        return redisTemplate.opsForValue().increment(key, -delta);
    }
    // ================================Map=================================
    /**
     * HashGet
     * @param key  é”® ä¸èƒ½ä¸ºnull
     * @param item é¡¹ ä¸èƒ½ä¸ºnull
     */
    public static Object hget(String key, String item) {
        return redisTemplate.opsForHash().get(key, item);
    }
    /**
     * èŽ·å–hashKey对应的所有键值
     * @param key é”®
     * @return å¯¹åº”的多个键值
     */
    public static Map<Object, Object> hmget(String key) {
        return redisTemplate.opsForHash().entries(key);
    }
    /**
     * HashSet
     * @param key é”®
     * @param map å¯¹åº”多个键值
     */
    public static boolean hmset(String key, Map<String, Object> map) {
        try {
            redisTemplate.opsForHash().putAll(key, map);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * HashSet å¹¶è®¾ç½®æ—¶é—´
     * @param key  é”®
     * @param map  å¯¹åº”多个键值
     * @param time æ—¶é—´(秒)
     * @return true成功 false失败
     */
    public static boolean hmset(String key, Map<String, Object> map, long time) {
        try {
            if (time > 0) {
                redisTemplate.opsForHash().putAll(key, map);
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å‘一张hash表中放入数据,如果不存在将创建
     *
     * @param key   é”®
     * @param item  é¡¹
     * @param value å€¼
     * @return true æˆåŠŸ false失败
     */
    public static boolean hset(String key, String item, Object value) {
        try {
            redisTemplate.opsForHash().put(key, item, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å‘一张hash表中放入数据,如果不存在将创建
     *
     * @param key   é”®
     * @param item  é¡¹
     * @param value å€¼
     * @param time  æ—¶é—´(秒) æ³¨æ„:如果已存在的hash表有时间,这里将会替换原有的时间
     * @return true æˆåŠŸ false失败
     */
    public static boolean hset(String key, String item, Object value, long time) {
        try {
            if (time > 0) {
                redisTemplate.opsForHash().put(key, item, value);
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * åˆ é™¤hash表中的值
     *
     * @param key  é”® ä¸èƒ½ä¸ºnull
     * @param item é¡¹ å¯ä»¥ä½¿å¤šä¸ª ä¸èƒ½ä¸ºnull
     */
    public static void hdel(String key, Object... item) {
        redisTemplate.opsForHash().delete(key, item);
    }
    /**
     * åˆ¤æ–­hash表中是否有该项的值
     *
     * @param key  é”® ä¸èƒ½ä¸ºnull
     * @param item é¡¹ ä¸èƒ½ä¸ºnull
     * @return true å­˜åœ¨ false不存在
     */
    public static boolean hHasKey(String key, String item) {
        return redisTemplate.opsForHash().hasKey(key, item);
    }
    /**
     * hash递增 å¦‚果不存在,就会创建一个 å¹¶æŠŠæ–°å¢žåŽçš„值返回
     *
     * @param key  é”®
     * @param item é¡¹
     * @param by   è¦å¢žåР几(大于0)
     */
    public static double hincr(String key, String item, double by) {
        return redisTemplate.opsForHash().increment(key, item, by);
    }
    /**
     * hash递减
     *
     * @param key  é”®
     * @param item é¡¹
     * @param by   è¦å‡å°‘è®°(小于0)
     */
    public static double hdecr(String key, String item, double by) {
        return redisTemplate.opsForHash().increment(key, item, -by);
    }
    // ============================set=============================
    /**
     * æ ¹æ®key获取Set中的所有值
     * @param key é”®
     */
    public static Set<Object> sGet(String key) {
        try {
            return redisTemplate.opsForSet().members(key);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * æ ¹æ®value从一个set中查询,是否存在
     *
     * @param key   é”®
     * @param value å€¼
     * @return true å­˜åœ¨ false不存在
     */
    public static boolean sHasKey(String key, Object value) {
        try {
            return redisTemplate.opsForSet().isMember(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å°†æ•°æ®æ”¾å…¥set缓存
     *
     * @param key    é”®
     * @param values å€¼ å¯ä»¥æ˜¯å¤šä¸ª
     * @return æˆåŠŸä¸ªæ•°
     */
    public static long sSet(String key, Object... values) {
        try {
            return redisTemplate.opsForSet().add(key, values);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    /**
     * å°†set数据放入缓存
     *
     * @param key    é”®
     * @param time   æ—¶é—´(秒)
     * @param values å€¼ å¯ä»¥æ˜¯å¤šä¸ª
     * @return æˆåŠŸä¸ªæ•°
     */
    public static long sSetAndTime(String key, long time, Object... values) {
        try {
            Long count = (long)values.length;
            if (time > 0) {
                count = redisTemplate.opsForSet().add(key, values);
                expire(key, time);
            }
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    /**
     * èŽ·å–set缓存的长度
     *
     * @param key é”®
     */
    public static long sGetSetSize(String key) {
        try {
            return redisTemplate.opsForSet().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    /**
     * ç§»é™¤å€¼ä¸ºvalue的
     *
     * @param key    é”®
     * @param values å€¼ å¯ä»¥æ˜¯å¤šä¸ª
     * @return ç§»é™¤çš„个数
     */
    public static long setRemove(String key, Object... values) {
        try {
            return redisTemplate.opsForSet().remove(key, values);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    // ===============================list=================================
    /**
     * èŽ·å–list缓存的内容
     *
     * @param key   é”®
     * @param start å¼€å§‹
     * @param end   ç»“束 0 åˆ° -1代表所有值
     */
    public static List<Object> lGet(String key, long start, long end) {
        try {
            return redisTemplate.opsForList().range(key, start, end);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * èŽ·å–list缓存的长度
     *
     * @param key é”®
     */
    public static long lGetListSize(String key) {
        try {
            return redisTemplate.opsForList().size(key);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
    /**
     * é€šè¿‡ç´¢å¼• èŽ·å–list中的值
     *
     * @param key   é”®
     * @param index ç´¢å¼• index>=0时, 0 è¡¨å¤´ï¼Œ1 ç¬¬äºŒä¸ªå…ƒç´ ï¼Œä¾æ¬¡ç±»æŽ¨ï¼›index<0时,-1,表尾,-2倒数第二个元素,依次类推
     */
    public static Object lGetIndex(String key, long index) {
        try {
            return redisTemplate.opsForList().index(key, index);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * å°†list放入缓存
     *
     * @param key   é”®
     * @param value å€¼
     */
    public static boolean lSet(String key, Object value) {
        try {
            redisTemplate.opsForList().rightPush(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å°†list放入缓存
     * @param key   é”®
     * @param value å€¼
     * @param time  æ—¶é—´(秒)
     */
    public static boolean lSet(String key, Object value, long time) {
        try {
            if (time > 0) {
                redisTemplate.opsForList().rightPush(key, value);
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å°†list放入缓存
     *
     * @param key   é”®
     * @param value å€¼
     * @return true å­˜æ”¾æˆåŠŸ false存放失败
     */
    public static boolean lSet(String key, List<Object> value) {
        try {
            redisTemplate.opsForList().rightPushAll(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * å°†list放入缓存
     *
     * @param key   é”®
     * @param value å€¼
     * @param time  æ—¶é—´(秒)
     * @return true å­˜æ”¾æˆåŠŸ false存放失败
     */
    public static boolean lSet(String key, List<Object> value, long time) {
        try {
            if (time > 0) {
                redisTemplate.opsForList().rightPushAll(key, value);
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * æ ¹æ®ç´¢å¼•修改list中的某条数据
     *
     * @param key   é”®
     * @param index ç´¢å¼•
     * @param value å€¼
     * @return true å­˜æ”¾æˆåŠŸ false存放失败
     */
    public static boolean lUpdateIndex(String key, long index, Object value) {
        try {
            redisTemplate.opsForList().set(key, index, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * ç§»é™¤N个值为value
     *
     * @param key   é”®
     * @param count ç§»é™¤å¤šå°‘个
     * @param value å€¼
     * @return ç§»é™¤çš„个数
     */
    public static long lRemove(String key, long count, Object value) {
        try {
            return redisTemplate.opsForList().remove(key, count, value);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
}
framework/src/main/java/com/yuanchu/mom/vo/Result.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.yuanchu.mom.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletResponse;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    @ApiModelProperty(value = "响应码:200成功,201失败")
    private int code;
    @ApiModelProperty(value = "响应消息")
    private String message;
    @ApiModelProperty(value = "响应参数")
    private T data;
    public static <T> Result<T> success(){
        return new Result<>(200, "success",null);
    }
    public static <T> Result<T> success(String message){
        return new Result<>(200, message,null);
    }
    public static <T> Result<T> success(T data){
        return new Result<>(200, "success",data);
    }
    public static <T> Result<T> success(String message, T data){
        return new Result<>(200, message,data);
    }
    public static <T> Result<T> fail(){
        return new Result<>(201, "fail", null);
    }
    public static <T> Result<T> fail(String message){
        return new Result<>(201, message, null);
    }
    public static <T> Result<T> fail(Integer code){
        return new Result<>(code, "fail", null);
    }
    public static <T> Result<T> fail(Integer code, String message){
        return new Result<>(code, message, null);
    }
}
inspect-server/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
inspect-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <artifactId>inspect-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>inspect-server</name>
    <description>inspect-server</description>
    <packaging>jar</packaging>
    <dependencies>
        <!--工具模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>framework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
            <version>0.0.20131108.vaadin1</version>
            <scope>compile</scope>
        </dependency>
        <!--用户模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--标准模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Api(tags = "QMS管理-->成品检验")
@RestController
@RequestMapping("/finished-inspect")
public class FinishedInspectController {
    @Autowired
    private FinishedInspectService finishedInspectService;
    @Autowired
    private UserService userService;
    @Autowired
    private SpecificationsService specificationsService;
    @Autowired
    private MaterialService materialService;
    @ApiOperation(value = "新增按钮-->1、新增过程检验单")
    @PostMapping("/add_process_inspection_sheet")
    public Result<?> addProcessInspectionSheet(@Validated @RequestBody FinishedInspect finishedInspect){
        Integer isInsertSuccess = finishedInspectService.addProcessInspectionSheet(finishedInspect);
        if (isInsertSuccess == 1){
            return Result.success("新增成功!");
        }
        return Result.fail("新增失败!");
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->主机工下拉框")
    @GetMapping("/list_user")
    public Result<?> selectUserIdAndName(){
        List<Map<String, Object>> maps = userService.listUserIdAndName();
        return Result.success(maps);
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->2、规格型号下拉框:根据项目ID查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "materialId",value = "项目名称ID",dataTypeClass  = Integer.class,required = true)
    })
    @GetMapping("/list_specification")
    public Result<?> selectSpecificationIdAndName(Integer materialId){
        List<Map<String, Object>> maps = specificationsService.selectSpecificationIdAndName(materialId);
        return Result.success(maps);
    }
    @ApiOperation(value = "新增按钮-->1、新增过程检验单-->1、项目名称下拉框")
    @GetMapping("/list_material")
    public Result<?> selectMaterialIdAndNameAndCode(){
        List<Map<String, Object>> maps = materialService.selectMaterialIdAndNameAndCode();
        return Result.success(maps);
    }
    @ApiOperation(value = "新增按钮-->3、检验结论")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "finishedInspectId",value = "检验单Id",dataTypeClass  = Integer.class,required = true),
            @ApiImplicitParam(name = "result",value = "检验结论",dataTypeClass  = Integer.class,required = true),
    })
    @PostMapping("/inspection_conclusion")
    public Result<?> inspectionConclusion(Integer finishedInspectId, Integer result){
        Integer isInsertSuccess = finishedInspectService.inspectionConclusion(finishedInspectId, result);
        if (isInsertSuccess == 1){
            return Result.success("上报成功!");
        }
        return Result.fail("上报失败!");
    }
    @ApiOperation(value = "4、主页分页")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageNo", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "inspectResult", value = "检验结果", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "inspectDate", value = "检验日期", dataTypeClass = Date.class, dataType = "date"),
            @ApiImplicitParam(name = "inspectUsername", value = "主机工", dataTypeClass = String.class)
    })
    @GetMapping("/list_page")
    public Result<?> selectFinishedInspectPage(Integer pageNo, Integer pageSize, Integer inspectResult, String inspectDate, String inspectUsername){
        IPage<Map<String, Object>> page = finishedInspectService.selectFinishedInspectPage(new Page<Object>(pageNo, pageSize), inspectResult, inspectDate, inspectUsername);
        Map<String, Object> map = new HashMap<>();
        map.put("total", page.getTotal());
        map.put("row", page.getRecords());
        return Result.success(map);
    }
    @ApiOperation(value = "4、主页分页-->主机工条件查询下拉框")
    @GetMapping("/page_user")
    public Result<?> selectPageUserIdAndName(){
        List<Map<String, Object>> maps = userService.listUserIdAndName();
        return Result.success(maps);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.InspectUnacceptedService;
import java.util.HashMap;
import java.util.Map;
/**
 * ä¸åˆæ ¼å“æ£€éªŒè¡¨(InspectUnaccepted)表控制层
 *
 * @author zss
 * @since 2023-08-07 10:04:01
 */
@Api(tags = "QMS管理-->不合格品")
@RestController
@RequestMapping("/inspectUnaccepted")
public class InspectUnacceptedController {
    @Autowired
    private InspectUnacceptedService inspectUnacceptedService;
    @ApiOperation(value = "查询原材料不合格品检验单列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize",value = "页数",dataTypeClass  = Integer.class,required = true),
            @ApiImplicitParam(name = "countSize",value = "条数/页",dataTypeClass  = Integer.class,required = true),
            @ApiImplicitParam(name = "formTime",value = "来料日期",dataTypeClass  = String.class),
            @ApiImplicitParam(name = "dealState",value = "处理状态(为空=全部)",dataTypeClass  = Integer.class),
            @ApiImplicitParam(name = "supplier",value = "供应商(为空=全部)",dataTypeClass  = String.class),
            @ApiImplicitParam(name = "type",value = "类型(为空=原材料2)",dataTypeClass  = Integer.class)
    })
    @GetMapping("/selectUnRawInspectsList")
    public Result selectUnRawInspectsList(int pageSize, int countSize, String formTime, Integer dealState,String supplier,Integer type){
        IPage<Map<String, Object>> inspectionPage = inspectUnacceptedService.selectUnRawInspectsList(new Page<Object>(pageSize, countSize), formTime,dealState,supplier,type);
        Map<String, Object> map = new HashMap<>();
        map.put("total", inspectionPage.getTotal());
        map.put("row", inspectionPage.getRecords());
        return Result.success(map);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.pojo.dto.InspectionItemDto;
import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
import com.yuanchu.mom.service.InspectionItemService;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Api(tags = "QMS管理-->成品检验")
@RestController
@RequestMapping("/inspection-item")
public class InspectionItemController {
    @Autowired
    private InspectionItemService inspectionItemService;
    @Autowired
    private Jwt jwt;
    @ApiOperation(value = "新增按钮-->2、查询所有检验项目")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "finishInspectId",value = "成品检验单Id",dataTypeClass  = Integer.class,required = true)
    })
    @GetMapping("/list_user")
    public Result<?> selectInspectionItem(Integer finishInspectId){
        List<InspectionItemDto> inspectionItemDto = inspectionItemService.selectInspectionItem(finishInspectId);
        return Result.success(inspectionItemDto);
    }
    @ApiOperation(value = "新增按钮-->2、检验项目-->失去焦点发起该请求")
    @PostMapping("/lose_focus_update")
    public Result<?> addInspectionItem(@RequestHeader("token")String token, @RequestBody UpdateInspectionItemDto updateInspectionItemDto) throws Exception {
        Map<String, String> usernameMessage = jwt.readJWT(token);
        Map<String, Object> usernameAndId = JackSonUtil.unmarshal(usernameMessage.get("data"), Map.class);
        String name = usernameAndId.get("name").toString().replaceAll("\"", "");
        Integer isInsertSuccess = inspectionItemService.addProcessInspectionSheet(name, updateInspectionItemDto);
        Map<String, Object> map = new HashMap<>();
        map.put("result", isInsertSuccess);
        map.put("username", name);
        return Result.success(map);
    }
    @ApiOperation(value = "新增按钮-->2、检验项目-->试验设备下拉框")
    @GetMapping("/list_device")
    public Result<?> selectDeviceIdAndName(){
        List<Map<String, Object>> maps = inspectionItemService.selectDeviceIdAndName();
        return Result.success(maps);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.pojo.RawInsProduct;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.utils.MyUtil;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.RawInsProductService;
import javax.annotation.Resource;
import java.util.Map;
/**
 * åŽŸææ–™ç”³è¯·å•ä¸­çš„é¡¹ç›®åˆ—è¡¨(RawInsProduct)表控制层
 *
 * @author zss
 * @since 2023-08-01 13:52:30
 */
@Api(tags = "QMS管理-->原材料检验-->检验项目")
@RestController
@RequestMapping("/rawInsProduct")
public class RawInsProductController {
    @Autowired
    private RawInsProductService rawInsProductService;
    @Resource
    DeviceService deviceService;
    @Resource
    Jwt jwt;
    @ApiOperation(value = "查询所有设备")
    @GetMapping("/selectDevice")
    public Result selectDevice() {
        return Result.success(deviceService.selectDevice());
    }
    @ApiOperation("选择设备信息")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "设备ID", dataTypeClass = Integer.class, required = true),
    })
    @GetMapping("/selectDeviceById")
    public Result selectDeviceById(Integer id) {
        return Result.success( deviceService.getDeviceNameById(id));
    }
    @ApiOperation(value = "更新检验项目")
    @PostMapping("/updaterawInsProduct")
    public Result updaterawInsProduct(@RequestHeader("token") String token, @RequestBody RawInsProduct rawInsProduct) throws Exception {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        int userId = Integer.parseInt(jsonObject.getString("id"));
        rawInsProductService.updaterawInsProduct(userId,rawInsProduct);
        return Result.success();
    }
}
inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.yuanchu.mom.pojo.RawInspect;
import com.yuanchu.mom.pojo.vo.RawInsProductVo;
import com.yuanchu.mom.pojo.vo.RawInspectVo;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.utils.MyUtil;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.*;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/rawInspect")
@Api(tags = "QMS管理-->原材料检验")
public class RawInspectController {
    @Autowired
    RawInspectService rawInspectService;
    @Resource
    Jwt jwt;
    @Resource
    MaterialService materialService;
    @Resource
    SpecificationsService specificationsService;
    @ApiOperation(value = "查询原材料检验单列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "formTime", value = "来料日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "createTime", value = "报检日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "insState", value = "检测状态: å…¨éƒ¨é»˜è®¤2", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "judgeState", value = "合格状态: å…¨éƒ¨é»˜è®¤2", dataTypeClass = Integer.class, required = true),
    })
    @PostMapping("/selectRawInspectsList")
    public Result selectRawInspectsList(Integer pageSize, Integer countSize, String formTime, String createTime, Integer insState, Integer judgeState) {
        return Result.success(rawInspectService.selectRawInspectsList(pageSize, countSize, formTime, createTime, insState, judgeState));
    }
    @ApiOperation(value = "根据检验单id查询原材料检验单详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectRawInspectsListById/{id}")
    public Result selectRawInspectsListById(@PathVariable Integer id) {
        return Result.success(rawInspectService.selectRawInspectsListById(id));
    }
    @ApiOperation(value = "上报(更新检验状态)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class, required = true)
    })
    @PostMapping("/updateRawInspectsById/{id}")
    public Result updateRawInspectsById(@PathVariable Integer id) {
        //如果已经上报了不能再一次上报
        RawInspect rawInspect = rawInspectService.getById(id);
        if (rawInspect.getInsState() == 1) {
            return Result.fail("已经上报过了,不能再次上报!");
        }
        return Result.success(rawInspectService.updateRawInspectsById(id));
    }
    @ApiOperation(value = "查询所有原材料信息")
    @GetMapping("/selectMaterial")
    public Result selectMaterial() {
        return Result.success(materialService.selectMaterial());
    }
    @ApiOperation(value = "选择物料名称查询物料信息(物料id和编码)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "name", value = "原材料名称(物料名称)", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/selectMcodeId")
    public Result selectMcodeId(String name) {
        return Result.success(materialService.selectMcodeId(name));
    }
    @ApiOperation(value = "选择物料编码(获取物料规格id.名称和型号名称)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "name", value = "原材料名称(物料名称)", dataTypeClass = String.class, required = true),
            @ApiImplicitParam(name = "code", value = "原材料编号(物料编号)", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/selectIdByCoNa")
    public Result selectIdByCoNa(String name, String code) {
        return Result.success(materialService.selectIdByCoNa(name, code));
    }
    @ApiOperation(value = "选择物料规格(根据规格id获取物料型号)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "物料规格id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectSpBySt")
    public Result selectSpBySt(Integer id) {
        return Result.success(specificationsService.selectSpecificationIdAndName(id));
    }
    @ApiOperation(value = "新增检验单")
    @PostMapping("/addRawInspects")
    public Result addRawInspects(@RequestHeader("token") String token, @RequestBody RawInspect rawInspect) throws JSONException {
        Map<String, String> map = jwt.readJWT(token);
        String data = map.get("data");
        JSONObject jsonObject = new JSONObject(data);
        String userName = jsonObject.getString("name");
        return Result.success(rawInspectService.addRawInspects(userName, rawInspect));
    }
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Map;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
public interface FinishedInspectMapper extends BaseMapper<FinishedInspect> {
    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import java.util.Map;
/**
 * ä¸åˆæ ¼å“æ£€éªŒè¡¨(InspectUnaccepted)表数据库访问层
 *
 * @author zss
 * @since 2023-08-07 10:04:01
 */
public interface InspectUnacceptedMapper extends BaseMapper<InspectUnaccepted> {
    //查询原材料不合格品检验单列表
    IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier, Integer type);
    //查询过程检验和成品检验中不合格品检验单列表
    IPage<Map<String, Object>> selectInsList(Page<Object> page, String formTime, Integer dealState, String supplier, Integer type);
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.mybatis_config.MyBaseMapper;
import com.yuanchu.mom.pojo.InspectionItem;
import com.yuanchu.mom.pojo.dto.InspectionItemDto;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
public interface InspectionItemMapper extends MyBaseMapper<InspectionItem> {
    List<InspectionItemDto> selectInspectionItem(Integer finishInspectId);
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.RawInsProduct;
/**
 * åŽŸææ–™ç”³è¯·å•ä¸­çš„é¡¹ç›®åˆ—è¡¨(RawInsProduct)表数据库访问层
 *
 * @author zss
 * @since 2023-08-01 13:52:30
 */
public interface RawInsProductMapper extends BaseMapper<RawInsProduct> {
}
inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.RawInspect;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€raw_inspect(原材料申请表)】的数据库操作Mapper
* @createDate 2023-07-31 14:43:15
* @Entity com.yuanchu.mom.pojo.RawInspect
*/
public interface RawInspectMapper extends BaseMapper<RawInspect> {
    List<RawInspect> selectRawInspectsByLimit(int pageSize, int countSize, String formTime, String createTime,int insState,int judgeState);
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="FinishedInspect对象", description="")
public class FinishedInspect implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键", hidden = true)
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @NotBlank(message = "订单号不允许为空!")
    @ApiModelProperty(value = "订单号", required = true, example = "DDH202308010001")
    private String orderNumber;
    @NotBlank(message = "客户名称不允许为空!")
    @ApiModelProperty(value = "客户名称", required = true, example = "懒洋洋")
    private String customerName;
    @NotBlank(message = "工程名称不允许为空!")
    @ApiModelProperty(value = "工程名称", required = true, example = "液体硅橡胶")
    private String projectName;
    @NotBlank(message = "质量追溯号不允许为空!")
    @ApiModelProperty(value = "质量追溯号", required = true, example = "ZLZSH202308010001")
    private String qualityTraceability;
    @ApiModelProperty(value = "0:成品;1:过程;", hidden = true)
    private Integer type;
    @NotBlank(message = "单位不允许为空!")
    @ApiModelProperty(value = "单位", required = true, example = "吨")
    private String unit;
    @NotNull(message = "请输入数量!")
    @ApiModelProperty(value = "数量", required = true, example = "50")
    private Integer quantity;
    @NotNull(message = "请选择规格型号!")
    @ApiModelProperty(value = "规格型号拼接字符", required = true, example = "8.7/15kV JLS-3.2")
    private String specificationsModel;
    @NotNull(message = "请选择规格型号!")
    @TableField(exist = false)
    @ApiModelProperty(value = "型号ID", required = true, example = "1")
    private Integer specificationsId;
    @NotNull(message = "请选择项目名称!")
    @ApiModelProperty(value = "项目名称", required = true, example = "光纤")
    private String material;
    @NotNull(message = "请选择主机工!")
    @ApiModelProperty(value = "主机工:用户id", required = true, example = "1")
    private Integer userId;
    @ApiModelProperty(value = "检验结论", hidden = true, required = true, example = "DDH202308010001")
    private Integer result;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * ä¸åˆæ ¼å“æ£€éªŒè¡¨(InspectUnaccepted)表实体类
 *
 * @author zss
 * @since 2023-08-07 10:04:01
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("inspect_unaccepted")
public class InspectUnaccepted implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * ç¼ºé™·åç§°(理由)
     **/
    private String reason;
    /**
     * å¤„理状态 0:待处理;1:已处理
     **/
    private Integer dealState;
    /**
     * å¤„理结果 0:不通过;1:通过
     **/
    private Integer dealReasult;
    /**
     * å¤„理日期
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date dealTime;
    /**
     * ${column.comment}
     **/
    private Integer state;
    /**
     * ${column.comment}
     **/
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å…³è” æ£€éªŒå•id
     **/
    private Integer rawInspectId;
    /**
     * 0:成品;1:过程;2:原材料
     **/
    private Integer type;
    /**
     * ä¾›åº”商
     **/
    private String supplier;
    /**
     * çŽ°è±¡æè¿°
     **/
    private String tell;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="InspectionItem对象", description="")
public class InspectionItem extends Model<InspectionItem> implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "项目名称")
    private String name;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "父名称")
    private String father;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "单位")
    private String unit;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "标准值")
    private String required;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "内控值")
    private String internal;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "成品检验单Id")
    private Integer finishInspectId;
    @ApiModelProperty(value = "检验值")
    private String inspectionValue;
    @ApiModelProperty(value = "试验设备")
    private Integer deviceId;
    @ApiModelProperty(value = "结论")
    private Integer result;
    @ApiModelProperty(value = "检验人")
    private String username;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * åŽŸææ–™ç”³è¯·å•ä¸­çš„é¡¹ç›®åˆ—è¡¨(RawInsProduct)表实体类
 *
 * @author zss
 * @since 2023-08-01 13:52:31
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("raw_ins_product")
public class RawInsProduct implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * é¡¹ç›®id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * é¡¹ç›®åç§°
     **/
    private String name;
    /**
     * å•位
     **/
    private String unit;
    /**
     * æ ‡å‡†å€¼
     **/
    private String required;
    /**
     * å†…控值
     **/
    private String internal;
    /**
     * æ£€æµ‹å€¼
     **/
    private String testValue;
    /**
     * ç»“论 0:不合格;1:合格
     **/
    private Integer testState;
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å…³è” è®¾å¤‡id
     **/
    private Integer deviceId;
    /**
     * å…³è” ç”³è¯·å•id
     **/
    private Integer rawInspectId;
    /**
     * å…³è” æ£€éªŒå‘˜ï¼ˆç”¨æˆ·id)
     **/
    private Integer userId;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * åŽŸææ–™ç”³è¯·è¡¨
 * @TableName raw_inspect
 */
@TableName(value ="raw_inspect")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RawInspect implements Serializable {
    /**
     * æ£€éªŒå•id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * åŽŸææ–™ç¼–ç 
     */
    private String code;
    /**
     * åŽŸææ–™åç§°
     */
    private String name;
    /**
     * åž‹å·è§„æ ¼
     */
    private String specifications;
    /**
     * å•位
     */
    private String unit;
    /**
     * æ•°é‡
     */
    private Integer number;
    /**
     * æ£€éªŒçŠ¶æ€ 0:未检验;1:已检验
     */
    private Integer insState;
    /**
     * åˆæ ¼çŠ¶æ€ 0:不合格;1:合格
     */
    private Integer judgeState;
    /**
     * æ£€éªŒæ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date insTime;
    /**
     * æŠ¥æ£€äººï¼ˆå½“前用户名)
     */
    private String userName;
    /**
     *
     */
    private Integer state;
    /**
     * æŠ¥æ£€æ—¥æœŸ
     */
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * æ¥æ–™æ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date formTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.pojo.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class InspectionItemDto {
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "父名称")
    private String father;
    @ApiModelProperty(value = "子数据")
    private List<InspectionItemDto2> children;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.yuanchu.mom.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class InspectionItemDto2 {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "项目名称")
    private String name;
    @ApiModelProperty(value = "单位")
    private String unit;
    @ApiModelProperty(value = "标准值")
    private String required;
    @ApiModelProperty(value = "内控值")
    private String internal;
    @ApiModelProperty(value = "检验值")
    private String inspectionValue;
    @ApiModelProperty(value = "试验设备")
    private Integer deviceId;
    @ApiModelProperty(value = "结论")
    private Integer result;
    @ApiModelProperty(value = "检验人")
    private String username;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.mom.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UpdateInspectionItemDto {
    @ApiModelProperty(value = "检验值Id:根据这个ID修改", required = true, example = "5079")
    String inspectionItemId;
    @ApiModelProperty(value = "标准值", required = true, example = ">=1")
    private String required;
    @ApiModelProperty(value = "内控值", required = true, example = ">2")
    private String internal;
    @ApiModelProperty(value = "检验值", required = true, example = "3")
    String inspectionValue;
    @ApiModelProperty(value = "试验设备", required = true, example = "1")
    String deviceId;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.yuanchu.mom.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import java.io.Serializable;
@Data
public class RawInsProductVo implements Serializable {
    /**
     * é¡¹ç›®åç§°
     **/
    @JsonSerialize
    private String name;
    /**
     * å•位
     **/
    @JsonSerialize
    private String unit;
    /**
     * æ ‡å‡†å€¼
     **/
    @JsonSerialize
    private String required;
    /**
     * å†…控值
     **/
    @JsonSerialize
    private String internal;
    /**
     * æ£€æµ‹å€¼
     **/
    @JsonSerialize
    private String testValue;
    /**
     * ç»“论 0:不合格;1:合格
     **/
    @JsonSerialize
    private Integer testState;
    /**
     * è®¾å¤‡åç§°
     **/
    @JsonSerialize
    private String deviceName;
    /**
     * å…³è” ç”³è¯·å•id
     **/
    @JsonSerialize
    private Integer rawInspectId;
    /**
     *  æ£€éªŒå‘˜
     **/
    @JsonSerialize
    private String userName;
}
inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.yuanchu.mom.pojo.vo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yuanchu.mom.pojo.RawInsProduct;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
//查询检验单详情(检验基本信息以及检验项目信息)
public class RawInspectVo implements Serializable {
    /* æ£€éªŒè¯¦æƒ… */
    /**
     * æ¥æ–™æ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date formTime;
    /**
     * åž‹å·è§„æ ¼
     */
    @JsonSerialize
    private String specifications;
    /**
     * åŽŸææ–™ç¼–ç 
     */
    @JsonSerialize
    private String code;
    /**
     * åŽŸææ–™åç§°
     */
    @JsonSerialize
    private String name;
    /**
     * æŠ¥æ£€æ—¥æœŸ
     */
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    /**
     * å•位
     */
    @JsonSerialize
    private String unit;
    /**
     * æ•°é‡
     */
    @JsonSerialize
    private Integer number;
    /**
     * æŠ¥æ£€äººï¼ˆå½“前用户名)
     */
    @JsonSerialize
    private String userName;
    /* æ£€éªŒé¡¹ç›® */
    @JsonSerialize
    private List<RawInsProductVo> rawInsProducts;
    /* æ£€éªŒç»“论 */
    /**
     * åˆæ ¼çŠ¶æ€ 0:不合格;1:合格
     */
    @JsonSerialize
    private Integer judgeState;
}
inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
public interface FinishedInspectService extends IService<FinishedInspect> {
    @Transactional(rollbackFor = Exception.class)
    Integer addProcessInspectionSheet(FinishedInspect finishedInspect);
    Integer inspectionConclusion(Integer finishedInspectId, Integer result);
    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
}
inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import java.util.Map;
/**
 * ä¸åˆæ ¼å“æ£€éªŒè¡¨(InspectUnaccepted)表服务接口
 *
 * @author zss
 * @since 2023-08-07 10:04:01
 */
public interface InspectUnacceptedService extends IService<InspectUnaccepted> {
    /**
     *查询原材料不合格品检验单列表
     * @param
     * @param formTime
     * @param dealState
     * @return
     */
    IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier,Integer type);
}
inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.InspectionItem;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.dto.InspectionItemDto;
import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
public interface InspectionItemService extends IService<InspectionItem> {
    void insertList(Integer finishInspectId, List<Map<String, Object>> list);
    List<InspectionItemDto> selectInspectionItem(Integer finishInspectId);
    Integer addProcessInspectionSheet(String username, UpdateInspectionItemDto updateInspectionItemDto);
    List<Map<String, Object>> selectDeviceIdAndName();
}
inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.RawInsProduct;
/**
 * åŽŸææ–™ç”³è¯·å•ä¸­çš„é¡¹ç›®åˆ—è¡¨(RawInsProduct)表服务接口
 *
 * @author zss
 * @since 2023-08-01 13:52:31
 */
public interface RawInsProductService extends IService<RawInsProduct> {
    /**
     * æ›´æ–°æ£€éªŒé¡¹ç›®
     * @param userId
     * @param rawInsProduct
     */
    void updaterawInsProduct(int userId, RawInsProduct rawInsProduct);
}
inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.RawInspect;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.vo.RawInspectVo;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€raw_inspect(原材料申请表)】的数据库操作Service
* @createDate 2023-07-31 14:43:15
*/
public interface RawInspectService extends IService<RawInspect> {
    Map<String, Object> selectRawInspectsList(int pageSize, int countSize, String formTime, String createTime, int insState, int judgeState);
    /**
     * æ ¹æ®æ£€éªŒå•id查询原材料检验单详情
     * @param id
     * @return
     */
    RawInspectVo selectRawInspectsListById(Integer id);
    /**
     * æ›´æ–°æ£€éªŒçŠ¶æ€
     * @param id
     */
    boolean updateRawInspectsById(Integer id);
    /**
     * æ–°å¢žæ£€éªŒå•
     * @param userName
     * @param rawInspect
     */
    Integer addRawInspects(String userName, RawInspect rawInspect);
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
import com.yuanchu.mom.pojo.FinishedInspect;
import com.yuanchu.mom.mapper.FinishedInspectMapper;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import com.yuanchu.mom.service.FinishedInspectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.service.InspectionItemService;
import com.yuanchu.mom.service.ProductService;
import com.yuanchu.mom.service.SpecificationsService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Service
public class FinishedInspectServiceImpl extends ServiceImpl<FinishedInspectMapper, FinishedInspect> implements FinishedInspectService {
    @Resource
    private FinishedInspectMapper finishedInspectMapper;
    @Autowired
    private ProductService productService;
    @Autowired
    private InspectionItemService inspectionItemService;
    @Resource
    InspectUnacceptedMapper inspectUnacceptedMapper;
    @Override
    public Integer addProcessInspectionSheet(FinishedInspect finishedInspect) {
        finishedInspect.setType(0);
        int insert = finishedInspectMapper.insert(finishedInspect);
        if (insert == 1){
            List<Map<String, Object>> maps = productService.selectProductList(finishedInspect.getSpecificationsId());
            inspectionItemService.insertList(finishedInspect.getId(), maps);
            return insert;
        }
        return 0;
    }
    @Override
    public Integer inspectionConclusion(Integer finishedInspectId, Integer result) {
        //更新检验单里面的检验结论
        LambdaUpdateWrapper<FinishedInspect> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(FinishedInspect::getId, finishedInspectId);
        updateWrapper.set(FinishedInspect::getResult, result);
        finishedInspectMapper.update(new FinishedInspect(), updateWrapper);
        //如果检验结论为不合格,则需要新增不合格检验单
        FinishedInspect finishedInspect = finishedInspectMapper.selectById(finishedInspectId);
        if (result == 0) {
            InspectUnaccepted inspectUnaccepted = InspectUnaccepted.builder()
                    .reason(finishedInspect.getProjectName() + "不合格")  //暂且定义为工程名称不合格
                    .rawInspectId(finishedInspectId)
                    .type(finishedInspect.getType())
                    .supplier(finishedInspect.getCustomerName())
                    .build();
            inspectUnacceptedMapper.insert(inspectUnaccepted);
        }
        return 1;
    }
    @Override
    public IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername) {
        return finishedInspectMapper.selectFinishedInspectPage(page, inspectResult, inspectDate, inspectUsername);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
import com.yuanchu.mom.pojo.InspectUnaccepted;
import com.yuanchu.mom.service.InspectUnacceptedService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * ä¸åˆæ ¼å“æ£€éªŒè¡¨(InspectUnaccepted)表服务实现类
 *
 * @author zss
 * @since 2023-08-07 10:04:01
 */
@Service
public class InspectUnacceptedServiceImpl extends ServiceImpl<InspectUnacceptedMapper, InspectUnaccepted> implements InspectUnacceptedService {
    @Resource
    InspectUnacceptedMapper inspectUnacceptedMapper;
    //查询原材料不合格品检验单列表
    @Override
    public IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier,Integer type) {
        if (type==null){
            type=2;//为空是原材料2
        }
        switch (type) {
            case 2:
                //2是查询原材料不合格品
                return inspectUnacceptedMapper.selectUnRawInspectsList(page,formTime,dealState,supplier,0);
            case 1:
                //1是查询过程不合格品
                return inspectUnacceptedMapper.selectInsList(page,formTime,dealState,supplier,1);
            case 0:
                //0是查询成品不合格品
                return inspectUnacceptedMapper.selectInsList(page,formTime,dealState,supplier,2);
            default:
                return null;
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yuanchu.mom.pojo.Device;
import com.yuanchu.mom.pojo.InspectionItem;
import com.yuanchu.mom.mapper.InspectionItemMapper;
import com.yuanchu.mom.pojo.dto.InspectionItemDto;
import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.service.InspectionItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.service.SpecificationsService;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.MyUtil;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-01
 */
@Service
public class InspectionItemServiceImpl extends ServiceImpl<InspectionItemMapper, InspectionItem> implements InspectionItemService {
    @Resource
    private InspectionItemMapper inspectionItemMapper;
    @Autowired
    private DeviceService deviceService;
    @Override
    public void insertList(Integer finishInspectId, List<Map<String, Object>> list) {
        List<InspectionItem> list1 = new ArrayList<>();
        for (Map<String, Object> map : list){
            try {
                InspectionItem inspectionItem = JackSonUtil.unmarshal(JackSonUtil.marshal(map), InspectionItem.class);
                inspectionItem.setFinishInspectId(finishInspectId);
                list1.add(inspectionItem);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        inspectionItemMapper.insertBatchSomeColumn(list1);
    }
    @Override
    public List<InspectionItemDto> selectInspectionItem(Integer finishInspectId) {
        return inspectionItemMapper.selectInspectionItem(finishInspectId);
    }
    @Override
    public Integer addProcessInspectionSheet(String username, UpdateInspectionItemDto updateInspectionItemDto) {
        LambdaUpdateWrapper<InspectionItem> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(InspectionItem::getId, updateInspectionItemDto.getInspectionItemId());
        wrapper.set(InspectionItem::getInspectionValue, updateInspectionItemDto.getInspectionValue());
        wrapper.set(InspectionItem::getDeviceId, updateInspectionItemDto.getDeviceId());
        int i = checkValues(updateInspectionItemDto.getRequired(), updateInspectionItemDto.getInternal(), updateInspectionItemDto.getInspectionValue());
        wrapper.set(InspectionItem::getResult, i);
        wrapper.set(InspectionItem::getUsername, username);
        int update = inspectionItemMapper.update(new InspectionItem(), wrapper);
        if (update > 0){
            return i;
        }
        return 2;
    }
    @Override
    public List<Map<String, Object>> selectDeviceIdAndName() {
        LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Device::getId, Device::getName);
        return deviceService.listMaps(wrapper);
    }
    /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/
    private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
        if (isStandardValueSatisfied && isControlValueSatisfied) {
            return 1;
        } else {
            return 0;
        }
    }
    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
        String substring = valueStr.substring(1, 2);
        if (substring.equals("=")) {
            String operator = valueStr.substring(0, 2);
            Double standardValue = Double.parseDouble(valueStr.substring(2));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">=":
                    return detectionValue >= standardValue;
                case "<=":
                    return detectionValue <= standardValue;
                default:
                    return false;
            }
        } else {
            String operator = valueStr.substring(0, 1);
            Double standardValue = Double.parseDouble(valueStr.substring(1));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">":
                    return detectionValue > standardValue;
                case "<":
                    return detectionValue < standardValue;
                case "=":
                    return detectionValue.equals(standardValue);
                case "≥":
                    return detectionValue >= standardValue;
                case "≤":
                    return detectionValue <= standardValue;
                default:
                    return false;
            }
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.RawInsProductMapper;
import com.yuanchu.mom.pojo.RawInsProduct;
import com.yuanchu.mom.service.RawInsProductService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * åŽŸææ–™ç”³è¯·å•ä¸­çš„é¡¹ç›®åˆ—è¡¨(RawInsProduct)表服务实现类
 *
 * @author zss
 * @since 2023-08-01 13:52:31
 */
@Service
public class RawInsProductServiceImpl extends ServiceImpl<RawInsProductMapper, RawInsProduct> implements RawInsProductService {
    @Resource
    RawInsProductMapper rawInsProductMapper;
    //更新检验项目
    @Override
    public void updaterawInsProduct(int userId, RawInsProduct rawInsProduct) {
        //赋值检验员id
        rawInsProduct.setUserId(userId);
        //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0
        String testValue = rawInsProduct.getTestValue();//检验值
        String required = rawInsProduct.getRequired();//标准值
        String internal = rawInsProduct.getInternal();//内控值
        rawInsProduct.setTestState(checkValues(required, internal, testValue));
        //根据检验项目名和关联的检验单id来查询检验项目的数据
        LambdaUpdateWrapper<RawInsProduct> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(RawInsProduct::getRawInspectId, rawInsProduct.getRawInspectId())
                .eq(RawInsProduct::getName, rawInsProduct.getName());
        rawInsProductMapper.update(rawInsProduct, updateWrapper);
    }
    /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/
    private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
        if (isStandardValueSatisfied && isControlValueSatisfied) {
            return 1;
        } else {
            return 0;
        }
    }
    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
        String substring = valueStr.substring(1, 2);
        if (substring.equals("=")) {
            String operator = valueStr.substring(0, 2);
            Double standardValue = Double.parseDouble(valueStr.substring(2));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">=":
                    return detectionValue >= standardValue;
                case "<=":
                    return detectionValue <= standardValue;
                default:
                    return false;
            }
        } else {
            String operator = valueStr.substring(0, 1);
            Double standardValue = Double.parseDouble(valueStr.substring(1));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator) {
                case ">":
                    return detectionValue > standardValue;
                case "≥":
                    return detectionValue >= standardValue;
                case "≤":
                    return detectionValue <= standardValue;
                case "<":
                    return detectionValue < standardValue;
                case "=":
                    return detectionValue.equals(standardValue);
                default:
                    return false;
            }
        }
    }
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.pojo.vo.RawInsProductVo;
import com.yuanchu.mom.pojo.vo.RawInspectVo;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.MyUtil;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€raw_inspect(原材料申请表)】的数据库操作Service实现
 * @createDate 2023-07-31 14:43:15
 */
@Service
public class RawInspectServiceImpl extends ServiceImpl<RawInspectMapper, RawInspect>
        implements RawInspectService {
    @Resource
    RawInspectMapper rawInspectMapper;
    @Resource
    RawInsProductMapper rawInsProductMapper;
    @Resource
    RawInsProductService rawInsProductService;
    @Resource
    InspectUnacceptedMapper inspectUnacceptedMapper;
    @Resource
    DeviceService deviceService;
    @Resource
    MaterialMapper materialMapper;
    @Resource
    UserService userService;
    @Resource
    SpecificationsService specificationsService;
    @Resource
    StandardService standardService;
    @Resource
    ProductMapper productMapper;
    @Override
    public Map<String, Object> selectRawInspectsList(int pageSize, int countSize, String formTime, String createTime, int insState, int judgeState) {
        Map<String, Object> map = new HashMap<>();
        map.put("count", rawInspectMapper.selectCount(new QueryWrapper<RawInspect>().eq("state", 1)));
        map.put("data", rawInspectMapper.selectRawInspectsByLimit((pageSize - 1) * countSize, pageSize * countSize, formTime, createTime, insState, judgeState));
        return map;
    }
    //根据检验单id查询原材料检验单详情
    @Override
    public RawInspectVo selectRawInspectsListById(Integer id) {
        //将检验单基本信息查询出来并封装到RawInspectVo对象中
        RawInspect rawInspect = rawInspectMapper.selectById(id);
        RawInspectVo rawInspectVo = new RawInspectVo();
        BeanUtils.copyProperties(rawInspect, rawInspectVo);
        //查询检验单里面的检验项目,并封装到RawInspectVo对象中
        LambdaQueryWrapper<RawInsProduct> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(RawInsProduct::getRawInspectId, id);
        List<RawInsProduct> rawInsProducts = rawInsProductMapper.selectList(queryWrapper);
        //这里查到的设备id和检验员id要查询名称
        List<RawInsProductVo> rawInsProductVos = rawInsProducts.stream().map(rawInsProduct -> {
            //将一个对象的值赋值给另一个对象
            RawInsProductVo rawInsProductVo = new RawInsProductVo();
            BeanUtils.copyProperties(rawInsProduct, rawInsProductVo);
            //获取设备名(前提是如果存在)
            if (rawInsProduct.getDeviceId() != null) {
                String deviceName = deviceService.getDeviceNameById(rawInsProduct.getDeviceId());
                rawInsProductVo.setDeviceName(deviceName);
            }
            //获取用户名(前提是如果存在)
            if (rawInsProduct.getUserId() != null) {
                String userName = userService.selectNameById(rawInsProduct.getUserId());
                rawInsProductVo.setUserName(userName);
            }
            return rawInsProductVo;
        }).collect(Collectors.toList());
        rawInspectVo.setRawInsProducts(rawInsProductVos);
        return rawInspectVo;
    }
    //更新检验状态(上报)
    @Override
    public boolean updateRawInspectsById(Integer id) {
        //更新检验单里面的检验状态和检验结论
        RawInspectVo rawInspectVo = selectRawInspectsListById(id);
        RawInspect rawInspect = RawInspect.builder()
                .id(id)
                .insState(1)
                .insTime(new Date())
                .judgeState(rawInspectVo.getJudgeState())
                .build();
        rawInspectMapper.updateById(rawInspect);
        //如果检验结论为不合格,则需要新增不合格检验单
        if (rawInspectVo.getJudgeState() == 0) {
            InspectUnaccepted rawUnaccepted = InspectUnaccepted.builder()
                    .reason(rawInspectVo.getName() + "不合格")  //暂且定义为原材料不合格
                    .rawInspectId(id)
                    .type(2)        //类型为原材料
                    .build();
            inspectUnacceptedMapper.insert(rawUnaccepted);
        }
        return true;
    }
    //新增检验单
    @Override
    public Integer addRawInspects(String userName, RawInspect rawInspect) {
        rawInspect.setUserName(userName);
        //新增检验单
        rawInspectMapper.insert(rawInspect);
        //获取物料id
        Material material = materialMapper.selectOne(Wrappers.<Material>query()
                .eq("name", rawInspect.getName())
                .eq("code", rawInspect.getCode()));
        //获取规格名称和型号名称
        String specification = rawInspect.getSpecifications();
        String[] strings = specification.split("-");
        String stName = strings[0];//规格名称
        String spName = strings[1];//型号名称
        //获取规格id
        Standard standard = standardService.getOne(Wrappers.<Standard>query()
                .eq("name", stName)
                .eq("material_id", material.getId()));
        //获取型号id
        Specifications specifications = specificationsService.selectSpIdByname(standard.getId(), spName);
        //根据型号id查询项目信息
        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specifications.getId()));
        ArrayList<RawInsProduct> list = new ArrayList<>();
        for (Product product : productList) {
            RawInsProduct rawInsProduct = RawInsProduct.builder()
                    .name(product.getName())
                    .unit(product.getUnit())
                    .required(product.getRequired())
                    .internal(product.getInternal())
                    .rawInspectId(rawInspect.getId())
                    .build();
            list.add(rawInsProduct);
        }
        //检验项目批量添加
        rawInsProductService.saveBatch(list);
        return rawInspect.getId();
    }
    //判断数组是否包含0
    private static boolean containsZero(Object[] array) {
        for (Object num : array) {
            if (num.equals(0)) {
                return true;
            }
        }
        return false;
    }
    //判断数组是否全部为1
    private static boolean allOnes(Object[] array) {
        for (Object num : array) {
            if (!num.equals(1)) {
                return false;
            }
        }
        return true;
    }
}
inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.FinishedInspectMapper">
    <select id="selectFinishedInspectPage" resultType="map">
        SELECT f.`id`, f.`order_number`, f.`customer_name`, f.`project_name`, f.`quality_traceability`, f.`material`, f.`specifications_model`, f.`unit`,
               f.`quantity`, u.`name`, DATE_FORMAT(f.`create_time`, '%Y-%m-%d') detectionPeriod, f.`result`
        FROM finished_inspect f, `user` u
        WHERE f.`user_id` = u.`id`
          AND f.`state` = 1
            <if test="inspectResult != null and inspectResult != ''">
                AND f.result = #{inspectResult}
            </if>
            <if test="inspectDate != null and inspectDate != ''">
                AND DATE_FORMAT(f.`create_time`, '%Y-%m-%d') = #{inspectDate}
            </if>
            <if test="inspectUsername != null and inspectUsername != ''">
                AND u.`name` LIKE CONCAT('%',#{inspectUsername},'%')
            </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.InspectUnacceptedMapper">
    <select id="selectUnRawInspectsList" resultType="java.util.Map">
        select DATE_FORMAT(form_time, '%Y-%m-%d') '来料日期',
        supplier,
        reason,
        code,
        name,
        specifications,
        unit,
        number,
        DATE_FORMAT(ri.create_time, '%Y-%m-%d') '报检日期',
        user_name,
        DATE_FORMAT(ins_time, '%Y-%m-%d') '检验日期',
        deal_state,
        deal_reasult,
        DATE_FORMAT(deal_time, '%Y-%m-%d') '处理日期'
        from mom_ocean.raw_inspect ri inner join mom_ocean.inspect_unaccepted ru on ri.id = ru.raw_inspect_id
        <if test="dealState!=null">
            where deal_state=#{dealState}
        </if>
        <if test="formTime!=null">
            and form_time=#{formTime}
        </if>
        <if test="supplier!=null">
            and supplier=#{supplier}
        </if>
        <if test="type!=null">
            and ru.type=#{type}
        </if>
        and ru.state=1
    </select>
    <select id="selectInsList" resultType="java.util.Map">
        select DATE_FORMAT(fi.create_time, '%Y-%m-%d') '来料日期',
        supplier,
        reason,
        material_code,
        name,
        specifications_model,
        unit,
        quantity,
        DATE_FORMAT(fi.create_time, '%Y-%m-%d') '报检日期',
        u.name,
        DATE_FORMAT(fi.update_time, '%Y-%m-%d') '检验日期',
        deal_state,
        deal_reasult,
        DATE_FORMAT(deal_time, '%Y-%m-%d') '处理日期'
        from mom_ocean.inspect_unaccepted ru,
        mom_ocean.finished_inspect fi ,
        mom_ocean.user u
        where fi.id = ru.raw_inspect_id
        and fi.user_id=u.id
        <if test="dealState!=null">
            and deal_state=#{dealState}
        </if>
        <if test="formTime!=null">
            and fi.create_time=#{formTime}
        </if>
        <if test="supplier!=null">
            and supplier=#{supplier}
        </if>
        <if test="type!=null">
            and ru.type=#{type}
        </if>
        and ru.state=1
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InspectionItemMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.InspectionItemMapper">
    <resultMap id="selectInspectionItemMap" type="inspectionItemDto">
        <id property="father" column="father"/>
        <association property="children" resultMap="selectInspectionItemDto2Map"/>
    </resultMap>
    <resultMap id="selectInspectionItemDto2Map" type="inspectionItemDto2">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="unit" column="unit"/>
        <result property="internal" column="internal"/>
        <result property="required" column="required"/>
        <result property="inspectionValue" column="inspection_value"/>
        <result property="deviceId" column="device_id"/>
        <result property="result" column="result"/>
    </resultMap>
    <select id="selectInspectionItem" resultMap="selectInspectionItemMap">
        SELECT i.`id`, IFNULL(i.`father`,i.`name`) father, i.`name`, i.`unit`, i.`internal`, i.`required`, i.`inspection_value`, i.`device_id`, i.`result`
        FROM inspection_item i
        WHERE i.`finish_inspect_id` = #{finishInspectId}
          AND i.`state` = 1
    </select>
</mapper>
inspect-server/src/main/resources/mapper/RawInsProductMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.RawInsProductMapper">
</mapper>
inspect-server/src/main/resources/mapper/RawInspectMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.RawInspectMapper">
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.RawInspect">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="code" column="code" jdbcType="VARCHAR"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="specifications" column="specifications" jdbcType="VARCHAR"/>
        <result property="unit" column="unit" jdbcType="VARCHAR"/>
        <result property="number" column="number" jdbcType="INTEGER"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="judgeState" column="judge_state" jdbcType="INTEGER"/>
        <result property="insTime" column="ins_time" jdbcType="DATE"/>
        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="DATE"/>
        <result property="updateTime" column="update_time" jdbcType="DATE"/>
        <result property="formTime" column="form_time" jdbcType="DATE"/>
    </resultMap>
    <select id="selectRawInspectsByLimit" resultType="com.yuanchu.mom.pojo.RawInspect">
        select id, code, name, specifications, unit, number, ins_state, judge_state, ins_time, user_name, create_time, form_time
        from raw_inspect
        where state = 1
        <if test="formTime!=null and formTime!=''">
            and form_time = #{formTime}
        </if>
        <if test="createTime!=null and createTime!=''">
            and create_time = #{createTime}
        </if>
        <if test="insState!=2">
            and ins_state = #{insState}
        </if>
        <if test="judgeState!=2">
            and judge_state = #{judgeState}
        </if>
        limit #{pageSize},#{countSize}
    </select>
</mapper>
inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.yuanchu.mom;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class InspectServerApplicationTests {
    @Test
    void contextLoads() {
    }
}
inventory-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>inventory-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>inventory-server</name>
    <description>inventory-server</description>
    <packaging>jar</packaging>
    <dependencies>
        <!--用户模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--标准模块-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.ApiController;
import java.util.HashMap;
import java.util.List;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.service.RepertoryService;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * åº“存表(Repertory)表控制层
 *
 * @author zss
 * @since 2023-08-07 16:33:01
 */
@Api(tags = "库存表接口")
@RestController
@RequestMapping("/repertory")
public class RepertoryController {
    @Autowired
    private RepertoryService repertoryService;
    @ApiOperation("查询所有库存列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "specifications", value = "产品型号", dataTypeClass = String.class),
            @ApiImplicitParam(name = "time", value = "入库日期", dataTypeClass = String.class),
            @ApiImplicitParam(name = "type", value = "类型(为空=全部)", dataTypeClass = Integer.class)
    })
    @GetMapping("/selectAllRepertory")
    public Result selectAllRepertory(int pageSize, int countSize, String name, String specifications, String time, Integer type) {
        IPage<Map<String, Object>> repertoryPage = repertoryService.selectAllRepertory(new Page<Object>(pageSize, countSize), name, specifications, time, type);
        Map<String, Object> map = new HashMap<>();
        map.put("total", repertoryPage.getTotal());
        map.put("row", repertoryPage.getRecords());
        return Result.success(map);
    }
}
inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Repertory;
import java.util.Map;
/**
 * åº“存表(Repertory)表数据库访问层
 *
 * @author zss
 * @since 2023-08-07 16:33:01
 */
public interface RepertoryMapper extends BaseMapper<Repertory> {
    //查询所有库存列表
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
}
inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.io.Serializable;
/**
 * åº“存表(Repertory)表实体类
 *
 * @author zss
 * @since 2023-08-07 16:33:01
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
@TableName("repertory")
public class Repertory implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åº“å­˜id
     **/
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è®¢å•编码
     **/
    private String orderCode;
    /**
     * äº§å“ç¼–码
     **/
    private String code;
    /**
     * äº§å“åç§°
     **/
    private String name;
    /**
     * åž‹å·è§„æ ¼
     **/
    private String specifications;
    /**
     * è¯•验要求
     **/
    private String requirements;
    /**
     * å·¥è‰ºæ–‡ä»¶ç¼–号
     **/
    private String documentNumber;
    /**
     * åº“位号
     **/
    private Integer seat;
    /**
     * å•位
     **/
    private String unit;
    /**
     * æ•°é‡
     **/
    private Integer number;
    /**
     * å…¥åº“人(当前用户名)
     **/
    private String userName;
    /**
     * ${column.comment}
     **/
    private Integer state;
    /**
     * å…¥åº“日期
     **/
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    /**
     * ${column.comment}
     **/
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * å¤‡æ³¨
     **/
    private String note;
    /**
     * ç±»åž‹ 0:成品;1:半成品
     **/
    private Integer type;
}
inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.Repertory;
import java.util.Map;
/**
 * åº“存表(Repertory)表服务接口
 *
 * @author zss
 * @since 2023-08-07 16:33:01
 */
public interface RepertoryService extends IService<Repertory> {
    /**
     *查询所有库存列表
     * @param page
     * @param name
     * @param specifications
     * @param time
     * @param type
     * @return
     */
    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
}
inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.RepertoryMapper;
import com.yuanchu.mom.pojo.Repertory;
import com.yuanchu.mom.service.RepertoryService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
/**
 * åº“存表(Repertory)表服务实现类
 *
 * @author zss
 * @since 2023-08-07 16:33:01
 */
@Service
public class RepertoryServiceImpl extends ServiceImpl<RepertoryMapper, Repertory> implements RepertoryService {
    @Resource
    RepertoryMapper repertoryMapper;
    //查询所有库存列表
    @Override
    public IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type) {
        return repertoryMapper.selectAllRepertory(page,name,specifications,time,type);
    }
}
inventory-server/src/main/resources/mapper/RepertoryMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.RepertoryMapper">
    <select id="selectAllRepertory" resultType="java.util.Map">
        select name,
        specifications,
        code,
        requirements,
        order_code,
        seat,
        user_name,
        DATE_FORMAT(create_time, '%Y-%m-%d') '入库日期',
        note
        from mom_ocean.repertory
        where state=1
        <if test="name!=null and name!=' '">
            and name LIKE CONCAT('%',#{name},'%')
        </if>
        <if test="specifications!=null and specifications!=' '">
            and specifications LIKE CONCAT('%',#{specifications},'%')
        </if>
        <if test="time!=null and time!=''">
            and create_time=#{time}
        </if>
        <if test="type!=null and type!=''">
            and type=#{type}
        </if>
    </select>
</mapper>
pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yuanchu.mom</groupId>
    <artifactId>mom</artifactId>
    <version>1.0.0</version>
    <name>mom_ocean</name>
    <description>mom_ocean</description>
    <packaging>pom</packaging>
    <modules>
        <module>framework</module>
        <module>user-server</module>
        <module>standard-server</module>
        <module>inspect-server</module>
        <module>system-run</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <log4j.version>1.2.17</log4j.version>
        <mysql.version>8.0.28</mysql.version>
        <jwt.version>4.4.0</jwt.version>
        <swagger.version>3.0.0</swagger.version>
        <knife4j-spring-ui.version>3.0.3</knife4j-spring-ui.version>
        <druid.version>1.2.18</druid.version>
        <mybatis-plus.version>3.4.0</mybatis-plus.version>
        <openfeign.version>3.1.3</openfeign.version>
        <feign-okhttp.version>11.0</feign-okhttp.version>
        <shiro.version>1.5.3</shiro.version>
        <!-- æ‰“包后导出的路径 -->
        <package.path>${project.build.directory}/BLOG</package.path>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!--Swagger3-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <!--Swagger3-Ui美化-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-ui</artifactId>
            <version>${knife4j-spring-ui.version}</version>
        </dependency>
        <!--后端注释检验工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <!--log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--数据库连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--jwt-->
            <dependency>
                <groupId>com.auth0</groupId>
                <artifactId>java-jwt</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <!--mybatis-plus-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!--mybatis-plus代码生成器-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!--feign-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>${openfeign.version}</version>
            </dependency>
            <!--okhttp-->
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-okhttp</artifactId>
                <version>${feign-okhttp.version}</version>
            </dependency>
            <!--安全框架shiro-->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring-boot-starter</artifactId>
                <version>${shiro.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <!-- ä¸Šçº¿éƒ¨ç½² JAR启动分离依赖lib和配置 -->
            <!-- æ‰“包jar -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <!-- ä¸æ‰“包资源文件 -->
                    <excludes>
                        <exclude>*.**</exclude>
                    </excludes>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <!-- MANIFEST.MF ä¸­ Class-Path åŠ å…¥å‰ç¼€ -->
                            <classpathPrefix>lib/</classpathPrefix>
                            <!-- jar包不包含唯一版本标识 -->
                            <useUniqueVersions>false</useUniqueVersions>
                            <!-- æŒ‡å®šå…¥å£ç±» -->
                            <mainClass>com.yuanchu.mom.SystemRunApplication</mainClass>
                        </manifest>
                        <!--  æŒ‡å®šé…ç½®æ–‡ä»¶ç›®å½•,这样jar运行时会去找到同目录下的conf文件夹下查找  -->
                        <manifestEntries>
                            <Class-Path>conf/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <outputDirectory>${package.path}</outputDirectory>
                </configuration>
            </plugin>
            <!-- æ‹·è´ä¾èµ– copy-dependencies -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${package.path}/lib/ </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- æ‹·è´èµ„源文件 copy-resources -->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <!--  æŒ‡å®šå‚与构建的resource -->
                                    <includes>
                                        <include>*.**</include>
                                        <!--排除application-dev.yml文件-->
                                    </includes>
                                </resource>
                            </resources>
                            <outputDirectory>${package.path}/conf</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
standard-server/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
standard-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <artifactId>standard-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>standard-server</name>
    <description>standard-server</description>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>framework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yuanchu.mom.pojo.Device;
import com.yuanchu.mom.pojo.dto.ProductDto;
import com.yuanchu.mom.service.DeviceService;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Api(tags = "技术管理-->标准MOM-->工艺路线")
@RestController
@RequestMapping("/device")
public class DeviceController {
    @Autowired
    private DeviceService deviceService;
    @ApiOperation(value = "点击表格中的选择")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "deviceGroup", value = "设备组", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/select")
    public Result<?> selectTreeDevice(String deviceGroup){
        Map<String, Object> map = deviceService.selectTechnology(deviceGroup);
        return Result.success(map);
    }
}
standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
import com.yuanchu.mom.service.MaterialService;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@Api(tags = "技术管理-->标准MOM-->物料模块")
@RestController
@RequestMapping("/material")
public class MaterialController {
    @Autowired
    private MaterialService materialService;
    @ApiOperation(value = "查询物料的树")
    @GetMapping("/selectTreeByMaterial")
    public Result<List<MaterialTreeDto>> selectTreeByMaterial(){
        return Result.success(materialService.selectTreeByMaterial());
    }
}
standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.yuanchu.mom.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import com.yuanchu.mom.service.OrdersService;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * è®¢å•(Order)表控制层
 *
 * @author zss
 * @since 2023-07-31 11:57:44
 */
@Api(tags = "技术管理-->订单BOM")
@RestController
@RequestMapping("/orders")
@Slf4j
public class OrdersController {
    @Resource
    OrdersService ordersService;
    @ApiOperation("查询所有订单列表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageSize", value = "页数", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "countSize", value = "条数/页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "id", value = "订单id", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "name", value = "产品名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "state", value = "状态(为空=全部)", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "time", value = "下单时间", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllOrder")
    public Result selectAllOrder(int pageSize, int countSize, Integer id, String name, Integer state ,String time) {
        IPage<Map<String, Object>> inspectionPage = ordersService.selectAllOrder(new Page<Object>(pageSize, countSize), id, name, state, time);
        Map<String, Object> map = new HashMap<>();
        map.put("total", inspectionPage.getTotal());
        map.put("row", inspectionPage.getRecords());
        return Result.success(map);
    }
    @ApiOperation("根据订单id查询订单详情")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "订单id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectOrderById")
    public Result selectOrderById(Integer id) {
        return Result.success(ordersService.getById(id));
    }
}
standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.pojo.dto.ProductDto;
import com.yuanchu.mom.service.ProductService;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "技术管理-->标准MOM-->项目模块")
@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private ProductService productService;
    @ApiOperation(value = "项目表格二级树")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "project", value = "项目", dataTypeClass = String.class),
            @ApiImplicitParam(name = "specifications", value = "型号ID", dataTypeClass = String.class, required = true)
    })
    @GetMapping("/selectTreeByMaterial")
    public Result<?> selectTreeProduct(String specifications, String project){
        List<ProductDto> map = productService.selectTreeProduct(specifications, project);
        return Result.success(map);
    }
}
standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.service.TechnologyService;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Api(tags = "技术管理-->标准MOM-->工艺路线")
@RestController
@RequestMapping("/technology")
public class TechnologyController {
    @Autowired
    private TechnologyService technologyService;
    @ApiOperation(value = "选择工艺路线出现的表格查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "technologyName", value = "工艺名称", dataTypeClass = String.class),
            @ApiImplicitParam(name = "specificationId", value = "规格ID", dataTypeClass = String.class,required = true)
    })
    @GetMapping("/select")
    public Result<?> selectTechnology(String technologyName, String specificationId){
        List<Map<String, Object>> map = technologyService.selectTechnology(technologyName);
        return Result.success(map);
    }
}
standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.Device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
public interface DeviceMapper extends BaseMapper<Device> {
}
standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.Material;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€material】的数据库操作Mapper
* @createDate 2023-07-26 15:52:50
* @Entity com.yuanchu.mom.pojo.Material
*/
public interface MaterialMapper extends BaseMapper<Material> {
    @MapKey("id")
    List<MaterialTreeDto> selectTreeByMaterial();
    //根据物料名称查询物料id和物料编码
    List<Material> selectMcodeId(String name);
    //根据物料名称和物料编码查询物料id,规格信息和型号信息
    List<Map> selectIdByCoNa(String name, String code);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Orders;
import java.util.List;
import java.util.Map;
/**
 * è®¢å•(Order)表数据库访问层
 *
 * @author zss
 * @since 2023-07-31 11:57:44
 */
public interface OrdersMapper extends BaseMapper<Orders> {
    //查询所有订单列表
    IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.dto.ProductDto;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€product】的数据库操作Mapper
* @createDate 2023-07-26 16:00:44
* @Entity com.yuanchu.mom.pojo.Product
*/
public interface ProductMapper extends BaseMapper<Product> {
    List<ProductDto> selectTreeProduct(String specifications, String project);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.Specifications;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.List;
import java.util.Map;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€specifications】的数据库操作Mapper
 * @createDate 2023-07-26 16:02:54
 * @Entity com.yuanchu.mom.pojo.Specifications
 */
public interface SpecificationsMapper extends BaseMapper<Specifications> {
    /**
     * æ£€éªŒæ¨¡å—-->OMS管理-->成品检验-->新增(需要规格型号的Id与名称)
     */
    List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId);
}
standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.Standard;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€standard】的数据库操作Mapper
* @createDate 2023-07-26 15:59:05
* @Entity com.yuanchu.mom.pojo.Standard
*/
public interface StandardMapper extends BaseMapper<Standard> {
}
standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.yuanchu.mom.mapper;
import com.yuanchu.mom.pojo.Technology;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
public interface TechnologyMapper extends BaseMapper<Technology> {
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDate;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="Device对象", description="")
public class Device implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "设备id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "设备编码")
    private String code;
    @ApiModelProperty(value = "设备名称")
    private String name;
    @ApiModelProperty(value = "设备分组")
    private String father;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 *
 * @TableName material
 */
@TableName(value ="material")
@Data
public class Material implements Serializable {
    /**
     * ç‰©æ–™id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * ç‰©æ–™ç¼–码
     */
    private String code;
    /**
     * ç‰©æ–™åç§°
     */
    private String name;
    /**
     * 0:原材料;1:成品;2:半成品
     */
    private Integer type;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty(value = "乐观锁", hidden = true)
    @Version
    private Integer version;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
import java.io.Serializable;
/**
 * è®¢å•(Order)表实体类
 *
 * @author zss
 * @since 2023-07-31 11:57:44
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@TableName("orders")
public class Orders implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * è®¢å•id
     */
    @ApiModelProperty(name = "订单id")
    @TableId(value = "id", type = IdType.ASSIGN_UUID)
    private Integer id;
    /**
     * å®¢æˆ·åç§°
     */
    @ApiModelProperty(name = "客户名称")
    @TableField("proname")
    private String proname;
    /**
     * äº§å“ç¼–码
     */
    @ApiModelProperty(name = "产品编码")
    @TableField("code")
    private String code;
    /**
     * äº§å“å¤§ç±»,0:原材料;1:成品;2:半成品
     */
    @ApiModelProperty(name = "产品大类,0:原材料;1:成品;2:半成品")
    @TableField("type")
    private Integer type;
    /**
     * åž‹å·è§„æ ¼
     */
    @ApiModelProperty(name = "型号规格")
    @TableField("specifications")
    private String specifications;
    /**
     * å•位
     */
    @ApiModelProperty(name = "单位")
    @TableField("unit")
    private String unit;
    /**
     * æ•°é‡
     */
    @ApiModelProperty(name = "数量")
    @TableField("number")
    private Integer number;
    /**
     * çŠ¶æ€,0:待编制;1:已编制
     */
    @ApiModelProperty(name = "状态,0:待编制;1:已编制")
    @TableField("state")
    private Integer state;
    /**
     * ä¸‹å•人
     */
    @ApiModelProperty(name = "下单人")
    @TableField("username")
    private String username;
    /**
     * ä¸‹å•日期
     */
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "下单日期", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    /**
     * äº¤è´§æ—¥æœŸ
     */
    @ApiModelProperty(name = "交货日期")
    @TableField("delivery_time")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date deliveryTime;
    /**
     * å®¢æˆ·åç§°
     */
    @ApiModelProperty(name = "客户名称")
    @TableField("custname")
    private String custname;
    /**
     * çœä»½
     */
    @ApiModelProperty(name = "省份")
    @TableField("province")
    private String province;
    /**
     * éƒ¨é—¨
     */
    @ApiModelProperty(name = "部门")
    @TableField("department")
    private String department;
    /**
     * ä¸šåŠ¡å‘˜
     */
    @ApiModelProperty(name = "业务员")
    @TableField("salesman")
    private String salesman;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 *
 * @TableName product
 */
@TableName(value ="product")
@Data
public class Product implements Serializable {
    /**
     * é¡¹ç›®id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * é¡¹ç›®åç§°
     */
    private String name;
    /**
     * é¡¹ç›®çˆ¶ç±»
     */
    private String father;
    /**
     * å•位
     */
    private String unit;
    /**
     * æ ‡å‡†å€¼
     */
    private String required;
    /**
     * å†…控值
     */
    private String internal;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty(value = "乐观锁", hidden = true)
    @Version
    private Integer version;
    /**
     * å…³è” åž‹å·id
     */
    private Integer specificationsId;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 *
 * @TableName specifications
 */
@TableName(value ="specifications")
@Data
public class Specifications implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è§„格名称
     */
    private String name;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty(value = "乐观锁", hidden = true)
    @Version
    private Integer version;
    /**
     * å…³è” æ ‡å‡†id
     */
    private Integer standardId;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 *
 * @TableName standard
 */
@TableName(value ="standard")
@Data
public class Standard implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * æ ‡å‡†åç§°
     */
    private String name;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty(value = "乐观锁", hidden = true)
    @Version
    private Integer version;
    /**
     * å…³è” ç‰©æ–™id
     */
    private Integer material_id;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDate;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="Technology对象", description="")
public class Technology implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "工艺id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "工艺名称")
    private String name;
    private String quota;
    @ApiModelProperty(value = "设备组")
    private String deviceGroup;
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    @TableLogic(value = "1", delval = "0")
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", hidden = true)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    @ApiModelProperty(value = "关联 è§„æ ¼id")
    private Integer specificationsId;
    @ApiModelProperty(value = "关联 è®¾å¤‡id")
    private Integer deviceId;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.pojo.dto;
import lombok.Data;
import java.util.List;
@Data
public class MaterialTreeDto {
    private Integer id;
    private String name;
    private Integer type;
    private String code = "[2]";
    List<StandardDto> children;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.yuanchu.mom.pojo.dto;
import lombok.Data;
import java.util.List;
@Data
public class ProductDto {
    /**
     * é¡¹ç›®åç§°
     */
    private String father;
    List<ProductDto2> children;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.yuanchu.mom.pojo.dto;
import lombok.Data;
@Data
public class ProductDto2 {
    private Integer id;
    /**
     * é¡¹ç›®åç§°
     */
    private String name;
    /**
     * å•位
     */
    private String unit;
    /**
     * æ ‡å‡†å€¼
     */
    private String required;
    /**
     * å†…控值
     */
    private String internal;
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.yuanchu.mom.pojo.dto;
import lombok.Data;
import java.util.List;
@Data
class SpecificationsDto {
    private Integer id;
    private String name;
    private String code = "[4]";
}
standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.yuanchu.mom.pojo.dto;
import lombok.Data;
import java.util.List;
@Data
class StandardDto {
    private Integer id;
    private String name;
    private String code = "[3]";
    List<SpecificationsDto> children;
}
standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.Device;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
public interface DeviceService extends IService<Device> {
    Map<String, Object> selectTechnology(String deviceGroup);
    List<Device> selectDevice();
    /**
     * æ ¹æ®è®¾å¤‡id查询设备名称
     * @param id
     */
    String getDeviceNameById(Integer id);
}
standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.Material;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€material】的数据库操作Service
* @createDate 2023-07-26 15:52:50
*/
public interface MaterialService extends IService<Material> {
    List<MaterialTreeDto> selectTreeByMaterial();
    /**
     * æ ¹æ®ç‰©æ–™åç§°æŸ¥è¯¢ç‰©æ–™id和物料编码
     * @param name
     * @return
     */
    List<Material> selectMcodeId(String name);
    /**
     * æ ¹æ®ç‰©æ–™åç§°å’Œç‰©æ–™ç¼–码查询物料id
     * @param name
     * @param code
     * @return
     */
    List<Map> selectIdByCoNa(String name, String code);
    /**
     * æ£€éªŒæ¨¡å—-->OMS管理-->成品检验-->新增(项目名称下拉框:Id与名称,编码)
     */
    List<Map<String, Object>> selectMaterialIdAndNameAndCode();
    /**
     * æŸ¥è¯¢æ‰€æœ‰ç‰©æ–™ä¿¡æ¯
     * @return
     */
    List<Material> selectMaterial();
}
standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.Orders;
import java.util.Map;
/**
 * è®¢å•(Order)表服务接口
 *
 * @author zss
 * @since 2023-07-31 11:57:44
 */
public interface OrdersService extends IService<Orders> {
    /**
     * æŸ¥è¯¢æ‰€æœ‰è®¢å•列表
     *
     * @param
     * @return
     */
    IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time);
}
standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.dto.ProductDto;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€product】的数据库操作Service
* @createDate 2023-07-26 16:00:44
*/
public interface ProductService extends IService<Product> {
    List<ProductDto> selectTreeProduct(String specifications, String project);
    List<Map<String, Object>> selectProductList(Integer specificationsId);
}
standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.yuanchu.mom.service;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.Material;
import com.yuanchu.mom.pojo.Specifications;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€specifications】的数据库操作Service
* @createDate 2023-07-26 16:01:49
*/
public interface SpecificationsService extends IService<Specifications> {
    /**
     * æ ¹æ®è§„æ ¼id和型号名称查询型号信息
     * @param id
     * @param name
     * @return
     */
    Specifications selectSpIdByname(Integer id, String name);
    /**
     * æ£€éªŒæ¨¡å—-->OMS管理-->成品检验-->新增(需要规格型号的Id与名称)
     */
    List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId);
}
standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.Standard;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€standard】的数据库操作Service
* @createDate 2023-07-26 15:59:05
*/
public interface StandardService extends IService<Standard> {
}
standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.Technology;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
public interface TechnologyService extends IService<Technology> {
    List<Map<String, Object>> selectTechnology(String technologyName);
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yuanchu.mom.pojo.Device;
import com.yuanchu.mom.mapper.DeviceMapper;
import com.yuanchu.mom.service.DeviceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Service
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
    @Resource
    private DeviceMapper deviceMapper;
    @Override
    public Map<String, Object> selectTechnology(String deviceGroup) {
        String[] split = deviceGroup.split("\\+");
        Map<String, Object> map = new HashMap<>();
        for (String str : split){
            LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(Device::getFather, str);
            wrapper.select(Device::getId, Device::getName);
            List<Map<String, Object>> maps = deviceMapper.selectMaps(wrapper);
            map.put("first", str);
            map.put("children", maps);
        }
        return map;
    }
    //查询所有设备
    @Override
    public List<Device> selectDevice() {
        return deviceMapper.selectList(new QueryWrapper<>());
    }
    //根据设备id获取设备名称
    @Override
    public String getDeviceNameById(Integer id) {
        Device device = deviceMapper.selectById(id);
       return device.getName();
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.pojo.Material;
import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
import com.yuanchu.mom.service.MaterialService;
import com.yuanchu.mom.mapper.MaterialMapper;
import com.yuanchu.mom.utils.JackSonUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€material】的数据库操作Service实现
 * @createDate 2023-07-26 15:52:50
 */
@Service
public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material>
        implements MaterialService {
    @Resource
    MaterialMapper materialMapper;
    @Override
    public List<MaterialTreeDto> selectTreeByMaterial() {
        List<MaterialTreeDto> materialTreeDtos = materialMapper.selectTreeByMaterial();
        materialTreeDtos.forEach(System.out::println);
        return materialMapper.selectTreeByMaterial();
    }
    @Override
    public List<Map<String, Object>> selectMaterialIdAndNameAndCode() {
        LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Material::getId, Material::getName, Material::getCode);
        return materialMapper.selectMaps(wrapper);
    }
    //查询所有物料信息
    @Override
    public List<Material> selectMaterial() {
        return materialMapper.selectList(Wrappers.<Material>query());
    }
    //根据物料名称查询物料id和物料编码
    @Override
    public List<Material> selectMcodeId(String name) {
        return materialMapper.selectMcodeId(name);
    }
    //根据物料名称和物料编码查询物料id,规格信息和型号信息
    @Override
    public List<Map> selectIdByCoNa(String name, String code) {
        return materialMapper.selectIdByCoNa(name,code);
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.OrdersMapper;
import com.yuanchu.mom.pojo.Orders;
import com.yuanchu.mom.service.OrdersService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
 * è®¢å•(Order)表服务实现类
 *
 * @author zss
 * @since 2023-07-31 11:57:44
 */
@Service("orderService")
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
    @Resource
    OrdersMapper orderMapper;
    //查询所有订单列表
    @Override
    public IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time) {
        return  orderMapper.selectAllOrder(page, id,name,state, time);
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.pojo.Product;
import com.yuanchu.mom.pojo.dto.ProductDto;
import com.yuanchu.mom.service.ProductService;
import com.yuanchu.mom.mapper.ProductMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€product】的数据库操作Service实现
* @createDate 2023-07-26 16:00:44
*/
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService{
    @Resource
    private ProductMapper productMapper;
    @Override
    public List<ProductDto> selectTreeProduct(String specifications, String project) {
        return productMapper.selectTreeProduct(specifications, project);
    }
    @Override
    public List<Map<String, Object>> selectProductList(Integer specificationsId) {
        LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Product::getSpecificationsId, specificationsId);
        wrapper.select(Product::getName, Product::getFather, Product::getRequired, Product::getInternal, Product::getUnit);
        return productMapper.selectMaps(wrapper);
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.mapper.SpecificationsMapper;
import com.yuanchu.mom.pojo.Specifications;
import com.yuanchu.mom.service.SpecificationsService;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€specifications】的数据库操作Service实现
 * @createDate 2023-07-26 16:01:49
 */
@Service
public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications>
        implements SpecificationsService {
    @Resource
    private SpecificationsMapper specificationsMapper;
    /**
     * æ£€éªŒæ¨¡å—-->OMS管理-->成品检验-->新增(需要规格型号的Id与名称)
     */
    @Override
    public List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId) {
        List<Map<String, Object>> maps = specificationsMapper.selectSpecificationIdAndName(materialId);
        return maps;
    }
    //根据规格id和型号名称查询型号信息
    @Override
    public Specifications selectSpIdByname(Integer id, String name) {
        Specifications specifications = specificationsMapper.selectOne(Wrappers.<Specifications>query()
                .eq("standard_id", id)
                .eq("name", name));
        return specifications;
    }
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.pojo.Standard;
import com.yuanchu.mom.service.StandardService;
import com.yuanchu.mom.mapper.StandardMapper;
import org.springframework.stereotype.Service;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€standard】的数据库操作Service实现
 * @createDate 2023-07-26 15:59:05
 */
@Service
public class StandardServiceImpl extends ServiceImpl<StandardMapper, Standard> implements StandardService {
}
standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.yuanchu.mom.pojo.Technology;
import com.yuanchu.mom.mapper.TechnologyMapper;
import com.yuanchu.mom.service.TechnologyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-07-31
 */
@Service
public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technology> implements TechnologyService {
    @Resource
    private TechnologyMapper technologyMapper;
    @Override
    public List<Map<String, Object>> selectTechnology(String technologyName) {
        LambdaQueryWrapper<Technology> wrapper = new LambdaQueryWrapper<>();
        if (!ObjectUtils.isEmpty(technologyName)){
            wrapper.like(Technology::getName, technologyName);
        }
        wrapper.select(Technology::getId, Technology::getName, Technology::getDeviceGroup, Technology::getQuota);
        return technologyMapper.selectMaps(wrapper);
    }
}
standard-server/src/main/resources/mapper/DeviceMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.DeviceMapper">
    <select id="selectDeviceTables" resultType="map">
        SELECT d.`id`, d.`name`, d.`father`,t.`quota`
        FROM device d, technology t
        WHERE d.`state` = 1
          AND d.`id` = t.`device_id`
    </select>
</mapper>
standard-server/src/main/resources/mapper/MaterialMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.MaterialMapper">
    <resultMap id="BaseResultMap" type="Material">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="code" column="code" jdbcType="VARCHAR"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="type" column="type" jdbcType="INTEGER"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="version" column="version" jdbcType="INTEGER"/>
    </resultMap>
    <resultMap id="materialTreeDto" type="materialTreeDto">
        <id property="id" column="mid"/>
        <result property="name" column="mname"/>
        <result property="type" column="type"/>
        <association property="children" resultMap="standardDto"/>
    </resultMap>
    <resultMap id="standardDto" type="standardDto">
        <id property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="children" resultMap="specificationsDto"/>
    </resultMap>
    <resultMap id="specificationsDto" type="specificationsDto">
        <id property="id" column="spid"/>
        <result property="name" column="spname"/>
    </resultMap>
    <select id="selectTreeByMaterial" resultMap="materialTreeDto">
        select m.type,
               m.id    mid,
               m.name  mname,
               s.id    sid,
               s.name  sname,
               s2.id   spid,
               s2.name spname,
               p.id    pid,
               p.name  pname
        from (select type, id, name from material where state = 1) m
                 left join (select id, name, material_id from standard where state = 1) s on m.id = s.material_id
                 left join (select id, name, standard_id from specifications where state = 1) s2
                           on s2.standard_id = s.id
                 left join (select id, name, specifications_id from product where state = 1) p
                           on s2.id = p.specifications_id
    </select>
    <select id="selectMcodeId" resultType="com.yuanchu.mom.pojo.Material">
        select id, code
        from mom_ocean.material
        where name = #{name}
    </select>
    <select id="selectIdByCoNa" resultType="java.util.Map">
        select m.id     '物料id',
               st.id    '规格id',
               st.name  '规格名称',
               sp.name  '型号名称'
        from mom_ocean.material m,
             mom_ocean.standard st,
             mom_ocean.specifications sp
        where m.id = material_id
          and material_id = standard_id
          and m.name = #{name}
          and code = #{code}
    </select>
</mapper>
standard-server/src/main/resources/mapper/OrdersMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.OrdersMapper">
    <select id="selectAllOrder" resultType="java.util.Map">
        select o.id,
        department,
        province,
        salesman,
        proname,
        m.name,
        specifications,
        o.type,
        unit,
        number,
        DATE_FORMAT(o.create_time, '%Y-%m-%d') ,
        DATE_FORMAT(delivery_time, '%Y-%m-%d'),
        o.state
        from mom_ocean.orders o,mom_ocean.material m
        <where>
            <if test="id != null">
                and o.id = #{id}
            </if>
            <if test="time != null">
                and o.create_time = #{time}
            </if>
            <if test="name != null">
                and m.name = #{name}
            </if>
            <if test="state != null">
                and o.state = #{state}
            </if>
            and o.code=m.code
        </where>
        order by o.create_time desc
    </select>
</mapper>
standard-server/src/main/resources/mapper/ProductMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.ProductMapper">
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Product">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="father" column="father" jdbcType="VARCHAR"/>
            <result property="unit" column="unit" jdbcType="VARCHAR"/>
            <result property="required" column="required" jdbcType="VARCHAR"/>
            <result property="internal" column="internal" jdbcType="VARCHAR"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="version" column="version" jdbcType="INTEGER"/>
            <result property="specificationsId" column="specifications_id" jdbcType="INTEGER"/>
    </resultMap>
    <resultMap id="selectTreeProduct" type="ProductDto">
        <id property="father" column="father" jdbcType="VARCHAR"/>
        <collection property="children" resultMap="productDto2ListMap"/>
    </resultMap>
    <resultMap id="productDto2ListMap" type="ProductDto2">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="unit" column="unit" jdbcType="VARCHAR"/>
        <result property="required" column="required" jdbcType="VARCHAR"/>
        <result property="internal" column="internal" jdbcType="VARCHAR"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
    </resultMap>
    <select id="selectTreeProduct" resultMap="selectTreeProduct">
        SELECT p.id, p.`name`, IFNULL(p.`father`,p.`name`) father, p.`unit`, p.`required`, p.`internal`
        FROM product p
        where p.specifications_id = #{specifications}
          <if test="project != null and project != ''">
              AND p.father like concat('%',#{project},'%')
          </if>
        and p.state = 1
    </select>
</mapper>
standard-server/src/main/resources/mapper/SpecificationsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.SpecificationsMapper">
    <resultMap id="BaseResultMap" type="java.util.Map">
        <id property="id" column="specificationsId" jdbcType="INTEGER"/>
        <result property="name" column="specificationsName" jdbcType="VARCHAR"/>
        <collection property="children" resultMap="BaseResultMapChildren" javaType="java.util.List"/>
    </resultMap>
    <resultMap id="BaseResultMapChildren" type="java.util.Map">
        <id property="id" column="modelId" jdbcType="INTEGER"/>
        <result property="name" column="modelName" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="selectSpecificationIdAndName" resultMap="BaseResultMap">
        SELECT s.`id` specificationsId, s.`name` specificationsName, f.id modelId, f.name modelName
        FROM standard s
                 LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1) f
                           ON s.`id` = f.`standard_id`
        WHERE s.`material_id` = #{materialId}
          AND s.`state` = 1
    </select>
    <select id="selectSpBySt" resultType="com.yuanchu.mom.pojo.Specifications">
        select name
        from mom_ocean.specifications
        where standard_id = #{id}
    </select>
</mapper>
standard-server/src/main/resources/mapper/StandardMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.StandardMapper">
    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Standard">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="version" column="version" jdbcType="INTEGER"/>
            <result property="material_id" column="material_id" jdbcType="INTEGER"/>
    </resultMap>
</mapper>
standard-server/src/main/resources/mapper/TechnologyMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.TechnologyMapper">
</mapper>
standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.yuanchu.mom;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class StandardServerApplicationTests {
    @Test
    void contextLoads() {
    }
}
system-run/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <artifactId>system-run</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>system-run</name>
    <description>system-run</description>
    <packaging>pom</packaging>
    <dependencies>
        <!--基础框架类-->
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>framework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>standard-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>inspect-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!--mybatis-plus代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <!-- framework: mybatis-plus代码生成需要一个模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>
</project>
system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
package com.yuanchu.mom;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// æ¼”示例子,执行 main æ–¹æ³•控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
    public static String database_url = "jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    public static String database_driver_name = "com.mysql.cj.jdbc.Driver";
    public static String database_username = "root";
    public static String database_password= "123456";
    public static String author = "江苏鵷雏网络科技有限公司";
    public static String model_name = "/inspect-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.mom"; // åŒ…路径
    public static Boolean Override = false; // æ˜¯å¦è¦†ç›–原来的文件?
    public static void main(String[] args) {
        // ä»£ç ç”Ÿæˆå™¨
        AutoGenerator mpg = new AutoGenerator();
        String projectPath = System.getProperty("user.dir");
        System.out.println(projectPath+"===================");
        GlobalConfig gc = new GlobalConfig() // å…¨å±€é…ç½®
                .setOutputDir(projectPath + model_name + "/src/main/java") // è¾“出路径
                .setAuthor(author) // ä½œè€…注释
                .setOpen(false) // æ˜¯å¦æ‰“å¼€
                .setSwagger2(true) //实体属性 Swagger2 æ³¨è§£
                .setServiceName("%sService") // è®¾ç½®serviceName的名称去大写I
                .setFileOverride(Override);// æ˜¯å¦è¦†ç›–已生成文件
        mpg.setGlobalConfig(gc);
        // æ•°æ®æºé…ç½® æ•°æ®åº“名 è´¦å·å¯†ç 
        DataSourceConfig dsc = new DataSourceConfig()
                .setUrl(database_url)
                .setDriverName(database_driver_name)
                .setUsername(database_username)
                .setPassword(database_password);
        mpg.setDataSource(dsc);
        // åŒ…配置
        PackageConfig pc = new PackageConfig()
                .setModuleName(null)
                .setParent(setParent)
                .setEntity("pojo");// åŒ…路径
        mpg.setPackageInfo(pc);
        // è‡ªå®šä¹‰é…ç½®
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // å¦‚果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // å¦‚果模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";
        // è‡ªå®šä¹‰è¾“出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // è‡ªå®šä¹‰é…ç½®ä¼šè¢«ä¼˜å…ˆè¾“出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // è‡ªå®šä¹‰è¾“出文件名 ï¼Œ å¦‚果你 Entity è®¾ç½®äº†å‰åŽç¼€ã€æ­¤å¤„注意 xml çš„名称会跟着发生变化!
                return projectPath + model_name + "/src/main/resources/mapper/"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        // é…ç½®æ¨¡æ¿
        TemplateConfig templateConfig = new TemplateConfig()
                .setXml(null);
        mpg.setTemplate(templateConfig);
        // ç­–略配置
        StrategyConfig strategy = new StrategyConfig()
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)
                .setRestControllerStyle(true)
                .setInclude(scanner("表名,多个空格分割").split(" "))
                .setControllerMappingHyphenStyle(true)
                .setTablePrefix("m_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        //如果不调用该方法、就会使用MyBatis-Plus默认的文件生成路径和包路径生成文件、但可以使用上面的PackageConfig做一些简单的配置
        mpg.execute();
    }
    /**
     * <p>
     * è¯»å–控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }
}
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.yuanchu.mom;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.yuanchu.mom.mapper")// æ‰«æMybatis中的mapper包
public class SystemRunApplication {
    public static void main(String[] args) {
        SpringApplication.run(SystemRunApplication.class, args);
    }
}
system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
package com.yuanchu.mom.backup;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
@EnableScheduling
@Slf4j
public class MysqlDataBackup {
    /**
     * æ•°æ®åº“版本是否为 8.0 + ï¼ˆfalse=否  true=是), mysql8+ éœ€è¦å‚æ•°  --column-statistics=0  ï¼Œ mysql8- ä¸éœ€è¦
     */
    Boolean isDbVersion8 = false;
    /**
     * å¤‡ä»½å‘½ä»¤
     * USERNAME   è´¦å·
     * PASSWORD   å¯†ç 
     * SERVERPATH æœåС噍IP/域名
     * DBNAME     æ•°æ®åº“名称
     * FILEPATH   å¤‡ä»½æ–‡ä»¶å­˜æ”¾åœ°å€+名称
     * è¯´æ˜Ž
     * cmdCompression ï¼š éœ€åŽ‹ç¼© ï¼ˆæœ¬åœ°æˆ–服务器需安装 mysqldump å‘½ä»¤(安装mysql自带患独立安装) +  gzip å‘½ä»¤(独立安装))
     * cmd ï¼š            ä¸åŽ‹ç¼© (本地或服务器需安装 mysqldump å‘½ä»¤(安装mysql自带患独立安装)
     * --column-statistics=0     mysql8 æ·»åŠ è¯¥å‚æ•°, éžmysql8 ä¸æ·»åŠ , å¦åˆ™å°†å‡ºé”™
     */
    String cmdMysql8 = "mysqldump --column-statistics=0  -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}"; //  > {FILEPATH}.sql
    String cmd = "mysqldump -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}";      //  > {FILEPATH}.sql
    /**
     * å¤‡ä»½ sql å­˜æ”¾ç›®å½•(相对路径, æ³¨æ„å¯èƒ½éœ€è¦åœ¨ MvcConfig é…ç½®è®¿é—®æƒé™)
     */
    @Value("${backup.path}")
    private String filePath;
    @Value("${spring.datasource.url}")
    private String dbUrl;
    @Value("${spring.datasource.username}")
    private String dbUserName;
    @Value("${spring.datasource.password}")
    private String dbPassWord;
    @Value("${backup.destiny}")
    private Integer destiny;
    @Value("${backup.mysqldump}")
    private String mysqldump;
    /**
     * æ¯å¤©æ™šä¸Š23点05秒执行 ã€  0 0 4 1/1 * ? ã€‘
     * æµ‹è¯• 20 ç§’一次【  0/20 * * * * ? ã€‘@Scheduled(cron = "5 * 23 * * ?")
     */
    @Scheduled(cron = "5 0 23 * * ?")
    private void configureTasks() {
        log.info("【备份数据库】--START");
        String dbUrl2 = dbUrl.replace("jdbc:mysql://", "");
        // èŽ·å–æ•°æ®åº“åç§°
        String dbName = dbUrl2.substring(dbUrl2.lastIndexOf("/") + 1, dbUrl2.indexOf("?"));
        // èŽ·å–æ•°æ®åº“åœ°å€
        String serverPath = dbUrl2.substring(0, dbUrl2.lastIndexOf(":"));
        // æ•°æ®åº“账号
        String username = dbUserName;
        // æ•°æ®åº“密码
        String password = dbPassWord;
        // å¤‡ä»½æ–‡ä»¶ç›®å½•+名称  å¤‡ä»½æ–‡ä»¶å­˜æ”¾ç›®å½•+名称(名称 = æ•°æ®åº“名+时间字符串.sql)
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        String format = simpleDateFormat.format(new Date());
        String timeStr = format
                .replaceAll("-", "_")
                .replaceAll(" ", "_")
                .replaceAll(":", "");
        timeStr = timeStr.substring(0, 15);
        String pathFileName = filePath + "/" + dbName + "_" + timeStr + ".sql";
        String newCmd = "";
        if (isDbVersion8) {
            newCmd = cmdMysql8;
        } else {
            newCmd = cmd;
        }
        // æ‰§è¡Œå‘½ä»¤
        newCmd = newCmd.replace("{USERNAME}", username)
                .replace("{PASSWORD}", password)
                .replace("{SERVERPATH}", serverPath)
                .replace("{DBNAME}", dbName)
                .replace("{FILEPATH}", pathFileName);
        PrintWriter printWriter = null;
        BufferedReader bufferedReader = null;
        try {
            // åˆ›å»ºå­˜æ”¾sql的文件
            existsFile(new File(pathFileName));
            printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(pathFileName), "utf8"));
            Process process = null;
            String property = System.getProperty("os.name");
            System.out.println(property);
            if (property.indexOf("Linux") != -1) {
                // linux
                process = Runtime.getRuntime().exec(new String[]{"bash", "-c", newCmd});
            } else {
                // æœ¬åœ°win
                String mysqldumpPath = "cmd /c " + mysqldump + "/" + newCmd;
                System.out.println(mysqldumpPath);
                process = Runtime.getRuntime().exec(mysqldumpPath);
            }
            InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
            bufferedReader = new BufferedReader(inputStreamReader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                printWriter.println(line);
            }
            // æ­¤æ¬¡ä¼šæ‰§è¡Œè¿‡é•¿æ—¶é—´,直到备份完成
            printWriter.flush();
            printWriter.close();
            //0 è¡¨ç¤ºçº¿ç¨‹æ­£å¸¸ç»ˆæ­¢ã€‚
            if (process.waitFor() == 0) {
                // çº¿ç¨‹æ­£å¸¸æ‰§è¡Œ
                log.info("【备份数据库】SUCCESS,SQL文件:{}", pathFileName);
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.info("【备份数据库】FAILURE");
        } finally {
            try {
                if (bufferedReader != null) {
                    bufferedReader.close();
                }
                if (printWriter != null) {
                    printWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        log.info("【备份数据库】--END");
    }
    /**
     * æ¯å¤©æ™šä¸Š23点0分10秒执行 ã€  0 0 4 1/1 * ? ã€‘
     * æµ‹è¯• 20 ç§’一次【  0/20 * * * * ? ã€‘
     */
    @Scheduled(cron = "6 0 23 * * ?")
    private void TimerDeleteFile(){
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("d");
        Integer currentDay = Integer.valueOf(sdf.format(date));
        File file = new File(filePath);
        File[] files = file.listFiles();
        if (files != null) {
            for(File f : files){
                if(f.isFile()){//若是文件,直接打印
                    String[] splitFile = f.getName().split("_");
                    Integer fileDay = Integer.valueOf(splitFile[splitFile.length - 2]);
                    Integer i = currentDay - fileDay;
                    if (i.equals(destiny)){
                        f.delete();
                        log.info("备份sql文件过多进行删除!");
                    }
                }
            }
        }
    }
    /**
     * åˆ¤æ–­æ–‡ä»¶æ˜¯å¦å­˜åœ¨ï¼Œä¸å­˜åœ¨åˆ›å»º
     */
    private static void existsFile(File file) {
        // åˆ¤æ–­æ–‡ä»¶è·¯å¾„是否存在,不存在新建
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
system-run/src/main/resources/application-dev.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
swagger:
  enabled: true
# æ—¥å¿—配置
logging:
  config: classpath:logback-spring.xml
  # æ—¥å¿—存储路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  file-location:
# æ•°æ®åº“备份路径
backup:
  # æ•°æ®åº“备份路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  path: E:/webapp/backup
  # æ•°æ®åº“备份天数
  destiny: 7
  # æ•°æ®åº“备份工具路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  mysqldump: E:\JavaCode\WMS\WMS_Admin\src\main\resources
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: E:/webapp/images
mybatis-plus:
  type-aliases-package: com.yuanchu.mom.pojo
  mapper-locations: classpath*:/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # å¼€å¯mybatis-plus日志
# æ•°æ®æºé…ç½®
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456
    druid:
      #   Druid数据源配置
      initialSize: 5 # åˆå§‹è¿žæŽ¥æ•°
      minIdle: 10 # æœ€å°è¿žæŽ¥æ± æ•°é‡
      maxActive: 20 # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxWait: 60000 # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      timeBetweenEvictionRunsMillis: 60000 # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      minEvictableIdleTimeMillis: 300000 # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000 # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      validationQuery: SELECT 1 FROM DUAL # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      testWhileIdle: true #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      testOnBorrow: false #配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
      testOnReturn: false #配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
      poolPreparedStatements: true #打开PsCache,并且指定每个连接上PSCache的大小
      maxPoolPreparedStatementPerConnectionSize: 20
      filters: stat,wall,log4j # é…ç½®ç›‘控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      useGlobalDataSourceStat: true #合并多个DruidDatasource的监控数据
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #通过connectProperties属性来打开mergesql功能罗慢sQL记录
  redis:
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 0
    # redis服务器地址(默认为localhost)
    host: localhost
    # redis端口(默认为6379)
    port: 6379
    # redis访问密码(默认为空)
    password: null
    # redis连接超时时间(单位毫秒)
    timeout: 10
    # redis连接池配置
    pool:
      # æœ€å¤§å¯ç”¨è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-active: 8
      # æœ€å¤§ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-idle: 8
      # æœ€å°ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º0,该值只有为正数才有用)
      min-idle: 0
      # ä»Žè¿žæŽ¥æ± ä¸­èŽ·å–è¿žæŽ¥æœ€å¤§ç­‰å¾…æ—¶é—´ï¼ˆé»˜è®¤ä¸º-1,单位为毫秒,负数表示无限)
      max-wait: -1
system-run/src/main/resources/application-prod.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
swagger:
  enabled: false
# æ—¥å¿—配置
logging:
  config: classpath:logback-spring.xml
  # æ—¥å¿—存储路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  file-location: /javaWork/Blog/log
# æ•°æ®åº“备份路径
backup:
  # æ•°æ®åº“备份路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  path: /javaWork/Blog/backup
  # æ•°æ®åº“备份天数+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  destiny: 7
  # æ•°æ®åº“备份工具路径+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
  mysqldump: /javaWork/Blog/conf
# ç…§ç‰‡è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: /javaWork/Blog/images
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl # å…³é—­mybatis-plus日志
# æ•°æ®æºé…ç½®
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog_crunchy?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: 123456
    druid:
      #   Druid数据源配置
      initialSize: 5 # åˆå§‹è¿žæŽ¥æ•°
      minIdle: 10 # æœ€å°è¿žæŽ¥æ± æ•°é‡
      maxActive: 20 # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxWait: 60000 # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      timeBetweenEvictionRunsMillis: 60000 # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      minEvictableIdleTimeMillis: 300000 # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000 # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      validationQuery: SELECT 1 FROM DUAL # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      testWhileIdle: true #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      testOnBorrow: false #配置从连接池获取连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
      testOnReturn: false #配置向连接池归还连接时,是否检查连接有效性,true每次都检查;false不检查。做了这个配置会降低性能。
      poolPreparedStatements: true #打开PsCache,并且指定每个连接上PSCache的大小
      maxPoolPreparedStatementPerConnectionSize: 20
      filters: stat,wall,log4j # é…ç½®ç›‘控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      useGlobalDataSourceStat: true #合并多个DruidDatasource的监控数据
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #通过connectProperties属性来打开mergesql功能罗慢sQL记录
redis:
  # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
  database: 0
  # redis服务器地址(默认为loaclhost)
  host: 127.0.0.1
  # redis端口(默认为6379)
  port: 6379
  # redis访问密码(默认为空)
  #  password:
  # redis连接超时时间(单位毫秒)
  timeout: 0
  # redis连接池配置
  pool:
    # æœ€å¤§å¯ç”¨è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
    max-active: 8
    # æœ€å¤§ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
    max-idle: 8
    # æœ€å°ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º0,该值只有为正数才有用)
    min-idle: 0
    # ä»Žè¿žæŽ¥æ± ä¸­èŽ·å–è¿žæŽ¥æœ€å¤§ç­‰å¾…æ—¶é—´ï¼ˆé»˜è®¤ä¸º-1,单位为毫秒,负数表示无限)
    max-wait: -1
system-run/src/main/resources/application.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
server:
  port: 8001
spring:
  profiles:
    active: dev
mybatis-plus:
  type-aliases-package: com.yuanchu.mom.pojo
  mapper-locations: classpath*:/mapper/*Mapper.xml
  global-config:
    banner: off # å…³é—­mybatis-plus启动图标
feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 3000
        loggerLevel: FULL
  httpclient:
    enabled: false # å…³é—­ httpclient
  okhttp:
    enabled: true # å¼€å¯ okhttp
system-run/src/main/resources/logback-spring.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- æ—¥å¿—级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,比如: å¦‚果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <springProperty scope="context" name="logs" source="logging.file-location" default="/var/log/myapp"/>
    <property name="log.path" value="${logs}"/>
    <!--0. æ—¥å¿—格式和颜色渲染 -->
    <!-- å½©è‰²æ—¥å¿—依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- å½©è‰²æ—¥å¿—格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <!--1. è¾“出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- è®¾ç½®å­—符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!--2. è¾“出到文档-->
    <!-- 2.1 level为 DEBUG æ—¥å¿—,时间滚动输出  -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- æ­£åœ¨è®°å½•的日志文档的路径及文档名 -->
        <file>${log.path}/debug.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- è®¾ç½®å­—符集 -->
        </encoder>
        <!-- æ—¥å¿—记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- æ—¥å¿—å½’æ¡£ -->
            <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- æ­¤æ—¥å¿—文档只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.2 level为 INFO æ—¥å¿—,时间滚动输出  -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- æ­£åœ¨è®°å½•的日志文档的路径及文档名 -->
        <file>${log.path}/info.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- æ—¥å¿—记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- æ¯å¤©æ—¥å¿—归档路径以及格式 -->
            <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- æ­¤æ—¥å¿—文档只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.3 level为 WARN æ—¥å¿—,时间滚动输出  -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- æ­£åœ¨è®°å½•的日志文档的路径及文档名 -->
        <file>${log.path}/warn.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- æ­¤å¤„设置字符集 -->
        </encoder>
        <!-- æ—¥å¿—记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- æ­¤æ—¥å¿—文档只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.4 level为 ERROR æ—¥å¿—,时间滚动输出  -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- æ­£åœ¨è®°å½•的日志文档的路径及文档名 -->
        <file>${log.path}/error.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- æ­¤å¤„设置字符集 -->
        </encoder>
        <!-- æ—¥å¿—记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- æ­¤æ—¥å¿—文档只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 2.5 æ‰€æœ‰ é™¤äº†DEBUG级别的其它高于DEBUG的 æ—¥å¿—,记录到一个文件  -->
    <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- æ­£åœ¨è®°å½•的日志文档的路径及文档名 -->
        <file>${log.path}/all.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- æ­¤å¤„设置字符集 -->
        </encoder>
        <!-- æ—¥å¿—记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文档保留天数-->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- æ­¤æ—¥å¿—文档记录除了DEBUG级别的其它高于DEBUG的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>
    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
        ä»¥åŠæŒ‡å®š<appender>。<logger>仅有一个name属性,
        ä¸€ä¸ªå¯é€‰çš„level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL å’Œ OFF,
              è¿˜æœ‰ä¸€ä¸ªç‰¹æ®Šå€¼INHERITED或者同义词NULL,代表强制执行上级的级别。
              å¦‚果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
    -->
    <!--
        ä½¿ç”¨mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
        ç¬¬ä¸€ç§æŠŠ<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
        ç¬¬äºŒç§å°±æ˜¯å•独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
        ã€logging.level.org.mybatis=debug logging.level.dao=debug】
     -->
    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL å’Œ OFF,
        ä¸èƒ½è®¾ç½®ä¸ºINHERITED或者同义词NULL。默认是DEBUG
        å¯ä»¥åŒ…含零个或多个元素,标识这个appender将会添加到这个logger。
    -->
    <!-- 4  æœ€ç»ˆçš„策略:
                 åŸºæœ¬ç­–ç•¥(root级) + æ ¹æ®profile在启动时, logger标签中定制化package日志级别(优先级高于上面的root级)-->
    <springProfile name="dev">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.yuanchu.limslaboratory.SysApplication" level="debug"/> <!-- å¼€å‘环境, æŒ‡å®šæŸåŒ…日志为debug级 -->
    </springProfile>
    <springProfile name="test">
        <root level="info">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- æµ‹è¯•环境, æŒ‡å®šæŸåŒ…日志为info级 -->
    </springProfile>
    <springProfile name="prod">
        <root level="info">
            <!-- ç”Ÿäº§çŽ¯å¢ƒæœ€å¥½ä¸é…ç½®console写文件 -->
            <appender-ref ref="DEBUG_FILE" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="WARN_FILE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="ALL_FILE" />
        </root>
        <logger name="com.yuanchu.limslaboratory" level="warn"/> <!-- ç”Ÿäº§çŽ¯å¢ƒ, æŒ‡å®šæŸåŒ…日志为warn级 -->
        <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- ç‰¹å®šæŸä¸ªç±»æ‰“印info日志, æ¯”如application启动成功后的提示语 -->
    </springProfile>
</configuration>
system-run/src/main/resources/mysqldump.exe
Binary files differ
system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.yuanchu.mom;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SystemRunApplicationTest {
    @Test
    void contextLoads() {
        int i = checkValues(">=2", "=0", "0");
        System.out.println(i);
    }
    public int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
        if (isStandardValueSatisfied && isControlValueSatisfied) {
            return 1;
        } else {
            return 0;
        }
    }
    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
        String substring = valueStr.substring(1,2);
        if (substring.equals("=")) {
            String operator = valueStr.substring(0, 2);
            Double standardValue = Double.parseDouble(valueStr.substring(2));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator){
                case ">=":
                    return detectionValue >= standardValue;
                case "<=":
                    return detectionValue <= standardValue;
                default:
                    return false;
            }
        }else {
            String operator = valueStr.substring(0,1);
            Double standardValue = Double.parseDouble(valueStr.substring(1));
            Double detectionValue = Double.parseDouble(detectionValueStr);
            switch (operator){
                case ">":
                    return detectionValue > standardValue;
                case "<":
                    return detectionValue < standardValue;
                case "=":
                    return detectionValue.equals(standardValue);
                default:
                    return false;
            }
        }
    }
}
user-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>mom</artifactId>
        <groupId>com.yuanchu.mom</groupId>
        <version>1.0.0</version>
    </parent>
    <artifactId>user-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>user-server</name>
    <description>user-server</description>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>com.yuanchu.mom</groupId>
            <artifactId>framework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.yuanchu.mom.controller;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.UserService;
import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
import com.yuanchu.mom.utils.RedisUtil;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RequestMapping("/user")
@RestController
@Api(tags = "用户模块")
public class UserController {
    @Autowired
    UserService userService;
    @Autowired
    private Jwt jwt;
    @ApiOperation(value = "登录")
    @PostMapping("/enter")
    public Result login(String account, String password) {
        User user = userService.selectUserByPwd(account, password);
        if (user==null) return Result.fail("登录失败");
        String jwtToken = jwt.createJwt(user.getName(), user.getId(), 60);
        String jwtReToken = jwt.createJwt(user.getName(), user.getId(), 24 * 60);
        RedisUtil.set("" + user.getId(), jwtToken, 60);
        RedisUtil.set(user.getId() + "Re", jwtReToken, 24 * 60);
        Map<String, String> map = new HashMap<>();
        map.put("token", jwtToken);
        map.put("reToken", jwtReToken);
        map.put("name", user.getName());
        return Result.success("登录成功", map);
    }
    @PostMapping("/refresh")
    public Result refresh(String reToken) throws Exception {
        Map<String, String> map = new Jwt().readJWT(reToken);
        Map<String, String> maps = JackSonUtil.unmarshal(map.get("data"), Map.class);
        if (map.get("state").equals("0")) {
            String redisToken = String.valueOf(RedisUtil.get(maps.get("id") + "Re"));
            if (!redisToken.equals(reToken)) {
                return Result.success("不存在的token", "1");
            } else if (redisToken.equals(reToken)) {
                int id = Integer.parseInt(maps.get("id").replaceAll("\"", ""));
                String name = maps.get("name").replaceAll("\"", "");
                String jwtToken = jwt.createJwt(name, id, 60);
                String jwtReToken = jwt.createJwt(name, id, 24 * 60);
                RedisUtil.set("" + id, jwtToken, 60);
                RedisUtil.set(id + "Re", jwtReToken, 24 * 60);
                Map<String, String> map1 = new HashMap<>();
                map1.put("token", jwtToken);
                map1.put("reToken", jwtReToken);
                return Result.success("刷新成功", map1);
            }
        }
        return Result.fail(map.get("info"));
    }
}
user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.yuanchu.mom.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.mom.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
}
user-server/src/main/java/com/yuanchu/mom/pojo/User.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.yuanchu.mom.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String account;
    private String password;
    private String name;
    private int state;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    private int version;
}
user-server/src/main/java/com/yuanchu/mom/service/UserService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.mom.service;
import com.yuanchu.mom.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserService {
    /*判断是否登录成功*/
    User selectUserByPwd(String account, String password);
    //根据用户id查询用户名
    String selectNameById(Integer id);
    /**
     * æ£€éªŒæ¨¡å—-->OMS管理-->成品检验-->新增(需要用户Id与名称)
     */
    List<Map<String, Object>> listUserIdAndName();
}
user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.yuanchu.mom.service.imp;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yuanchu.mom.mapper.UserMapper;
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
public class UserServiceImp implements UserService {
    @Resource
    UserMapper userMapper;
    @Override
    public User selectUserByPwd(String account, String password) {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("account", account).eq("password", DigestUtils.md5DigestAsHex(password.getBytes()));
        List<User> list = userMapper.selectList(wrapper);
        return list.size()>0?list.get(0):null;
    }
    //根据用户id查询用户名
    @Override
    public String selectNameById(Integer id) {
        User user = userMapper.selectById(id);
        return user.getName();
    }
    @Override
    public List<Map<String, Object>> listUserIdAndName() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(User::getId, User::getName);
        return userMapper.selectMaps(wrapper);
    }
}
user-server/src/main/resources/mapper/UserMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.mom.mapper.UserMapper">
</mapper>
user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.yuanchu.mom;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SystemRunApplicationTests {
    @Test
    void contextLoads() {
    }
}