Browse Source

初始化

master
review512jwy@163.com 3 months ago
commit
758cfbf0b9
  1. 16
      .gitignore
  2. 31
      document/cmd
  3. 140
      document/db/init.sql
  4. 30
      document/start.sh
  5. 17
      document/update.sh
  6. 15
      model2d3d-viewer-back-common/.gitignore
  7. 35
      model2d3d-viewer-back-common/pom.xml
  8. 18
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/Constants.java
  9. 36
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/exception/BusinessException.java
  10. 26
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/exception/MsgCodeException.java
  11. 26
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/PropertySourceYumFactory.java
  12. 54
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/MsgLanguageChange.java
  13. 25
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_CN.java
  14. 25
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_EN.java
  15. 25
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_JP.java
  16. 51
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/BaseResponse.java
  17. 66
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/PageResponse.java
  18. 28
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/ResponseCode.java
  19. 104
      model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/SimpleDataResponse.java
  20. 38
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_cn.yml
  21. 38
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml
  22. 38
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml
  23. 15
      model2d3d-viewer-back-controller/.gitignore
  24. 69
      model2d3d-viewer-back-controller/dockerfile
  25. 350
      model2d3d-viewer-back-controller/pom.xml
  26. 19
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/Model2d3dViewerApplication.java
  27. 65
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/ApiConfig.java
  28. 38
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/CorsConfigurer.java
  29. 78
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/CrosXssFilter.java
  30. 92
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/RequestWrapper.java
  31. 118
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/handler/GlobalExceptionHandler.java
  32. 73
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessApiInterceptor.java
  33. 10
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessRequired.java
  34. 96
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/AccountController.java
  35. 48
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CommonController.java
  36. 126
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CompanyController.java
  37. 37
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/HealthController.java
  38. 133
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/RoleController.java
  39. 138
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/UserController.java
  40. 59
      model2d3d-viewer-back-controller/src/main/resources/assembly.xml
  41. 98
      model2d3d-viewer-back-controller/src/main/resources/config/application.properties
  42. 53
      model2d3d-viewer-back-controller/src/main/resources/config/logback-boot.xml
  43. 3
      model2d3d-viewer-back-controller/src/main/resources/config/version.properties
  44. 15
      model2d3d-viewer-back-dao/.gitignore
  45. 91
      model2d3d-viewer-back-dao/pom.xml
  46. 152
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/MyBatisPlusGenerator.java
  47. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicCompanyMapper.java
  48. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicMenuMapper.java
  49. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleMapper.java
  50. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleMenuRelationMapper.java
  51. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleUserRelationMapper.java
  52. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicUserMapper.java
  53. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/LoginHistoryMapper.java
  54. 32
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicCompanyMapperExt.java
  55. 26
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleMapperExt.java
  56. 16
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleMenuRelationMapperExt.java
  57. 10
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleUserRelationMapperExt.java
  58. 27
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicUserMapperExt.java
  59. 10
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/LoginHistoryMapperExt.java
  60. 20
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicCompanyMapper.xml
  61. 23
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicMenuMapper.xml
  62. 23
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleMapper.xml
  63. 18
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleMenuRelationMapper.xml
  64. 18
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleUserRelationMapper.xml
  65. 32
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicUserMapper.xml
  66. 18
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/LoginHistoryMapper.xml
  67. 72
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicCompanyMapperExt.xml
  68. 68
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicRoleMapperExt.xml
  69. 24
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicRoleMenuRelationMapperExt.xml
  70. 96
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml
  71. 61
      model2d3d-viewer-back-dao/src/main/resources/templates/entity.java.ftl
  72. 15
      model2d3d-viewer-back-model/.gitignore
  73. 56
      model2d3d-viewer-back-model/pom.xml
  74. 25
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/BaseSearchNoCompanysParams.java
  75. 23
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/BaseSearchParams.java
  76. 23
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/account/CacheUserData.java
  77. 25
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/account/LoginParam.java
  78. 24
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/CompanySearchParams.java
  79. 18
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/DeleteCompanyParams.java
  80. 28
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/OptCompanyParams.java
  81. 20
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/DeleteRoleParam.java
  82. 38
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/OptRoleParam.java
  83. 21
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/RolePageSearchParam.java
  84. 20
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/DeleteUserParam.java
  85. 24
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/ModifyPassword.java
  86. 44
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/OptUserParam.java
  87. 20
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/PageSearchParam.java
  88. 23
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/ResetPassword.java
  89. 46
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicCompany.java
  90. 58
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicMenu.java
  91. 58
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRole.java
  92. 38
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRoleMenuRelation.java
  93. 38
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRoleUserRelation.java
  94. 94
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicUser.java
  95. 38
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/LoginHistory.java
  96. 27
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/TreeMenusDTO.java
  97. 25
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/company/CompanyPageDTO.java
  98. 27
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/role/RoleMenuDTO.java
  99. 25
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/role/RolePageDTO.java
  100. 15
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/user/UserInfoVO.java

16
.gitignore

@ -0,0 +1,16 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
/model2d3d-viewer-back-controller/tmp/
application-*.properties

31
document/cmd

@ -0,0 +1,31 @@
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag 67f91fc6cfbf 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest
docker push 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest
docker pull 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest
docker run -d -p 8887:20008 -v /home/data-center-business/back/application.properties:/home/data-center-business/config/application.properties 381659385655.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business
aws configure
docker run -e apiEnable=false -e datasourceDNS=tokyo-building-db.caetvgb7diak.ap-northeast-1.rds.amazonaws.com -e datasourceTimeZone=Asia/Tokyo -e datasourceUsername=techsor -e datasourcePassword=Abc#123456xyz -e loggingLevel=ERROR -e loggingPath=/home/data-center-business/log -e loggingAppender=SYSLOG -e redisHost=replication-group-tokyo-build.ncvpel.ng.0001.apne1.cache.amazonaws.com -e redisPassword= -e awsAccesskey=AKIA5OFH5OOZHM3U3KX4 -e awsSecretkey=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 -e awsBucket=tokyo-build-databucket-381659385655 -e ibatisLoggingLog=ERROR -e ibatisLoggingLogFactory=ERROR -d -p 20008:20008 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest
阿里云
docker tag e1fe6f58961e registry.cn-shanghai.aliyuncs.com/test-data-business/data-business-server:latest
docker push registry.cn-shanghai.aliyuncs.com/test-data-business/data-business-server:latest
docker pull registry.cn-shanghai.aliyuncs.com/test-data-business/data-business-server:latest
docker exec -it 3c77bb84d338 /bin/bash
docker run -d -p 20008:20015 -v /home/application.properties:/home/model2d3d-viewer-back/config/application.properties registry.cn-shanghai.aliyuncs.com/test-data-business/data-business-server
测试环境
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag ecee6b583d3c 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest
docker push 923770123186.dkr.ecr.ap-northeast-1.amazonaws.com/tokyo-build-business:latest

140
document/db/init.sql

