This commit is contained in:
2024-11-28 15:10:09 +08:00
commit 901691aaea
90 changed files with 4919 additions and 0 deletions

View File

@ -0,0 +1,62 @@
server:
port: 8030
spring:
application:
name: basic
main:
allow-bean-definition-overriding: true
mvc:
# 启用hiddenMethod过滤器(头像上传)
hiddenmethod:
filter:
enabled: true
datasource: # 数据源的相关配置
type: com.zaxxer.hikari.HikariDataSource # 数据源类型HikariCP
driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动
url: jdbc:mysql://8.134.112.96:3306/liuying_mgmt_re?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: yckj2017
hikari:
connection-timeout: 30000 # 等待连接池分配连接的最大时长毫秒超过这个时长还没可用的连接则发生SQLException 默认:30秒
minimum-idle: 5 # 最小连接数
maximum-pool-size: 20 # 最大连接数
auto-commit: true # 事务自动提交
idle-timeout: 60000 # 连接超时的最大时长(毫秒)
pool-name: DateSourceHikariCP # 连接池名字
max-lifetime: 180000 # 连接的生命时长(毫秒)
connection-test-query: SELECT 1 # 连接测试语句
jackson:
date-format: "yyyy-MM-dd HH:mm:ss"
time-zone: GMT+8
redis:
host: 10.59.3.242
port: 6379
# 密码过于复杂需要使用''引起来,要不可能导致项目无法启动,因为无法识别特殊字符
password: yckj2018
jedis:
pool:
max-active: -1 # 连接池最大连接数(使用负值表示没有限制)
min-idle: 1 # 连接池中的最小空闲连接
time-between-eviction-runs: 3000
timeout: 40000
# 配置用户头像存放静态资源文件夹
resources:
static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
# 配置请求文件大小
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
# MyBatis
mybatis-plus:
configuration:
# 开启驼峰命名法
map-underscore-to-camel-case: true
use-generated-keys: true
# 这个配置会将执行的sql打印出来在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 指定使用的日志配置文件
logging:
config: classpath:logback-spring.xml

