map){
+ User user = null;
+ boolean flag = false;
+ String userId = CommonUtil.map_get_value(map, "userId");
+ if (userId != null && !userId.equals("")){
+ user = this.userService.findById(Long.parseLong(userId));
+ flag = true;
+ }else {
+ user = new User();
+ }
+ String username = CommonUtil.map_get_value(map, "username");
+ if (CommonUtil.isNotNull(username)){
+ user.setUsername(username);
+ }
+
+ String sex = CommonUtil.map_get_value(map, "sex");
+ if (CommonUtil.isNotNull(sex)){
+ user.setGender(CommonUtil.getEnum(sex,User.Gender.class));
+ }
+ String status = CommonUtil.map_get_value(map, "status");
+ if (CommonUtil.isNotNull(status)){
+ user.setStatus(CommonUtil.getEnum(status,User.Status.class));
+ }
+
+ String role_type = CommonUtil.map_get_value(map, "role_name");
+ if (CommonUtil.isNotNull(role_type)){
+ user.setRoleType(CommonUtil.getEnum(role_type, Role.Type.class));
+ }
+
+ String email = CommonUtil.map_get_value(map, "email");
+ if (CommonUtil.isNotNull(email)){
+ user.setEmail(email);
+ }
+ String telephone = CommonUtil.map_get_value(map, "telephone");
+ if (CommonUtil.isNotNull(telephone)){
+ user.setTelephone(telephone);
+ }
+
+ String profession = CommonUtil.map_get_value(map, "profession");
+ if (CommonUtil.isNotNull(profession)){
+ user.setProfession(profession);
+ }
+
+ String sign = CommonUtil.map_get_value(map, "sign");
+ if (CommonUtil.isNotNull(sign)){
+ user.setSign(sign);
+ }
+
+ String file_id = CommonUtil.map_get_value(map, "file_id");
+ if (CommonUtil.isNotNull(file_id)){
+ user.setPhoto_id(Long.parseLong(file_id));
+ }
+ String upload_image = CommonUtil.map_get_value(map, "upload_image");
+ if (CommonUtil.isNotNull(upload_image)){
+ user.setAvatar(upload_image);
+ }
+ if (flag){
+ this.userService.update(user);
+ }else {
+ this.userService.save(user);
+ }
+ return new Result(true,StatusCode.OK,"修改成功");
+ }
+
+ @Override
+ @GetMapping("/findByUserName")
+ public User findByUserName(String username) {
+ return this.userService.loadUserByUsername(username);
+ }
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/controller/VerificationCodeController.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/controller/VerificationCodeController.java
new file mode 100644
index 0000000..35c5d7f
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/controller/VerificationCodeController.java
@@ -0,0 +1,153 @@
+package com.zhangmeng.admin.manager.controller;
+
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.ShearCaptcha;
+import com.wf.captcha.SpecCaptcha;
+import com.zhangmeng.admin.manager.config.verificationCode.VerificationCodeConfig;
+import com.zhangmeng.admin.manager.service.VerificationCodeService;
+import com.zhangmeng.admin.manager.utils.VerificationCodeUtil;
+import com.zhangmeng.api.service.admin_manager.VerificationCodeControllerApi;
+import com.zhangmeng.model.base.baseController.BaseController;
+import com.zhangmeng.model.base.baseUtil.CommonUtil;
+import com.zhangmeng.model.entity.VerificationCode;
+import com.zhangmeng.model.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * @author zhangmeng
+ * @version 1.0
+ * @date 2021/1/21 21:41
+ *
+ * 验证码控制器
+ */
+
+@RestController
+@RequestMapping("/verificationCode")
+public class VerificationCodeController extends BaseController implements VerificationCodeControllerApi {
+
+ /**
+ * 验证码 参数
+ */
+ private static final String SESSION_KEY = "captcha";
+
+ private static final int DEFAULT_LEN = 4; // 默认长度
+
+ private static final int DEFAULT_WIDTH = 130; // 默认宽度
+
+ private static final int DEFAULT_HEIGHT = 48; // 默认高度
+
+ @Autowired
+ private VerificationCodeConfig verificationCodeConfig;
+
+ @Autowired
+ private VerificationCodeService verificationCodeService;
+
+
+ /**
+ * 验证码生成
+ *
+ * @param request 请求报文 校验
+ * @param response 响应报文
+ */
+ @Override
+ @RequestMapping("/generate")
+ public String generate(HttpServletRequest request, HttpServletResponse response) {
+ SpecCaptcha specCaptcha = new SpecCaptcha(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_LEN);
+ VerificationCodeConfig.Type type = this.verificationCodeConfig.getType();
+ switch (type) {
+ case MYSQL:
+ this.verificationCodeService.mysql_save(specCaptcha);
+ break;
+ case REDIS:
+ this.verificationCodeService.redis_save(specCaptcha);
+ break;
+ }
+ //输出验证码到页面
+ //specCaptcha.out(response.getOutputStream());
+ return specCaptcha.text();
+ }
+
+ /**
+ * 异步验证
+ *
+ * @param request 请求报文
+ * @param captcha 验证码
+ * @return 验证结果
+ */
+ @Override
+ @RequestMapping("/verify")
+ public Result verify(HttpServletRequest request, String captcha) {
+ if (com.wf.captcha.utils.CaptchaUtil.ver(captcha, request)) {
+ return success("验证成功");
+ }
+ return failure("验证失败");
+ }
+
+
+ /**
+ * 生成验证码
+ *
+ * @param httpServletRequest imageIo
+ * @param httpServletResponse imageIo
+ */
+ @Override
+ @GetMapping("/generateVerificationCode/v1")
+ public void generateVerificationCodeV1(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
+ @RequestParam(name = "vl", defaultValue = "4") Integer vcodeLength,//vcodeLength,验证码长度
+ @RequestParam(name = "fs", defaultValue = "21") Integer fontSize,//fontSize,验证码字体大小
+ @RequestParam(name = "w", defaultValue = "98") Integer width,//width,图片宽度
+ @RequestParam(name = "h", defaultValue = "33") Integer height//height,图片高度
+ ) {
+ VerificationCodeUtil verificationCodeUtil = new VerificationCodeUtil(vcodeLength, fontSize, width, height);
+ String generatorVerificationCode = verificationCodeUtil.generatorVCode();
+ this.verificationCodeService.cacheVerificationCode(generatorVerificationCode);
+ try {
+ ImageIO.write(verificationCodeUtil.generatorVCodeImage(generatorVerificationCode, true), "gif", httpServletResponse.getOutputStream());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 生成验证码
+ */
+ @Override
+ @GetMapping("/generateVerificationCode/v2")
+ public String generateVerificationCodeV2() {
+ ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(111, 36, 6, 6);
+ // 验证码对应的字符串
+ String code = captcha.getCode();
+ this.verificationCodeService.cacheVerificationCode(code);
+ return captcha.getImageBase64();
+ }
+
+
+ /**
+ * 模拟手机验证码
+ */
+ @Override
+ @GetMapping("/generateVerificationCode/v3")
+ public Result generateVerificationCodeV3(String telephone) {
+ String verifierCode = CommonUtil.mobileVerifierCode(6);
+ //保存至数据库
+ VerificationCode verificationCode = new VerificationCode();
+ verificationCode.setAddTime(new Date());
+ verificationCode.setDeleteStatus(false);
+ verificationCode.setType(VerificationCode.Type.pc);
+ verificationCode.setStatus(VerificationCode.Status.register);
+ verificationCode.setTelephone(telephone);
+ verificationCode.setCode(verifierCode);
+ this.verificationCodeService.save(verificationCode);
+ return new Result(true, 0, "发送成功", verifierCode);
+ }
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/PermissionDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/PermissionDao.java
new file mode 100644
index 0000000..8ada8e5
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/PermissionDao.java
@@ -0,0 +1,41 @@
+package com.zhangmeng.admin.manager.dao;
+
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.Permission;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * @author zhengmeng
+ * @version 1.0
+ * @date 2021年1月7日17:44:40
+ */
+@Mapper
+public interface PermissionDao extends AbstractBaseMapper {
+
+ @Results(value = {
+ @Result(id = true,column = "id",property = "id"),
+ @Result(column = "addTime",property = "addTime"),
+ @Result(column = "updateTime",property = "updateTime"),
+ @Result(column = "name",property = "name"),
+ @Result(column = "type",property = "type"),
+ @Result(column = "permissionCode",property = "permissionCode"),
+ @Result(column = "url",property = "url"),
+ @Result(column = "openType",property = "openType"),
+ @Result(column = "parent_id",property = "parent_id"),
+ @Result(column = "long_text_id",property = "long_text_id"),
+ @Result(column = "parent_long_text_id",property = "parent_long_text_id"),
+ @Result(column = "icon",property = "icon"),
+ @Result(column = "sort",property = "sort"),
+ })
+ @Select("select DISTINCT p.* from permission p left join role_permission rp on p.id = rp.permission_id left join user_role ur on ur.role_id = rp.role_id where ur.user_id = #{userId}")
+ List findByUserId(@Param("userId") Long userId);
+
+ @Select("select * from permission p where p.parentId is null")
+ List findByParentIdIsNull();
+
+ @Select("select * from permission p where p.parentId = #{parentId}")
+ List findByParentId(Long parentId);
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RoleDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RoleDao.java
new file mode 100644
index 0000000..c6c84fe
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RoleDao.java
@@ -0,0 +1,14 @@
+package com.zhangmeng.admin.manager.dao;
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.Role;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zhengmeng
+ * @version 1.0
+ * @date 2021年1月7日17:44:40
+ */
+@Mapper
+public interface RoleDao extends AbstractBaseMapper {
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RolePermissionDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RolePermissionDao.java
new file mode 100644
index 0000000..6e563b0
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/RolePermissionDao.java
@@ -0,0 +1,15 @@
+package com.zhangmeng.admin.manager.dao;
+
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.RolePermission;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zhengmeng
+ * @version 1.0
+ * @date 2021年1月7日17:44:40
+ */
+@Mapper
+public interface RolePermissionDao extends AbstractBaseMapper {
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserDao.java
new file mode 100644
index 0000000..d1c669f
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserDao.java
@@ -0,0 +1,15 @@
+package com.zhangmeng.admin.manager.dao;
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.User;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zhengmeng
+ * @version 1.0
+ * @date 2021年1月7日17:44:40
+ */
+@Mapper
+public interface UserDao extends AbstractBaseMapper {
+
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserRoleDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserRoleDao.java
new file mode 100644
index 0000000..976f07e
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/UserRoleDao.java
@@ -0,0 +1,15 @@
+package com.zhangmeng.admin.manager.dao;
+
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.UserRole;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zhengmeng
+ * @version 1.0
+ * @date 2021年1月7日17:44:40
+ */
+@Mapper
+public interface UserRoleDao extends AbstractBaseMapper {
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/VerificationCodeDao.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/VerificationCodeDao.java
new file mode 100644
index 0000000..4261380
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/dao/VerificationCodeDao.java
@@ -0,0 +1,14 @@
+package com.zhangmeng.admin.manager.dao;
+
+import com.zhangmeng.model.base.baseDao.AbstractBaseMapper;
+import com.zhangmeng.model.entity.VerificationCode;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author zhangmeng
+ * @version 1.0
+ * @date 2021/4/1 21:34
+ */
+@Mapper
+public interface VerificationCodeDao extends AbstractBaseMapper {
+}
diff --git a/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/service/PermissionService.java b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/service/PermissionService.java
new file mode 100644
index 0000000..cdd7ae3
--- /dev/null
+++ b/mystyle-cloud-admin-manager/src/main/java/com/zhangmeng/admin/manager/service/PermissionService.java
@@ -0,0 +1,19 @@
+package com.zhangmeng.admin.manager.service;
+
+import com.zhangmeng.model.base.baseService.BaseService;
+import com.zhangmeng.model.dto.Menu;
+import com.zhangmeng.model.entity.Permission;
+
+import java.util.List;
+
+/**
+ * @author zhangmeng
+ * @version 1.0
+ * @date 2021年1月7日22:32:54
+ */
+public interface PermissionService extends BaseService {
+
+ List findByUserId(Long userId);
+
+ List