@ -0,0 +1,140 @@
/*
SQLyog - MySQL GUI v8.14
MySQL - 8.0.28 : Database - model2d3d_viewer_back
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`model2d3d_viewer_back` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `model2d3d_viewer_back`;
/*Table structure for table `basic_company` */
DROP TABLE IF EXISTS `basic_company`;
CREATE TABLE `basic_company` (
`id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`parent_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`company_name` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
`create_time` bigint DEFAULT NULL,
`modify_time` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业表';
/*Data for the table `basic_company` */
insert into `basic_company`(`id`,`parent_id`,`company_name`,`flag`,`create_time`,`modify_time`) values ('1','-1','MiniSolution',0,1658978002231,1658978002231);
/*Table structure for table `basic_menu` */
DROP TABLE IF EXISTS `basic_menu`;
CREATE TABLE `basic_menu` (
`id` bigint NOT NULL AUTO_INCREMENT,
`parent_menu_id` bigint DEFAULT NULL,
`menu_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`menu_name_en` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`menu_name_jp` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`remark` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`menu_level` int DEFAULT '1' COMMENT '菜单级别',
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
`create_time` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table `basic_menu` */
/*Table structure for table `basic_role` */
DROP TABLE IF EXISTS `basic_role`;
CREATE TABLE `basic_role` (
`id` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`company_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`role_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
`creator_id` bigint DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`modifier_id` bigint DEFAULT NULL,
`modify_time` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Table structure for table `basic_role_menu_relation` */
DROP TABLE IF EXISTS `basic_role_menu_relation`;
CREATE TABLE `basic_role_menu_relation` (
`role_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`menu_id` bigint DEFAULT NULL,
`creator_id` bigint DEFAULT NULL,
`create_time` bigint DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Table structure for table `basic_role_user_relation` */
DROP TABLE IF EXISTS `basic_role_user_relation`;
CREATE TABLE `basic_role_user_relation` (
`user_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`role_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`creator_id` bigint DEFAULT NULL,
`create_time` bigint DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Table structure for table `basic_user` */
DROP TABLE IF EXISTS `basic_user`;
CREATE TABLE `basic_user` (
`id` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`company_id` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`shop_uuid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`login_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password_modify_time` bigint DEFAULT NULL,
`salt` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`mobile_number` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`last_login_time` bigint DEFAULT NULL,
`remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`flag` int NOT NULL DEFAULT '0' COMMENT '0-正常,1-删除',
`expire_time` bigint DEFAULT '4114487556000',
`create_time` bigint DEFAULT NULL,
`creator_id` bigint DEFAULT NULL,
`modify_time` bigint DEFAULT NULL,
`modifier_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table `basic_user` */
insert into `basic_user`(`id`,`company_id`,`shop_uuid`,`username`,`login_name`,`password`,`password_modify_time`,`salt`,`email`,`mobile_number`,`last_login_time`,`remark`,`flag`,`expire_time`,`create_time`,`creator_id`,`modify_time`,`modifier_id`) values ('1','1','1','admin_name','admin','nVg+buw0YAs=',1670312031273,'09bc3a7898','1053492832@qq.com',NULL,1743496632944,NULL,0,4114487556000,NULL,NULL,NULL,NULL);
/*Table structure for table `login_history` */
DROP TABLE IF EXISTS `login_history`;
CREATE TABLE `login_history` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`request_ip` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`login_time` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

30
document/start.sh

@ -0,0 +1,30 @@
#! /bin/sh
#启动方法
start(){
now=`date "+%Y%m%d%H%M%S"`
cd /home/model2d3d-viewer-back/back/server/run && nohup /usr/local/java/jdk1.8.0_221/bin/java -server -Xms256m -Xmx256m -jar /home/model2d3d-viewer-back/back/server/run/model2d3d-viewer-back-controller-0.0.1-SNAPSHOT.jar > /dev/null 2>boot.log &
}
#停止方法
stop(){
ps -ef|grep java|grep model2d3d-viewer-back-controller-0.0.1-SNAPSHOT.jar|awk '{print $2}'|while read pid
do
kill -9 $pid
done
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
printf 'Usage: %s {start|stop|restart}\n' "$prog"
exit 1
;;
esac

17
document/update.sh

@ -0,0 +1,17 @@
#!/bin/bash
projectName=model2d3d-viewer-back
backFilePath=/home/$projectName/back/server
basepath=$(cd `dirname $0`; pwd)
cd $basepath
echo "start for Web"
rm -rf $backFilePath/run/lib
unzip -o $backFilePath/$projectName.zip -d $backFilePath/run
\cp -r $backFilePath/run/$projectName/* $backFilePath/run/
rm -rf $backFilePath/run/$projectName
sh start.sh restart
exit

15
model2d3d-viewer-back-common/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

35
model2d3d-viewer-back-common/pom.xml

@ -0,0 +1,35 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>model2d3d-viewer-back-common</artifactId>
<name>model2d3d-viewer-back-common</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

18
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/Constants.java

@ -0,0 +1,18 @@
package com.model2d3d.viewer.back.common;
/**
* @author Mr.Jiang
* @time 2022年5月20日 下午2:01:41
*/
public class Constants {
//这个很重要,不要随便动
public static final String DES_SALT = "ci3b512jwy199511";
public static final String APP_NAME = "model2d3d_viewer_back:";
//用户ID,登录名,企业ID,token
public static final String ACCESS_TOKEN_FORMAT = APP_NAME + "RequestHeader:AccessToken:{0}:{1}:{2}:{3}";
public static final String CAPTCHA_VERIFICATION = APP_NAME + "CAPTCHA:VERIFICATION:";
}

36
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/exception/BusinessException.java

@ -0,0 +1,36 @@
package com.model2d3d.viewer.back.common.exception;
/**
* 业务异常处理
*
*/
public class BusinessException extends RuntimeException{
/**
* 实例化一个新的业务异常
*
* @param msg 异常信息
*/
public BusinessException(String msg) {
super(msg);
}
/**
* 实例化一个新的业务异常
*
* @param cause 异常原因
*/
public BusinessException(Throwable cause) {
super(cause);
}
/**
* 实例化一个新的业务异常
*
* @param msg 异常信息
* @param cause 异常原因
*/
public BusinessException(String msg, Throwable cause) {
super(msg, cause);
}
}

26
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/exception/MsgCodeException.java

@ -0,0 +1,26 @@
package com.model2d3d.viewer.back.common.exception;
/**
*
* @author jwy-style
*
*/
public class MsgCodeException extends RuntimeException{
private String message;
public MsgCodeException(String message) {
super(message);
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

26
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/PropertySourceYumFactory.java

@ -0,0 +1,26 @@
package com.model2d3d.viewer.back.common.language;
import java.io.IOException;
import java.util.List;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
/**
* @PropertySource 解析.yum文件需要指定该工厂
*/
public class PropertySourceYumFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
if (resource == null) {
return super.createPropertySource(name, resource);
}
List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
return sources.get(0);
}
}

54
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/MsgLanguageChange.java

@ -0,0 +1,54 @@
package com.model2d3d.viewer.back.common.language.msg;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MsgLanguageChange {
@Autowired
private Msg_EN msgEn;
@Autowired
private Msg_CN msgCn;
@Autowired
private Msg_JP msgJp;
/**
* 参数映射
* @param languaType
* @param code
* @return
*/
public String getParameterMapByCode(Integer languaType,String code){
String msg = null;
if(null != languaType){
if(languaType == 0){//中文
msg = MapUtils.getString(msgCn.getParameterMap(), code, code);
}else if(languaType == 1){//英文
msg = MapUtils.getString(msgEn.getParameterMap(), code, code);
}else if(languaType == 2){//日语
msg = MapUtils.getString(msgJp.getParameterMap(), code, code);
}
}else{
msg = MapUtils.getString(msgJp.getParameterMap(), code, code);
}
return msg;
}
public String getBadRequestMessage(Integer languaType,String code){
String msg = null;
if(null != languaType){
if(languaType == 0){//中文
msg = MapUtils.getString(msgCn.getArgumentNotValid(), code, code);
}else if(languaType == 1){//英文
msg = MapUtils.getString(msgEn.getArgumentNotValid(), code, code);
}else if(languaType == 2){//日语
msg = MapUtils.getString(msgJp.getArgumentNotValid(), code, code);
}
}else{
msg = MapUtils.getString(msgJp.getArgumentNotValid(), code, code);
}
return msg;
}
}

25
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_CN.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.model2d3d.viewer.back.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_cn.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgcn")
public class Msg_CN {
private Map<String,String> parameterMap;
private Map<String,String> argumentNotValid;
}

25
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_EN.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.model2d3d.viewer.back.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_en.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgen")
public class Msg_EN {
private Map<String,String> parameterMap;
private Map<String,String> argumentNotValid;
}

25
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/language/msg/Msg_JP.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.common.language.msg;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import com.model2d3d.viewer.back.common.language.PropertySourceYumFactory;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Component
@PropertySource(value = "classpath:/config/language/msg/msg_jp.yml", encoding = "UTF-8", factory = PropertySourceYumFactory.class)
@ConfigurationProperties(prefix = "msgjp")
public class Msg_JP {
private Map<String,String> parameterMap;
private Map<String,String> argumentNotValid;
}

51
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/BaseResponse.java

@ -0,0 +1,51 @@
package com.model2d3d.viewer.back.common.response;
import io.swagger.v3.oas.annotations.media.Schema;
/**
*
* @author jwy-style
*
*/
public class BaseResponse<T> {
/**
* 返回码
*/
@Schema(description ="状态码, 0或者200表示成功",example = "0")
private int code;
/**
* 提示信息
*/
@Schema(description ="简单的提示信息",example = "服务器错误")
private String msg = "success";
public BaseResponse() {
}
public BaseResponse(int code) {
this.code = code;
}
public BaseResponse(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

66
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/PageResponse.java

@ -0,0 +1,66 @@
package com.model2d3d.viewer.back.common.response;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.Map;
/**
*
* @author jwy-style
*
* @param <T>
*/
public class PageResponse<T> extends BaseResponse<T>{
/**
* 对象信息
*/
private T data;
private Map<String,String> errorMap;
public PageResponse() {
}
public PageResponse(int code) {
super(code);
}
public PageResponse(int code, String msg) {
super(code, msg);
}
public PageResponse(int code,String msg,Map<String,String> errorMap){
super(code, msg);
this.errorMap = errorMap;
}
public static PageResponse success(Object data){
PageResponse pageResponse = new PageResponse();
pageResponse.setData((IPage) data);
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
return pageResponse;
}
public Map<String, String> getErrorMap() {
return errorMap;
}
public void setErrorMap(Map<String, String> errorMap) {
this.errorMap = errorMap;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}

28
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/ResponseCode.java

@ -0,0 +1,28 @@
package com.model2d3d.viewer.back.common.response;
/**
*
* @author jwy-style
*
*/
public class ResponseCode {
/** 成功 */
public static final int OK = 0;
/**
* 请求已成功请求所希望的响应头或数据体将随此响应返回
*/
public static final int SUCCESS = 200;
//错误请求
public static final int BAD_REQUEST = 400;
//未授权
public static final int AUTHORIZE_FAILED = 401;
//服务器内部错误
public static final int SERVER_ERROR = 500;
public static final String SERVER_ERROR_MSG = "service error";
//查看msg提示信息
public static final int MSG_ERROR = 20001;
}

104
model2d3d-viewer-back-common/src/main/java/com/model2d3d/viewer/back/common/response/SimpleDataResponse.java

@ -0,0 +1,104 @@
package com.model2d3d.viewer.back.common.response;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Map;
/**
*
* @author jwy-style
*
* @param <T>
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SimpleDataResponse<T> extends BaseResponse<T> {
/**
* 单个对象
*/
@Schema(description ="返回的数据",example = "object")
private T data;
/**
* The parameters Error map.
*/
@Schema(description ="复杂的提示信息",example = "{\"name\":\"长度过长\",\"age\":\"年龄太大\",\"weight\":\"体重超标\"}")
private Map<String, String> errorMap;
public SimpleDataResponse() {
super();
}
public SimpleDataResponse(int code) {
super(code);
}
public SimpleDataResponse(int code, String msg) {
super(code, msg);
}
/**
* 响应结果携带错误Map
* @param code
* @param msg
* @param errorMap
*/
public SimpleDataResponse(int code, String msg, Map<String, String> errorMap) {
this(code, msg);
this.errorMap = errorMap;
}
/**
* 成功响应
* @return
*/
public static SimpleDataResponse success(){
return new SimpleDataResponse(ResponseCode.SUCCESS,"Success");
}
/**
* 多条数据成功响应
* @param rows
* @return
*/
public static SimpleDataResponse success(int rows){
return new SimpleDataResponse(ResponseCode.SUCCESS,"Success: "+rows);
}
/**
* 成功响应携带数据对象返回
* @param data
* @return
*/
public static SimpleDataResponse success(Object data){
SimpleDataResponse comm = success();
comm.setData(data);
return comm;
}
public static SimpleDataResponse fail(int code,String message){
return new SimpleDataResponse(code,message);
}
public static SimpleDataResponse fail(int code,String message,Object data){
SimpleDataResponse simpleDataResponse= new SimpleDataResponse(code,message);
simpleDataResponse.setData(data);
return simpleDataResponse;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Map<String, String> getErrorMap() {
return errorMap;
}
public void setErrorMap(Map<String, String> errorMap) {
this.errorMap = errorMap;
}
}

38
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_cn.yml

@ -0,0 +1,38 @@
msgcn:
argumentNotValid:
1000: 未通过参数校验
1001: 参数不能为空
1002: 长度不能超过{0}
1003: 长度无效
1004: 无效的邮箱
1005: 数值范围在{0}到{1}之间
1006: 必须大于或等于{0}
1007: 必须小于或等于{0}
1008: 无效的参数
parameterMap:
serviceError: 内部服务错误
tokenError: 接口鉴权失败
excelEmpty: 表格为空
lineNum: 第{0}行:
paramsFormatError: 参数格式错误
verifCodeExpired: 验证码过期
verifCodeError: 验证码错误
accountExpired: 该账号已过期
pwdError: 密码错误
userNotExist: 用户不存在
noOperationAuth: 无操作权限
excelBuildingLineDuplicate: 表格内存在相同的数据
userOrEmailNotExist: 用户名或邮箱不存在
companyNameHasExisted: 平台已存在此企业
taowaComapny: 不可使用下级企业作为父企业
hasSubsidiary: 删除的企业拥有下级企业,需先处理下级企业
roleNameExist: 角色名已存在
roleHasBinded: 角色已绑定用户,请先解绑再删除
loginNameOrEmailHasExisted: 用户名或邮箱已被使用
mailAddUserPwdSubject: 新建账号密码
mailAddUserPwdContent: 账号 <u>{0}</u> 的密码为:<u>{1}</u>, 请妥善保管<br/><br/>登陆网址:<u>{2}</u>
mailResetUserPwdSubject: 重置账号密码
pwdFormatError: 密码组成必须包含数字、英文字母、特殊符号(~!@#$%^&*)且大于等于12位
oldPwdError: 旧密码错误
newPwdSameOld: 新密码不得与旧密码相同
companyLimit: 最多可创建15个企业

38
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml

@ -0,0 +1,38 @@
msgen:
argumentNotValid:
1000: 未通过参数校验
1001: 参数不能为空
1002: 长度不能超过{0}
1003: 长度无效
1004: 无效的邮箱
1005: 数值范围在{0}到{1}之间
1006: 必须大于或等于{0}
1007: 必须小于或等于{0}
1008: 无效的参数
parameterMap:
serviceError: Internal service error.
tokenError: API authentication failed.
excelEmpty: The spreadsheet is empty.
lineNum: "Lines {0}:"
paramsFormatError: Parameter format error.
verifCodeExpired: Verification code expired.
verifCodeError: Verification code error.
accountExpired: The account has expired.
pwdError: Password error.
userNotExist: User does not exist.
noOperationAuth: No operation permission.
excelBuildingLineDuplicate: Duplicate data exists in the spreadsheet.
userOrEmailNotExist: 用户名或邮箱不存在
companyNameHasExisted: 平台已存在此企业
taowaComapny: 不可使用下级企业作为父企业
hasSubsidiary: 删除的企业拥有下级企业,需先处理下级企业
roleNameExist: 角色名已存在
roleHasBinded: 角色已绑定用户,请先解绑再删除
loginNameOrEmailHasExisted: 用户名或邮箱已被使用
mailAddUserPwdSubject: 新建账号密码
mailAddUserPwdContent: 账号 <u>{0}</u> 的密码为:<u>{1}</u>, 请妥善保管<br/><br/>登陆网址:<u>{2}</u>
mailResetUserPwdSubject: 重置账号密码
pwdFormatError: 密码组成必须包含数字、英文字母、特殊符号(~!@#$%^&*)且大于等于12位
oldPwdError: 旧密码错误
newPwdSameOld: 新密码不得与旧密码相同
companyLimit: 最多可创建15个企业

38
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml

@ -0,0 +1,38 @@
msgjp:
argumentNotValid:
1000: 未通过参数校验
1001: 参数不能为空
1002: 长度不能超过{0}
1003: 长度无效
1004: 无效的邮箱
1005: 数值范围在{0}到{1}之间
1006: 必须大于或等于{0}
1007: 必须小于或等于{0}
1008: 无效的参数
parameterMap:
serviceError: 内部サービスのエラー
tokenError: インターフェイスの認証に失敗
excelEmpty: フォームが空になっている
lineNum: 行{0}:
paramsFormatError: パラメータのフォーマットエラー
verifCodeExpired: 確認コード期限切れ
verifCodeError: 確認コードエラー
accountExpired: アカウントの有効期限が切れている
pwdError: パスワードエラー
userNotExist: ユーザーが存在しない
noOperationAuth: 操作権限なし
excelBuildingLineDuplicate: テーブルに同じデータがある
userOrEmailNotExist: ユーザーが存在しません
companyNameHasExisted: 会社はすでにプラットフォーム上に存在する
taowaComapny: 下位の会社を親会社として利用することは不可
hasSubsidiary: 削除対象の会社には下位の会社があるので、先に下位の会社を対応してください
roleNameExist: 役割名が既に登録済み
roleHasBinded: 役割はユーザーにバインドされている ので、削除する前にバインドを解除してください
loginNameOrEmailHasExisted: ユーザー名またはメールボックスはすでに使用されています
mailAddUserPwdSubject: 新規アカウント・パスワードの作成
mailAddUserPwdContent: アカウント <u>{0}</u> のパスワードは:<u>{1}</u>, お忘れにならないようにお願いします。<br/><br/>ログインWebアドレス:<u>{2}</u>
mailResetUserPwdSubject: アカウント・パスワードのリセット
pwdFormatError: パスワードの構成には、数字、アルファベット、特殊文字(~!@#$%^&*) で、12桁以上
oldPwdError: 旧パスワードエラー
newPwdSameOld: 注:旧パスワードと同じものを使用しないでください
companyLimit: 最大15のエンタープライズを作成可能

15
model2d3d-viewer-back-controller/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

69
model2d3d-viewer-back-controller/dockerfile

@ -0,0 +1,69 @@
#FROM openjdk:8-jre-alpine
#FROM amazon-corretto-8
#FROM amazoncorretto:11
# 使用Ubuntu 20.04 LTS作为基础镜像
FROM ubuntu:20.04
# 设置系统的默认编码方式为 UTF-8
ENV LANG=en_US.UTF-8
ENV LC_CTYPE=zh_CN.UTF-8
# 设置环境变量,避免交互式安装
ENV DEBIAN_FRONTEND=noninteractive
# 更新APT软件包索引并安装必要的软件包
RUN apt-get update && \
apt-get install -y \
curl \
unzip \
vim \
fontconfig \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装Terraform
RUN curl -fsSLk https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip -o /tmp/terraform.zip && \
unzip /tmp/terraform.zip -d /usr/local/bin/ && \
rm /tmp/terraform.zip
# 安装Amazon Corretto 11 JDK
RUN curl -fsSLk https://corretto.aws/downloads/resources/11.0.22.7.1/amazon-corretto-11.0.22.7.1-linux-x64.tar.gz -o /tmp/amazon-corretto-11.tar.gz && \
mkdir /usr/lib/jvm/ && \
tar -xzvf /tmp/amazon-corretto-11.tar.gz -C /usr/lib/jvm/ && \
rm /tmp/amazon-corretto-11.tar.gz
# 设置JAVA_HOME环境变量
ENV JAVA_HOME=/usr/lib/jvm/amazon-corretto-11.0.22.7.1-linux-x64
ENV PATH=$JAVA_HOME/bin:$PATH
ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
# 打印Terraform版本
RUN terraform --version
# 打印Java版本
RUN java -version
WORKDIR /home/data-center-admin
#EXPOSE 20008
# 设置时区
#RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ARG JAR_FILE
ARG LIB_DIR
ARG CONFIG_DIR
ARG AURORA_TERRAFORM
ARG JVM_OPTS
COPY ${JAR_FILE} app.jar
COPY ${LIB_DIR} lib
COPY ${CONFIG_DIR} config
COPY ${AURORA_TERRAFORM} aurora_terraform
#ENTRYPOINT ["java", "${JVM_OPTS}", "-jar","app.jar"]
ENTRYPOINT java ${JVM_OPTS} -jar app.jar

350
model2d3d-viewer-back-controller/pom.xml

@ -0,0 +1,350 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>model2d3d-viewer-back-controller</artifactId>
<name>model2d3d-viewer-back-controller</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aws.ecr.repository>tokyo-build-admin</aws.ecr.repository>
<aws.ecr.tag>latest</aws.ecr.tag>
<aws.ecr.region>ap-northeast-1</aws.ecr.region>
<aws.ecr.registry.test>923770123186.dkr.ecr.ap-northeast-1.amazonaws.com</aws.ecr.registry.test>
<aws.access.key.test>AKIA5OFH5OOZHM3U3KX4</aws.access.key.test>
<aws.secret.access.key.test>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</aws.secret.access.key.test>
<aws.ecr.registry.production>381659385655.dkr.ecr.ap-northeast-1.amazonaws.com</aws.ecr.registry.production>
<aws.access.key.production>AKIAVRXFMB43XVQ3GXAL</aws.access.key.production>
<aws.secret.access.key.production>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</aws.secret.access.key.production>
</properties>
<dependencies>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<!--排除掉下面这个,不然重复导入javax.annotation,amazon-corretto-11下报错java.lang.String javax.annotation.Resource.lookup()-->
<exclusions>
<exclusion>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<profiles>
<profile>
<id>only-package</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<!-- 项目的打包配置 -->
<plugins>
<!-- 自定义打zip包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>model2d3d-viewer-back</finalName>
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-package</id>
<build>
<!-- 先用dockerfile-maven-plugin构建镜像,然后maven-antrun-plugin执行推送aws ecr的命令 -->
<plugins>
<!-- dockerfile-maven-plugin构建镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<!-- <goal>push</goal>-->
</goals>
</execution>
</executions>
<configuration>
<repository>registry.cn-shanghai.aliyuncs.com/clouddog/datacenter-admin</repository>
<tag>${aws.ecr.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
<LIB_DIR>target/lib</LIB_DIR>
<CONFIG_DIR>target/config</CONFIG_DIR>
<AURORA_TERRAFORM>target/aurora_terraform</AURORA_TERRAFORM>
<JVM_OPTS>${java.jvm.opts}</JVM_OPTS>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-aliyun</id>
<build>
<!-- 先用dockerfile-maven-plugin构建镜像,然后maven-antrun-plugin执行推送aws ecr的命令 -->
<plugins>
<!-- dockerfile-maven-plugin构建镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<!-- <goal>push</goal>-->
</goals>
</execution>
</executions>
<configuration>
<repository>registry.cn-shanghai.aliyuncs.com/clouddog/datacenter-admin</repository>
<tag>${aws.ecr.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
<LIB_DIR>target/lib</LIB_DIR>
<CONFIG_DIR>target/config</CONFIG_DIR>
<AURORA_TERRAFORM>target/aurora_terraform</AURORA_TERRAFORM>
<JVM_OPTS>${java.jvm.opts}</JVM_OPTS>
</buildArgs>
</configuration>
</plugin>
<!-- maven-antrun-plugin执行推送aws ecr的命令 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!--放在package阶段后面执行-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Run AWS ECR login command using Ant tasks -->
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker login --username=409950420@qq.com registry.cn-shanghai.aliyuncs.com --password=Youqu48bnb1." />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker push registry.cn-shanghai.aliyuncs.com/clouddog/datacenter-admin:${aws.ecr.tag}" />
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-test</id>
<build>
<!-- 先用dockerfile-maven-plugin构建镜像,然后maven-antrun-plugin执行推送aws ecr的命令 -->
<plugins>
<!-- dockerfile-maven-plugin构建镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<!-- <goal>push</goal>-->
</goals>
</execution>
</executions>
<configuration>
<repository>${aws.ecr.registry.test}/${aws.ecr.repository}</repository>
<tag>${aws.ecr.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
<LIB_DIR>target/lib</LIB_DIR>
<CONFIG_DIR>target/config</CONFIG_DIR>
<AURORA_TERRAFORM>target/aurora_terraform</AURORA_TERRAFORM>
<JVM_OPTS>${java.jvm.opts}</JVM_OPTS>
</buildArgs>
</configuration>
</plugin>
<!-- maven-antrun-plugin执行推送aws ecr的命令 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!--放在package阶段后面执行-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Run AWS ECR login command using Ant tasks -->
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_access_key_id ${aws.access.key.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_secret_access_key ${aws.secret.access.key.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.region ${aws.ecr.region}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.output text" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws ecr get-login-password --region ${aws.ecr.region} | docker login --username AWS --password-stdin ${aws.ecr.registry.test}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker push ${aws.ecr.registry.test}/${aws.ecr.repository}:${aws.ecr.tag}" />
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-production</id>
<build>
<!-- 先用dockerfile-maven-plugin构建镜像,然后maven-antrun-plugin执行推送aws ecr的命令 -->
<plugins>
<!-- dockerfile-maven-plugin构建镜像-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<!-- <goal>push</goal>-->
</goals>
</execution>
</executions>
<configuration>
<repository>${aws.ecr.registry.production}/${aws.ecr.repository}</repository>
<tag>${aws.ecr.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
<LIB_DIR>target/lib</LIB_DIR>
<CONFIG_DIR>target/config</CONFIG_DIR>
<AURORA_TERRAFORM>target/aurora_terraform</AURORA_TERRAFORM>
<JVM_OPTS>${java.jvm.opts}</JVM_OPTS>
</buildArgs>
</configuration>
</plugin>
<!-- maven-antrun-plugin执行推送aws ecr的命令 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<!--放在package阶段后面执行-->
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<!-- Run AWS ECR login command using Ant tasks -->
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_access_key_id ${aws.access.key.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set aws_secret_access_key ${aws.secret.access.key.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.region ${aws.ecr.region}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws configure set default.output text" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="aws ecr get-login-password --region ${aws.ecr.region} | docker login --username AWS --password-stdin ${aws.ecr.registry.production}" />
</exec>
<exec executable="cmd" osfamily="windows">
<arg value="/c" />
<arg value="docker push ${aws.ecr.registry.production}/${aws.ecr.repository}:${aws.ecr.tag}" />
</exec>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

19
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/Model2d3dViewerApplication.java

@ -0,0 +1,19 @@
package com.model2d3d.viewer.back;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@ServletComponentScan
@EnableAsync
//@EnableScheduling
public class Model2d3dViewerApplication {
public static void main(String[] args) {
SpringApplication.run(Model2d3dViewerApplication.class, args);
}
}

65
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/ApiConfig.java

@ -0,0 +1,65 @@
package com.model2d3d.viewer.back.configurator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import jakarta.servlet.MultipartConfigElement;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mobile.device.DeviceHandlerMethodArgumentResolver;
import org.springframework.util.unit.DataSize;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.model2d3d.viewer.back.configurator.interceptor.AccessApiInterceptor;
import java.io.File;
import java.util.List;
@Configuration
public class ApiConfig implements WebMvcConfigurer {
@Bean
public AccessApiInterceptor accessApiInterceptor(){
return new AccessApiInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(accessApiInterceptor());
}
@Bean
public DeviceHandlerMethodArgumentResolver deviceHandlerMethodArgumentResolver() {
return new DeviceHandlerMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(deviceHandlerMethodArgumentResolver());
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
@Bean
public MultipartConfigElement multipartConfigElement() {
String path = System.getProperty("user.dir")+"/tmp";
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofMegabytes(20L));
File tmpFile = new File(path);
if (!tmpFile.exists()) {
tmpFile.mkdirs();
}
factory.setLocation(path);
return factory.createMultipartConfig();
}
}

38
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/CorsConfigurer.java

@ -0,0 +1,38 @@
package com.model2d3d.viewer.back.configurator;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
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;
/**
* 跨域配置
* @author jwy
* @time 2022-5-12 17:54:43
*/
@Configuration
public class CorsConfigurer {
@Value("${crosxss.origin:*}")
private String corsOrigin;
@Bean
public FilterRegistrationBean corsFilter() {
List<String> allowedOriginPatterns = new ArrayList<String>();
allowedOriginPatterns.add(corsOrigin);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOriginPatterns(allowedOriginPatterns);
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}

78
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/CrosXssFilter.java

@ -0,0 +1,78 @@
package com.model2d3d.viewer.back.configurator;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import java.util.UUID;
import org.jboss.logging.MDC;
@WebFilter
public class CrosXssFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(CrosXssFilter.class);
@Value("${crosxss.filter.disable:false}")
private boolean disable;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
MDC.put("processNo", UUID.randomUUID().toString().replace("-", ""));
request.setCharacterEncoding("utf-8");
// response.setContentType("text/html;charset=utf-8");
if (disable) {
chain.doFilter(request, response);
} else {
//跨域设置
if (response instanceof HttpServletResponse) {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//禁用浏览器缓存
httpServletResponse.setHeader("Cache-Control", "no-store");
//禁止被IFrame嵌套
httpServletResponse.setHeader("X-Frame-Options", "deny");
//安全性配置
httpServletResponse.setHeader("X-XSS-Protection", "1; mode=block");
httpServletResponse.setHeader("X-Content-Type-Options", "nosniff");
httpServletResponse.setHeader("Referrer-Policy", "origin");
}
ServletRequest requestWrapper = null;
if(request instanceof HttpServletRequest) {
requestWrapper = new RequestWrapper((HttpServletRequest) request);
}
if(requestWrapper == null) {
chain.doFilter(request, response);
} else {
chain.doFilter(requestWrapper, response);
}
}
} finally {
// 避免线程泄漏
MDC.clear();
}
}
@Override
public void destroy() {
}
}

92
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/RequestWrapper.java

@ -0,0 +1,92 @@
package com.model2d3d.viewer.back.configurator;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
public class RequestWrapper extends HttpServletRequestWrapper {
private static final Logger logger = LoggerFactory.getLogger(HttpServletRequestWrapper.class);
private final String body;
public RequestWrapper(HttpServletRequest request) {
super(request);
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
InputStream inputStream = null;
try {
inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
logger.error("RequestWrapper读取流错误", ex);
} finally {
if (inputStream != null) {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (bufferedReader != null) {
try {
bufferedReader.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
body = stringBuilder.toString();
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
ServletInputStream servletInputStream = new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() throws IOException {
return byteArrayInputStream.read();
}
};
return servletInputStream;
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
public String getBody() {
return this.body;
}
}

118
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/handler/GlobalExceptionHandler.java

@ -0,0 +1,118 @@
package com.model2d3d.viewer.back.configurator.handler;
import com.model2d3d.viewer.back.common.language.msg.MsgLanguageChange;
import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.lang.reflect.Field;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
@RestControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private MsgLanguageChange msgLanguageChange;
// 处理@NotNull等校验异常
@ResponseStatus(HttpStatus.BAD_REQUEST)// 这里jakarta.validation.constraints MethodArgumentNotValidException错误码是400(Bad Request)
@ExceptionHandler(MethodArgumentNotValidException.class)
public SimpleDataResponse handleValidationExceptions(
MethodArgumentNotValidException ex,
HttpServletRequest request) {
// 获取语言类型,默认为中文
String languageType = request.getHeader("LanguageType");
if (languageType == null || languageType.isEmpty()) {
languageType = "0"; // 默认中文
}
Map<String, String> errors = new HashMap<>();
Integer finalLanguageType = Integer.valueOf(languageType);
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
// 尝试获取字段的注解信息
try {
Field field = ex.getBindingResult().getTarget().getClass().getDeclaredField(fieldName);
Length lengthAnnotation = field.getAnnotation(Length.class);
Range rangeAnnotation = field.getAnnotation(Range.class);
Min minAnnotation = field.getAnnotation(Min.class);
Max maxAnnotation = field.getAnnotation(Max.class);
// 处理Length校验
if (lengthAnnotation != null && ("1002".equals(errorMessage) || errorMessage.contains("length"))) {// 处理长度校验错误
errorMessage = handleLengthValidationError(lengthAnnotation, finalLanguageType);
}
// 处理Range校验
else if (rangeAnnotation != null && ("1005".equals(errorMessage) || errorMessage.contains("Range"))) {
errorMessage = handleRangeValidationError(rangeAnnotation, finalLanguageType);
}
// 处理min校验
else if (minAnnotation != null && ("1006".equals(errorMessage) || errorMessage.contains("Min"))) {
errorMessage = handleMinValidationError(minAnnotation, finalLanguageType);
}
// 处理max校验
else if (maxAnnotation != null && ("1007".equals(errorMessage) || errorMessage.contains("Max"))) {
errorMessage = handleMaxValidationError(maxAnnotation, finalLanguageType);
}
// 处理其他校验错误
else {
errorMessage = translateErrorMessage(errorMessage, finalLanguageType);
}
} catch (Exception e) {
// 如果无法获取字段信息,使用默认翻译
errorMessage = translateErrorMessage(errorMessage, finalLanguageType);
}
errors.put(fieldName, errorMessage);
});
return new SimpleDataResponse(
ResponseCode.BAD_REQUEST,
msgLanguageChange.getBadRequestMessage(finalLanguageType, "1000"),
errors);
}
private String handleMaxValidationError(Max max, Integer languageType) {
long value = max.value();
return MessageFormat.format(msgLanguageChange.getBadRequestMessage(languageType, "1007"), value) ;
}
private String handleMinValidationError(Min min, Integer languageType) {
long value = min.value();
return MessageFormat.format(msgLanguageChange.getBadRequestMessage(languageType, "1006"), value) ;
}
private String handleRangeValidationError(Range rangeAnnotation, Integer finalLanguageType) {
long max = rangeAnnotation.max();
long min = rangeAnnotation.min();
return MessageFormat.format(msgLanguageChange.getBadRequestMessage(finalLanguageType, "1005"), min, max) ;
}
private String handleLengthValidationError(Length lengthAnnotation, Integer languageType) {
int max = lengthAnnotation.max();
// int min = lengthAnnotation.min();
return MessageFormat.format(msgLanguageChange.getBadRequestMessage(languageType, "1002"), max) ;
}
private String translateErrorMessage(String errorCode, Integer languageType) {
return msgLanguageChange.getBadRequestMessage(languageType, errorCode);
}
}

73
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessApiInterceptor.java

@ -0,0 +1,73 @@
package com.model2d3d.viewer.back.configurator.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.service.AccountService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
public class AccessApiInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(AccessApiInterceptor.class);
@Value("${user.login.keytimeout}")
private long keytimeout;
@Autowired
private AccountService accountService;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Class<?> tClass = handlerMethod.getBeanType();
AccessRequired annotation = tClass.getAnnotation(AccessRequired.class);
if (annotation == null) {
Method method = handlerMethod.getMethod();
annotation = method.getAnnotation(AccessRequired.class);
}
try {
if (annotation != null) {
String loginName = request.getHeader("LoginName");
String accessToken = request.getHeader("AccessToken");
String userId = request.getHeader("UserId");
String companyId = request.getHeader("CompanyId");
String languageType = request.getHeader("LanguageType");
response.setContentType("application/json;charset=utf-8");
String URI = request.getRequestURI();
logger.info("===============请求的URI :" + URI + " ===============");
JSONObject jsonObject = new JSONObject();
boolean result = accountService.accessAuth(loginName, companyId, userId, accessToken, languageType, jsonObject, keytimeout);
if(!result) {
response.getWriter().print(jsonObject.toString());
}
return result;
}
} catch (Exception e) {
logger.error("Error from AccessApiInterceptor!", e);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", ResponseCode.SERVER_ERROR);
jsonObject.put("msg", ResponseCode.SERVER_ERROR_MSG);
response.getWriter().print(jsonObject.toString());
return false;
}
// 没有注解通过拦截
return true;
}else if(handler instanceof ResourceHttpRequestHandler) {//资源文件不拦截
return true;
}
return false;
}
}

10
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessRequired.java

@ -0,0 +1,10 @@
package com.model2d3d.viewer.back.configurator.interceptor;
import java.lang.annotation.*;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AccessRequired {
}

96
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/AccountController.java

@ -0,0 +1,96 @@
package com.model2d3d.viewer.back.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mobile.device.Device;
import org.springframework.web.bind.annotation.*;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.configurator.interceptor.AccessRequired;
import com.model2d3d.viewer.back.dto.account.CacheUserData;
import com.model2d3d.viewer.back.dto.account.LoginParam;
import com.model2d3d.viewer.back.service.AccountService;
import com.model2d3d.viewer.back.service.captcha.CaptchaService;
import com.model2d3d.viewer.back.service.captcha.CaptchaVO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* 账户管理
* @author jwy-style
*
*/
@RestController
@RequestMapping("/account")
@Tag(name = "AccountController",description = "账号登录/登出、获取验证码接口")
public class AccountController {
@Autowired
private AccountService accountService;
@Autowired
private DefaultKaptcha producer;
@Autowired
private CaptchaService captchaService;
@Operation(summary = "用户登录")
@RequestMapping(value = "/login", method = RequestMethod.POST)
public SimpleDataResponse<CacheUserData> login(@RequestBody LoginParam loginParam,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType,
HttpServletRequest request,
HttpServletResponse response,
Device device) {
return accountService.login(loginParam,device,LanguageType,request,response);
}
/**
* 用户退出登录
*/
@AccessRequired
@Operation(summary = "用户退出")
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public SimpleDataResponse logout( @Parameter(name="LoginName",description="登录名",required=true) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true, schema = @Schema(defaultValue = "2")) @RequestHeader(required=true) Integer LanguageType) {
return accountService.logout(AccessToken,CompanyId,LoginName,UserId);
}
/**
* 获取验证码
* @return
*/
@Operation(summary = "获取登录验证码")
@RequestMapping(value = "/getCaptcha", method = RequestMethod.GET )
public SimpleDataResponse<CaptchaVO> getCaptcha() throws IOException {
// 生成文字验证码
String content = producer.createText();
// 生成图片验证码
ByteArrayOutputStream outputStream = null;
BufferedImage image = producer.createImage(content);
outputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", outputStream);
// 对字节数组Base64编码
// BASE64Encoder encoder = new BASE64Encoder();
String str = "data:image/jpeg;base64,";
String base64Img = str + Base64.encodeBase64String(outputStream.toByteArray()).replace("\n", "").replace("\r", "");
CaptchaVO captchaVO = captchaService.cacheCaptcha(content);
captchaVO.setBase64Img(base64Img);
return SimpleDataResponse.success(captchaVO);
}
}

48
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CommonController.java

@ -0,0 +1,48 @@
package com.model2d3d.viewer.back.controller;
import java.util.List;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.service.CommonService;
/**
*
* @author jwy-style
*
*/
//@Hidden
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
@RequestMapping("/common") //http请求路径映射
@Tag(name = "CommonController",description = "公共接口")
@SuppressWarnings("unchecked")
public class CommonController{
private static Logger logger = LoggerFactory.getLogger(CommonController.class);
@Autowired
private CommonService commonService;
@Hidden
@Operation(summary = "检测apikey是否有效")
@RequestMapping(value = "/checkApikey",method = RequestMethod.GET)
public SimpleDataResponse checkApikey(
@Parameter(name="apikey",description="apikey值",required=true) @RequestParam String apikey){
return commonService.checkApikey(apikey);
}
}

126
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/CompanyController.java

@ -0,0 +1,126 @@
package com.model2d3d.viewer.back.controller;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.model2d3d.viewer.back.common.response.PageResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.model2d3d.viewer.back.common.exception.BusinessException;
import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.configurator.interceptor.AccessRequired;
import com.model2d3d.viewer.back.dto.company.CompanySearchParams;
import com.model2d3d.viewer.back.dto.company.DeleteCompanyParams;
import com.model2d3d.viewer.back.dto.company.OptCompanyParams;
import com.model2d3d.viewer.back.vo.company.CompanyPageDTO;
import com.model2d3d.viewer.back.vo.TreeMenusDTO;
import com.model2d3d.viewer.back.service.CompanyService;
/**
*
* @author jwy-style
*
*/
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
//@AccessRequired //注解标识是否需要验证token
@RequestMapping("/company") //http请求路径映射
@Tag(name = "CompanyController",description = "企业管理的相关接口")
@SuppressWarnings("unchecked")
public class CompanyController {
private static Logger logger = LoggerFactory.getLogger(CompanyController.class);
@Autowired
private CompanyService companyService;
@AccessRequired
@Operation(summary = "添加企业")
@RequestMapping(value = "/add",method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody @Validated OptCompanyParams optCompanyParams,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return companyService.add(optCompanyParams, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "编辑企业")
@RequestMapping(value = "/edit",method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody @Validated OptCompanyParams optCompanyParams,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType) {
return companyService.edit(optCompanyParams, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "删除企业")
@RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody @Validated DeleteCompanyParams deleteCompanyParams,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return companyService.batchDelete(deleteCompanyParams, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "获取当前登录用户下的企业菜单树")
@RequestMapping(value = "/getCompanyTree",method = RequestMethod.GET)
public SimpleDataResponse<List<TreeMenusDTO>> getCompanyTree(
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return companyService.getCompanyTree(CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "获取企业列表")
@RequestMapping(value = "/getListPage",method = RequestMethod.GET)
public PageResponse<IPage<CompanyPageDTO>> getListPage(
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
// @Parameter(name="LoginCompanyId",description="登录用户的企业ID",required=false,schema = @Schema(defaultValue = "1") @RequestHeader(required=false) Long LoginCompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType,
@Parameter(name="UTCOffset",description="格林威治时间与本地时间的差值,单位是分钟,比如东八区是 -480",required=true,schema = @Schema(defaultValue = "-480")) @RequestHeader(required=true) Integer UTCOffset,
CompanySearchParams pageSearchParam
) throws BusinessException {
pageSearchParam.setUserId(UserId);
PageResponse<IPage<CompanyPageDTO>> pageResponse = new PageResponse<IPage<CompanyPageDTO>>();
try{
pageResponse.setData(companyService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType, UTCOffset));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
}catch (Exception e){
logger.error("查询列表报错",e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg(ResponseCode.SERVER_ERROR_MSG);
}
return pageResponse;
}
}

37
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/HealthController.java

@ -0,0 +1,37 @@
package com.model2d3d.viewer.back.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;
@RestController
@Tag(name = "HealthController",description = "健康检测接口")
public class HealthController {
@GetMapping("/healthcheck")
public String health(){
return "ok";
}
@GetMapping("/version")
public String getVersion() throws IOException {
Properties properties = new Properties();
Reader in = new InputStreamReader(this.getClass().getResourceAsStream("/config/version.properties"),"utf-8");
BufferedReader bufferedReader = new BufferedReader(in);
properties.load(bufferedReader);
String version=properties.getProperty("project.latest.version");
String content = properties.getProperty(version);
JSONObject jsonObject = new JSONObject();
jsonObject.put("version", version);
jsonObject.put("content", content);
return jsonObject.toString();
}
}

133
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/RoleController.java

@ -0,0 +1,133 @@
package com.model2d3d.viewer.back.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.model2d3d.viewer.back.common.exception.BusinessException;
import com.model2d3d.viewer.back.common.response.PageResponse;
import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.configurator.interceptor.AccessRequired;
import com.model2d3d.viewer.back.dto.role.DeleteRoleParam;
import com.model2d3d.viewer.back.dto.role.OptRoleParam;
import com.model2d3d.viewer.back.dto.role.RolePageSearchParam;
import com.model2d3d.viewer.back.vo.TreeMenusDTO;
import com.model2d3d.viewer.back.vo.role.RolePageDTO;
import com.model2d3d.viewer.back.service.RoleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* @author jwy-style
*
*/
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
@AccessRequired //注解标识是否需要验证token
@RequestMapping("/role") //http请求路径映射
@Tag(name = "RoleController",description = "角色权限的相关接口")
@SuppressWarnings("unchecked")
public class RoleController {
private static Logger logger = LoggerFactory.getLogger(RoleController.class);
@Autowired
private RoleService roleService;
@Operation(summary = "添加角色")
@RequestMapping(value = "/add",method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody @Validated OptRoleParam optRoleParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return roleService.add(optRoleParam, CompanyId, UserId, LanguageType);
}
@Operation(summary = "编辑角色")
@RequestMapping(value = "/edit",method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody @Validated OptRoleParam optRoleParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return roleService.edit(optRoleParam, CompanyId, UserId, LanguageType);
}
@Operation(summary = "删除角色")
@RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody @Validated DeleteRoleParam deleteRoleParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return roleService.batchDelete(deleteRoleParam, CompanyId, UserId, LanguageType);
}
@Operation(summary = "获取角色列表")
@RequestMapping(value = "/getListPage",method = RequestMethod.GET)
public PageResponse<IPage<RolePageDTO>> getListPage(
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType,
RolePageSearchParam pageSearchParam
) throws BusinessException {
pageSearchParam.setUserId(UserId);
// pageSearchParam.setCompanyId(CompanyId);
PageResponse<IPage<RolePageDTO>> pageResponse = new PageResponse<IPage<RolePageDTO>>();
try{
pageResponse.setData(roleService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
}catch (Exception e){
logger.error("查询列表报错",e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg(ResponseCode.SERVER_ERROR_MSG);
}
return pageResponse;
}
@Operation(summary = "获取当前登录用户拥有的权限菜单树")
@RequestMapping(value = "/getOwnMenuIds",method = RequestMethod.GET)
public SimpleDataResponse<List<TreeMenusDTO>> getOwnMenuIds(
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getOwnMenuIds(CompanyId, UserId, LanguageType);
}
@Operation(summary = "获取对应角色拥有的权限菜单ID")
@RequestMapping(value = "/getMenuIdsByRoleId",method = RequestMethod.GET)
public SimpleDataResponse<String> getMenuIdsByRoleId(
@Parameter(name="roleId",description="角色ID",required=true, schema = @Schema(defaultValue = "28")) @RequestParam Long roleId,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return roleService.getMenuIdsByRoleId(roleId, CompanyId, UserId, LanguageType);
}
}

138
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/UserController.java

@ -0,0 +1,138 @@
package com.model2d3d.viewer.back.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.model2d3d.viewer.back.common.exception.BusinessException;
import com.model2d3d.viewer.back.common.response.PageResponse;
import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.configurator.interceptor.AccessRequired;
import com.model2d3d.viewer.back.dto.user.DeleteUserParam;
import com.model2d3d.viewer.back.dto.user.ModifyPassword;
import com.model2d3d.viewer.back.dto.user.OptUserParam;
import com.model2d3d.viewer.back.dto.user.PageSearchParam;
import com.model2d3d.viewer.back.dto.user.ResetPassword;
import com.model2d3d.viewer.back.service.UserService;
import com.model2d3d.viewer.back.vo.user.UserPageDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
* @author jwy-style
*
*/
@RestController//代表返回的是json格式的数据,这个注解是Spring4之后新加的注解
//@AccessRequired //注解标识是否需要验证token
@RequestMapping("/user") //http请求路径映射
@Tag(name = "UserController",description = "用户管理的相关接口")
@SuppressWarnings("unchecked")
public class UserController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
@AccessRequired
@Operation(summary = "添加用户")
@RequestMapping(value = "/add",method = RequestMethod.POST)
public SimpleDataResponse add(
@RequestBody @Validated OptUserParam optUserParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return userService.add(optUserParam, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "编辑用户")
@RequestMapping(value = "/edit",method = RequestMethod.POST)
public SimpleDataResponse edit(
@RequestBody @Validated OptUserParam optUserParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return userService.edit(optUserParam, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "删除用户")
@RequestMapping(value = "/batchDelete",method = RequestMethod.POST)
public SimpleDataResponse batchDelete(
@RequestBody @Validated DeleteUserParam deleteUserParam,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return userService.batchDelete(deleteUserParam, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "重置密码")
@RequestMapping(value = "/batchResetPassword",method = RequestMethod.POST)
public SimpleDataResponse batchResetPassword(
@RequestBody @Validated ResetPassword resetPassword,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType){
return userService.batchResetPassword(resetPassword, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "修改密码")
@RequestMapping(value = "/modifyPassword",method = RequestMethod.POST)
public SimpleDataResponse modifyPassword(
@RequestBody @Validated ModifyPassword modifyPassword,
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType
) {
return userService.modifyPassword(modifyPassword, CompanyId, UserId, LanguageType);
}
@AccessRequired
@Operation(summary = "获取用户列表")
@RequestMapping(value = "/getListPage",method = RequestMethod.GET)
public PageResponse<IPage<UserPageDTO>> getListPage(
@Parameter(name="LoginName",description="登录名",required=true,schema = @Schema(defaultValue = "admin")) @RequestHeader(required=true) String LoginName,
@Parameter(name="AccessToken",description="鉴权token",required=true) @RequestHeader(required=true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) Long UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=false) String CompanyId,
@Parameter(name="LanguageType",description="语言类型 0:中文 1:英文 2:日文",required=true,schema = @Schema(defaultValue = "0")) @RequestHeader(required=true) Integer LanguageType,
PageSearchParam pageSearchParam
) throws BusinessException {
pageSearchParam.setUserId(UserId);
// pageSearchParam.setCompanyId(CompanyId);
PageResponse<IPage<UserPageDTO>> pageResponse = new PageResponse<IPage<UserPageDTO>>();
try{
pageResponse.setData(userService.getListPage(pageSearchParam, CompanyId, UserId, LanguageType));
pageResponse.setCode(ResponseCode.SUCCESS);
pageResponse.setMsg("success");
}catch (Exception e){
logger.error("查询列表报错",e);
pageResponse.setCode(ResponseCode.SERVER_ERROR);
pageResponse.setMsg(ResponseCode.SERVER_ERROR_MSG);
}
return pageResponse;
}
}

59
model2d3d-viewer-back-controller/src/main/resources/assembly.xml

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<!-- 最终打包文件的后缀,格式为 ${fileName}-bin -->
<id>model2d3d-viewer-back</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<!-- 文件配置 -->
<fileSets>
<!-- 把项目自己编译出来根目录下的jar文件,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的jar文件夹下的jar文件,去除第三方jar,打包进zip文件的根目录 -->
<fileSet>
<directory>${project.build.directory}/jar</directory>
<outputDirectory>/</outputDirectory>
<excludes>
<exclude>lib/*.jar</exclude>
</excludes>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把项目自己编译出来的lib文件夹下的jar文件,打包进zip文件的lib目录 -->
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<!-- 把编译出来的config文件夹,去除application.properties,打包进zip文件的config目录 -->
<fileSet>
<directory>${project.build.directory}/config</directory>
<outputDirectory>/config</outputDirectory>
<excludes>
<exclude>application.properties</exclude>
</excludes>
</fileSet>
<!-- 把编译出来的sql文件夹,打包进zip文件的sql目录 -->
<fileSet>
<directory>${project.build.directory}/sql</directory>
<outputDirectory>/sql</outputDirectory>
</fileSet>
</fileSets>
</assembly>

98
model2d3d-viewer-back-controller/src/main/resources/config/application.properties

@ -0,0 +1,98 @@
server.port=${serverPort}
api.enable=${apiEnable}
spring.mvc.pathmatch.matching-strategy= ANT_PATH_MATCHER
#mybatis.mapperLocations=classpath:mappers/**/*.xml
# MyBatis-Plus 配置
mybatis-plus.mapper-locations=classpath:mappers/**/*.xml
# MyBatis 原生配置
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.cache-enabled=false
mybatis-plus.configuration.lazy-loading-enabled=false
mybatis-plus.configuration.multiple-result-sets-enabled=false
# MyBatis-Plus 全局配置
mybatis-plus.global-config.banner=false
mybatis-plus.global-config.enable-sql-runner=false
# 数据库相关配置
mybatis-plus.global-config.db-config.table-underline=true
spring.datasource.name=model2d3d_viewer_back
spring.datasource.url=jdbc:mysql://${datasourceDNS}/model2d3d_viewer_back?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=${datasourceTimeZone}
spring.datasource.username=${datasourceUsername}
spring.datasource.password=${datasourcePassword}
#使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#配置log日志
logging.config=classpath:config/logback-boot.xml
logging_level=${loggingLevel}
logging_path=${loggingPath}
#部署时使用SYSLOG
logging_appender=${loggingAppender}
logging_maxHistory=${loggingMaxHistory:7}
logging_maxFileSize=100MB
mybatis_log_level=${mybatisLogLevel}
user.login.keytimeout=360000
#集群模式cluster
spring.redis.cluster.nodes=192.168.0.30:7000,192.168.0.30:7001
#跨集群执行命令时要遵循的最大重定向数量
spring.redis.cluster.max-redirects=3
#哨兵模式sentinel
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.0.30:16379,192.168.0.30:16379
#单机模式standalone
spring.redis.host=${redisHost}
spring.redis.port=6379
spring.redis.password=${redisPassword}
spring.redis.timeout=5000
#Redis数据库索引(默认为0)
spring.redis.database=15
#配置启动模式cluster、sentinel、standalone
spring.redis.mode=standalone
# Lettuce
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=100
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# 关闭超时时间
spring.redis.lettuce.shutdown-timeout=100
#邮件发送信息
mail.smtp.host=email-smtp.ap-northeast-1.amazonaws.com
mail.smtp.port=465
mail.smtp.auth=true
mail.smtp.ssl=true
mail.sender.username=AKIAVRXFMB43Z4Q6WGZN
mail.sender.password_encrypted=true
mail.sender.password=a/52R0rao7ksRMvl1j17fVEmPCw7gC9OreHDqWOE+S7sgmoQT0YgoLRJqOlJqX7e
mail.sender.sendername=datacenter-info
mail.sender.from=alert@ttkdatatechbuild.com
#邮件通知服务开关
mail.send.switch=true
Spring.mvc.hiddenmethod.filter.enabled=true
#单个文件上传发大小
spring.servlet.multipart.max-file-size=20MB
#多个文件上传的共大小不得超过100M
spring.servlet.multipart.max-request-size=100MB
server.servlet.context-path=/api
web.login.url=${webLoginUrl}
springdoc.swagger-ui.doc-expansion=none
springdoc.swagger-ui.operations-sorter=alpha
springdoc.swagger-ui.tags-sorter=alpha

53
model2d3d-viewer-back-controller/src/main/resources/config/logback-boot.xml

@ -0,0 +1,53 @@
<configuration>
<springProperty scop="context" name="logging_level" source="logging_level" defaultValue="debug"/>
<springProperty scop="context" name="logging_path" source="logging_path"/>
<springProperty scop="context" name="logging_appender" source="logging_appender"/>
<springProperty scop="context" name="logging_maxHistory" source="logging_maxHistory"/>
<springProperty scop="context" name="logging_maxFileSize" source="logging_maxFileSize"/>
<springProperty scop="context" name="mybatis_log_level" source="mybatis_log_level"/>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="CONSOLELOG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %m%n</pattern>
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %c (%file:%line\)- %m%n</pattern> -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<appender name="SYSLOG"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logging_path}/spring.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/spring.2019-05-27.0.log -->
<fileNamePattern>${logging_path}/spring.%d.%i.gz</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为15天 -->
<maxHistory>${logging_maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB-->
<maxFileSize>${logging_maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c %m%n
</pattern>
<!-- 记录日志的编码 -->
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- project default level -->
<logger name="com.model2d3d.viewer.back" level="${logging_level}"/>
<logger name="com.model2d3d.viewer.back.dao" level="${mybatis_log_level}"/>
<!-- 控制台输出日志级别 -->
<root level="INFO">
<appender-ref ref="${logging_appender}" />
</root>
</configuration>

3
model2d3d-viewer-back-controller/src/main/resources/config/version.properties

@ -0,0 +1,3 @@
project.latest.version=v0.0.1.20240228
v0.0.1.20240228=1.初始版本

15
model2d3d-viewer-back-dao/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

91
model2d3d-viewer-back-dao/pom.xml

@ -0,0 +1,91 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>model2d3d-viewer-back-dao</artifactId>
<name>model2d3d-viewer-back-dao</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.34</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.11</version>
<exclusions>
<!-- 版本匹配问题,防止出现Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-jsqlparser -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>3.5.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper-spring-boot-starter</artifactId>-->
<!-- <version>1.4.7</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

152
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/MyBatisPlusGenerator.java

@ -0,0 +1,152 @@
package com.model2d3d.viewer.back.dao;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.GeneratorBuilder;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyBatisPlusGenerator {
public static void main(String[] args) {
// 1. 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(
"jdbc:mysql://rm-bp11k2zm2fr7864428o.mysql.rds.aliyuncs.com:3306/model2d3d_viewer_back?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai",
"zhc",
"Youqu48bnb1")
.dbQuery(new MySqlQuery())
.schema("model2d3d_viewer_back")
.build();
// 2. 全局配置(这里设置公共配置,实际路径在pathInfo中单独指定)
GlobalConfig globalConfig = GeneratorBuilder.globalConfigBuilder()
.author("jwy")
.disableOpenDir()
.enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("")
.build();
// 3. 包配置(包名设置)
PackageConfig packageConfig = GeneratorBuilder.packageConfigBuilder()
.parent("com.model2d3d.viewer.back")
.entity("model") // 实体类包名
.mapper("dao.auto") // Mapper接口包名
.service("service") // Service接口包名
.serviceImpl("service.impl") // Service实现类包名
.controller("controller") // Controller包名
.xml("mappers.auto") // XML文件包名
.pathInfo(getPathInfo()) // 各层级的实际输出路径
.build();
// 4
// 自增主键的表
List<String> autoIncrementTables = Arrays.asList(
"login_history",
"basic_menu"
);
// uuid算法主键的表
List<String> assignIdTables = Arrays.asList(
"basic_role",
"basic_company",
"basic_user"
);
// 没有主键的表
List<String> noIdTables = Arrays.asList(
"basic_role_menu_relation",
"basic_role_user_relation"
);
// 5. 为不同类型表创建不同的策略配置
generateForTables(dataSourceConfig, globalConfig, packageConfig,
autoIncrementTables, IdType.AUTO);
generateForTables(dataSourceConfig, globalConfig, packageConfig,
assignIdTables, IdType.ASSIGN_UUID);
generateForTables(dataSourceConfig, globalConfig, packageConfig,
noIdTables, IdType.NONE);
}
private static void generateForTables(DataSourceConfig dataSourceConfig,
GlobalConfig globalConfig,
PackageConfig packageConfig,
List<String> tables,
IdType idType) {
StrategyConfig strategyConfig = GeneratorBuilder.strategyConfigBuilder()
.addInclude(tables)
.entityBuilder()
.enableFileOverride() // 实体类覆盖
.enableLombok()
.enableTableFieldAnnotation()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
.enableChainModel()
.enableRemoveIsPrefix()
.logicDeleteColumnName("deleted")
.idType(idType)
.mapperBuilder()
.enableFileOverride() // Mapper接口覆盖
.enableBaseResultMap()
.enableBaseColumnList()
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper")
.controllerBuilder()
.enableRestStyle()
.disable()
.serviceBuilder()
.formatServiceFileName("I%sService")
.formatServiceImplFileName("%sServiceImpl")
.disable()
.build();
// 5. 模板配置
TemplateConfig templateConfig = GeneratorBuilder.templateConfigBuilder()
.entity("/templates/entity.java") //使用自定义模板
.build();
// 6. 创建生成器并执行
new AutoGenerator(dataSourceConfig)
.global(globalConfig)
.packageInfo(packageConfig)
.strategy(strategyConfig)
.template(templateConfig)
.execute(new FreemarkerTemplateEngine());
}
// 自定义各层级的实际输出路径
private static Map<OutputFile, String> getPathInfo() {
String projectRoot = System.getProperty("user.dir");
Map<OutputFile, String> pathInfo = new HashMap<>();
// 实体类输出到 model 模块
pathInfo.put(OutputFile.entity, projectRoot + "/model2d3d-viewer-back-model/src/main/java/com/pet/map/back/model");
// Mapper接口输出到 dao 模块
pathInfo.put(OutputFile.mapper, projectRoot + "/model2d3d-viewer-back-dao/src/main/java/com/pet/map/back/dao/auto");
// XML文件输出到 resources 目录
pathInfo.put(OutputFile.xml, projectRoot + "/model2d3d-viewer-back-dao/src/main/resources/mappers/auto");
// Service和ServiceImpl输出到 service 模块
pathInfo.put(OutputFile.service, projectRoot + "/model2d3d-viewer-back-service/src/main/java/com/pet/map/back/service");
pathInfo.put(OutputFile.serviceImpl, projectRoot + "/model2d3d-viewer-back-service/src/main/java/com/pet/map/back/service/impl");
// Controller输出到 controller 模块
pathInfo.put(OutputFile.controller, projectRoot + "/model2d3d-viewer-back-controller/src/main/java/com/pet/map/back/controller");
return pathInfo;
}
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicCompanyMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicCompany;
/**
* <p>
* 企业表 Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicCompanyMapper extends BaseMapper<BasicCompany> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicMenuMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicMenu;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicMenuMapper extends BaseMapper<BasicMenu> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicRole;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicRoleMapper extends BaseMapper<BasicRole> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleMenuRelationMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicRoleMenuRelation;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicRoleMenuRelationMapper extends BaseMapper<BasicRoleMenuRelation> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicRoleUserRelationMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicRoleUserRelation;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicRoleUserRelationMapper extends BaseMapper<BasicRoleUserRelation> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/BasicUserMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.BasicUser;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface BasicUserMapper extends BaseMapper<BasicUser> {
}

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/LoginHistoryMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.LoginHistory;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface LoginHistoryMapper extends BaseMapper<LoginHistory> {
}

32
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicCompanyMapperExt.java

@ -0,0 +1,32 @@
package com.model2d3d.viewer.back.dao.ex;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.model2d3d.viewer.back.model.BasicCompany;
import org.apache.ibatis.annotations.Mapper;
import com.model2d3d.viewer.back.dao.auto.BasicCompanyMapper;
import com.model2d3d.viewer.back.dto.company.CompanySearchParams;
import com.model2d3d.viewer.back.dto.company.OptCompanyParams;
import com.model2d3d.viewer.back.vo.TreeMenusDTO;
import com.model2d3d.viewer.back.vo.company.CompanyPageDTO;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface BasicCompanyMapperExt extends BasicCompanyMapper{
List<BasicCompany> getSubCompanyByParentId(Map<String, Object> searchChildMap);
List<BasicCompany> getSelectList(Map<String, Object> paramMap);
int checkExist(OptCompanyParams optCompanyParams);
IPage<CompanyPageDTO> getListPage(Page<?> page, @Param("params") CompanySearchParams pageSearchParam);
List<TreeMenusDTO> getListForTree();
}

26
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleMapperExt.java

@ -0,0 +1,26 @@
package com.model2d3d.viewer.back.dao.ex;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.model2d3d.viewer.back.dto.role.RolePageSearchParam;
import org.apache.ibatis.annotations.Mapper;
import com.model2d3d.viewer.back.dao.auto.BasicRoleMapper;
import com.model2d3d.viewer.back.dto.role.OptRoleParam;
import com.model2d3d.viewer.back.vo.TreeMenusDTO;
import com.model2d3d.viewer.back.vo.role.RolePageDTO;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface BasicRoleMapperExt extends BasicRoleMapper {
Long checkExist(OptRoleParam param);
List<TreeMenusDTO> getOwnMenuIds(Map<String, Object> paramMap);
IPage<RolePageDTO> getListPage(Page page, @Param("params") RolePageSearchParam pageSearchParam);
}

16
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleMenuRelationMapperExt.java

@ -0,0 +1,16 @@
package com.model2d3d.viewer.back.dao.ex;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import com.model2d3d.viewer.back.dao.auto.BasicRoleMenuRelationMapper;
@Mapper
public interface BasicRoleMenuRelationMapperExt extends BasicRoleMenuRelationMapper {
void batchInsert(Map<String, Object> paramMap);
String getMenuIdsByRoleId(Long roleId);
}

10
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicRoleUserRelationMapperExt.java

@ -0,0 +1,10 @@
package com.model2d3d.viewer.back.dao.ex;
import org.apache.ibatis.annotations.Mapper;
import com.model2d3d.viewer.back.dao.auto.BasicRoleUserRelationMapper;
@Mapper
public interface BasicRoleUserRelationMapperExt extends BasicRoleUserRelationMapper {
}

27
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicUserMapperExt.java

@ -0,0 +1,27 @@
package com.model2d3d.viewer.back.dao.ex;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.model2d3d.viewer.back.dao.auto.BasicUserMapper;
import com.model2d3d.viewer.back.dto.user.OptUserParam;
import com.model2d3d.viewer.back.dto.user.PageSearchParam;
import com.model2d3d.viewer.back.vo.user.UserInfoVO;
import com.model2d3d.viewer.back.vo.user.UserPageDTO;
@Mapper
public interface BasicUserMapperExt extends BasicUserMapper{
Long checkExist(OptUserParam param);
IPage<UserPageDTO> getListPage(Page<?> page, @Param("params") PageSearchParam pageSearchParam);
String getMenuIdsByUserId(@Param("userId") String userId);
UserInfoVO getAccountInfo(Map<String, Object> paramMap);
}

10
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/LoginHistoryMapperExt.java

@ -0,0 +1,10 @@
package com.model2d3d.viewer.back.dao.ex;
import org.apache.ibatis.annotations.Mapper;
import com.model2d3d.viewer.back.dao.auto.LoginHistoryMapper;
@Mapper
public interface LoginHistoryMapperExt extends LoginHistoryMapper{
}

20
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicCompanyMapper.xml

@ -0,0 +1,20 @@
<?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.model2d3d.viewer.back.dao.auto.BasicCompanyMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicCompany">
<id column="id" property="id" />
<result column="parent_id" property="parentId" />
<result column="company_name" property="companyName" />
<result column="flag" property="flag" />
<result column="create_time" property="createTime" />
<result column="modify_time" property="modifyTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, parent_id, company_name, flag, create_time, modify_time
</sql>
</mapper>

23
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicMenuMapper.xml

@ -0,0 +1,23 @@
<?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.model2d3d.viewer.back.dao.auto.BasicMenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicMenu">
<id column="id" property="id" />
<result column="parent_menu_id" property="parentMenuId" />
<result column="menu_name" property="menuName" />
<result column="menu_name_en" property="menuNameEn" />
<result column="menu_name_jp" property="menuNameJp" />
<result column="remark" property="remark" />
<result column="menu_level" property="menuLevel" />
<result column="flag" property="flag" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, parent_menu_id, menu_name, menu_name_en, menu_name_jp, remark, menu_level, flag, create_time
</sql>
</mapper>

23
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleMapper.xml

@ -0,0 +1,23 @@
<?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.model2d3d.viewer.back.dao.auto.BasicRoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicRole">
<id column="id" property="id" />
<result column="company_id" property="companyId" />
<result column="role_name" property="roleName" />
<result column="description" property="description" />
<result column="flag" property="flag" />
<result column="creator_id" property="creatorId" />
<result column="create_time" property="createTime" />
<result column="modifier_id" property="modifierId" />
<result column="modify_time" property="modifyTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, company_id, role_name, description, flag, creator_id, create_time, modifier_id, modify_time
</sql>
</mapper>

18
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleMenuRelationMapper.xml

@ -0,0 +1,18 @@
<?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.model2d3d.viewer.back.dao.auto.BasicRoleMenuRelationMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicRoleMenuRelation">
<result column="role_id" property="roleId" />
<result column="menu_id" property="menuId" />
<result column="creator_id" property="creatorId" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
role_id, menu_id, creator_id, create_time
</sql>
</mapper>

18
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicRoleUserRelationMapper.xml

@ -0,0 +1,18 @@
<?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.model2d3d.viewer.back.dao.auto.BasicRoleUserRelationMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicRoleUserRelation">
<result column="user_id" property="userId" />
<result column="role_id" property="roleId" />
<result column="creator_id" property="creatorId" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
user_id, role_id, creator_id, create_time
</sql>
</mapper>

32
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicUserMapper.xml

@ -0,0 +1,32 @@
<?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.model2d3d.viewer.back.dao.auto.BasicUserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.BasicUser">
<id column="id" property="id" />
<result column="company_id" property="companyId" />
<result column="shop_uuid" property="shopUuid" />
<result column="username" property="username" />
<result column="login_name" property="loginName" />
<result column="password" property="password" />
<result column="password_modify_time" property="passwordModifyTime" />
<result column="salt" property="salt" />
<result column="email" property="email" />
<result column="mobile_number" property="mobileNumber" />
<result column="last_login_time" property="lastLoginTime" />
<result column="remark" property="remark" />
<result column="flag" property="flag" />
<result column="expire_time" property="expireTime" />
<result column="create_time" property="createTime" />
<result column="creator_id" property="creatorId" />
<result column="modify_time" property="modifyTime" />
<result column="modifier_id" property="modifierId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, company_id, shop_uuid, username, login_name, password, password_modify_time, salt, email, mobile_number, last_login_time, remark, flag, expire_time, create_time, creator_id, modify_time, modifier_id
</sql>
</mapper>

18
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/LoginHistoryMapper.xml

@ -0,0 +1,18 @@
<?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.model2d3d.viewer.back.dao.auto.LoginHistoryMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.LoginHistory">
<id column="id" property="id" />
<result column="user_id" property="userId" />
<result column="request_ip" property="requestIp" />
<result column="login_time" property="loginTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, user_id, request_ip, login_time
</sql>
</mapper>

72
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicCompanyMapperExt.xml

@ -0,0 +1,72 @@
<?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.model2d3d.viewer.back.dao.ex.BasicCompanyMapperExt">
<select id="getSubCompanyByParentId" resultType="com.model2d3d.viewer.back.model.BasicCompany" >
SELECT
bcom.id
FROM
basic_company bcom
WHERE
bcom.flag != 1 and bcom.parent_id IN
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="getSelectList" resultType="com.model2d3d.viewer.back.model.BasicCompany" >
SELECT
bcom.id,
bcom.company_name companyName
FROM
basic_company bcom
WHERE bcom.flag != 1 AND bcom.id IN
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="checkExist" resultType="java.lang.Integer">
SELECT
COUNT(1)
FROM
basic_company
WHERE
flag != 1 AND company_name = #{companyName}
<if test="companyId != null">
AND id != #{companyId}
</if>
</select>
<select id="getListPage" resultType="com.model2d3d.viewer.back.vo.company.CompanyPageDTO">
SELECT
bcom.id companyId,
bcom.company_name companyName,
parentcom.id parentId,
parentcom.company_name parentCompanyName
FROM
basic_company bcom
LEFT JOIN basic_company parentcom ON parentcom.id = bcom.parent_id
WHERE
bcom.flag != 1 AND bcom.id IN <foreach collection="params.companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="params.companyName != null">
AND bcom.company_name LIKE CONCAT('%',#{params.companyName},'%')
</if>
ORDER BY bcom.create_time DESC, bcom.id DESC
</select>
<select id="getListForTree" resultType="com.model2d3d.viewer.back.vo.TreeMenusDTO">
SELECT
bcom.id `key`,
bcom.parent_id parentKey,
bcom.company_name label
FROM
basic_company bcom
WHERE
bcom.flag != 1
</select>
</mapper>

68
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicRoleMapperExt.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.model2d3d.viewer.back.dao.ex.BasicRoleMapperExt">
<select id="checkExist" resultType="java.lang.Long">
SELECT
COUNT(1)
FROM
basic_role brole
WHERE
brole.flag != 1 AND brole.role_name = #{roleName} AND brole.company_id = #{companyId}
<if test="roleId != null">
AND brole.id != #{roleId}
</if>
</select>
<select id="getOwnMenuIds" resultType="com.model2d3d.viewer.back.vo.TreeMenusDTO">
SELECT
bmenu.id `key`,
bmenu.parent_menu_id parentKey,
<choose>
<when test="languageType == 0">
bmenu.menu_name label
</when>
<when test="languageType == 1">
bmenu.menu_name_en label
</when>
<otherwise>
bmenu.menu_name_jp label
</otherwise>
</choose>
FROM
<choose>
<when test="superRole != null and superRole == 1">
basic_menu bmenu WHERE bmenu.flag != 1
</when>
<otherwise>
basic_role_user_relation brur
INNER JOIN basic_role_menu_relation brmr ON brur.role_id = brmr.role_id
INNER JOIN basic_menu bmenu ON bmenu.id = brmr.menu_id
WHERE
bmenu.flag != 1 AND brur.user_id = #{userId}
</otherwise>
</choose>
</select>
<select id="getListPage" resultType="com.model2d3d.viewer.back.vo.role.RolePageDTO">
SELECT
brole.id roleId,
brole.role_name roleName,
brole.description,
brole.modify_time modifyTime
FROM
basic_role brole
WHERE
brole.flag != 1 AND brole.company_id IN <foreach collection="params.companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
AND brole.id != IFNULL((SELECT role_id FROM basic_role_user_relation WHERE user_id = #{params.userId}), -9)
<if test="params.roleName != null and params.roleName != ''">
AND brole.role_name LIKE CONCAT('%',#{params.roleName},'%')
</if>
ORDER BY brole.create_time DESC, brole.id DESC
</select>
</mapper>

24
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicRoleMenuRelationMapperExt.xml

@ -0,0 +1,24 @@
<?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.model2d3d.viewer.back.dao.ex.BasicRoleMenuRelationMapperExt">
<insert id="batchInsert">
INSERT INTO
basic_role_menu_relation (role_id, menu_id, creator_id, create_time)
VALUES
<foreach collection="menuIds" item="item" index="index" separator=",">
(#{roleId}, #{item}, #{creatorId}, #{createTime})
</foreach>
</insert>
<select id="getMenuIdsByRoleId" resultType="java.lang.String">
SELECT
GROUP_CONCAT(bmenu.id)
FROM
basic_role_menu_relation brmr
INNER JOIN basic_menu bmenu ON bmenu.id = brmr.menu_id
WHERE
bmenu.flag != 1 AND brmr.role_id = #{roleId}
</select>
</mapper>

96
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml

@ -0,0 +1,96 @@
<?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.model2d3d.viewer.back.dao.ex.BasicUserMapperExt">
<select id="checkExist" resultType="java.lang.Long">
SELECT
COUNT(1)
FROM
basic_user buser
WHERE
buser.flag != 1 AND (buser.login_name = #{email} OR buser.email = #{loginName} OR buser.email = #{email})
<if test="userId != null">
AND buser.id != #{userId}
</if>
</select>
<select id="getListPage" resultType="com.model2d3d.viewer.back.vo.user.UserPageDTO">
SELECT
bcom.id companyId,
bcom.company_name companyName,
buser.id userId,
buser.username username,
buser.login_name loginName,
buser.email,
buser.mobile_number mobileNumber,
buser.create_time createTime,
any_value(brole.id) roleId,
any_value(brole.role_name) roleName
FROM
basic_user buser
INNER JOIN basic_company bcom ON buser.company_id = bcom.id
INNER JOIN basic_role_user_relation brur ON brur.user_id = buser.id
INNER JOIN basic_role brole ON brur.role_id = brole.id
WHERE
buser.flag != 1 AND brole.flag != 1 AND buser.company_id IN <foreach collection="params.companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="params.userId != null">
AND buser.id != #{params.userId}
</if>
<if test="params.keyword != null and params.keyword !=''">
AND (
buser.username LIKE CONCAT('%',#{params.keyword},'%')
OR
buser.email LIKE CONCAT('%',#{params.keyword},'%')
)
</if>
ORDER BY buser.create_time DESC, buser.id DESC
</select>
<select id="getMenuIdsByUserId" resultType="java.lang.String">
SELECT
GROUP_CONCAT(bmenu.id)
FROM
<choose>
<when test="userId != null and userId == 1">
basic_menu bmenu WHERE bmenu.flag != 1
</when>
<otherwise>
basic_role_user_relation brur
INNER JOIN basic_role brole ON brole.id = brur.role_id
INNER JOIN basic_role_menu_relation brmr ON brur.role_id = brmr.role_id
INNER JOIN basic_menu bmenu ON bmenu.id = brmr.menu_id
WHERE
brole.flag != 1 AND bmenu.flag != 1 AND brur.user_id = #{userId}
</otherwise>
</choose>
</select>
<select id="getAccountInfo" resultType="com.model2d3d.viewer.back.vo.user.UserInfoVO">
SELECT
buser.id,
buser.company_id,
buser.username,
buser.login_name,
buser.`password`,
buser.salt,
buser.email,
buser.mobile_number,
buser.last_login_time,
buser.flag,
buser.expire_time,
buser.create_time,
buser.creator_id,
buser.modify_time,
buser.modifier_id,
bcom.parent_id parentCompanyId
FROM
basic_user buser
inner join basic_company bcom on bcom.id = buser.company_id
WHERE buser.flag != 1 and bcom.flag != 1 and (buser.login_name = #{loginname} OR buser.email = #{loginName})
</select>
</mapper>

61
model2d3d-viewer-back-dao/src/main/resources/templates/entity.java.ftl

@ -0,0 +1,61 @@
package ${package.Entity};
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
<#-- 自动导入日期类型 -->
<#list table.fields as field>
<#if field.propertyType == "LocalDate">
import java.time.LocalDate;
<#break>
</#if>
</#list>
<#list table.fields as field>
<#if field.propertyType == "LocalDateTime">
import java.time.LocalDateTime;
<#break>
</#if>
</#list>
<#-- 类定义 -->
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("${table.name}")
@Schema(description = "${table.comment!}")
public class ${entity} implements Serializable {
<#-- 主键字段处理 -->
<#assign hasPk = false>
<#list table.fields as field>
<#if field.keyFlag>
<#assign hasPk = true>
@TableId(value = "${field.name}", type = IdType.${idType!"ASSIGN_ID"})
@Schema(description = "${field.comment!}")
private ${field.propertyType} ${field.propertyName};
</#if>
</#list>
<#-- 普通字段处理 -->
<#list table.fields as field>
<#if !field.keyFlag>
@TableField("${field.name}")
@Schema(description = "${field.comment!}")
private ${field.propertyType} ${field.propertyName};
</#if>
</#list>
<#-- 无主键表的额外处理 -->
<#if !hasPk>
<#-- 在这里可以添加无主键表特有的方法或注释 -->
<#-- 例如,可能需要提供手动主键生成策略或者修改操作方法 -->
</#if>
}

15
model2d3d-viewer-back-model/.gitignore

@ -0,0 +1,15 @@
/target/
/logs/
/.idea/
*.iml
*.bak
*.log
/.settings/
*.project
*.classpath
*.factorypath
*.springBeans
/.apt_generated/
/.externalToolBuilders/
/bin/
application-*.properties

56
model2d3d-viewer-back-model/pom.xml

@ -0,0 +1,56 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.techsor</groupId>
<artifactId>model2d3d-viewer-back</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>model2d3d-viewer-back-model</artifactId>
<name>model2d3d-viewer-back-model</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>9.0.0.CR1</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-cdi -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-cdi</artifactId>
<version>9.0.0.CR1</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.11</version>
<exclusions>
<!-- 版本匹配问题,防止出现Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

25
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/BaseSearchNoCompanysParams.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:55:22
*/
@Setter
@Getter
public class BaseSearchNoCompanysParams {
/** 页码 */
@Schema(description = "当前页码(默认第一页)",example = "1")
private Integer pageNum;
/** 每页显示的条数 */
@Schema(description = "每页显示的条数(默认20条)", example = "20")
private Integer pageSize;
@Schema(description = "用户ID", hidden = true)
private Long userId;
}

23
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/BaseSearchParams.java

@ -0,0 +1,23 @@
package com.model2d3d.viewer.back.dto;
import java.util.List;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:55:22
*/
@Setter
@Getter
public class BaseSearchParams extends BaseSearchNoCompanysParams{
@Schema(description = "查询对象所属企业ID,多个使用逗号连接")
private String companyIds;
@Schema(description = "查询对象所属企业ID", hidden = true)
private List<String> companyIdList;
}

23
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/account/CacheUserData.java

@ -0,0 +1,23 @@
package com.model2d3d.viewer.back.dto.account;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年5月20日 下午2:08:50
*/
@Data
public class CacheUserData {
private String accessToken;
private String userId;
private String companyId;
private String username;
private String loginName;
private String password;
private Long createTime;
private Long expireTime;
private String menuIds;
// private String userGroupIds;
}

25
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/account/LoginParam.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.dto.account;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年5月20日 下午7:13:50
*/
@Data
public class LoginParam {
@Schema(description ="登录名",example = "admin")
private String loginname;
@Schema(description = "密码",example = "123456")
private String password;
@Schema(description = "验证码的请求标识ID",example = "111weyu2-123rt2u1-121ueiu2")
private String captchaRequestId;
@Schema(description = "验证码值",example = "Z3xA")
private String captcha;
}

24
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/CompanySearchParams.java

@ -0,0 +1,24 @@
package com.model2d3d.viewer.back.dto.company;
import com.model2d3d.viewer.back.dto.BaseSearchParams;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年7月21日 下午8:50:31
*/
@Data
public class CompanySearchParams extends BaseSearchParams{
@Schema(description ="企业名",example = "张三李四")
private String companyName;
@Schema(description ="登录账号的企业ID",example = "1", hidden = true)
private String selfCompanyId;
// @Schema(description ="1-未进入系统homepage页面获取,2-点击企业后进入系统后获取",example = "2")
// private Integer searchType;
}

18
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/DeleteCompanyParams.java

@ -0,0 +1,18 @@
package com.model2d3d.viewer.back.dto.company;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年7月21日 下午8:50:31
*/
@Data
public class DeleteCompanyParams{
@NotBlank(message = "1001")
@Schema(description ="企业ID,多个使用半角字符逗号连接",example = "2738967,587")
private String companyIds;
}

28
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/OptCompanyParams.java

@ -0,0 +1,28 @@
package com.model2d3d.viewer.back.dto.company;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author Mr.Jiang
* @time 2022年7月21日 下午8:50:31
*/
@Data
public class OptCompanyParams{
@Schema(description ="企业唯一标识ID,新增时无此参数",example = "2738967")
private String companyId;
@Schema(description ="父企业ID",example = "2738967", hidden = true)
private String parentId;
@NotBlank(message = "1001")
@Length(max = 500,message = "1002")
@Schema(description ="企业名称",example = "testAccount1", required = true)
private String companyName;
}

20
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/DeleteRoleParam.java

@ -0,0 +1,20 @@
package com.model2d3d.viewer.back.dto.role;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:59:33
*/
@Setter
@Getter
public class DeleteRoleParam {
@NotBlank(message = "1001")
@Schema(description ="Id,多个使用逗号连接",example = "3,5", required = true)
private String roleIds;
}

38
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/OptRoleParam.java

@ -0,0 +1,38 @@
package com.model2d3d.viewer.back.dto.role;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
/**
* @author zhc
* @time 2022年6月14日10:56:38
*/
@Setter
@Getter
public class OptRoleParam {
@Schema(description ="角色ID, 新增时无此参数",example = "111", required = false)
private String roleId;
@NotBlank(message = "1001")
@Length(max = 100,message = "1002")
@Schema(description ="角色名称",example = "管理员", required = true)
private String roleName;
@Length(max = 500,message = "1002")
@Schema(description ="描述",example = "这是管理员描述")
private String description;
@Schema(description ="菜单权限ID,使用逗号连接",example = "1,4,5,6")
private String menuIds;
@Schema(description ="所属企业ID",example = "2", hidden = true)
private String companyId;
}

21
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/role/RolePageSearchParam.java

@ -0,0 +1,21 @@
package com.model2d3d.viewer.back.dto.role;
import com.model2d3d.viewer.back.dto.BaseSearchParams;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.zhc
* @time 2022年7月27日12:06:35
*/
@Setter
@Getter
public class RolePageSearchParam extends BaseSearchParams{
@Schema(description ="角色名",example = "test", required = false)
private String roleName;
}

20
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/DeleteUserParam.java

@ -0,0 +1,20 @@
package com.model2d3d.viewer.back.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:59:33
*/
@Setter
@Getter
public class DeleteUserParam {
@NotBlank(message = "1001")
@Schema(description ="Id,多个使用逗号连接",example = "3,5", required = true)
private String userIds;
}

24
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/ModifyPassword.java

@ -0,0 +1,24 @@
package com.model2d3d.viewer.back.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:59:33
*/
@Setter
@Getter
public class ModifyPassword{
@NotBlank(message = "1001")
@Schema(description ="旧密码",example = "haoihg09278", required = true)
private String oldPassword;
@NotBlank(message = "1001")
@Schema(description ="新密码",example = "og.ayhgih", required = true)
private String newPassword;
}

44
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/OptUserParam.java

@ -0,0 +1,44 @@
package com.model2d3d.viewer.back.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
/**
* @author zhc
* @time 2022年6月14日10:56:38
*/
@Setter
@Getter
public class OptUserParam {
@Schema(description ="用户ID, 新增时无此参数",example = "111", required = false)
private String userId;
@Schema(description ="角色ID",example = "24", required = false)
private String roleId;
@NotBlank(message = "1001")
@Length(max = 255,message = "1002")
@Schema(description ="用户名",example = "管理员", required = true)
private String username;
@Schema(description ="登录名",example = "adminmin", hidden = true)
private String loginName;
@Email(message = "1004")
@Schema(description ="用户邮箱",example = "1057897@qq.com", required = true)
private String email;
@Schema(description ="手机号码,这里要加上国际区号,比如日本是+81,传给后台的就是+81-08041165856,中国是+86,传给后台的就是+86-18841165856",example = "+81-08041165856", required = false)
private String mobileNumber;
@Schema(description ="所属企业ID",example = "2", hidden = true)
private String companyId;
}

20
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/PageSearchParam.java

@ -0,0 +1,20 @@
package com.model2d3d.viewer.back.dto.user;
import com.model2d3d.viewer.back.dto.BaseSearchParams;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.zhc
* @time 2022年7月27日12:06:35
*/
@Setter
@Getter
public class PageSearchParam extends BaseSearchParams{
@Schema(description ="用户名/用户邮箱",example = "test", required = false)
private String keyword;
}

23
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/ResetPassword.java

@ -0,0 +1,23 @@
package com.model2d3d.viewer.back.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
/**
* @author Mr.Jiang
* @time 2022年4月23日 下午1:59:33
*/
@Setter
@Getter
public class ResetPassword{
@NotBlank(message = "1001")
@Schema(description ="Id,多个使用逗号连接",example = "3,5", required = true)
private String userIds;
// @Schema(description ="重置密码方式 1-管理员直接重置密码,账号邮箱接收该密码,2-发送重置密码链接到绑定的账户邮箱中,用户自己重置密码",example = "2", required = true)
// private Integer resetType = 1;
}

46
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicCompany.java

@ -0,0 +1,46 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_company")
@Schema(description = "企业表")
public class BasicCompany implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@Schema(description = "")
private String id;
@TableField("parent_id")
@Schema(description = "")
private String parentId;
@TableField("company_name")
@Schema(description = "")
private String companyName;
@TableField("flag")
@Schema(description = "0-正常,1-删除")
private Integer flag;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
@TableField("modify_time")
@Schema(description = "")
private Long modifyTime;
}

58
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicMenu.java

@ -0,0 +1,58 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_menu")
@Schema(description = "")
public class BasicMenu implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "")
private Long id;
@TableField("parent_menu_id")
@Schema(description = "")
private Long parentMenuId;
@TableField("menu_name")
@Schema(description = "")
private String menuName;
@TableField("menu_name_en")
@Schema(description = "")
private String menuNameEn;
@TableField("menu_name_jp")
@Schema(description = "")
private String menuNameJp;
@TableField("remark")
@Schema(description = "")
private String remark;
@TableField("menu_level")
@Schema(description = "菜单级别")
private Integer menuLevel;
@TableField("flag")
@Schema(description = "0-正常,1-删除")
private Integer flag;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
}

58
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRole.java

@ -0,0 +1,58 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_role")
@Schema(description = "")
public class BasicRole implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@Schema(description = "")
private String id;
@TableField("company_id")
@Schema(description = "")
private String companyId;
@TableField("role_name")
@Schema(description = "")
private String roleName;
@TableField("description")
@Schema(description = "")
private String description;
@TableField("flag")
@Schema(description = "0-正常,1-删除")
private Integer flag;
@TableField("creator_id")
@Schema(description = "")
private Long creatorId;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
@TableField("modifier_id")
@Schema(description = "")
private Long modifierId;
@TableField("modify_time")
@Schema(description = "")
private Long modifyTime;
}

38
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRoleMenuRelation.java

@ -0,0 +1,38 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_role_menu_relation")
@Schema(description = "")
public class BasicRoleMenuRelation implements Serializable {
@TableField("role_id")
@Schema(description = "")
private String roleId;
@TableField("menu_id")
@Schema(description = "")
private Long menuId;
@TableField("creator_id")
@Schema(description = "")
private Long creatorId;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
}

38
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicRoleUserRelation.java

@ -0,0 +1,38 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_role_user_relation")
@Schema(description = "")
public class BasicRoleUserRelation implements Serializable {
@TableField("user_id")
@Schema(description = "")
private String userId;
@TableField("role_id")
@Schema(description = "")
private String roleId;
@TableField("creator_id")
@Schema(description = "")
private Long creatorId;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
}

94
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicUser.java

@ -0,0 +1,94 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("basic_user")
@Schema(description = "")
public class BasicUser implements Serializable {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@Schema(description = "")
private String id;
@TableField("company_id")
@Schema(description = "")
private String companyId;
@TableField("shop_uuid")
@Schema(description = "")
private String shopUuid;
@TableField("username")
@Schema(description = "")
private String username;
@TableField("login_name")
@Schema(description = "")
private String loginName;
@TableField("password")
@Schema(description = "")
private String password;
@TableField("password_modify_time")
@Schema(description = "")
private Long passwordModifyTime;
@TableField("salt")
@Schema(description = "")
private String salt;
@TableField("email")
@Schema(description = "")
private String email;
@TableField("mobile_number")
@Schema(description = "")
private String mobileNumber;
@TableField("last_login_time")
@Schema(description = "")
private Long lastLoginTime;
@TableField("remark")
@Schema(description = "备注")
private String remark;
@TableField("flag")
@Schema(description = "0-正常,1-删除")
private Integer flag;
@TableField("expire_time")
@Schema(description = "")
private Long expireTime;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
@TableField("creator_id")
@Schema(description = "")
private Long creatorId;
@TableField("modify_time")
@Schema(description = "")
private Long modifyTime;
@TableField("modifier_id")
@Schema(description = "")
private Long modifierId;
}

38
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/LoginHistory.java

@ -0,0 +1,38 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("login_history")
@Schema(description = "")
public class LoginHistory implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
@Schema(description = "")
private Long id;
@TableField("user_id")
@Schema(description = "")
private String userId;
@TableField("request_ip")
@Schema(description = "")
private String requestIp;
@TableField("login_time")
@Schema(description = "")
private Long loginTime;
}

27
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/TreeMenusDTO.java

@ -0,0 +1,27 @@
package com.model2d3d.viewer.back.vo;
import java.util.List;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年7月29日 下午4:37:50
*/
@Data
public class TreeMenusDTO {
@Schema(description ="节点ID",example = "11", required = true)
private String key;
@Schema(description ="父节点ID",example = "2", hidden = true)
private String parentKey;
@Schema(description ="节点名称",example = "添加", required = true)
private String label;
@Schema(description ="子节点",example = "[]", required = false)
private List<TreeMenusDTO> children;
}

25
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/company/CompanyPageDTO.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.vo.company;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年7月21日 下午8:50:31
*/
@Data
public class CompanyPageDTO{
@Schema(description ="企业唯一标识ID,新增时无此参数",example = "2738967")
private String companyId;
@Schema(description ="企业名称",example = "testAccount1", required = true)
private String companyName;
@Schema(description ="所属企业ID",example = "2738967")
private String parentId;
@Schema(description ="所属企业名称",example = "testAccount1", required = true)
private String parentCompanyName;
}

27
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/role/RoleMenuDTO.java

@ -0,0 +1,27 @@
package com.model2d3d.viewer.back.vo.role;
import java.util.List;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年7月29日 下午4:37:50
*/
@Data
public class RoleMenuDTO {
@Schema(description ="菜单ID",example = "11", required = true)
private String key;
@Schema(description ="父菜单ID",example = "2", hidden = true)
private String parentKey;
@Schema(description ="菜单名称",example = "添加", required = true)
private String label;
@Schema(description ="子菜单",example = "[]", required = false)
private List<RoleMenuDTO> children;
}

25
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/role/RolePageDTO.java

@ -0,0 +1,25 @@
package com.model2d3d.viewer.back.vo.role;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年5月22日 下午10:37:02
*/
@Data
public class RolePageDTO {
@Schema(description ="角色ID",example = "111", required = true)
private String roleId;
@Schema(description ="角色名称",example = "管理员", required = true)
private String roleName;
@Schema(description ="描述",example = "这是管理员描述", required = true)
private String description;
@Schema(description ="最后更新时间",example = "1689878789647", required = true)
private Long modifyTime;
}

15
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/user/UserInfoVO.java

@ -0,0 +1,15 @@
package com.model2d3d.viewer.back.vo.user;
import com.model2d3d.viewer.back.model.BasicUser;
import lombok.Data;
/**
* @author Mr.Jiang
* @time 2022年5月22日 下午10:37:02
*/
@Data
public class UserInfoVO extends BasicUser {
private String parentCompanyId;
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save