View File

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- appender是configuration的子节点是负责写日志的组件。 -->
<!-- ConsoleAppender把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 默认情况下,每个日志事件都会立即刷新到基础输出流。 这种默认方法更安全因为如果应用程序在没有正确关闭appender的情况下退出则日志事件不会丢失。
但是为了显着增加日志记录吞吐量您可能希望将immediateFlush属性设置为false -->
<!--<immediateFlush>true</immediateFlush>-->
<encoder>
<!-- %37():如果字符没有37个字符长度,则左侧用空格补齐 -->
<!-- %-37():如果字符没有37个字符长度,则右侧用空格补齐 -->
<!-- %15.15():如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 -->
<!-- %-40.40():如果记录的logger字符长度小于40(第一个)则用空格在右侧补齐,如果字符长度大于40(第二个),则从开头开始截断多余的字符 -->
<!-- %msg日志打印详情 -->
<!-- %n:换行符 -->
<!-- %highlight():转换说明符以粗体红色显示其级别为ERROR的事件红色为WARNBLUE为INFO以及其他级别的默认颜色。 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%15.15(%thread)] %cyan(%-40.40(%logger{40})) : %msg%n</pattern>
<!-- 控制台也要使用UTF-8不要使用GBK否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- info 日志-->
<!-- RollingFileAppender滚动记录文件先将日志记录到指定文件当符合某个条件时将日志记录到其他文件 -->
<!-- 以下的大概意思是1.先按日期存日志日期变了将前一天的日志文件名重命名为XXX%日期%索引新的日志仍然是project_info.log -->
<!-- 2.如果日期没有发生变化但是当前日志的文件大小超过10MB时对当前日志进行分割 重命名-->
<appender name="info_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件路径和名称-->
<File>logs/project_info.log</File>
<!--是否追加到文件末尾,默认为true-->
<append>true</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch><!-- 如果命中ERROR就禁止这条日志 -->
<onMismatch>ACCEPT</onMismatch><!-- 如果没有命中就使用这条规则 -->
</filter>
<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件即RollingPolicy:负责执行翻转所需的操作。
RollingFileAppender的第二个子组件即TriggeringPolicy:将确定是否以及何时发生翻转。 因此RollingPolicy负责什么和TriggeringPolicy负责什么时候.
作为任何用途RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是如果其RollingPolicy也实现了TriggeringPolicy接口则只需要显式指定前者。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名logs/project_info.2017-12-05.0.log -->
<!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 -->
<fileNamePattern>logs/project_info.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
<maxHistory>30</maxHistory>
<!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 -->
<totalSizeCap>20GB</totalSizeCap>
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<!--编码器-->
<encoder>
<!-- pattern节点用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- error 日志-->
<!-- RollingFileAppender滚动记录文件先将日志记录到指定文件当符合某个条件时将日志记录到其他文件 -->
<!-- 以下的大概意思是1.先按日期存日志日期变了将前一天的日志文件名重命名为XXX%日期%索引新的日志仍然是project_error.log -->
<!-- 2.如果日期没有发生变化但是当前日志的文件大小超过10MB时对当前日志进行分割 重命名-->
<appender name="error_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件路径和名称-->
<File>logs/project_error.log</File>
<!--是否追加到文件末尾,默认为true-->
<append>true</append>
<!-- ThresholdFilter过滤低于指定阈值的事件。 对于等于或高于阈值的事件ThresholdFilter将在调用其decision方法时响应NEUTRAL。 但是,将拒绝级别低于阈值的事件 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level><!-- 低于ERROR级别的日志debug,info将被拒绝等于或者高于ERROR的级别将相应NEUTRAL -->
</filter>
<!--有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件即RollingPolicy:负责执行翻转所需的操作。
RollingFileAppender的第二个子组件即TriggeringPolicy:将确定是否以及何时发生翻转。 因此RollingPolicy负责什么和TriggeringPolicy负责什么时候.
作为任何用途RollingFileAppender必须同时设置RollingPolicy和TriggeringPolicy,但是如果其RollingPolicy也实现了TriggeringPolicy接口则只需要显式指定前者。-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名logs/project_error.2017-12-05.0.log -->
<!-- 注意SizeAndTimeBasedRollingPolicy中 i和d令牌都是强制性的必须存在要不会报错 -->
<fileNamePattern>logs/project_error.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为30天, ps:maxHistory的单位是根据fileNamePattern中的翻转策略自动推算出来的,例如上面选用了yyyy-MM-dd,则单位为天
如果上面选用了yyyy-MM,则单位为月,另外上面的单位默认为yyyy-MM-dd-->
<maxHistory>30</maxHistory>
<!-- 每个日志文件到10mb的时候开始切分最多保留30天但最大到20GB哪怕没到30天也要删除多余的日志 -->
<totalSizeCap>20GB</totalSizeCap>
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成5KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<!--编码器-->
<encoder>
<!-- pattern节点用来设置日志的输入格式 ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%15.15(%thread)] %-40.40(%logger{40}) : %msg%n</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--给定记录器的每个启用的日志记录请求都将转发到该记录器中的所有appender以及层次结构中较高的appender不用在意level值
换句话说appender是从记录器层次结构中附加地继承的。
例如如果将控制台appender添加到根记录器则所有启用的日志记录请求将至少在控制台上打印。
如果另外将文件追加器添加到记录器例如L则对L和L'子项启用的记录请求将打印在文件和控制台上。
通过将记录器的additivity标志设置为false可以覆盖此默认行为以便不再添加appender累积-->
<!-- configuration中最多允许一个root别的logger如果没有设置级别则从父级别root继承 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- 级别依次为【从高到低】FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.ycwl.basic" level="INFO">
<appender-ref ref="info_log" />
<appender-ref ref="error_log" />
</logger>
<!-- 利用logback输入mybatis的sql日志
注意:如果不加 additivity="false" 则此logger会将输出转发到自身以及祖先的logger中就会出现日志文件中sql重复打印-->
<logger name="com.ycwl.basic.mapper" level="DEBUG" additivity="false">
<appender-ref ref="info_log" />
<appender-ref ref="error_log" />
<appender-ref ref="STDOUT" />
</logger>
<!-- additivity=false代表禁止默认累计的行为即com.atomikos中的日志只会记录到日志文件中不会输出层次级别更高的任何appender-->
<logger name="com.ycwl.basic" level="INFO" additivity="false">
<appender-ref ref="info_log" />
<appender-ref ref="error_log" />
<appender-ref ref="STDOUT" />
</logger>
</configuration>

View File

