├── env
├── redis
│ └── conf
├── mysql
│ └── conf
└── docker-compose.yml
├── src
├── main
│ ├── resources
│ │ ├── mapper
│ │ │ ├── WechatUser
│ │ │ ├── CommonLogMapper.xml
│ │ │ ├── RecordBookMapper.xml
│ │ │ ├── RecordSysCategoryMapper.xml
│ │ │ ├── RecordUserCategoryMapper.xml
│ │ │ ├── UserRoleMapper.xml
│ │ │ ├── RoleMenuMapper.xml
│ │ │ ├── RecordAccountMapper.xml
│ │ │ ├── MenuMapper.xml
│ │ │ ├── UserMapper.xml
│ │ │ └── RoleMapper.xml
│ │ ├── application-prod.yml
│ │ ├── application.yml
│ │ ├── application-dev.yml
│ │ └── log4j2.xml
│ └── java
│ │ └── cn
│ │ └── jackbin
│ │ └── SimpleRecord
│ │ ├── common
│ │ ├── aspect
│ │ │ └── ResultAspect.java
│ │ ├── anotations
│ │ │ ├── HandleDict.java
│ │ │ ├── LoginRequired.java
│ │ │ ├── DictValue.java
│ │ │ └── CommonLog.java
│ │ ├── enums
│ │ │ ├── BusinessStatus.java
│ │ │ └── BusinessType.java
│ │ ├── LocalUserId.java
│ │ ├── LocalUser.java
│ │ ├── config
│ │ │ ├── datasource
│ │ │ │ ├── MybatisConfig.java
│ │ │ │ ├── MyMetaObjectHandler.java
│ │ │ │ ├── method
│ │ │ │ │ ├── DelById.java
│ │ │ │ │ ├── SelectOneWithoutLogicDel.java
│ │ │ │ │ ├── SelectPageWithoutLogicDel.java
│ │ │ │ │ ├── LogicDelWithFillStatus.java
│ │ │ │ │ ├── UpdateByIdWithoutLogicDel.java
│ │ │ │ │ ├── MethodConstant.java
│ │ │ │ │ └── AbstractMethodWrapper.java
│ │ │ │ ├── MySqlInjector.java
│ │ │ │ └── MyBaseMapper.java
│ │ │ ├── interceptor
│ │ │ │ └── RemoveThreadLocalInterceptor.java
│ │ │ ├── sercurity
│ │ │ │ ├── WebMvcConfig.java
│ │ │ │ ├── UserDetailsServiceImpl.java
│ │ │ │ ├── JWTUser.java
│ │ │ │ └── JWTConfig.java
│ │ │ ├── redis
│ │ │ │ └── RedisConfig.java
│ │ │ ├── thread
│ │ │ │ └── ThreadPoolConfig.java
│ │ │ ├── SwaggerConfiguration.java
│ │ │ └── GlobalExceptionHandler.java
│ │ └── manager
│ │ │ ├── ShutdownManager.java
│ │ │ ├── factory
│ │ │ └── AsyncFactory.java
│ │ │ └── AsyncManager.java
│ │ ├── dto
│ │ ├── RecordDetailBookSumDTO.java
│ │ ├── RecordBookAnalysisDTO.java
│ │ ├── SpendCategoryTotalDTO.java
│ │ ├── MonthRecordAnalysisDTO.java
│ │ ├── RecordAccountAnalysisDTO.java
│ │ ├── SpendMonthDetailDTO.java
│ │ ├── RoleMenuDTO.java
│ │ ├── RecordDetailDTO.java
│ │ └── UserRoleDTO.java
│ │ ├── service
│ │ ├── LoginService.java
│ │ ├── CommonLogService.java
│ │ ├── RecordSysCategoryService.java
│ │ ├── UserRoleService.java
│ │ ├── impl
│ │ │ ├── CommonLogServiceImpl.java
│ │ │ ├── RecordSysCategoryServiceImpl.java
│ │ │ ├── UserRoleServiceImpl.java
│ │ │ ├── IncomeRecordDetail.java
│ │ │ ├── RoleMenuServiceImpl.java
│ │ │ ├── RoleServiceImpl.java
│ │ │ └── DictItemServiceImpl.java
│ │ ├── DictService.java
│ │ ├── RecordUserCategoryService.java
│ │ ├── RoleMenuService.java
│ │ ├── RecordDetailFactory.java
│ │ ├── RoleService.java
│ │ ├── DictItemService.java
│ │ ├── WechatAuthService.java
│ │ ├── RecordDetailHandler.java
│ │ ├── RecordAccountService.java
│ │ ├── UserService.java
│ │ ├── MenuService.java
│ │ ├── RecordBookService.java
│ │ └── RecordDetailService.java
│ │ ├── constant
│ │ ├── RedisKey.java
│ │ ├── SexConstant.java
│ │ ├── RoleConstant.java
│ │ ├── PermissionConstant.java
│ │ ├── Constants.java
│ │ ├── UrlConstant.java
│ │ ├── CommonConstants.java
│ │ ├── MenuConstants.java
│ │ ├── RecordConstant.java
│ │ └── CodeMsg.java
│ │ ├── mapper
│ │ ├── CommonLogMapper.java
│ │ ├── RecordSysCategoryMapper.java
│ │ ├── DictMapper.java
│ │ ├── UserRoleMapper.java
│ │ ├── RecordBookMapper.java
│ │ ├── WechatUserMapper.java
│ │ ├── RecordUserCategoryMapper.java
│ │ ├── DictItemMapper.java
│ │ ├── RoleMenuMapper.java
│ │ ├── RecordAccountMapper.java
│ │ ├── UserMapper.java
│ │ ├── MenuMapper.java
│ │ ├── RoleMapper.java
│ │ └── RecordDetailMapper.java
│ │ ├── vo
│ │ ├── GetRecordCategoryVO.java
│ │ ├── GetDictItemVO.java
│ │ ├── AccountBaseSettingVO.java
│ │ ├── QrcodeAuthorizationVO.java
│ │ ├── GetDictVO.java
│ │ ├── RecordCategoryVO.java
│ │ ├── AddRoleVO.java
│ │ ├── RoleMenuVO.java
│ │ ├── AddDictVO.java
│ │ ├── RecordAccountVO.java
│ │ ├── AddRecordBookVO.java
│ │ ├── AddDictItemVO.java
│ │ ├── LoginVO.java
│ │ ├── AddUserVO.java
│ │ ├── EditRecordBookVO.java
│ │ ├── EditDictItemVO.java
│ │ ├── EditDictVO.java
│ │ ├── EditRoleVO.java
│ │ ├── GetMenusVO.java
│ │ ├── PageVO.java
│ │ ├── AddMenuVO.java
│ │ ├── LoginSuccessVO.java
│ │ ├── EditUserVO.java
│ │ ├── GetUsersVO.java
│ │ ├── EditMenuVO.java
│ │ ├── GetSixMonthRecordsVO.java
│ │ ├── RegisterVO.java
│ │ ├── WechatUserVO.java
│ │ ├── GetRolesVO.java
│ │ ├── GetRecordsByMonthVO.java
│ │ ├── RecordDetailVO.java
│ │ └── Result.java
│ │ ├── bo
│ │ ├── QrCodeInfoBO.java
│ │ ├── UserMenuBO.java
│ │ ├── PageBO.java
│ │ ├── RecordDetailBO.java
│ │ └── MenuBO.java
│ │ ├── SpringbootSimpleRecordApplication.java
│ │ ├── controller
│ │ ├── basic
│ │ │ ├── CommonLogController.java
│ │ │ ├── LoginController.java
│ │ │ ├── AccountController.java
│ │ │ ├── RegisterController.java
│ │ │ └── DictItemController.java
│ │ ├── auth
│ │ │ └── WechatAuthController.java
│ │ └── record
│ │ │ ├── HomeController.java
│ │ │ └── AnalysisController.java
│ │ ├── exception
│ │ ├── BaseException.java
│ │ ├── NotFoundException.java
│ │ ├── BusinessException.java
│ │ └── ParameterException.java
│ │ ├── utils
│ │ ├── IDUtil.java
│ │ ├── PasswordUtil.java
│ │ ├── AddressUtil.java
│ │ ├── SpringContextUtil.java
│ │ ├── ClassUtil.java
│ │ └── ThreadUtil.java
│ │ └── entity
│ │ ├── WechatUserDO.java
│ │ ├── RoleDO.java
│ │ ├── RoleMenuDO.java
│ │ ├── UserRoleDO.java
│ │ ├── DictDO.java
│ │ ├── BaseDO.java
│ │ ├── DictItemDO.java
│ │ ├── SpendCategoryDO.java
│ │ ├── RecordBookDO.java
│ │ ├── MenuDO.java
│ │ ├── RecordAccountDO.java
│ │ ├── UserDO.java
│ │ ├── RecordSysCategoryDO.java
│ │ ├── RecordUserCategoryDO.java
│ │ ├── CommonLogDO.java
│ │ └── RecordDetailDO.java
└── test
│ └── java
│ └── cn
│ └── jackbin
│ └── SimpleRecord
│ ├── SpringBootSimpleRecordApplicationTest.java
│ └── utils
│ └── TestUtil.java
├── .gitignore
├── readme.md
└── LICENSE
/env/redis/conf:
--------------------------------------------------------------------------------
1 | requirepass TEST1234
2 | protected-mode no
--------------------------------------------------------------------------------
/env/mysql/conf:
--------------------------------------------------------------------------------
1 | # 设置mysql8的密码认证方式为
2 | default-authentication-plugin=mysql_native_password
3 | lower-case-table-names=1
--------------------------------------------------------------------------------
/src/main/resources/mapper/WechatUser:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/CommonLogMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/RecordBookMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/RecordSysCategoryMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/aspect/ResultAspect.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.aspect;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: 封装所有请求返回结果的切面类
7 | * @date: 2020/7/23 20:54
8 | **/
9 | public class ResultAspect {
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/RecordUserCategoryMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/RecordDetailBookSumDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * 账本金额合计
7 | */
8 | @Data
9 | public class RecordDetailBookSumDTO {
10 | private Integer recordBookId;
11 |
12 | private Double amountTotal;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/LoginService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.service
7 | * @date: 2021/4/19 22:22
8 | **/
9 | public interface LoginService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/resources/application-prod.yml:
--------------------------------------------------------------------------------
1 | # 生产环境配置
2 | # 服务端口
3 | server:
4 | port: 5000
5 | # 数据源配置,请修改为你项目的实际配置
6 | spring:
7 | datasource:
8 | url: jdbc:mysql://localhost:3306/jianzhang?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF8
9 | username: root
10 | password: root
11 | driver-class-name: com.mysql.cj.jdbc.Drivere
12 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/RedisKey.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2021/4/22 22:03
8 | **/
9 | public class RedisKey {
10 | public final static String WECHAT_ACCESS_TOKEN = "wechatAccessToken";
11 | }
12 |
--------------------------------------------------------------------------------
/src/test/java/cn/jackbin/SimpleRecord/SpringBootSimpleRecordApplicationTest.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | public class SpringBootSimpleRecordApplicationTest {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/SexConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2020/8/31 20:24
8 | **/
9 | public class SexConstant {
10 | public static final int MAN = 1;
11 |
12 | public static final int WOMAN = 2;
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/UserRoleMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | delete from tb_user_role where user_id = #{userId}
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/RoleConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2021/3/2 20:41
8 | **/
9 | public class RoleConstant {
10 | public static final String ROOT = "root";
11 |
12 | public static final String DEFAULT = "default";
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/anotations/HandleDict.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.anotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: 处理字典
9 | * @date: 2021/8/30 20:32
10 | **/
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Target(ElementType.METHOD)
13 | @Documented
14 | public @interface HandleDict {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/PermissionConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2020/8/20 20:21
8 | **/
9 | public class PermissionConstant {
10 |
11 | /**
12 | * 权限标识
13 | */
14 | public static final String PermissionSign = "permissions";
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/CommonLogMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.CommonLogDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 |
6 | /**
7 | *
8 | * Mapper 接口
9 | *
10 | *
11 | * @author jackbin
12 | * @since 2020-07-21
13 | */
14 | public interface CommonLogMapper extends BaseMapper {
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/CommonLogService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.entity.CommonLogDO;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | *
8 | * 服务类
9 | *
10 | *
11 | * @author jackbin
12 | * @since 2020-07-21
13 | */
14 | public interface CommonLogService extends IService {
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/anotations/LoginRequired.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.anotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: 登录校验
9 | * @date: 2020/7/28 20:02
10 | **/
11 | @Target({ElementType.METHOD})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | @Documented
14 | public @interface LoginRequired {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetRecordCategoryVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 | import lombok.EqualsAndHashCode;
5 |
6 | /**
7 | * @author: create by bin
8 | * @version: v1.0
9 | * @description: cn.jackbin.SimpleRecord.vo
10 | * @date: 2021/12/29 20:37
11 | **/
12 | @EqualsAndHashCode(callSuper = true)
13 | @Data
14 | public class GetRecordCategoryVO extends PageVO {
15 | private String recordTypeCode;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/anotations/DictValue.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.anotations;
2 |
3 | import java.lang.annotation.*;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: 字典注解
9 | * @date: 2021/8/30 19:42
10 | **/
11 |
12 | @Retention(RetentionPolicy.RUNTIME)
13 | @Target(ElementType.FIELD)
14 | @Documented
15 | public @interface DictValue {
16 |
17 | String code(); // 默认值为fieldName
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/RecordBookAnalysisDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordBookDO;
4 | import lombok.Data;
5 | import lombok.EqualsAndHashCode;
6 |
7 | @EqualsAndHashCode(callSuper = true)
8 | @Data
9 | public class RecordBookAnalysisDTO extends RecordBookDO {
10 |
11 | // 收入
12 | private Double incomeTotal = 0.0;
13 |
14 | // 收入
15 | private Double expendTotal = 0.0;
16 | }
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 |
30 | ### VS Code ###
31 | .vscode/
32 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RecordSysCategoryMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordSysCategoryDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 |
6 | /**
7 | * @author: create by bin
8 | * @version: v1.0
9 | * @description: cn.jackbin.SimpleRecord.mapper
10 | * @date: 2021/7/13 21:59
11 | **/
12 | public interface RecordSysCategoryMapper extends BaseMapper {
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/Constants.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2021/4/8 21:39
8 | **/
9 | public class Constants {
10 | /**
11 | * UTF-8 字符集
12 | */
13 | public static final String UTF8 = "UTF-8";
14 |
15 | /**
16 | * GBK 字符集
17 | */
18 | public static final String GBK = "GBK";
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordSysCategoryService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordSysCategoryDO;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.service
11 | * @date: 2020/11/23 21:35
12 | **/
13 | public interface RecordSysCategoryService extends IService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/UserRoleService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.entity.UserRoleDO;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | *
10 | * 服务类
11 | *
12 | *
13 | * @author jackbin
14 | * @since 2020-07-21
15 | */
16 | public interface UserRoleService extends IService {
17 | void edit(Integer userId, List roleIds);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetDictItemVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.Positive;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/8/16 20:22
12 | **/
13 | @Data
14 | public class GetDictItemVO extends PageVO {
15 |
16 | @Positive(message = "字典Id需为正数")
17 | private Integer dictId;
18 |
19 | private Integer status;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/DictMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.common.config.datasource.MyBaseMapper;
4 | import cn.jackbin.SimpleRecord.entity.DictDO;
5 | import org.springframework.stereotype.Repository;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.mapper
11 | * @date: 2021/7/20 20:08
12 | **/
13 | @Repository
14 | public interface DictMapper extends MyBaseMapper {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/UserRoleMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.UserRoleDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | /**
8 | *
9 | * Mapper 接口
10 | *
11 | *
12 | * @author jackbin
13 | * @since 2020-07-21
14 | */
15 | @Repository
16 | public interface UserRoleMapper extends BaseMapper {
17 | int deleteByUserId(int userId);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RecordBookMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordBookDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.mapper
11 | * @date: 2021/7/13 21:59
12 | **/
13 | @Repository
14 | public interface RecordBookMapper extends BaseMapper {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/WechatUserMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.WechatUserDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.mapper
11 | * @date: 2020/11/3 21:31
12 | **/
13 | @Repository
14 | public interface WechatUserMapper extends BaseMapper {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AccountBaseSettingVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/3/8 20:27
12 | **/
13 | @Data
14 | public class AccountBaseSettingVO {
15 | @NotNull(message = "昵称不能为空")
16 | private String nickname;
17 |
18 | @NotNull(message = "性别不能为空")
19 | private Integer sex;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/RoleMenuMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | delete from tb_role_menu where id in
7 |
8 | #{id}
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/QrcodeAuthorizationVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/4/21 20:21
12 | **/
13 | @Data
14 | public class QrcodeAuthorizationVO {
15 | @NotNull(message = "uuid不能为空")
16 | private String uuid;
17 |
18 | @NotNull(message = "token不能为空")
19 | private String token;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/bo/QrCodeInfoBO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.bo;
2 |
3 | import lombok.Data;
4 |
5 |
6 | /**
7 | * @author: create by bin
8 | * @version: v1.0
9 | * @description: 二维码信息
10 | * @date: 2021/4/19 22:23
11 | **/
12 | @Data
13 | public class QrCodeInfoBO {
14 |
15 | // 是否已扫描
16 | private Boolean isScanned = false;
17 |
18 | // 是否过期
19 | private Boolean isExpired = false;
20 |
21 | // 扫码登录时间
22 | private String scannedTime;
23 |
24 | // token字符
25 | private String token;
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RecordUserCategoryMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordUserCategoryDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.mapper
11 | * @date: 2021/7/13 22:00
12 | **/
13 | @Repository
14 | public interface RecordUserCategoryMapper extends BaseMapper {
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/SpendCategoryTotalDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import lombok.Builder;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: 花费类别的总额
11 | * @date: 2020/10/15 21:31
12 | **/
13 | @Data
14 | @Builder
15 | public class SpendCategoryTotalDTO {
16 |
17 | /**
18 | * 花费类别名称
19 | */
20 | private String recordCategory;
21 |
22 | /**
23 | * 花费总额
24 | */
25 | private Double total;
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/SpringbootSimpleRecordApplication.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 |
7 | @SpringBootApplication
8 | @MapperScan("cn.jackbin.SimpleRecord.mapper")
9 | public class SpringbootSimpleRecordApplication {
10 |
11 | public static void main(String[] args) {
12 | SpringApplication.run(SpringbootSimpleRecordApplication.class, args);
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetDictVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.vo
9 | * @date: 2021/7/19 21:39
10 | **/
11 | @Data
12 | public class GetDictVO extends PageVO {
13 | /**
14 | * 字典名称
15 | */
16 | private String name;
17 |
18 | /**
19 | * 字典编码
20 | */
21 | private String code;
22 |
23 | /**
24 | * 状态(0:正常,1:停用)
25 | */
26 | private Integer status;
27 |
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/RecordCategoryVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotBlank;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/12/29 21:09
12 | **/
13 | @Data
14 | public class RecordCategoryVO {
15 | @NotBlank(message = "类别编码不能为空")
16 | private String recordTypeCode;
17 |
18 | @NotBlank(message = "类别名称不能为空")
19 | private String name;
20 |
21 | private Integer orderNo;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/controller/basic/CommonLogController.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.controller.basic;
2 |
3 |
4 | import io.swagger.annotations.Api;
5 | import org.springframework.web.bind.annotation.RequestMapping;
6 |
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | /**
10 | *
11 | * 前端控制器
12 | *
13 | *
14 | * @author jackbin
15 | * @since 2020-07-21
16 | */
17 | @Api(value = "CommonLogController", tags = { "日志相关接口" })
18 | @RestController
19 | @RequestMapping("/log")
20 | public class CommonLogController {
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/exception/BaseException.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.exception;
2 |
3 | import cn.jackbin.SimpleRecord.constant.CodeMsg;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.exception
9 | * @date: 2020/7/27 21:16
10 | **/
11 | public class BaseException extends RuntimeException{
12 | protected CodeMsg codeMsg;
13 |
14 | public BaseException(String message) {
15 | super(message);
16 | }
17 |
18 | public CodeMsg getCodeMsg() {
19 | return codeMsg;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/DictItemMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.common.config.datasource.MyBaseMapper;
4 | import cn.jackbin.SimpleRecord.entity.DictItemDO;
5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 | import org.springframework.stereotype.Repository;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.mapper
12 | * @date: 2021/8/4 20:09
13 | **/
14 | @Repository
15 | public interface DictItemMapper extends MyBaseMapper {
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/MonthRecordAnalysisDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.vo
13 | * @date: 2020/10/28 20:50
14 | **/
15 | @Data
16 | @NoArgsConstructor
17 | public class MonthRecordAnalysisDTO {
18 | // 月份
19 | private String occurMonth;
20 |
21 | // 总额
22 | private Double total = 0.0;
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddRoleVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import lombok.Data;
5 |
6 | import javax.validation.constraints.NotNull;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2020/12/10 20:01
13 | **/
14 | @ApiModel(value="AddRoleVO对象", description="添加角色对象")
15 | @Data
16 | public class AddRoleVO {
17 | @NotNull(message = "名称不能为空")
18 | public String name;
19 |
20 | @NotNull(message = "描述不能为空")
21 | public String info;
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/RecordAccountAnalysisDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordAccountDO;
4 | import lombok.Data;
5 | import lombok.EqualsAndHashCode;
6 | import lombok.NoArgsConstructor;
7 |
8 | @EqualsAndHashCode(callSuper = true)
9 | @Data
10 | @NoArgsConstructor
11 | public class RecordAccountAnalysisDTO extends RecordAccountDO {
12 |
13 | private static final long serialVersionUID = 4810168723585415780L;
14 | // 流入
15 | private Double inflow = 0.0;
16 |
17 | // 流出
18 | private Double outflow = 0.0;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/enums/BusinessStatus.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.enums;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.common.enums
7 | * @date: 2021/4/7 22:37
8 | **/
9 | public enum BusinessStatus {
10 | /**
11 | * 成功
12 | */
13 | SUCCESS(0),
14 |
15 | /**
16 | * 失败
17 | */
18 | FAIL(-1),
19 | ;
20 |
21 | private int code;
22 |
23 | BusinessStatus(int code) {
24 | this.code = code;
25 | }
26 |
27 | public int getCode() {
28 | return code;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/SpendMonthDetailDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 |
5 | import java.util.Date;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: 花费月份详情
11 | * @date: 2020/10/27 22:01
12 | **/
13 | public class SpendMonthDetailDTO {
14 |
15 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
16 | private Date month;
17 |
18 | /**
19 | * 支出总额
20 | */
21 | private Double expendTotal;
22 |
23 | /**
24 | * 收入总额
25 | */
26 | private Double incomeTotal;
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/UrlConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2020/11/2 20:51
8 | **/
9 | public class UrlConstant {
10 | public static final String wechatOpenIdUrl = "https://api.weixin.qq.com/sns/jscode2session";
11 |
12 | public static final String wechatAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
13 |
14 | public static final String wechatMiniAppQrcodeUnlimitedUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=";
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RoleMenuMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RoleDO;
4 | import cn.jackbin.SimpleRecord.entity.RoleMenuDO;
5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 | import org.springframework.stereotype.Repository;
7 |
8 | import java.util.Date;
9 | import java.util.List;
10 |
11 | /**
12 | *
13 | * Mapper 接口
14 | *
15 | *
16 | * @author jackbin
17 | * @since 2020-07-21
18 | */
19 | @Repository
20 | public interface RoleMenuMapper extends BaseMapper {
21 |
22 | int deleteBatch(List ids);
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/bo/UserMenuBO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.bo;
2 |
3 | import cn.jackbin.SimpleRecord.entity.MenuDO;
4 | import cn.jackbin.SimpleRecord.entity.UserDO;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: user的视图类
14 | * @date: 2020/8/3 20:33
15 | **/
16 | @Data
17 | @AllArgsConstructor
18 | public class UserMenuBO {
19 |
20 | /**
21 | * 用户类
22 | */
23 | private UserDO userDO;
24 |
25 | /**
26 | * 权限列表
27 | */
28 | private List menuDOList;
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/RoleMenuDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import lombok.Data;
4 | import lombok.NoArgsConstructor;
5 |
6 | import java.awt.*;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.dto
12 | * @date: 2020/11/24 20:18
13 | **/
14 | @Data
15 | @NoArgsConstructor
16 | public class RoleMenuDTO {
17 |
18 | /**
19 | * 角色Id
20 | */
21 | private Long id;
22 |
23 | /**
24 | * 角色名
25 | */
26 | private String name;
27 |
28 | /**
29 | * 角色信息
30 | */
31 | private String info;
32 |
33 | private Menu menu;
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/RoleMenuVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import cn.jackbin.SimpleRecord.bo.MenuBO;
4 | import cn.jackbin.SimpleRecord.entity.RoleDO;
5 | import cn.jackbin.SimpleRecord.entity.UserDO;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Data;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.vo
15 | * @date: 2020/11/24 20:41
16 | **/
17 | @Data
18 | @AllArgsConstructor
19 | public class RoleMenuVO {
20 | private UserDO user;
21 |
22 | private List roles;
23 |
24 | private List menus;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/impl/CommonLogServiceImpl.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service.impl;
2 |
3 | import cn.jackbin.SimpleRecord.entity.CommonLogDO;
4 | import cn.jackbin.SimpleRecord.mapper.CommonLogMapper;
5 | import cn.jackbin.SimpleRecord.service.CommonLogService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | *
11 | * 服务实现类
12 | *
13 | *
14 | * @author jackbin
15 | * @since 2020-07-21
16 | */
17 | @Service
18 | public class CommonLogServiceImpl extends ServiceImpl implements CommonLogService {
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddDictVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotBlank;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/7/21 21:37
12 | **/
13 | @Data
14 | public class AddDictVO {
15 | /**
16 | * 字典名称
17 | */
18 | @NotBlank(message = "字典名称不能为空")
19 | private String name;
20 |
21 | /**
22 | * 字典编码
23 | */
24 | @NotBlank(message = "字典编码不能为空")
25 | private String code;
26 |
27 | private Integer orderNo;
28 |
29 | private String remark;
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/exception/NotFoundException.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.exception;
2 |
3 | import cn.jackbin.SimpleRecord.constant.CodeMsg;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.exception
9 | * @date: 2020/7/27 21:08
10 | **/
11 | public class NotFoundException extends BaseException {
12 | public NotFoundException(String message) {
13 | super(message);
14 | super.codeMsg = CodeMsg.NOT_FIND_DATA;
15 | }
16 |
17 | public NotFoundException(CodeMsg codeMsg,String message) {
18 | super(message);
19 | super.codeMsg = codeMsg;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/RecordAccountVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 | import javax.validation.constraints.Positive;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/8/25 21:02
13 | **/
14 | @Data
15 | public class RecordAccountVO {
16 | @Positive(message = "记账账户类型需为正数")
17 | private Integer type;
18 |
19 | @NotNull(message = "名称不能为空")
20 | private String name;
21 |
22 | @NotNull(message = "是否属于尽资产必填")
23 | private Boolean inNetAssets;
24 |
25 | private Integer orderNo;
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/RecordDetailDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordDetailDO;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2020/10/14 23:02
12 | **/
13 | @Data
14 | @NoArgsConstructor
15 | public class RecordDetailDTO extends RecordDetailDO {
16 |
17 | private static final long serialVersionUID = -1400861529425999732L;
18 |
19 | private String recordAccountName;
20 |
21 | private String sourceAccountName;
22 |
23 | private String targetAccountName;
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/CommonConstants.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2021/7/21 21:42
8 | **/
9 | public class CommonConstants {
10 |
11 | /**
12 | * 正常
13 | */
14 | public static final int STATUS_NORMAL = 0;
15 |
16 | /**
17 | * 已删除
18 | */
19 | public static final int STATUS_DEL = 1;
20 |
21 | /**
22 | * 非系统内置
23 | */
24 | public static final int NOT_SYS_DEFAULT = 0;
25 |
26 | /**
27 | * 系统内置
28 | */
29 | public static final int SYS_DEFAULT = 1;
30 |
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddRecordBookVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableName;
4 | import lombok.*;
5 |
6 | import javax.validation.constraints.NotNull;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/9/8 19:25
13 | **/
14 | @Data
15 | public class AddRecordBookVO {
16 |
17 | /**
18 | * 账本名称
19 | */
20 | @NotNull(message = "账本名称不能为空")
21 | private String name;
22 |
23 | /**
24 | * 备注
25 | */
26 | private String remark;
27 |
28 | /**
29 | * 排序
30 | */
31 | private Integer orderNo;
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RecordAccountMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.common.config.datasource.MyBaseMapper;
4 | import cn.jackbin.SimpleRecord.dto.RecordAccountAnalysisDTO;
5 | import cn.jackbin.SimpleRecord.entity.RecordAccountDO;
6 | import org.springframework.stereotype.Repository;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.mapper
14 | * @date: 2021/7/13 21:54
15 | **/
16 | @Repository
17 | public interface RecordAccountMapper extends MyBaseMapper {
18 | List queryInAndOutTotal(Integer userId);
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddDictItemVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotBlank;
6 | import javax.validation.constraints.Positive;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/8/18 21:16
13 | **/
14 | @Data
15 | public class AddDictItemVO {
16 |
17 | @Positive(message = "字典ID为整数")
18 | private Integer dictId;
19 |
20 | @NotBlank(message = "字典项文本内容不能为空")
21 | private String text;
22 |
23 | @NotBlank(message = "字典项值不能为空")
24 | private String value;
25 |
26 | private Integer orderNo;
27 |
28 | private String remark;
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/UserMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.UserDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | /**
11 | *
12 | * Mapper 接口
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | @Repository
19 | public interface UserMapper extends BaseMapper {
20 | int queryTotal(String username, Boolean deleted, Date date);
21 |
22 | List queryByPage(String username, Boolean deleted, Date date, int begin, int end);
23 |
24 | void notDelete(Long id);
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/MenuConstants.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2020/11/25 20:37
8 | **/
9 | public class MenuConstants {
10 |
11 | /**
12 | * 目录
13 | */
14 | public static final String M = "M";
15 |
16 | /**
17 | * 菜单
18 | */
19 | public static final String C = "C";
20 |
21 | /**
22 | * 按钮
23 | */
24 | public static final String F ="F";
25 |
26 | /**
27 | * 外链
28 | */
29 | public static final Integer OC = 1;
30 |
31 | /**
32 | * 外链
33 | */
34 | public static final Integer notOC = 0;
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/LoginVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import io.swagger.annotations.ApiModelProperty;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import javax.validation.constraints.NotBlank;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.dto
14 | * @date: 2020/7/23 20:58
15 | **/
16 | @ApiModel(value="LoginDTO对象", description="用户登录对象")
17 | @Data
18 | public class LoginVO {
19 |
20 | @ApiModelProperty(required = true, value = "用户名")
21 | private String username;
22 |
23 | @ApiModelProperty(required = true, value = "密码")
24 | private String password;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/MenuMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.MenuDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.mapper
14 | * @date: 2020/11/23 21:30
15 | **/
16 | @Repository
17 | public interface MenuMapper extends BaseMapper {
18 | List queryUserMenus(Long userId);
19 |
20 | List queryAllMenus();
21 |
22 | List queryRoleMenus(Long roleId);
23 |
24 | void notDelete(Long id);
25 | }
26 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | > 简账的后端
2 | > 基于SpringBoot的Restful风格的接口
3 | > 欢迎Star或者Fork,如有问题可以给我提Issue
4 |
5 | ## 预览
6 | 线上预览地址:[简账](http://jz.jackbin.cn) (账号:root,密码:Abcd1234)
7 | 数据库设计文档(有道云):[数据库设计](http://note.youdao.com/noteshare?id=09422f09d4a680fcd7b179bea4c7ce78&sub=2B6B7FAA29F440548DE6AF68358610D5)
8 |
9 | ## 简账系列教程
10 | - CSDN:[简账系列文章](https://blog.csdn.net/weixin_38500202/category_11027299.html)
11 | - 掘金:[简账系列文章](https://juejin.cn/column/6960993522958729224)
12 |
13 | ## 环境
14 | - JDK:openJDK 11
15 | - SpringBoot:2.3.x
16 | - SpringSecurity:5.3.x
17 | - MySQL:8.0
18 | - JJWT:0.7.0
19 | - mybatisPlus:3.3.x
20 | - knife4j(在线文档):knife4j
21 |
22 |
23 | ## 运行
24 | ```shell
25 | Run SpringbootSimpleRecordApplication
26 | ```
27 |
28 | ## LICENSE
29 | [MIT](LICENSE)
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddUserVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 | import java.util.List;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/2/27 19:22
13 | **/
14 | @Data
15 | public class AddUserVO {
16 | @NotNull(message = "用户名不能为空")
17 | private String username;
18 |
19 | @NotNull(message = "昵称不能为空")
20 | private String nickname;
21 |
22 | @NotNull(message = "性别不能为空")
23 | private Integer sex;
24 |
25 | private String email;
26 |
27 | @NotNull(message = "密码不能为空")
28 | private String credential;
29 |
30 | private List roles;
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/mapper/RoleMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.mapper;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RoleDO;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.springframework.stereotype.Repository;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | /**
11 | *
12 | * Mapper 接口
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | @Repository
19 | public interface RoleMapper extends BaseMapper {
20 | List queryByUserId(Long userId);
21 |
22 | int queryTotal(String name, Boolean deleted, Date date);
23 |
24 | List queryByPage(String name, Boolean deleted, Date date, int begin, int end);
25 |
26 | void notDelete(Long id);
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditRecordBookVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.vo
11 | * @date: 2021/9/8 19:43
12 | **/
13 | @Data
14 | public class EditRecordBookVO {
15 |
16 | /**
17 | * 账本名称
18 | */
19 | @NotNull(message = "账本名称不能为空")
20 | private String name;
21 |
22 | /**
23 | * 备注
24 | */
25 | private String remark;
26 |
27 | /**
28 | * 是否为用户默认
29 | */
30 | @NotNull(message = "是否默认账本不能为空")
31 | private Boolean isUserDefault;
32 |
33 | /**
34 | * 排序
35 | */
36 | private Integer orderNo;
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | # 主配置文件
2 | # 激活环境配置
3 | spring:
4 | profiles:
5 | active: dev
6 | # 统一请求前缀
7 | server:
8 | servlet:
9 | context-path: /api
10 | tomcat:
11 | max-http-header-size: 8192
12 |
13 | # 日志配置文件(日志配置文件)
14 | logging:
15 | config: classpath:log4j2.xml
16 |
17 |
18 | # jwt相关配置
19 | jwt:
20 | secret: abcdefg1234567 # 加密密钥
21 | expire: 6 # token有效时长(h)
22 | header: token # header 名称
23 |
24 | #mybatis-plus
25 | mybatis-plus:
26 | mapper-locations: classpath:mapper/*.xml
27 | configuration:
28 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印将执行的sql语句
29 | global-config:
30 | db-config:
31 | logic-delete-field: delete_time
32 | logic-delete-value: now() # 逻辑已删除值
33 | logic-not-delete-value: 'null' # 逻辑未删除值
34 |
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/anotations/CommonLog.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.anotations;
2 |
3 | import cn.jackbin.SimpleRecord.common.enums.BusinessType;
4 |
5 | import java.lang.annotation.*;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: 自定义操作日志记录注解
11 | * @date: 2021/4/3 15:14
12 | **/
13 | @Target({ ElementType.PARAMETER, ElementType.METHOD })
14 | @Retention(RetentionPolicy.RUNTIME)
15 | @Documented
16 | public @interface CommonLog {
17 | /**
18 | * 模块
19 | */
20 | String title() default "";
21 |
22 | /**
23 | * 业务
24 | */
25 | BusinessType businessType() default BusinessType.OTHER;
26 |
27 | /**
28 | * 是否保存请求的参数
29 | */
30 | boolean isSaveRequestData() default true;
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditDictItemVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotBlank;
6 | import javax.validation.constraints.Positive;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/8/18 21:26
13 | **/
14 | @Data
15 | public class EditDictItemVO {
16 | @Positive(message = "主键ID为整数")
17 | private Integer id;
18 |
19 | @Positive(message = "字典ID为整数")
20 | private Integer dictId;
21 |
22 | @NotBlank(message = "字典项文本内容不能为空")
23 | private String text;
24 |
25 | @NotBlank(message = "字典项值不能为空")
26 | private String value;
27 |
28 | private String remark;
29 |
30 | private Integer orderNo;
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/exception/BusinessException.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.exception;
2 |
3 | import cn.jackbin.SimpleRecord.constant.CodeMsg;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.exception
9 | * @date: 2020/8/31 19:41
10 | **/
11 | public class BusinessException extends BaseException {
12 | public BusinessException(String message) {
13 | super(message);
14 | super.codeMsg = CodeMsg.BUSINESS_ERROR;
15 | }
16 |
17 | public BusinessException(CodeMsg codeMsg,String message) {
18 | super(message);
19 | super.codeMsg = codeMsg;
20 | }
21 |
22 | public BusinessException(CodeMsg codeMsg) {
23 | super(codeMsg.getMessage());
24 | super.codeMsg = codeMsg;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/exception/ParameterException.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.exception;
2 |
3 | import cn.jackbin.SimpleRecord.constant.CodeMsg;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.exception
9 | * @date: 2020/7/28 19:41
10 | **/
11 | public class ParameterException extends BaseException {
12 | public ParameterException(String message) {
13 | super(message);
14 | super.codeMsg = CodeMsg.PARAMETER_ILLEGAL;
15 | }
16 |
17 | public ParameterException(CodeMsg codeMsg, String message) {
18 | super(message);
19 | super.codeMsg = codeMsg;
20 | }
21 |
22 | public ParameterException(CodeMsg codeMsg) {
23 | super(codeMsg.getMessage());
24 | super.codeMsg = codeMsg;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditDictVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | import javax.validation.constraints.NotNull;
6 | import javax.validation.constraints.Positive;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2021/8/3 20:05
13 | **/
14 | @Data
15 | public class EditDictVO {
16 |
17 | @Positive(message = "ID为整数")
18 | private Integer id;
19 |
20 | /**
21 | * 字典名称
22 | */
23 | @NotNull(message = "名称不能为空")
24 | private String name;
25 |
26 | /**
27 | * 字典编码
28 | */
29 | @NotNull(message = "编码不能为空")
30 | private String code;
31 |
32 | @Positive(message = "排序值需大于0")
33 | private Integer orderNo;
34 |
35 | private String remark;
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/bo/PageBO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.bo;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: 分页返回封装类
13 | * @date: 2020/12/7 20:45
14 | **/
15 | @Data
16 | @AllArgsConstructor
17 | @NoArgsConstructor
18 | public class PageBO {
19 |
20 | public PageBO(int pageNo, int pageSize) {
21 | this.pageNo = pageNo;
22 | this.pageSize = pageSize;
23 | }
24 |
25 | List list;
26 |
27 | // 页数
28 | int pageNo;
29 |
30 | // 分页大小
31 | int pageSize;
32 |
33 | // 总数
34 | int total;
35 |
36 | public int beginPosition() {
37 | return (pageNo -1) * pageSize;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/LocalUserId.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.common
7 | * @date: 2020/11/23 20:21
8 | **/
9 | public class LocalUserId {
10 | private static final ThreadLocal local = new ThreadLocal<>();
11 |
12 | /**
13 | * 得到当前登录用户Id
14 | *
15 | * @return userId | null
16 | */
17 | public static Long get() {
18 | return LocalUserId.local.get();
19 | }
20 |
21 | /**
22 | * 设置登录用户Id
23 | */
24 | public static void set(Long userId) {
25 | LocalUserId.local.set(userId);
26 | }
27 |
28 | /**
29 | * 清理当前用户Id
30 | */
31 | public static void clear() {
32 | LocalUserId.local.remove();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/utils/IDUtil.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.utils;
2 |
3 | import java.util.UUID;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.utils
9 | * @date: 2021/4/26 23:38
10 | **/
11 | public class IDUtil {
12 | /**
13 | * 32位不带"-"
14 | */
15 | public static String randomUUID(){
16 | // 生成36位带-uuid
17 | String uuidOld = UUID.randomUUID().toString();
18 | // 去掉-
19 | String uuid =
20 | (uuidOld.substring(0,8)) +
21 | (uuidOld.substring(9,13)) +
22 | (uuidOld.substring(14,18)) +
23 | (uuidOld.substring(19,23)) +
24 | (uuidOld.substring(24,36));
25 | return uuid;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/resources/application-dev.yml:
--------------------------------------------------------------------------------
1 | # 开发环境配置
2 | # 服务端口
3 | server:
4 | port: 5000
5 | # 数据源配置,请修改为你项目的实际配置
6 | spring:
7 | datasource:
8 | url: jdbc:mysql://localhost:3306/jianzhang?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF8
9 | username: root
10 | password: root
11 | driver-class-name: com.mysql.cj.jdbc.Driver
12 | type: com.alibaba.druid.pool.DruidDataSource
13 |
14 | #配置redis
15 | redis:
16 | database: 0 # Redis数据库索引(默认为0)
17 | host: localhost
18 | port: 6379
19 | password: TEST1234
20 | lettuce:
21 | pool:
22 | max-active: 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
23 | max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
24 | max-idle: 0 # 连接池中的最小空闲连接 默认 0
25 | min-idle: 0 # 连接池中的最小空闲连接 默认 0
26 |
27 | wechat:
28 | appId: wx34xxxasdf123
29 | appSecret: sdaf1234234saffgd
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditRoleVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import javax.validation.constraints.NotNull;
8 | import javax.validation.constraints.Positive;
9 | import java.util.List;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.vo
15 | * @date: 2020/12/16 20:17
16 | **/
17 | @ApiModel(value="EditRoleVO对象", description="编辑角色对象")
18 | @Data
19 | @NoArgsConstructor
20 | public class EditRoleVO {
21 |
22 | @Positive(message = "角色Id为正数")
23 | private Long id;
24 |
25 | @NotNull(message = "角色名不能为空")
26 | private String name;
27 |
28 | @NotNull(message = "角色信息不能为空")
29 | private String info;
30 |
31 | List menuIds;
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/DictService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.entity.DictDO;
5 | import com.baomidou.mybatisplus.extension.service.IService;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.service
11 | * @date: 2021/7/20 20:06
12 | **/
13 | public interface DictService extends IService {
14 | void getByPage(String name, String code, Integer status, PageBO pageBO);
15 |
16 | void add(String name, String code, Integer orderNo, String remark);
17 |
18 | void edit(Integer id, String name, String code, Integer orderNo, String remark);
19 |
20 | DictDO getByCode(String code);
21 |
22 | boolean removeById(Long id);
23 |
24 | void reset(Integer id);
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/impl/RecordSysCategoryServiceImpl.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service.impl;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RecordSysCategoryDO;
4 | import cn.jackbin.SimpleRecord.mapper.RecordSysCategoryMapper;
5 | import cn.jackbin.SimpleRecord.service.RecordSysCategoryService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Service;
9 |
10 | import java.util.List;
11 |
12 | /**
13 | * @author: create by bin
14 | * @version: v1.0
15 | * @description: cn.jackbin.SimpleRecord.service.impl
16 | * @date: 2021/7/13 22:04
17 | **/
18 | @Service
19 | public class RecordSysCategoryServiceImpl extends ServiceImpl implements RecordSysCategoryService {
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetMenusVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import io.swagger.annotations.ApiModel;
5 | import io.swagger.annotations.ApiModelProperty;
6 | import lombok.Data;
7 |
8 | import java.util.Date;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.vo
14 | * @date: 2020/12/24 20:36
15 | **/
16 | @ApiModel(value="GetMenusVO对象", description="分页获取菜单列表对象")
17 | @Data
18 | public class GetMenusVO {
19 | @ApiModelProperty(value = "标题")
20 | private String title;
21 |
22 | @ApiModelProperty(value = "状态")
23 | private Boolean deleted;
24 |
25 | @ApiModelProperty(required = true, value = "年月日(yyyy-MM-dd)")
26 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
27 | private Date date;
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/LocalUser.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common;
2 |
3 | import cn.jackbin.SimpleRecord.entity.UserDO;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: 线程安全的当前登录用户,如果用户为登录,则得到 null
9 | * @date: 2020/7/28 21:17
10 | **/
11 | public class LocalUser {
12 | private static final ThreadLocal local = new ThreadLocal<>();
13 |
14 | /**
15 | * 得到当前登录用户
16 | *
17 | * @return user | null
18 | */
19 | public static UserDO get() {
20 | return LocalUser.local.get();
21 | }
22 |
23 | /**
24 | * 设置登录用户
25 | */
26 | public static void set(UserDO user) {
27 | LocalUser.local.set(user);
28 | }
29 |
30 | /**
31 | * 清理当前用户
32 | */
33 | public static void clear() {
34 | LocalUser.local.remove();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordUserCategoryService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.entity.RecordUserCategoryDO;
5 | import com.baomidou.mybatisplus.extension.service.IService;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.service
13 | * @date: 2020/11/23 21:35
14 | **/
15 | public interface RecordUserCategoryService extends IService {
16 |
17 | List getList(Integer userId);
18 |
19 | void getByPage(Integer userId, String recordTypeCode, PageBO pageBO);
20 |
21 | void reset(Integer userId);
22 |
23 | void saveOrUpdate(Long id, Integer userId, String recordTypeCode, String name, Integer orderNo);
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/PageVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import io.swagger.annotations.ApiModelProperty;
5 | import lombok.Data;
6 |
7 | import javax.validation.constraints.Positive;
8 | import javax.validation.constraints.PositiveOrZero;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.dto
14 | * @date: 2020/9/8 20:41
15 | **/
16 | @ApiModel(value="PageVO对象", description="分页对象")
17 | @Data
18 | public class PageVO {
19 | /**
20 | * 分页的索引
21 | */
22 | @ApiModelProperty(required = true, value = "分页的索引")
23 | @Positive(message = "当前页数须为正数")
24 | int pageNo;
25 |
26 | /**
27 | * 分页的大小
28 | */
29 | @ApiModelProperty(required = true, value = "分页的大小")
30 | @Positive(message = "分页的大小须为正数")
31 | int pageSize;
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/bo/RecordDetailBO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.bo;
2 |
3 | import lombok.Data;
4 | import lombok.NoArgsConstructor;
5 |
6 | import java.util.Date;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.bo
12 | * @date: 2021/10/26 21:32
13 | **/
14 | @Data
15 | @NoArgsConstructor
16 | public class RecordDetailBO {
17 | private Long id;
18 |
19 | private Integer sourceAccountId;
20 |
21 | private Integer targetAccountId;
22 |
23 | private Integer recordBookId;
24 |
25 | private String recordTypeCode;
26 |
27 | private Integer recordTypeId;
28 |
29 | private String recordCategory;
30 |
31 | private Double amount;
32 |
33 | private Date occurTime;
34 |
35 | private Integer recoverableStatus;
36 |
37 | private String tag;
38 |
39 | private String remark;
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/AddMenuVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 | import lombok.NoArgsConstructor;
5 |
6 | import javax.validation.constraints.NotNull;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.vo
12 | * @date: 2020/12/29 20:02
13 | **/
14 | @Data
15 | @NoArgsConstructor
16 | public class AddMenuVO {
17 |
18 | @NotNull(message = "菜单标题不能为空")
19 | private String menuTitle;
20 |
21 | @NotNull(message = "菜单名称不能为空")
22 | private String menuName;
23 |
24 | private Integer parentId;
25 |
26 | private Integer orderNo;
27 |
28 | private String path;
29 |
30 | private String component;
31 |
32 | private Boolean isOuterChain;
33 |
34 | private String menuType;
35 |
36 | private String permissionSign;
37 |
38 | private String iconName;
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RoleMenuService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RoleMenuDO;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | import java.io.Serializable;
8 | import java.util.Collection;
9 | import java.util.List;
10 |
11 | /**
12 | *
13 | * 服务类
14 | *
15 | *
16 | * @author jackbin
17 | * @since 2020-07-21
18 | */
19 | public interface RoleMenuService extends IService {
20 | List getByRoleId(int id);
21 |
22 | /**
23 | * 删除角色权限
24 | */
25 | void removeByRoleId(Integer roleId);
26 |
27 | /**
28 | * 批量删除
29 | */
30 | int removeByIds(List ids);
31 |
32 | /**
33 | * 编辑角色的菜单
34 | */
35 | void edit(Integer roleId, List menuIds);
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/LoginSuccessVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author: create by bin
7 | * @version: v1.0
8 | * @description: cn.jackbin.SimpleRecord.dto
9 | * @date: 2020/9/14 21:43
10 | **/
11 | @Data
12 | public class LoginSuccessVO {
13 |
14 | private Long id;
15 |
16 | /**
17 | * 用户名,唯一
18 | */
19 | private String username;
20 |
21 | /**
22 | * 用户昵称
23 | */
24 | private String nickname;
25 |
26 | /**
27 | * 性别
28 | */
29 | private Integer sex;
30 |
31 | /**
32 | * 头像url
33 | */
34 | private String avatarUrl;
35 |
36 | /**
37 | * 邮箱
38 | */
39 | private String email;
40 |
41 | /**
42 | * token字符串
43 | */
44 | private String token;
45 |
46 | /**
47 | * 微信登录的openId
48 | */
49 | private String openId;
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/WechatUserDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.entity
12 | * @date: 2020/11/3 21:32
13 | **/
14 | @Data
15 | @Builder
16 | @NoArgsConstructor
17 | @AllArgsConstructor
18 | @EqualsAndHashCode(callSuper = false)
19 | @TableName("tb_wechat_user")
20 | public class WechatUserDO {
21 | private static final long serialVersionUID = 1L;
22 |
23 | @TableId(value = "id", type = IdType.AUTO)
24 | private Long id;
25 |
26 | /**
27 | * 用户id
28 | */
29 | private Long userId;
30 |
31 | /**
32 | * 微信openId
33 | */
34 | private String openId;
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditUserVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import javax.validation.constraints.NotNull;
8 | import javax.validation.constraints.Positive;
9 | import java.util.List;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.vo
15 | * @date: 2021/2/19 20:24
16 | **/
17 | @ApiModel(value="EditUserVO对象", description="编辑用户对象")
18 | @Data
19 | @NoArgsConstructor
20 | public class EditUserVO {
21 | @Positive(message = "用户Id为正数")
22 | private Integer id;
23 |
24 | @NotNull(message = "昵称不能为空")
25 | private String nickname;
26 |
27 | @NotNull(message = "性别不能为空")
28 | private Integer sex;
29 |
30 | @NotNull(message = "邮箱不能为空")
31 | private String email;
32 |
33 | private List roles;
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordDetailFactory.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.beans.factory.annotation.Qualifier;
5 | import org.springframework.stereotype.Component;
6 |
7 | import java.util.HashMap;
8 | import java.util.Map;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.service
14 | * @date: 2021/10/8 21:09
15 | **/
16 | @Component
17 | public class RecordDetailFactory {
18 |
19 | static Map map = new HashMap<>(); // 容器池子
20 |
21 | /**
22 | * 获取记账的处理类
23 | */
24 | public RecordDetailHandler getHandler(String code) {
25 | return map.get(code);
26 | }
27 |
28 | public void addHandler(String code, RecordDetailHandler handler) {
29 | map.put(code, handler);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetUsersVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import io.swagger.annotations.ApiModel;
5 | import io.swagger.annotations.ApiModelProperty;
6 | import lombok.Data;
7 |
8 | import javax.validation.constraints.Positive;
9 | import java.util.Date;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.vo
15 | * @date: 2020/12/7 21:00
16 | **/
17 | @ApiModel(value="GetUserVO对象", description="分页获取用户列表对象")
18 | @Data
19 | public class GetUsersVO extends PageVO {
20 |
21 | @ApiModelProperty(value = "用户名")
22 | private String username;
23 |
24 | @ApiModelProperty(value = "状态")
25 | private Boolean deleted;
26 |
27 | @ApiModelProperty(required = true, value = "年月日(yyyy-MM-dd)")
28 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
29 | private Date date;
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/dto/UserRoleDTO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.dto;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RoleDO;
4 | import cn.jackbin.SimpleRecord.entity.UserRoleDO;
5 | import lombok.Data;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.dto
13 | * @date: 2021/2/4 20:33
14 | **/
15 | @Data
16 | public class UserRoleDTO {
17 | private Long id;
18 |
19 | /**
20 | * 用户名,唯一
21 | */
22 | private String username;
23 |
24 | /**
25 | * 用户昵称
26 | */
27 | private String nickname;
28 |
29 | /**
30 | * 性别
31 | */
32 | private Integer sex;
33 |
34 | /**
35 | * 头像url
36 | */
37 | private String avatarUrl;
38 |
39 | /**
40 | * 邮箱
41 | */
42 | private String email;
43 |
44 | List ownedRoles;
45 |
46 | List allRoles;
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RoleService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.entity.RoleDO;
5 | import cn.jackbin.SimpleRecord.vo.EditRoleVO;
6 | import com.baomidou.mybatisplus.extension.service.IService;
7 |
8 | import java.util.Date;
9 | import java.util.List;
10 |
11 | /**
12 | *
13 | * 服务类
14 | *
15 | *
16 | * @author jackbin
17 | * @since 2020-07-21
18 | */
19 | public interface RoleService extends IService {
20 |
21 | List getByUserId(Long userId);
22 |
23 | List getRoles();
24 |
25 | void getByPage(String name, Boolean deleted, Date date, PageBO pageBO);
26 |
27 | boolean add(String name, String info);
28 |
29 | void edit(Long id, String name, String info, List menuIds);
30 |
31 | void reset(Integer id);
32 |
33 | RoleDO getByName(String name);
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RoleDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import java.io.Serializable;
4 |
5 | import com.baomidou.mybatisplus.annotation.IdType;
6 | import com.baomidou.mybatisplus.annotation.TableId;
7 | import com.baomidou.mybatisplus.annotation.TableName;
8 | import lombok.*;
9 |
10 | /**
11 | *
12 | *
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | @Data
19 | @Builder
20 | @NoArgsConstructor
21 | @AllArgsConstructor
22 | @EqualsAndHashCode(callSuper = false)
23 | @TableName("tb_role")
24 | public class RoleDO extends BaseDO implements Serializable {
25 |
26 | private static final long serialVersionUID = 1L;
27 |
28 | @TableId(value = "id", type = IdType.AUTO)
29 | private Long id;
30 |
31 | /**
32 | * 角色名称,例如:root
33 | */
34 | private String name;
35 |
36 | /**
37 | * 角色信息:例如:超级用户
38 | */
39 | private String info;
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/DictItemService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.entity.DictItemDO;
5 | import com.baomidou.mybatisplus.extension.service.IService;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.service
13 | * @date: 2021/8/4 20:07
14 | **/
15 | public interface DictItemService extends IService {
16 | List getDictItemsByDictId(Integer dictId);
17 |
18 | void getByPage(Integer dictId, PageBO pageBO);
19 |
20 | void add(Integer dictId, String text, String value, Integer orderNo, String remark);
21 |
22 | void edit(Integer id, String text, String value, Integer orderNo, String remark);
23 |
24 | void removeById(Long id);
25 |
26 | DictItemDO getByValue(Integer dictId, String value);
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/WechatAuthService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.entity.WechatUserDO;
4 | import cn.jackbin.SimpleRecord.vo.LoginSuccessVO;
5 | import cn.jackbin.SimpleRecord.vo.WechatUserVO;
6 | import com.baomidou.mybatisplus.extension.service.IService;
7 |
8 | import java.awt.image.BufferedImage;
9 | import java.io.IOException;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.service
15 | * @date: 2020/11/3 21:33
16 | **/
17 | public interface WechatAuthService extends IService {
18 |
19 | WechatUserDO getByOpenId(String openId);
20 |
21 | LoginSuccessVO wechatLogin(WechatUserVO vo);
22 |
23 | /**
24 | * 获取接口凭证
25 | */
26 | String getAccessToken();
27 |
28 | /**
29 | * 获取小程序码
30 | */
31 | byte[] getMiniAppQrcode(String accessToken, String scene, String pagePath) throws IOException;
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/MybatisConfig.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource;
2 |
3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 | import org.springframework.transaction.annotation.EnableTransactionManagement;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.common.config
12 | * @date: 2020/7/21 21:15
13 | **/
14 | @EnableTransactionManagement
15 | @Configuration
16 | public class MybatisConfig {
17 | /**mybatis-plus 分页插件*/
18 | @Bean
19 | public PaginationInterceptor paginationInterceptor() {
20 | return new PaginationInterceptor();
21 | }
22 |
23 | /**
24 | * 自定义sql注入器
25 | */
26 | @Bean
27 | public MySqlInjector mySqlInjector(){
28 | return new MySqlInjector();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/controller/basic/LoginController.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.controller.basic;
2 |
3 | import cn.jackbin.SimpleRecord.vo.LoginVO;
4 | import cn.jackbin.SimpleRecord.vo.Result;
5 | import io.swagger.annotations.Api;
6 | import io.swagger.annotations.ApiOperation;
7 | import lombok.extern.slf4j.Slf4j;
8 | import org.springframework.web.bind.annotation.PostMapping;
9 | import org.springframework.web.bind.annotation.RequestBody;
10 | import org.springframework.web.bind.annotation.RequestMapping;
11 |
12 | /**
13 | * @author: create by bin
14 | * @version: v1.0
15 | * @description: 此类仅用于生成Swagger接口信息,并无实际用处
16 | * @date: 2021/2/1 20:48
17 | **/
18 | @Api(value = "LoginController", tags = { "用户登录接口" })
19 | @RequestMapping(value = "/")
20 | public class LoginController {
21 |
22 | @ApiOperation(value = "用户登录")
23 | @PostMapping("user/login")
24 | public Result> userLogin(@RequestBody LoginVO dto) {
25 | return Result.success();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/EditMenuVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import lombok.Data;
4 | import lombok.NoArgsConstructor;
5 |
6 | import javax.validation.constraints.NotNull;
7 | import javax.validation.constraints.Positive;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.vo
13 | * @date: 2020/12/29 20:02
14 | **/
15 | @Data
16 | @NoArgsConstructor
17 | public class EditMenuVO {
18 |
19 | @Positive(message = "id为正数")
20 | private Integer id;
21 |
22 | @NotNull(message = "菜单标题不能为空")
23 | private String menuTitle;
24 |
25 | @NotNull(message = "菜单名称不能为空")
26 | private String menuName;
27 |
28 | private Integer parentId;
29 |
30 | private Integer orderNo;
31 |
32 | private String path;
33 |
34 | private String component;
35 |
36 | private Boolean isOuterChain;
37 |
38 | private String menuType;
39 |
40 | private String permissionSign;
41 |
42 | private String iconName;
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/interceptor/RemoveThreadLocalInterceptor.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.interceptor;
2 |
3 | import cn.jackbin.SimpleRecord.common.LocalUser;
4 | import cn.jackbin.SimpleRecord.common.LocalUserId;
5 | import org.springframework.web.method.HandlerMethod;
6 | import org.springframework.web.servlet.AsyncHandlerInterceptor;
7 |
8 | import javax.servlet.http.HttpServletRequest;
9 | import javax.servlet.http.HttpServletResponse;
10 |
11 | /**
12 | * 拦截器:用于异步移除存储在ThreadLocal中的值
13 | */
14 | public class RemoveThreadLocalInterceptor implements AsyncHandlerInterceptor
15 | {
16 | @Override
17 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
18 | {
19 | // do nothing
20 | return true;
21 | }
22 |
23 | @Override
24 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
25 | LocalUser.clear();
26 | LocalUserId.clear();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordDetailHandler.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.RecordDetailBO;
4 | import cn.jackbin.SimpleRecord.entity.RecordDetailDO;
5 | import org.springframework.transaction.annotation.Transactional;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: 记账处理
11 | * @date: 2021/9/29 23:06
12 | **/
13 | public interface RecordDetailHandler {
14 |
15 | String EXPEND_TYPE = "expendType"; // 支出
16 | String INCOME_TYPE = "incomeType"; // 收入
17 | String TRANSFER_TYPE = "transferType"; // 转账
18 | String LOAN_TYPE = "loanType"; // 借贷
19 |
20 | /**
21 | * 记一笔
22 | */
23 | void handleAdd(Integer userId, RecordDetailBO recordDetailBO);
24 |
25 | /**
26 | * 更新记账记录
27 | */
28 | void handleUpdate(RecordDetailBO recordDetailBO);
29 |
30 | /**
31 | * 删除一条记录
32 | */
33 | void handleDel(RecordDetailDO recordDetailDO);
34 |
35 | void check(Integer userId, RecordDetailBO recordDetailBO);
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/MyMetaObjectHandler.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource;
2 |
3 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
4 | import lombok.extern.slf4j.Slf4j;
5 | import org.apache.ibatis.reflection.MetaObject;
6 | import org.springframework.stereotype.Component;
7 | import java.util.Date;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.common.config
13 | * @date: 2020/9/9 19:46
14 | **/
15 | @Slf4j
16 | @Component
17 | public class MyMetaObjectHandler implements MetaObjectHandler {
18 | @Override
19 | public void insertFill(MetaObject metaObject) {
20 | log.info("start insert fill ....");
21 | this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
22 | }
23 |
24 | @Override
25 | public void updateFill(MetaObject metaObject) {
26 | log.info("start update fill ....");
27 | this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/manager/ShutdownManager.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.manager;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.springframework.stereotype.Component;
5 |
6 | import javax.annotation.PreDestroy;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.common.manager
12 | * @date: 2021/4/8 21:31
13 | **/
14 | @Slf4j
15 | @Component
16 | public class ShutdownManager {
17 |
18 | /**
19 | * 实例在容器销毁前调用
20 | */
21 | @PreDestroy
22 | public void destroy()
23 | {
24 | shutdownAsyncManager();
25 | }
26 |
27 | /**
28 | * 停止异步执行任务
29 | */
30 | private void shutdownAsyncManager()
31 | {
32 | try
33 | {
34 | log.info("====关闭后台任务任务线程池====");
35 | if (AsyncManager.me() != null) {
36 | AsyncManager.me().shutdown();
37 | }
38 | }
39 | catch (Exception e)
40 | {
41 | log.error(e.getMessage(), e);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/sercurity/WebMvcConfig.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.sercurity;
2 |
3 | import cn.jackbin.SimpleRecord.common.config.interceptor.RemoveThreadLocalInterceptor;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: 拦截器配置
12 | * @date: 2022/2/23 21:45
13 | **/
14 | @Configuration
15 | public class WebMvcConfig implements WebMvcConfigurer {
16 | /** 不需要拦截地址 */
17 | public static final String[] excludeUrls = { "/login/**", "/register/**", "/qrcode/**", "/wx/**"};
18 |
19 | @Override
20 | public void addInterceptors(InterceptorRegistry registry) {
21 | registry.addInterceptor(new RemoveThreadLocalInterceptor())
22 | .addPathPatterns("/**")
23 | .excludePathPatterns(excludeUrls)
24 | .order(-10);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/manager/factory/AsyncFactory.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.manager.factory;
2 |
3 | import cn.jackbin.SimpleRecord.entity.CommonLogDO;
4 | import cn.jackbin.SimpleRecord.service.CommonLogService;
5 | import cn.jackbin.SimpleRecord.utils.AddressUtil;
6 | import cn.jackbin.SimpleRecord.utils.SpringContextUtil;
7 |
8 | import java.util.TimerTask;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 异步工厂类
14 | * @date: 2021/4/8 21:33
15 | **/
16 | public class AsyncFactory {
17 |
18 | /**
19 | * 操作日志记录
20 | * @param logDO 日志信息
21 | * @return 任务task
22 | */
23 | public static TimerTask recordCommonLog(final CommonLogDO logDO) {
24 | return new TimerTask() {
25 | @Override
26 | public void run() {
27 | // 远程查询操作地点
28 | logDO.setOperAddress(AddressUtil.getRealAddressByIP(logDO.getOperIp()));
29 | SpringContextUtil.getBean(CommonLogService.class).save(logDO);
30 | }
31 | };
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/env/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | # redis容器
4 | redis:
5 | image: redis:5.0
6 | container_name: redis
7 | restart: always
8 | # 以配置文件的方式启动 redis.conf
9 | command: redis-server /etc/redis/redis.conf
10 | ports:
11 | - 6379:6379
12 | volumes:
13 | - ./redis/data:/data
14 | - ./redis/conf:/etc/redis/redis.conf
15 | - ./redis/logs:/logs
16 |
17 | # mysql容器
18 | mysql:
19 | image: mysql:8.0
20 | container_name: mysql
21 | command:
22 | # MySQL8的密码验证方式默认是 caching_sha2_password,但是很多的连接工具还不支持该方式
23 | # 就需要手动设置下mysql的密码认证方式为以前的 mysql_native_password 方式
24 | --default-authentication-plugin=mysql_native_password
25 | --character-set-server=utf8mb4
26 | --collation-server=utf8mb4_general_ci
27 | # docker的重启策略
28 | restart: always
29 | environment:
30 | MYSQL_ROOT_PASSWORD: root # root用户的密码
31 | ports:
32 | - 3306:3306
33 | volumes:
34 | - ./mysql/data:/var/lib/mysql
35 | # 数据库还原目录
36 | - ./mysql/source:/docker-entrypoint-initdb.d
37 | - ./mysql/logs:/logs
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RoleMenuDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import java.io.Serializable;
4 |
5 | import com.baomidou.mybatisplus.annotation.IdType;
6 | import com.baomidou.mybatisplus.annotation.TableId;
7 | import com.baomidou.mybatisplus.annotation.TableName;
8 | import lombok.*;
9 |
10 | /**
11 | *
12 | *
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | @Data
19 | @Builder
20 | @NoArgsConstructor
21 | @AllArgsConstructor
22 | @EqualsAndHashCode(callSuper = false)
23 | @TableName("tb_role_menu")
24 | public class RoleMenuDO extends BaseDO implements Serializable {
25 |
26 | private static final long serialVersionUID = 1L;
27 |
28 | @TableId(value = "id", type = IdType.AUTO)
29 | private Long id;
30 |
31 | /**
32 | * 角色id
33 | */
34 | private Integer roleId;
35 |
36 | /**
37 | * 菜单id
38 | */
39 | private Integer menuId;
40 |
41 | public RoleMenuDO(Integer roleId, Integer menuId) {
42 | this.roleId = roleId;
43 | this.menuId = menuId;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/UserRoleDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import java.io.Serializable;
4 |
5 | import com.baomidou.mybatisplus.annotation.IdType;
6 | import com.baomidou.mybatisplus.annotation.TableId;
7 | import com.baomidou.mybatisplus.annotation.TableName;
8 | import lombok.*;
9 |
10 | /**
11 | *
12 | *
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | @Data
19 | @Builder
20 | @NoArgsConstructor
21 | @AllArgsConstructor
22 | @EqualsAndHashCode(callSuper = false)
23 | @TableName("tb_user_role")
24 | public class UserRoleDO extends BaseDO implements Serializable {
25 |
26 | private static final long serialVersionUID = 1L;
27 |
28 | public UserRoleDO(Integer userId, Integer roleId) {
29 | this.userId = userId;
30 | this.roleId = roleId;
31 | }
32 |
33 | @TableId(value = "id", type = IdType.AUTO)
34 | private Long id;
35 |
36 | /**
37 | * 用户id
38 | */
39 | private Integer userId;
40 |
41 | /**
42 | * 角色id
43 | */
44 | private Integer roleId;
45 |
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordAccountService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.dto.RecordAccountAnalysisDTO;
4 | import cn.jackbin.SimpleRecord.entity.RecordAccountDO;
5 | import com.baomidou.mybatisplus.extension.service.IService;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author: create by bin
11 | * @version: v1.0
12 | * @description: cn.jackbin.SimpleRecord.service
13 | * @date: 2020/11/23 21:35
14 | **/
15 | public interface RecordAccountService extends IService {
16 |
17 | List getListByUserId(Integer userId);
18 |
19 | void add(Integer userId, Integer type, String name, Integer inNetAssets, Integer orderNo);
20 |
21 | void update(Long id, Integer type, String name, Integer inNetAssets, Integer orderNo);
22 |
23 | /**
24 | * 获取各账户的流入流出金额
25 | */
26 | List analysisAccounts(Integer userId);
27 |
28 | RecordAccountDO getByName(Integer userId, String name);
29 |
30 | /**
31 | * 记账账户初始化
32 | */
33 | void init(Integer userId);
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/DelById.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | import com.baomidou.mybatisplus.core.enums.SqlMethod;
4 | import com.baomidou.mybatisplus.core.metadata.TableInfo;
5 | import org.apache.ibatis.mapping.MappedStatement;
6 | import org.apache.ibatis.mapping.SqlSource;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.common.config.datasource.method
12 | * @date: 2021/8/18 21:33
13 | **/
14 | public class DelById extends AbstractMethodWrapper {
15 | @Override
16 | public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
17 | String sql = String.format(MethodConstant.DEL_BY_ID.getSql(), tableInfo.getTableName(), tableInfo.getKeyColumn(),
18 | tableInfo.getKeyProperty());
19 | SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Object.class);
20 | return this.addDeleteMappedStatement(mapperClass, MethodConstant.DEL_BY_ID.getMethod(), sqlSource);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 BinBinWang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetSixMonthRecordsVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import io.swagger.annotations.ApiModel;
5 | import io.swagger.annotations.ApiModelProperty;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.validation.constraints.NotNull;
10 | import javax.validation.constraints.Positive;
11 | import javax.validation.constraints.PositiveOrZero;
12 | import java.util.Date;
13 |
14 | /**
15 | * @author: create by bin
16 | * @version: v1.0
17 | * @description: cn.jackbin.SimpleRecord.dto
18 | * @date: 2020/10/14 23:14
19 | **/
20 | @ApiModel(value="GetSixMonthRecordsVO对象", description="获取记账记录对象")
21 | @Data
22 | @NoArgsConstructor
23 | public class GetSixMonthRecordsVO {
24 |
25 | @ApiModelProperty(required = true, value = "年月(yyyy-MM)")
26 | @JsonFormat(pattern="yyyy-MM",timezone = "GMT+8")
27 | private Date beginDate;
28 |
29 | @ApiModelProperty(required = true, value = "记录类型编码(支出:expendType;收入:incomeType)")
30 | @NotNull(message = "记录类型编码不能为空")
31 | private String recordTypeCode;
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/DictDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import lombok.*;
5 |
6 | import java.io.Serializable;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: 字典表
12 | * @date: 2021/7/13 20:35
13 | **/
14 | @Data
15 | @Builder
16 | @NoArgsConstructor
17 | @AllArgsConstructor
18 | @EqualsAndHashCode(callSuper = false)
19 | @TableName("tb_dict")
20 | public class DictDO extends BaseDO implements Serializable {
21 |
22 | private static final long serialVersionUID = 3248158042590482689L;
23 |
24 | @TableId(value = "id", type = IdType.AUTO)
25 | private Long id;
26 |
27 | /**
28 | * 字典名称
29 | */
30 | private String name;
31 |
32 | /**
33 | * 字典编码
34 | */
35 | private String code;
36 |
37 | /**
38 | * 状态(0:正常,1:停用)
39 | */
40 | private Integer status;
41 |
42 | /**
43 | * 是否系统内置
44 | */
45 | private Integer isSysDefault;
46 |
47 | /**
48 | * 排序
49 | */
50 | private Integer orderNo;
51 |
52 | private String remark;
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/BaseDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.FieldFill;
4 | import com.baomidou.mybatisplus.annotation.FieldStrategy;
5 | import com.baomidou.mybatisplus.annotation.TableField;
6 | import com.baomidou.mybatisplus.annotation.TableLogic;
7 | import com.fasterxml.jackson.annotation.JsonFormat;
8 | import com.fasterxml.jackson.annotation.JsonIgnore;
9 | import lombok.Data;
10 |
11 | import java.util.Date;
12 |
13 | /**
14 | * @author: create by bin
15 | * @version: v1.0
16 | * @description: cn.jackbin.SimpleRecord.entity
17 | * @date: 2020/8/19 19:40
18 | **/
19 | @Data
20 | public class BaseDO {
21 | @TableField(value = "create_time", fill = FieldFill.INSERT)
22 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
23 | @JsonIgnore
24 | private Date createTime;
25 |
26 | @TableField(value = "update_time",fill = FieldFill.UPDATE)
27 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
28 | private Date updateTime;
29 |
30 | @TableLogic
31 | @TableField(updateStrategy = FieldStrategy.IGNORED)
32 | private Date deleteTime;
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/DictItemDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 字典项表
14 | * @date: 2021/7/13 20:57
15 | **/
16 | @Data
17 | @Builder
18 | @NoArgsConstructor
19 | @AllArgsConstructor
20 | @EqualsAndHashCode(callSuper = false)
21 | @TableName("tb_dict_item")
22 | public class DictItemDO extends BaseDO implements Serializable {
23 |
24 | private static final long serialVersionUID = 8957367407235942454L;
25 |
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Long id;
28 |
29 | /**
30 | * 字典Id
31 | */
32 | private Integer dictId;
33 |
34 | /**
35 | * 字典项文本内容
36 | */
37 | private String text;
38 |
39 | /**
40 | * 字典项值
41 | */
42 | private String value;
43 |
44 | /**
45 | * 备注
46 | */
47 | private String remark;
48 |
49 | private Integer orderNo;
50 |
51 | private Integer status;
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/SpendCategoryDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 花费类别
14 | * @date: 2020/9/16 22:20
15 | **/
16 | @Data
17 | @Builder
18 | @NoArgsConstructor
19 | @AllArgsConstructor
20 | @EqualsAndHashCode(callSuper = false)
21 | @TableName("tb_spend_category")
22 | public class SpendCategoryDO extends BaseDO implements Serializable {
23 | private static final long serialVersionUID1 = 1L;
24 |
25 | @TableId(value = "id", type = IdType.AUTO)
26 | private Long id;
27 |
28 | /**
29 | * 分类编码
30 | */
31 | private String code;
32 |
33 | /**
34 | * 分类名
35 | */
36 | private String name;
37 |
38 | /**
39 | * 记账类型Id
40 | */
41 | private Integer recordTypeId;
42 |
43 | /**
44 | * 排序
45 | */
46 | private Integer orderNo;
47 |
48 | /**
49 | * 备注
50 | */
51 | private String remark;
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/UserService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.entity.UserDO;
5 | import com.baomidou.mybatisplus.extension.service.IService;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | /**
11 | *
12 | * 服务类
13 | *
14 | *
15 | * @author jackbin
16 | * @since 2020-07-21
17 | */
18 | public interface UserService extends IService {
19 |
20 | /**
21 | * 根据用户名获取用户
22 | */
23 | UserDO getByName(String userName);
24 |
25 | /**
26 | * 根据Id获取指定用户
27 | */
28 | UserDO getById(Long id);
29 |
30 | /**
31 | * 获取所有用户
32 | */
33 | List getUsers();
34 |
35 | /**
36 | * 分页获取用户
37 | */
38 | void getByPage(String username, Boolean deleted, Date date, PageBO pageBO);
39 |
40 | void edit(Integer id, String nickname, Integer sex, String email);
41 |
42 | void add(String username, String nickname, Integer sex, String email, String credential);
43 |
44 | void reset(Integer id);
45 |
46 | /**
47 | * 保存用户并添加默认角色
48 | */
49 | void saveWithDefaultRole(UserDO userDO);
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/enums/BusinessType.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.enums;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: 业务类型
7 | * @date: 2021/4/7 21:14
8 | **/
9 | public enum BusinessType {
10 | /**
11 | * 其它
12 | */
13 | OTHER("other", "其他"),
14 |
15 | QUERY("query", "查询"),
16 |
17 | /**
18 | * 新增
19 | */
20 | INSERT("insert", "新增"),
21 |
22 | /**
23 | * 修改
24 | */
25 | UPDATE("update", "修改"),
26 |
27 | /**
28 | * 删除
29 | */
30 | DELETE("del", "修改"),
31 |
32 | /**
33 | * 授权
34 | */
35 | GRANT("grant", "授权"),
36 |
37 | /**
38 | * 导出
39 | */
40 | EXPORT("exprot", "导出"),
41 |
42 | /**
43 | * 导入
44 | */
45 | IMPORT("import", "导入"),
46 |
47 | /**
48 | * 清空
49 | */
50 | CLEAN("clean", "清空"),
51 | ;
52 | private String code;
53 | private String name;
54 |
55 | BusinessType(String code, String name) {
56 | this.code = code;
57 | this.name = name;
58 | }
59 |
60 | public String getCode() {
61 | return code;
62 | }
63 |
64 | public String getName() {
65 | return name;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RecordBookDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 账单表
14 | * @date: 2021/7/13 21:05
15 | **/
16 | @Data
17 | @Builder
18 | @NoArgsConstructor
19 | @AllArgsConstructor
20 | @EqualsAndHashCode(callSuper = false)
21 | @TableName("tb_record_book")
22 | public class RecordBookDO extends BaseDO implements Serializable {
23 |
24 | private static final long serialVersionUID = -8088393864369379823L;
25 |
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Long id;
28 |
29 | /**
30 | * 用户Id
31 | */
32 | private Integer userId;
33 |
34 | /**
35 | * 账本名称
36 | */
37 | private String name;
38 |
39 | /**
40 | * 备注
41 | */
42 | private String remark;
43 |
44 | /**
45 | * 是否为用户默认
46 | */
47 | private Integer isUserDefault;
48 |
49 | /**
50 | * 排序
51 | */
52 | private Integer orderNo;
53 |
54 | private Integer status;
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/SelectOneWithoutLogicDel.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | import com.baomidou.mybatisplus.core.metadata.TableInfo;
4 | import org.apache.ibatis.mapping.MappedStatement;
5 | import org.apache.ibatis.mapping.SqlSource;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: 查询某个值,排除逻辑删除字段
11 | * @date: 2021/8/5 19:54
12 | **/
13 | public class SelectOneWithoutLogicDel extends AbstractMethodWrapper {
14 | @Override
15 | public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
16 | MethodConstant sqlMethod = MethodConstant.SELECT_ONE_WITHOUT_LOGIC_DEL;
17 | // 构建sql
18 | String sql = String.format(sqlMethod.getSql(), sqlFirst(),
19 | sqlSelectColumns(tableInfo, true),
20 | tableInfo.getTableName(),
21 | sqlWhereEntityWrapperWithoutLogicDel(true, tableInfo), sqlComment()
22 | );
23 | SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
24 | return this.addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
25 | }
26 |
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/SelectPageWithoutLogicDel.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | import com.baomidou.mybatisplus.core.metadata.TableInfo;
4 | import org.apache.ibatis.mapping.MappedStatement;
5 | import org.apache.ibatis.mapping.SqlSource;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.common.config.datasource.method
11 | * @date: 2021/8/17 23:02
12 | **/
13 | public class SelectPageWithoutLogicDel extends AbstractMethodWrapper {
14 | @Override
15 | public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
16 | String sql = String.format(MethodConstant.SELECT_PAGE_WITHOUT_LOGIC_DEL.getSql(), sqlFirst(),
17 | sqlSelectColumns(tableInfo, true),
18 | tableInfo.getTableName(),
19 | sqlWhereEntityWrapperWithoutLogicDel(true, tableInfo),
20 | sqlComment());
21 | SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
22 | return this.addSelectMappedStatementForTable(mapperClass, MethodConstant.SELECT_PAGE_WITHOUT_LOGIC_DEL.getMethod(), sqlSource, tableInfo);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/RegisterVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import io.swagger.annotations.ApiModelProperty;
5 | import lombok.Data;
6 |
7 | import javax.validation.constraints.Email;
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.NotNull;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.dto
15 | * @date: 2020/8/31 19:38
16 | **/
17 | @ApiModel(value="RegisterDTO对象", description="用户注册对象")
18 | @Data
19 | public class RegisterVO {
20 |
21 | @ApiModelProperty(required = true, value = "用户名")
22 | @NotBlank(message = "用户名不能为空")
23 | private String username;
24 |
25 | @ApiModelProperty(required = true, value = "用户昵称")
26 | @NotBlank(message = "用户昵称不能为空")
27 | private String nickname;
28 |
29 | @ApiModelProperty(required = true, value = "性别(男:1;女:2)")
30 | @NotNull(message = "性别不能为空")
31 | private Integer sex;
32 |
33 | @ApiModelProperty(required = true, value = "邮箱")
34 | @Email(message = "邮箱格式不正确")
35 | private String email;
36 |
37 | @ApiModelProperty(required = true, value = "密码")
38 | @NotBlank(message = "密码不能为空")
39 | private String password;
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/MenuService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.MenuBO;
4 | import cn.jackbin.SimpleRecord.bo.PageBO;
5 | import cn.jackbin.SimpleRecord.entity.MenuDO;
6 | import com.baomidou.mybatisplus.extension.service.IService;
7 |
8 | import java.util.Date;
9 | import java.util.List;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.service
15 | * @date: 2020/11/23 21:35
16 | **/
17 | public interface MenuService extends IService {
18 |
19 | /**
20 | * 获取指定用户的权限
21 | */
22 | List getUserMenus(Long userId);
23 |
24 | /**
25 | * 通过id查找指定的权限
26 | */
27 | MenuDO getById(Long id);
28 |
29 | /**
30 | * 分页获取权限
31 | */
32 | List getTreeList();
33 |
34 | List getList();
35 |
36 | /**
37 | * 获取所有的菜单权限
38 | */
39 | List getAll();
40 |
41 | /**
42 | * 获取角色权限
43 | */
44 | List getRoleMenus(Long roleId);
45 |
46 | List copyFromMenuDos(List menuDOS);
47 |
48 | /**
49 | * 生成菜单树
50 | */
51 | List generatorMenuTree(List boList);
52 |
53 | void reset(Integer id);
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/LogicDelWithFillStatus.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | import com.baomidou.mybatisplus.core.injector.AbstractMethod;
4 | import com.baomidou.mybatisplus.core.metadata.TableInfo;
5 | import org.apache.ibatis.mapping.MappedStatement;
6 | import org.apache.ibatis.mapping.SqlSource;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: 逻辑删除自动填充status
12 | * @date: 2021/8/16 19:31
13 | **/
14 | public class LogicDelWithFillStatus extends AbstractMethodWrapper {
15 | @Override
16 | public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
17 | // fixed this sql fragment
18 | String sqlSet = "SET status=1,delete_time=now()";
19 | String sql = String.format(MethodConstant.DEL_BY_ID_WITH_FILL_STATUS.getSql(), tableInfo.getTableName(), sqlSet, tableInfo.getKeyColumn(),
20 | tableInfo.getKeyProperty(), tableInfo.getLogicDeleteSql(true, true));
21 | SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
22 | return addUpdateMappedStatement(mapperClass, modelClass, MethodConstant.DEL_BY_ID_WITH_FILL_STATUS.getMethod(), sqlSource);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/MenuDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 菜单表
14 | * @date: 2020/11/23 21:16
15 | **/
16 | @Data
17 | @Builder
18 | @NoArgsConstructor
19 | @AllArgsConstructor
20 | @EqualsAndHashCode(callSuper = false)
21 | @TableName("tb_menu")
22 | public class MenuDO extends BaseDO implements Serializable {
23 |
24 | private static final long serialVersionUID = 4652175773392266928L;
25 |
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Long id;
28 |
29 | private String menuTitle;
30 |
31 | private String menuName;
32 |
33 | private Integer parentId;
34 |
35 | private Integer orderNo;
36 |
37 | private String path;
38 |
39 | private String component;
40 |
41 | /**
42 | * 是否为外链(0是 1否)
43 | */
44 | private Integer outerChain;
45 |
46 | /**
47 | * 菜单类型(M目录 C菜单 F按钮)
48 | */
49 | private String menuType;
50 |
51 | private String permissionSign;
52 |
53 | private String iconName;
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RecordAccountDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import cn.jackbin.SimpleRecord.common.anotations.DictValue;
4 | import com.baomidou.mybatisplus.annotation.IdType;
5 | import com.baomidou.mybatisplus.annotation.TableId;
6 | import com.baomidou.mybatisplus.annotation.TableName;
7 | import lombok.*;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: 账户表
15 | * @date: 2021/7/13 21:01
16 | **/
17 | @Data
18 | @Builder
19 | @NoArgsConstructor
20 | @AllArgsConstructor
21 | @EqualsAndHashCode(callSuper = false)
22 | @TableName("tb_record_account")
23 | public class RecordAccountDO extends BaseDO implements Serializable {
24 |
25 | private static final long serialVersionUID = -7198600840110284750L;
26 |
27 | @TableId(value = "id", type = IdType.AUTO)
28 | private Long id;
29 |
30 | private Integer userId;
31 |
32 | /**
33 | * 账户类型(数据字典维护)
34 | */
35 | @DictValue(code = "accountType")
36 | private Integer type;
37 |
38 | /**
39 | * 账户名
40 | */
41 | private String name;
42 |
43 | /**
44 | * 是否属于净资产(1:属于,2:不属于)
45 | */
46 | private Integer inNetAssets;
47 |
48 | private Integer orderNo;
49 |
50 | private Integer status;
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/WechatUserVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import io.swagger.annotations.ApiModel;
4 | import io.swagger.annotations.ApiModelProperty;
5 | import io.swagger.annotations.ApiOperation;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import javax.validation.constraints.NotBlank;
10 | import javax.validation.constraints.NotNull;
11 |
12 | /**
13 | * @author: create by bin
14 | * @version: v1.0
15 | * @description: cn.jackbin.SimpleRecord.vo
16 | * @date: 2020/11/3 20:59
17 | **/
18 | @ApiModel(value="WechatUserVO对象", description="微信登录对象")
19 | @Data
20 | @NoArgsConstructor
21 | public class WechatUserVO {
22 | @ApiModelProperty(required = true,value = "微信的用户OpenId")
23 | @NotBlank(message = "openId不能为空")
24 | private String openId;
25 |
26 | @ApiModelProperty(required = true, value = "用户名")
27 | @NotBlank(message = "用户名不能为空")
28 | private String username;
29 |
30 | @ApiModelProperty(required = true, value = "用户昵称")
31 | @NotBlank(message = "用户昵称不能为空")
32 | private String nickname;
33 |
34 | @ApiModelProperty(required = true, value = "性别(男:1;女:2)")
35 | @NotNull(message = "性别不能为空")
36 | private Integer sex;
37 |
38 | @ApiModelProperty(required = true, value = "头像地址")
39 | private String avatarUrl;
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/RecordAccountMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
29 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/UserDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import java.io.Serializable;
4 |
5 | import com.baomidou.mybatisplus.annotation.IdType;
6 | import com.baomidou.mybatisplus.annotation.TableId;
7 | import com.baomidou.mybatisplus.annotation.TableName;
8 | import com.fasterxml.jackson.annotation.JsonIgnore;
9 | import lombok.*;
10 |
11 | /**
12 | *
13 | *
14 | *
15 | *
16 | * @author jackbin
17 | * @since 2020-07-21
18 | */
19 | @Data
20 | @Builder
21 | @NoArgsConstructor
22 | @AllArgsConstructor
23 | @EqualsAndHashCode(callSuper = false)
24 | @TableName("tb_user")
25 | public class UserDO extends BaseDO implements Serializable {
26 |
27 | private static final long serialVersionUID = 1L;
28 |
29 | @TableId(value = "id", type = IdType.AUTO)
30 | private Long id;
31 |
32 | /**
33 | * 用户名,唯一
34 | */
35 | private String username;
36 |
37 | /**
38 | * 用户昵称
39 | */
40 | private String nickname;
41 |
42 | /**
43 | * 性别
44 | */
45 | private Integer sex;
46 |
47 | /**
48 | * 用户凭证
49 | */
50 | @JsonIgnore
51 | private String credential;
52 |
53 | /**
54 | * 头像url
55 | */
56 | private String avatarUrl;
57 |
58 | /**
59 | * 邮箱
60 | */
61 | private String email;
62 |
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/MySqlInjector.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource;
2 |
3 | import cn.jackbin.SimpleRecord.common.config.datasource.method.LogicDelWithFillStatus;
4 | import cn.jackbin.SimpleRecord.common.config.datasource.method.SelectOneWithoutLogicDel;
5 | import cn.jackbin.SimpleRecord.common.config.datasource.method.SelectPageWithoutLogicDel;
6 | import cn.jackbin.SimpleRecord.common.config.datasource.method.UpdateByIdWithoutLogicDel;
7 | import com.baomidou.mybatisplus.core.injector.AbstractMethod;
8 | import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
9 |
10 | import java.util.List;
11 |
12 | /**
13 | * @author: create by bin
14 | * @version: v1.0
15 | * @description: cn.jackbin.SimpleRecord.common.config.datasource
16 | * @date: 2021/8/5 19:48
17 | **/
18 | public class MySqlInjector extends DefaultSqlInjector {
19 |
20 | @Override
21 | public List getMethodList(Class> mapperClass) {
22 | List methodList = super.getMethodList(mapperClass);
23 | methodList.add(new SelectOneWithoutLogicDel());
24 | methodList.add(new LogicDelWithFillStatus());
25 | methodList.add(new SelectPageWithoutLogicDel());
26 | methodList.add(new UpdateByIdWithoutLogicDel());
27 | return methodList;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetRolesVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import io.swagger.annotations.ApiModel;
5 | import io.swagger.annotations.ApiModelProperty;
6 | import lombok.Data;
7 |
8 | import javax.validation.constraints.NotNull;
9 | import javax.validation.constraints.Positive;
10 | import javax.validation.constraints.PositiveOrZero;
11 | import java.util.Date;
12 |
13 | /**
14 | * @author: create by bin
15 | * @version: v1.0
16 | * @description: cn.jackbin.SimpleRecord.vo
17 | * @date: 2020/12/7 21:00
18 | **/
19 | @ApiModel(value="GetRolesVO对象", description="分页获取角色列表对象")
20 | @Data
21 | public class GetRolesVO {
22 |
23 | @ApiModelProperty(value = "角色名")
24 | private String name;
25 |
26 | @ApiModelProperty(value = "状态")
27 | private Boolean deleted;
28 |
29 | @ApiModelProperty(required = true, value = "年月日(yyyy-MM-dd)")
30 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
31 | private Date date;
32 |
33 | /**
34 | * 分页的索引
35 | */
36 | @ApiModelProperty(required = true, value = "分页的索引")
37 | @Positive(message = "当前页数须为正数")
38 | int pageNo;
39 |
40 | /**
41 | * 分页的大小
42 | */
43 | @ApiModelProperty(required = true, value = "分页的大小")
44 | @Positive(message = "分页的大小须为正数")
45 | int pageSize;
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RecordSysCategoryDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.IdType;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import com.baomidou.mybatisplus.annotation.TableName;
6 | import lombok.*;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: 系统内置类别表
14 | * @date: 2021/7/13 21:07
15 | **/
16 | @Data
17 | @Builder
18 | @NoArgsConstructor
19 | @AllArgsConstructor
20 | @EqualsAndHashCode(callSuper = false)
21 | @TableName("tb_record_sys_category")
22 | public class RecordSysCategoryDO extends BaseDO implements Serializable {
23 |
24 | private static final long serialVersionUID = -358045672217191501L;
25 |
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Long id;
28 |
29 | /**
30 | * 记账类型
31 | */
32 | private Integer type;
33 |
34 | /**
35 | * 类别名称
36 | */
37 | private String name;
38 |
39 | /**
40 | * 类别Key
41 | */
42 | private String code;
43 |
44 | /**
45 | * 排序
46 | */
47 | private Integer orderNo;
48 |
49 | /**
50 | * 图标
51 | */
52 | private String icon;
53 |
54 | /**
55 | * 是否系统内置
56 | */
57 | private Integer isSysDefault;
58 |
59 | private String remark;
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/UpdateByIdWithoutLogicDel.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | import com.baomidou.mybatisplus.core.enums.SqlMethod;
4 | import com.baomidou.mybatisplus.core.metadata.TableInfo;
5 | import org.apache.ibatis.mapping.MappedStatement;
6 | import org.apache.ibatis.mapping.SqlSource;
7 |
8 | /**
9 | * @author: create by bin
10 | * @version: v1.0
11 | * @description: cn.jackbin.SimpleRecord.common.config.datasource.method
12 | * @date: 2021/8/18 19:48
13 | **/
14 | public class UpdateByIdWithoutLogicDel extends AbstractMethodWrapper {
15 | @Override
16 | public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
17 | boolean logicDelete = tableInfo.isLogicDelete();
18 | String sql = String.format(MethodConstant.UPDATE_BY_ID_WITHOUT_LOGIC_DEL.getSql(),
19 | tableInfo.getTableName(),
20 | sqlSet(logicDelete, false, tableInfo, false, ENTITY, ENTITY_DOT),
21 | tableInfo.getKeyColumn(), ENTITY_DOT + tableInfo.getKeyProperty());
22 | SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
23 | return addUpdateMappedStatement(mapperClass, modelClass, MethodConstant.UPDATE_BY_ID_WITHOUT_LOGIC_DEL.getMethod(), sqlSource);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/RecordBookService.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service;
2 |
3 | import cn.jackbin.SimpleRecord.bo.PageBO;
4 | import cn.jackbin.SimpleRecord.dto.RecordBookAnalysisDTO;
5 | import cn.jackbin.SimpleRecord.entity.RecordBookDO;
6 | import com.baomidou.mybatisplus.extension.service.IService;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.service
14 | * @date: 2020/11/23 21:35
15 | **/
16 | public interface RecordBookService extends IService {
17 |
18 | void getByPage(Integer userId, PageBO pageBO);
19 |
20 | void add(Integer userId, String name, String remark, Integer orderNo);
21 |
22 | RecordBookDO getByName(Integer userId, String name);
23 |
24 | /**
25 | * 获取用户默认账本
26 | */
27 | RecordBookDO getDefaultBook(Integer userId);
28 |
29 | void edit(Long id, Integer userId, String name, String remark, Integer orderNo, Integer isUserDefault);
30 |
31 | /**
32 | * 更新为默认账单
33 | */
34 | void updateDefault(Long defaultId, Long sourceId, Integer userId, String name, String remark, Integer orderNo, Integer isUserDefault);
35 |
36 | /**
37 | * 获取用户的所有账本
38 | */
39 | List getList(Integer userId);
40 |
41 | /**
42 | * 初始化账单
43 | */
44 | void init(Integer userId);
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/MyBaseMapper.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.Wrapper;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import com.baomidou.mybatisplus.core.metadata.IPage;
6 | import com.baomidou.mybatisplus.core.toolkit.Constants;
7 | import org.apache.ibatis.annotations.Param;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: 自定义通用mapper
15 | * @date: 2021/8/5 19:50
16 | **/
17 | public interface MyBaseMapper extends BaseMapper {
18 |
19 | T selectOneWithoutLogicDel(@Param(Constants.WRAPPER) Wrapper queryWrapper);
20 |
21 | int logicDelByIdFillStatus(Serializable id);
22 |
23 | int delByIdFillStatus(Serializable id);
24 |
25 | /**
26 | * 根据 entity 条件,分页查询记录(无逻辑删除条件限制)
27 | *
28 | * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
29 | * @param queryWrapper 实体对象封装操作类(可以为 null)
30 | */
31 | > E selectPageWithoutLogicDel(E page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
32 |
33 | /**
34 | * 根据 ID 修改(无逻辑删除条件限制)
35 | *
36 | * @param entity 实体对象
37 | */
38 | int updateByIdWithoutLogicDel(@Param(Constants.ENTITY) T entity);
39 |
40 | /**
41 | * 根据 ID 删除
42 | *
43 | * @param id 主键ID
44 | */
45 | int delById(Serializable id);
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/GetRecordsByMonthVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import io.swagger.annotations.ApiModel;
5 | import io.swagger.annotations.ApiModelProperty;
6 | import io.swagger.annotations.ApiParam;
7 | import io.swagger.models.auth.In;
8 | import lombok.Data;
9 | import lombok.EqualsAndHashCode;
10 | import lombok.NoArgsConstructor;
11 | import org.springframework.format.annotation.DateTimeFormat;
12 |
13 | import javax.validation.constraints.NotNull;
14 | import javax.validation.constraints.Positive;
15 | import javax.validation.constraints.PositiveOrZero;
16 | import java.util.Date;
17 |
18 | /**
19 | * @author: create by bin
20 | * @version: v1.0
21 | * @description: cn.jackbin.SimpleRecord.dto
22 | * @date: 2020/10/14 23:14
23 | **/
24 | @ApiModel(value="GetRecordsByMonthVO对象", description="获取记账记录对象")
25 | @EqualsAndHashCode(callSuper = true)
26 | @Data
27 | @NoArgsConstructor
28 | public class GetRecordsByMonthVO extends PageVO{
29 |
30 | private Integer recordBookId;
31 |
32 | private Integer recordAccountId;
33 |
34 | @ApiModelProperty(required = true, value = "年月(yyyy-MM)")
35 | @JsonFormat(pattern="yyyy-MM",timezone = "GMT+8")
36 | @NotNull
37 | private Date month;
38 |
39 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
40 | private Date occurTime;
41 |
42 | /**
43 | * 关键词
44 | */
45 | private String keyWord;
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/service/impl/UserRoleServiceImpl.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.service.impl;
2 |
3 | import cn.jackbin.SimpleRecord.entity.RoleDO;
4 | import cn.jackbin.SimpleRecord.entity.UserRoleDO;
5 | import cn.jackbin.SimpleRecord.mapper.UserRoleMapper;
6 | import cn.jackbin.SimpleRecord.service.UserRoleService;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 | import org.springframework.transaction.annotation.Transactional;
11 |
12 | import java.util.ArrayList;
13 | import java.util.List;
14 |
15 | /**
16 | *
17 | * 服务实现类
18 | *
19 | *
20 | * @author jackbin
21 | * @since 2020-07-21
22 | */
23 | @Service
24 | public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService {
25 | @Autowired
26 | private UserRoleMapper userRoleMapper;
27 |
28 | @Transactional
29 | @Override
30 | public void edit(Integer userId, List roleIds) {
31 | // 删除用户的所有角色
32 | userRoleMapper.deleteByUserId(userId);
33 | // 更新
34 | List list = new ArrayList<>();
35 | roleIds.forEach(n -> {
36 | UserRoleDO userRoleDO = new UserRoleDO();
37 | userRoleDO.setUserId(userId);
38 | userRoleDO.setRoleId(n);
39 | list.add(userRoleDO);
40 | });
41 | saveBatch(list);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/vo/RecordDetailVO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.vo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 | import org.springframework.format.annotation.DateTimeFormat;
7 |
8 | import javax.validation.constraints.NotBlank;
9 | import javax.validation.constraints.NotNull;
10 | import javax.validation.constraints.Positive;
11 | import java.util.Date;
12 |
13 | /**
14 | * @author: create by bin
15 | * @version: v1.0
16 | * @description: cn.jackbin.SimpleRecord.vo
17 | * @date: 2020/10/15 21:49
18 | **/
19 | @Data
20 | @NoArgsConstructor
21 | public class RecordDetailVO {
22 | private Long id;
23 |
24 | @Positive(message = "来源账户须为整数")
25 | private Integer sourceAccountId;
26 |
27 | @Positive(message = "目标账户须为整数")
28 | private Integer targetAccountId;
29 |
30 | @Positive(message = "账单Id为整数")
31 | private Integer recordBookId;
32 |
33 | @NotNull(message = "记账类型不能为空")
34 | private String recordTypeCode;
35 |
36 | @NotBlank(message = "记账类别不能为空")
37 | private String recordCategory;
38 |
39 | @NotNull(message = "金额不能为空")
40 | private Double amount;
41 |
42 | @NotNull(message = "日期不能为空")
43 | @DateTimeFormat(pattern="yyyy-MM-dd")
44 | @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
45 | private Date occurTime;
46 |
47 | // 是否报销
48 | private Integer recoverableStatus;
49 |
50 | private String tag;
51 |
52 | private String remark;
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/constant/RecordConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.constant;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.constant
7 | * @date: 2020/10/12 21:51
8 | **/
9 | public class RecordConstant {
10 | public static final String EXPEND_RECORD_TYPE = "expendType";
11 |
12 | public static final String INCOME_RECORD_TYPE = "incomeType";
13 |
14 | public static final String RECORD_TYPE = "recordType";
15 |
16 | public static final String ACCOUNT_TYPE = "accountType";
17 |
18 | public static final String PAYMENT_ACCOUNT = "payment"; // 应收应付账户类型
19 |
20 | public static final String BXK = "报销款";
21 |
22 | /**
23 | * 用户默认
24 | */
25 | public static final int USER_DEFAULT = 1;
26 |
27 | /**
28 | * 非用户默认
29 | */
30 | public static final int NOT_USER_DEFAULT = 2;
31 |
32 | /**
33 | * 属于
34 | */
35 | public static final int BUSINESS_YES = 1;
36 |
37 | /**
38 | * 不属于
39 | */
40 | public static final int BUSINESS_NOT = 2;
41 |
42 | /**
43 | * 非报销
44 | */
45 | public static final int NOT_RECOVERABLE = 1;
46 |
47 | /**
48 | * 待报销
49 | */
50 | public static final int TO_RECOVERABLE = 2;
51 |
52 | /**
53 | * 已报销
54 | */
55 | public static final int IS_RECOVERABLE = 3;
56 |
57 | /**
58 | * 默认账单名称
59 | */
60 | public static final String DEFAULT_RECORD_BOOK_NAME = "默认账单";
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/datasource/method/MethodConstant.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.datasource.method;
2 |
3 | /**
4 | * @author: create by bin
5 | * @version: v1.0
6 | * @description: cn.jackbin.SimpleRecord.common.config.datasource.method
7 | * @date: 2021/8/5 19:57
8 | **/
9 | public enum MethodConstant {
10 | SELECT_ONE_WITHOUT_LOGIC_DEL("selectOneWithoutLogicDel", "查询满足条件一条数据(无逻辑删除条件限制)", ""),
11 | DEL_BY_ID_WITH_FILL_STATUS("delByIdFillStatus", "逻辑删除自动填充status字段", ""),
12 | SELECT_PAGE_WITHOUT_LOGIC_DEL("selectPageWithoutLogicDel", "分页查询满足条件所有数据(无逻辑删除条件限制)", ""),
13 | UPDATE_BY_ID_WITHOUT_LOGIC_DEL("updateByIdWithoutLogicDel", "根据ID 选择修改数据(无逻辑删除条件限制)", ""),
14 | DEL_BY_ID("delById", "根据ID 删除一条数据", ""),
15 | ;
16 |
17 | private final String method;
18 | private final String desc;
19 | private final String sql;
20 |
21 | MethodConstant(String method, String desc, String sql) {
22 | this.method = method;
23 | this.desc = desc;
24 | this.sql = sql;
25 | }
26 |
27 | public String getMethod() {
28 | return method;
29 | }
30 |
31 | public String getDesc() {
32 | return desc;
33 | }
34 |
35 | public String getSql() {
36 | return sql;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/sercurity/UserDetailsServiceImpl.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.sercurity;
2 |
3 | import cn.jackbin.SimpleRecord.entity.MenuDO;
4 | import cn.jackbin.SimpleRecord.entity.UserDO;
5 | import cn.jackbin.SimpleRecord.service.MenuService;
6 | import cn.jackbin.SimpleRecord.service.UserService;
7 | import cn.jackbin.SimpleRecord.bo.UserMenuBO;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.security.core.userdetails.UserDetails;
10 | import org.springframework.security.core.userdetails.UserDetailsService;
11 | import org.springframework.security.core.userdetails.UsernameNotFoundException;
12 | import org.springframework.stereotype.Component;
13 |
14 | import java.util.List;
15 |
16 | /**
17 | * @author: create by bin
18 | * @version: v1.0
19 | * @description: cn.jackbin.SimpleRecord.common.config.sercurity
20 | * @date: 2020/8/3 20:15
21 | **/
22 | @Component
23 | public class UserDetailsServiceImpl implements UserDetailsService {
24 | @Autowired
25 | private UserService userService;
26 | @Autowired
27 | private MenuService menuService;
28 |
29 | @Override
30 | public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
31 | UserDO userDO = userService.getByName(s);
32 | List menuDOList = menuService.getUserMenus(userDO.getId());
33 | UserMenuBO userPermissionBO = new UserMenuBO(userDO, menuDOList);
34 | return new JWTUser(userPermissionBO);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/bo/MenuBO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.bo;
2 |
3 | import com.fasterxml.jackson.annotation.JsonFormat;
4 | import com.fasterxml.jackson.annotation.JsonInclude;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Builder;
7 | import lombok.Data;
8 |
9 | import java.util.Date;
10 | import java.util.List;
11 |
12 | /**
13 | * @author: create by bin
14 | * @version: v1.0
15 | * @description: 菜单业务类
16 | * @date: 2020/12/1 19:54
17 | **/
18 | @Data
19 | @AllArgsConstructor
20 | @Builder
21 | public class MenuBO {
22 |
23 | private Integer id;
24 |
25 | /**
26 | * 父节点Id
27 | */
28 | private Integer parentId;
29 |
30 | /**
31 | * 菜单标题
32 | */
33 | private String menuTitle;
34 |
35 | /**
36 | * 菜单名
37 | */
38 | private String menuName;
39 |
40 | /**
41 | * 路径
42 | */
43 | private String path;
44 |
45 | /**
46 | * 组件路径
47 | */
48 | private String component;
49 |
50 | /**
51 | * 是否为外链
52 | */
53 | private boolean isOuterChain;
54 |
55 | private String menuType;
56 |
57 | private String iconName;
58 |
59 | private String permissionSign;
60 |
61 | private Integer orderNo;
62 |
63 | /**
64 | * 是否拥有
65 | */
66 | private boolean owned;
67 |
68 | @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
69 | private Date deleteTime;
70 |
71 | @JsonInclude(JsonInclude.Include.NON_EMPTY)
72 | List children;
73 |
74 | public MenuBO() {
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/entity/RecordUserCategoryDO.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.entity;
2 |
3 | import cn.jackbin.SimpleRecord.common.anotations.DictValue;
4 | import com.baomidou.mybatisplus.annotation.IdType;
5 | import com.baomidou.mybatisplus.annotation.TableId;
6 | import com.baomidou.mybatisplus.annotation.TableName;
7 | import lombok.*;
8 |
9 | import java.io.Serializable;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: 用户类别表
15 | * @date: 2021/7/13 21:07
16 | **/
17 | @Data
18 | @Builder
19 | @NoArgsConstructor
20 | @AllArgsConstructor
21 | @EqualsAndHashCode(callSuper = false)
22 | @TableName("tb_record_user_category")
23 | public class RecordUserCategoryDO extends BaseDO implements Serializable {
24 |
25 | private static final long serialVersionUID = -6983888926685534590L;
26 |
27 | @TableId(value = "id", type = IdType.AUTO)
28 | private Long id;
29 |
30 | /**
31 | * 用户Id
32 | */
33 | private Integer userId;
34 |
35 | /**
36 | * 记账类型
37 | */
38 | @DictValue(code = "recordType")
39 | private Integer type;
40 |
41 | /**
42 | * 类别名称
43 | */
44 | private String name;
45 |
46 | /**
47 | * 类别编码
48 | */
49 | private String code;
50 |
51 | /**
52 | * 排序
53 | */
54 | private Integer orderNo;
55 |
56 | /**
57 | * 图标
58 | */
59 | private String icon;
60 |
61 | /**
62 | * 是否系统内置
63 | */
64 | private Integer isSysDefault;
65 |
66 | private String remark;
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/MenuMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
25 |
26 |
30 |
31 |
40 |
41 |
42 | update tb_menu set delete_time = null where id = #{id}
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/utils/PasswordUtil.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.utils;
2 |
3 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
4 |
5 | import java.util.regex.Pattern;
6 |
7 | /**
8 | * @author: create by bin
9 | * @version: v1.0
10 | * @description: cn.jackbin.SimpleRecord.util
11 | * @date: 2020/8/31 20:20
12 | **/
13 | public class PasswordUtil {
14 | private static final Pattern BCRYPT_PATTERN = Pattern.compile("^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$");
15 | private static BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
16 |
17 | public static boolean check(String psw) {
18 | return BCRYPT_PATTERN.matcher(psw).matches();
19 | }
20 |
21 | public static String encoder(String psw) {
22 | return encoder.encode(psw);
23 | }
24 |
25 | /**
26 | * 生成随机的8为字符(含大小写及数字)
27 | */
28 | public static String randomPsw() {
29 | StringBuilder result = new StringBuilder();
30 | for (int j = 0; j < 8; j++) {
31 | double rand = Math.random();
32 | double randTri = Math.random() * 3;
33 | if (randTri >= 0 && randTri < 1) {
34 | result.append((char) (rand * ('9' - '0') + '0'));
35 | } else if (randTri >= 1 && randTri < 2) {
36 | result.append((char) (rand * ('Z' - 'A') + 'A'));
37 | } else {
38 | result.append((char) (rand * ('z' - 'a') + 'a'));
39 | }
40 | }
41 | return result.toString();
42 | }
43 |
44 | public static void main(String[] args) {
45 | System.out.println(PasswordUtil.randomPsw());
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/utils/AddressUtil.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.utils;
2 |
3 | import cn.jackbin.SimpleRecord.constant.Constants;
4 | import com.alibaba.fastjson.JSONObject;
5 | import lombok.extern.slf4j.Slf4j;
6 |
7 | import java.util.HashMap;
8 | import java.util.Map;
9 |
10 | /**
11 | * @author: create by bin
12 | * @version: v1.0
13 | * @description: cn.jackbin.SimpleRecord.utils
14 | * @date: 2021/4/8 21:36
15 | **/
16 | @Slf4j
17 | public class AddressUtil {
18 |
19 | // IP地址查询
20 | public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";
21 |
22 | // 未知地址
23 | public static final String UNKNOWN = "XX XX";
24 |
25 | public static String getRealAddressByIP(String ip)
26 | {
27 | String address = UNKNOWN;
28 | // 内网不查询
29 | if (IpUtil.internalIp(ip))
30 | {
31 | return "内网IP";
32 | }
33 | try
34 | {
35 | Map map = new HashMap<>();
36 | map.put("ip", ip);
37 | map.put("json", "true");
38 | String rspStr = HttpUtil.doGet(IP_URL, map);
39 | if (StringUtil.isEmpty(rspStr))
40 | {
41 | log.error("获取地理位置异常 {}", ip);
42 | return UNKNOWN;
43 | }
44 | JSONObject obj = JSONObject.parseObject(rspStr);
45 | String region = obj.getString("pro");
46 | String city = obj.getString("city");
47 | return String.format("%s %s", region, city);
48 | }
49 | catch (Exception e)
50 | {
51 | log.error("获取地理位置异常 {}", e.getMessage());
52 | }
53 | return address;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/controller/basic/AccountController.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.controller.basic;
2 |
3 | import cn.jackbin.SimpleRecord.common.LocalUser;
4 | import cn.jackbin.SimpleRecord.common.anotations.LoginRequired;
5 | import cn.jackbin.SimpleRecord.entity.UserDO;
6 | import cn.jackbin.SimpleRecord.service.UserService;
7 | import cn.jackbin.SimpleRecord.vo.AccountBaseSettingVO;
8 | import cn.jackbin.SimpleRecord.vo.Result;
9 | import io.swagger.annotations.Api;
10 | import io.swagger.annotations.ApiOperation;
11 | import lombok.extern.slf4j.Slf4j;
12 | import org.springframework.beans.factory.annotation.Autowired;
13 | import org.springframework.validation.annotation.Validated;
14 | import org.springframework.web.bind.annotation.PutMapping;
15 | import org.springframework.web.bind.annotation.RequestBody;
16 | import org.springframework.web.bind.annotation.RequestMapping;
17 | import org.springframework.web.bind.annotation.RestController;
18 |
19 | /**
20 | * @author: create by bin
21 | * @version: v1.0
22 | * @description: 账户相关
23 | * @date: 2021/3/8 20:25
24 | **/
25 | @Api(value = "AccountController", tags = { "账户设置接口" })
26 | @RestController
27 | @RequestMapping(value = "/account")
28 | public class AccountController {
29 | @Autowired
30 | private UserService userService;
31 |
32 | @ApiOperation(value = "账户基本设置")
33 | @LoginRequired
34 | @PutMapping(value = "/baseSetting")
35 | public Result> saveInfo(@RequestBody @Validated AccountBaseSettingVO vo) {
36 | UserDO user = LocalUser.get();
37 | user.setNickname(vo.getNickname());
38 | user.setSex(vo.getSex());
39 | userService.updateById(user);
40 | return Result.success();
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/cn/jackbin/SimpleRecord/common/config/redis/RedisConfig.java:
--------------------------------------------------------------------------------
1 | package cn.jackbin.SimpleRecord.common.config.redis;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.data.redis.connection.RedisConnectionFactory;
6 | import org.springframework.data.redis.core.RedisTemplate;
7 | import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
8 | import org.springframework.data.redis.serializer.RedisSerializer;
9 | import org.springframework.data.redis.serializer.StringRedisSerializer;
10 |
11 | /**
12 | * @author: create by bin
13 | * @version: v1.0
14 | * @description: cn.jackbin.SimpleRecord.common.config.redis
15 | * @date: 2021/4/20 20:32
16 | **/
17 | @Configuration
18 | public class RedisConfig {
19 | @Bean
20 | public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
21 |
22 | RedisTemplate redisTemplate = new RedisTemplate<>();
23 | // 参照StringRedisTemplate内部实现指定序列化器
24 | redisTemplate.setConnectionFactory(redisConnectionFactory);
25 | // 设置key的序列化器
26 | redisTemplate.setKeySerializer(keySerializer());
27 | redisTemplate.setHashKeySerializer(keySerializer());
28 | // 设置value的序列化器
29 | redisTemplate.setValueSerializer(valueSerializer());
30 | redisTemplate.setHashValueSerializer(valueSerializer());
31 | return redisTemplate;
32 | }
33 |
34 | private RedisSerializer keySerializer(){
35 | return new StringRedisSerializer();
36 | }
37 |
38 | //使用Jackson序列化器
39 | private RedisSerializer