@ -0,0 +1,103 @@
<?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.ycwl.basic.mapper.pc.AdminUserMapper">
<insert id="add" parameterType="com.ycwl.basic.model.pc.adminUser.req.AddOrUpdateAdminUserReqVO">
insert into admin_user(`id`,
`role_id`,
`staff_id`,
`account`,
`password`)
values (#{id},
#{roleId},
#{staffId},
#{account},
#{password})
</insert>
<update id="delete">
update
admin_user
set is_remove=1
where id = #{id}
</update>
<update id="resetPassword" parameterType="com.ycwl.basic.model.pc.adminUser.req.ResetPasswordReqVO">
update
admin_user
set password=#{password}
where id = #{id}
</update>
<update id="update" parameterType="com.ycwl.basic.model.pc.adminUser.req.AddOrUpdateAdminUserReqVO">
update admin_user
set `role_id` =#{roleId},
`staff_id` =#{staffId}
where id = #{id}
</update>
<update id="updatePassword">
update
admin_user
set password=#{newPwd}
where staff_id = #{id}
and is_remove = 0
</update>
<select id="list" parameterType="com.ycwl.basic.model.pc.adminUser.req.AdminUserListReqVO"
resultType="com.ycwl.basic.model.pc.adminUser.resp.AdminUserListRespVO">
select
s.id as staffId,
au.id,
s.phone,
s.name as staffName,
s.job_no,
c.name as companyName,
s.company_id,
r.id as roleId,
r.name as roleName
from admin_user au,
staff s,
company c,
role r
where au.staff_id = s.id
and au.is_remove=0
and au.role_id = r.id
and s.company_id = c.id
and s.is_remove=0
<if test="name!=null and name!=''">
and
locate(#{name},s.`name`) > 0
</if>
<if test="phone!=null and phone!=''">
and
locate(#{phone},s.`phone`) > 0
</if>
<if test="jobNo!=null and jobNo!=''">
and
locate(#{jobNo},s.`job_no`) > 0
</if>
<if test="roleId!=null and roleId!=''">
and
r.id=#{roleId}
</if>
<if test="companyId!=null and companyId!=''">
and
s.company_id=#{companyId}
</if>
</select>
<select id="login" resultType="com.ycwl.basic.model.pc.adminUser.entity.LoginEntity">
select
au.account,
au.password,
au.role_id
from admin_user au
where account = #{account}
and au.is_remove = 0
</select>
<select id="getPasswordByAccount" resultType="java.lang.String">
select `password`
from admin_user
where staff_id = #{id}
and is_remove = 0
</select>
</mapper>

View File

@ -0,0 +1,31 @@
<?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.ycwl.basic.mapper.pc.MenuMapper">
<insert id="addRoleMenu">
insert into role_menu(`role_id`, `menu_id`)
values
<foreach collection="list" item="item" separator=",">
(#{id},#{item})
</foreach>
</insert>
<delete id="delete">
delete
from role_menu
where role_id = #{id}
</delete>
<select id="getListByType" resultType="com.ycwl.basic.model.pc.menu.MenuNode">
select id,
parent_id,
target,
`name`,
`type`,
sort
from menu
where is_remove = 0
and business_type = #{type}
</select>
</mapper>

View File

@ -0,0 +1,80 @@
<?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.ycwl.basic.mapper.pc.RoleMapper">
<insert id="add" parameterType="com.ycwl.basic.model.pc.role.req.AddOrUpdateRoleReqVO">
insert into role(`id`, `name`, `type`)
values (#{id}, #{name}, #{type})
</insert>
<update id="delete">
update
role
set is_remove=1
where id = #{id}
</update>
<update id="update" parameterType="com.ycwl.basic.model.pc.role.req.AddOrUpdateRoleReqVO">
update
role
set `name`=#{name}
where id = #{id}
</update>
<select id="list" resultType="com.ycwl.basic.model.pc.role.resp.RoleListRespVO">
select
`id`,
`name`,
`status`,
create_time
from
role
where
is_remove=0
and
`type`=#{type}
<if test="name!=null and name!=''">
and
locate(#{name},`name`) > 0
</if>
</select>
<select id="getMenuById" resultType="com.ycwl.basic.model.pc.menu.MenuNode">
select m.`id`,
m.`parent_id`,
m.`target`,
m.`name`,
m.`type`,
m.`sort`
from menu m,
role_menu rm
where is_remove = 0
and business_type = 0
and rm.menu_id = m.id
and rm.role_id = #{id}
</select>
<select id="getRoleStatus" resultType="java.lang.Integer">
select
`status`
from
role
where
id = #{id}
</select>
<update id="updateStatus">
update
role
set status =
(CASE
status
WHEN 1 THEN
0
WHEN 0 THEN
1
ELSE null
END)
where id = #{id}
</update>
</mapper>