提交 341c907e 作者: 余乾开

Merge branch 'develop'

......@@ -88,7 +88,7 @@ jobs:
{
"msgtype": "markdown",
"markdown": {
"content": "### GitHub构建并推送镜像失败 \n
"content": "### `GitHub构建并推送镜像失败` \n
> - 提交人: ${{github.actor}} \n
> - 提交信息: ${{github.event.head_commit.message}} \n
> - 提交到仓库: ${{github.repository}} \n
......
......@@ -89,7 +89,7 @@ jobs:
{
"msgtype": "markdown",
"markdown": {
"content": "### GitHub构建并推送镜像失败 \n
"content": "### `GitHub构建并推送镜像失败` \n
> - 提交人: ${{github.actor}} \n
> - 提交信息: ${{github.event.head_commit.message}} \n
> - 提交到仓库: ${{github.repository}} \n
......
package com.mmc.iuav.user.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:25
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "菜单DTO")
public class MenuInfoDTO implements Serializable {
private static final long serialVersionUID = -4144480758801282377L;
private Integer id;
@ApiModelProperty(value = "上级ID")
private Integer pid;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "元素类型:0菜单 1按钮")
private String domType;
@ApiModelProperty(value = "路由地址")
private String pathInfo;
@ApiModelProperty(value = "图标")
private String icon;
@ApiModelProperty(value = "下级菜单列表")
private List<MenuInfoDTO> children;
}
package com.mmc.iuav.user.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author small
* @Date 2023/7/10 16:03
* @Version 1.0
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleInfoDTO implements Serializable {
private static final long serialVersionUID = -4791023169682602298L;
@ApiModelProperty(value = "角色ID")
private Integer id;
@ApiModelProperty(value = "角色编号")
private String roleNo;
@ApiModelProperty(value = "角色名称/权限角色")
private String roleName;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "账号名称/创建人")
private String userName;
}
package com.mmc.iuav.user.model.qo;
import com.mmc.iuav.group.Freeze;
import com.mmc.iuav.group.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @Author small
* @Date 2023/7/10 16:02
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleInfoQO implements Serializable {
private static final long serialVersionUID = -3729786590325257669L;
@ApiModelProperty(value = "权限角色/或者编号", required = false)
private String NumberOrName;
@ApiModelProperty(value = "当前页", required = true, example = "1")
@NotNull(message = "当前页不能为空", groups = {Page.class, Freeze.class})
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "页大小", required = true, example = "10")
@NotNull(message = "页大小不能为空", groups = {Page.class, Freeze.class})
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
package com.mmc.iuav.user.model.vo;
import com.mmc.iuav.group.Create;
import com.mmc.iuav.group.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* @Author small
* @Date 2023/7/10 16:02
* @Version 1.0
*/
@Data
public class RoleInfoVO implements Serializable {
private static final long serialVersionUID = -5814724843819090363L;
@ApiModelProperty(value = "角色id", example = "1")
@NotNull(message = "角色ID不能为空", groups = Update.class)
private Integer id;
@ApiModelProperty(value = "角色名称", example = "超级管理员")
@Size(max = 10, message = "权限角色不得超过10个字符")
@NotBlank(message = "角色名称不能为空", groups = {Create.class, Update.class})
private String roleName;
@ApiModelProperty(value = "备注", example = "备注", required = false)
@Size(max = 225, message = "备注不得超过225个字符", groups = {Create.class, Update.class})
private String remark;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:04
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleMenuInfoVO implements Serializable {
private static final long serialVersionUID = -8669403169556374845L;
@ApiModelProperty(value = "角色id")
@NotNull
private Integer roleId;
@ApiModelProperty(value = "菜单ids")
@NotNull
@Size(min = 1, message = "角色菜单需选择1个以上")
private List<Integer> menuInfoIds;
}
......@@ -29,4 +29,11 @@ public class CodeUtil {
public static String removeUserAccount() {
return "DELETE" + CodeUtil.getRandomNum(15);
}
public static String createRoleNo() {
StringBuffer sb = new StringBuffer();
sb.append("A");
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
}
package com.mmc.iuav.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:44
* @explain 类说明
*/
public interface Create {
import javax.validation.groups.Default;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:44
* @explain 类说明
*/
public interface Create extends Default {
}
package com.mmc.iuav.group;
import javax.validation.groups.Default;
/**
* @author: zj
* @Date: 2023/5/16 16:32
*/
public interface Update {
public interface Update extends Default {
}
package com.mmc.iuav.response;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
......@@ -18,7 +17,7 @@ import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "com.mmc.iuav.response.ResultBody", description = "请求响应体")
//@ApiModel(value = "com.mmc.iuav.response.ResultBody", description = "请求响应体")
public class ResultBody<T> implements Serializable {
private static final long serialVersionUID = -6913505187877217885L;
......@@ -70,9 +69,8 @@ public class ResultBody<T> implements Serializable {
/**
* 成功
*
* **/
public static ResultBody success1(ResultEnum enums){
**/
public static ResultBody success1(ResultEnum enums) {
ResultBody rb = new ResultBody();
rb.setCode("200");
rb.setMessage(enums.getResultMsg());
......@@ -149,4 +147,6 @@ public class ResultBody<T> implements Serializable {
public String toString() {
return JSONObject.toJSONString(this);
}
}
......@@ -4,7 +4,7 @@ package com.mmc.iuav.response;
* @author: zj
* @Date: 2023/5/16 10:41
*/
public enum ResultEnum implements BaseErrorInfoInterface{
public enum ResultEnum implements BaseErrorInfoInterface {
SUCCESS("200", "success"),
FAIL("500", "fail"),
PARAM_ERROR("400", "参数错误"),
......@@ -34,11 +34,13 @@ public enum ResultEnum implements BaseErrorInfoInterface{
PWD_REQUEST_AUTH_ERROR("6003", "密码请求验证"),
APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"),
APPLET_LOGIN_ERROR("7002", "获取小程序登录信息失败"),
UPDATE_USER_ACCOUNT_REPEAT("7003", "修改后的账户名已存在"),
ADD_USER_ACCOUNT_NAME_EXISTS("7004", "新增账户名已经存在");
ADD_USER_ACCOUNT_NAME_EXISTS("7004", "新增账户名已经存在"),
ROLE_NAME_REPEAT_ERROR("8004", "角色名已存在"),
ROLE_AVL_USER_DELETE_ERROR("8005", "该角色下目前已关联多个用户账号,请先在用户列表中删除角色者账号");
/**
* 错误码
......
package com.mmc.iuav.user.controller;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
import com.mmc.iuav.user.service.MenuInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/7/11 14:09
*/
@Api(tags = "角色菜单管理")
@RequestMapping("/role-menu/")
@RestController
public class MenuInfoController extends BaseController {
@Autowired
private MenuInfoService menuInfoService;
@ApiOperation(value = "全部菜单列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = MenuInfoDTO.class)})
@GetMapping("listMenuInfo")
public ResultBody listMenuInfo() {
return menuInfoService.listMenuInfo();
}
@ApiOperation(value = "根据角色id获取权限")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = MenuInfoDTO.class)})
@GetMapping("listRoleMenuInfo")
public ResultBody listRoleMenuInfo(@RequestParam Integer roleId) {
return menuInfoService.listRoleMenuInfo(roleId);
}
@ApiOperation(value = "修改角色菜单权限")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("updateRoleMenuInfo")
public ResultBody updateRoleMenuInfo(HttpServletRequest request, @RequestBody RoleMenuInfoVO roleMenuInfoVO) {
return menuInfoService.updateRoleMenuInfo(roleMenuInfoVO, this.getUserLoginInfoFromRedis(request));
}
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.group.Create;
import com.mmc.iuav.group.Page;
import com.mmc.iuav.group.Update;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.RoleInfoDTO;
import com.mmc.iuav.user.model.qo.RoleInfoQO;
import com.mmc.iuav.user.model.vo.RoleInfoVO;
import com.mmc.iuav.user.service.RoleService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @Author small
* @Date 2023/7/7 17:53
* @Version 1.0
*/
@Api(tags = "角色管理")
@RequestMapping("/role")
@RestController
public class RoleController extends BaseController {
@Autowired
private RoleService roleService;
@ApiOperation(value = "角色管理-新增")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("insertRoleInfo")
public ResultBody insertRoleInfo(HttpServletRequest request, @RequestBody @Validated(value = {Create.class}) RoleInfoVO role) {
return roleService.insertRoleInfo(role, this.getUserLoginInfoFromRedis(request));
}
@ApiOperation(value = "角色管理-修改")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("updateRoleInfo")
public ResultBody updateRoleInfo(HttpServletRequest request, @RequestBody @Validated(value = {Update.class}) RoleInfoVO role) {
return roleService.updateRoleInfo(role, this.getUserLoginInfoFromRedis(request));
}
@ApiOperation(value = "角色管理-删除")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("removeRoleInfo")
public ResultBody removeRoleInfo(@ApiParam(value = "角色id", required = true) @RequestParam Integer id) {
return roleService.removeRoleInfo(id);
}
@ApiOperation(value = "角色管理-分页")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = RoleInfoDTO.class)})
@PostMapping("listRoleInfoPage")
public ResultBody<RoleInfoDTO> listRoleInfoPage(HttpServletRequest request,
@Validated(value = {Page.class}) @ApiParam(value = "角色查询QO", required = true) @RequestBody RoleInfoQO param) {
return ResultBody.success(roleService.listPageRoleInfo(param, this.getUserLoginInfoFromRedis(request)));
}
@ApiOperation(value = "角色管理-当前角色绑定了那些账号")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("roleAccountList")
public ResultBody<RoleInfoDTO> roleAccountList(@ApiParam(value = "角色id", required = true) @RequestParam Integer id) {
return roleService.roleAccountList(id);
}
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.MenuInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:11
*/
@Mapper
public interface MenuInfoDao {
List<MenuInfoDO> listMenuInfo();
List<MenuInfoDO> listRoleMenuInfo(Integer roleId);
void batchAddMenuIds(Integer roleId, @Param("addMenuIds") List<Integer> addMenuIds);
void batchDeleteMenuIds(Integer roleId, @Param("deleteMenuIds") List<Integer> deleteMenuIds);
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.RoleInfoDO;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.qo.RoleInfoQO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author small
* @Date 2023/7/10 16:06
* @Version 1.0
*/
@Mapper
public interface RoleDao {
Integer countRoleName(String roleName);
void insertRoleInfo(RoleInfoDO rd);
void updateRoleInfo(RoleInfoDO rd);
List<Integer> listUserRoleInfo(Integer id);
void removeRoleInfo(Integer id);
RoleInfoDO getRoleInfo(Integer id);
int countPageRoleInfo(RoleInfoQO param);
List<RoleInfoDO> listPageRoleInfo(RoleInfoQO param);
Integer countRoleNameId(RoleInfoDO rd);
Integer countNotDelUserAccountByRole(Integer id);
List<UserAccountDO> roleAccountList(Integer id);
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/7/11 14:49
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MenuInfoDO implements Serializable {
private static final long serialVersionUID = -4992870152816350664L;
private Integer id;
private Integer pid;
private String menuName;
private String portType;
private String domType;
private String pathInfo;
private String icon;
private Integer sort;
private Date createTime;
private Date updateTime;
public MenuInfoDTO buildMenuInfoDTO() {
return MenuInfoDTO.builder().id(this.id).pid(this.pid).menuName(this.menuName).domType(this.domType)
.pathInfo(this.pathInfo).icon(this.icon).build();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.RoleInfoDTO;
import com.mmc.iuav.user.model.vo.RoleInfoVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @Author small
* @Date 2023/7/10 16:07
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RoleInfoDO {
private static final long serialVersionUID = -9173631450897624325L;
private Integer id;
/**
* 角色编号
*/
private String roleNo;
/**
* 角色名称
*/
private String roleName;
/**
* 是否删除
*/
private Integer isDeleted;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 账号id
*/
private Integer userAccountId;
/**
* 账号名称
*/
private String userName;
/**
* DTO转换
*
* @return
*/
public RoleInfoDTO buildRoleInfoDTO() {
return RoleInfoDTO.builder().id(this.id).roleNo(this.roleNo).roleName(this.roleName)
.userName(this.userName)
.remark(this.remark).build();
}
/**
* VO类转换
*/
public RoleInfoDO(RoleInfoVO role) {
this.id = role.getId();
this.roleName = role.getRoleName();
this.remark = role.getRemark();
}
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
/**
* @author: zj
* @Date: 2023/7/11 14:13
*/
public interface MenuInfoService {
ResultBody updateRoleMenuInfo(RoleMenuInfoVO roleMenuInfoVO, LoginSuccessDTO userLoginInfoFromRedis);
ResultBody listMenuInfo();
ResultBody listRoleMenuInfo(Integer roleId);
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.qo.RoleInfoQO;
import com.mmc.iuav.user.model.vo.RoleInfoVO;
/**
* @Author small
* @Date 2023/7/8 9:53
* @Version 1.0
*/
public interface RoleService {
ResultBody insertRoleInfo(RoleInfoVO role, LoginSuccessDTO userLoginInfoFromRedis);
ResultBody updateRoleInfo(RoleInfoVO role, LoginSuccessDTO userLoginInfoFromRedis);
ResultBody removeRoleInfo(Integer id);
PageResult listPageRoleInfo(RoleInfoQO param, LoginSuccessDTO userLoginInfoFromRedis);
ResultBody roleAccountList(Integer id);
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.MenuInfoDao;
import com.mmc.iuav.user.dao.RoleDao;
import com.mmc.iuav.user.entity.MenuInfoDO;
import com.mmc.iuav.user.entity.RoleInfoDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
import com.mmc.iuav.user.service.MenuInfoService;
import com.mmc.iuav.user.util.MenuTreeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/7/11 14:14
*/
@Service
public class MenuInfoServiceImpl implements MenuInfoService {
@Autowired
private MenuInfoDao menuInfoDao;
@Autowired
private RoleDao roleDao;
@Transactional
@Override
public ResultBody updateRoleMenuInfo(RoleMenuInfoVO roleMenuInfoVO, LoginSuccessDTO loginSuccessDTO) {
// 判断该角色的菜单是否可以修改
RoleInfoDO roleInfo = roleDao.getRoleInfo(roleMenuInfoVO.getRoleId());
if (!CollectionUtils.isEmpty(roleMenuInfoVO.getMenuInfoIds())) {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listRoleMenuInfo(roleMenuInfoVO.getRoleId());
List<Integer> existMenuIds = menuInfoDOList.stream().map(MenuInfoDO::getId).collect(Collectors.toList());
// 新添加的权限
List<Integer> addMenuIds = roleMenuInfoVO.getMenuInfoIds().stream().filter(v -> !existMenuIds.contains(v)).collect(Collectors.toList());
// 需删除的权限
List<Integer> deleteMenuIds = existMenuIds.stream().filter(v -> !roleMenuInfoVO.getMenuInfoIds().contains(v)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(addMenuIds)) {
menuInfoDao.batchAddMenuIds(roleMenuInfoVO.getRoleId(), addMenuIds);
}
if (!CollectionUtils.isEmpty(deleteMenuIds)) {
menuInfoDao.batchDeleteMenuIds(roleMenuInfoVO.getRoleId(), deleteMenuIds);
}
}
return ResultBody.success();
}
@Override
public ResultBody listMenuInfo() {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listMenuInfo();
List<MenuInfoDTO> menuInfoDTOS = menuInfoDOList.stream().map(MenuInfoDO::buildMenuInfoDTO).collect(Collectors.toList());
return ResultBody.success(MenuTreeUtil.buildTreePCMenu(menuInfoDTOS));
}
@Override
public ResultBody listRoleMenuInfo(Integer roleId) {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listRoleMenuInfo(roleId);
List<MenuInfoDTO> menuInfoDTOS = menuInfoDOList.stream().map(MenuInfoDO::buildMenuInfoDTO).collect(Collectors.toList());
return ResultBody.success(MenuTreeUtil.buildTreePCMenu(menuInfoDTOS));
}
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.general.CodeUtil;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.dao.RoleDao;
import com.mmc.iuav.user.entity.RoleInfoDO;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.RoleInfoQO;
import com.mmc.iuav.user.model.vo.RoleInfoVO;
import com.mmc.iuav.user.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author small
* @Date 2023/7/10 16:05
* @Version 1.0
*/
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleDao roleDao;
@Override
public ResultBody insertRoleInfo(RoleInfoVO roleInfo, LoginSuccessDTO userLoginInfoFromRedis) {
int count = roleDao.countRoleName(roleInfo.getRoleName());
if (count > 0) {
return ResultBody.error(ResultEnum.ROLE_NAME_REPEAT_ERROR);
}
RoleInfoDO rd = new RoleInfoDO(roleInfo);
rd.setUserAccountId(userLoginInfoFromRedis.getUserAccountId());
rd.setRoleNo(CodeUtil.createRoleNo());
roleDao.insertRoleInfo(rd);
return ResultBody.success();
}
@Override
public ResultBody updateRoleInfo(RoleInfoVO roleInfo, LoginSuccessDTO userLoginInfoFromRedis) {
RoleInfoDO rd = new RoleInfoDO(roleInfo);
int count = roleDao.countRoleNameId(rd);
if (count > 0) {
return ResultBody.error(ResultEnum.ROLE_NAME_REPEAT_ERROR);
}
rd.setUserAccountId(userLoginInfoFromRedis.getUserAccountId());
roleDao.updateRoleInfo(rd);
return ResultBody.success();
}
@Override
public ResultBody removeRoleInfo(Integer id) {
Integer count = roleDao.countNotDelUserAccountByRole(id);
if (count > 0) {
return ResultBody.error(ResultEnum.ROLE_AVL_USER_DELETE_ERROR);
}
roleDao.removeRoleInfo(id);
return ResultBody.success();
}
@Override
public PageResult listPageRoleInfo(RoleInfoQO param, LoginSuccessDTO userLoginInfoFromRedis) {
int count = roleDao.countPageRoleInfo(param);
if (count == 0) {
return PageResult.buildPage(param.getPageNo(), param.getPageSize(), count);
}
Integer pageNo = param.getPageNo();
param.buildCurrentPage();
return PageResult.buildPage(pageNo, param.getPageSize(), count,
roleDao.listPageRoleInfo(param).stream().map(d -> {
return d.buildRoleInfoDTO();
}).collect(Collectors.toList()));
}
@Override
public ResultBody roleAccountList(Integer id) {
List<UserAccountDO> roleInfoDOS = roleDao.roleAccountList(id);
List<UserAccountSimpleDTO> accountSimpleDTOS = roleInfoDOS.stream().map(UserAccountDO::buildUserAccountSimpleDTO).collect(Collectors.toList());
return ResultBody.success(accountSimpleDTOS);
}
}
package com.mmc.iuav.user.util;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import java.util.ArrayList;
import java.util.List;
/**
* @author zj
*/
public class MenuTreeUtil {
public final static Integer SXTB_PC_MENU_PID = 1;
public final static String SXTB_PC_MENU_NAME = "云享飞管理后台";
public static void builderTree(List<MenuInfoDTO> treeEntityList, MenuInfoDTO pTreeEntity) {
List<MenuInfoDTO> childMenus = new ArrayList<MenuInfoDTO>();
for (MenuInfoDTO menuInfo : treeEntityList) {
// int的对比范围有限所以需要使用equals
if ((menuInfo.getPid().toString()).equals(pTreeEntity.getId().toString())) {
childMenus.add(menuInfo);
}
}
if (childMenus.size() > 0) {
pTreeEntity.setChildren(childMenus);
} else {
return;
}
for (MenuInfoDTO children : childMenus) {
treeEntityList.remove(children);
}
if (treeEntityList.size() > 0) {
for (MenuInfoDTO children : childMenus) {
builderTree(treeEntityList, children);
}
}
}
/**
* 获取云享飞管理后台菜单列表
*
* @return
*/
public static MenuInfoDTO buildTreePCMenu(List<MenuInfoDTO> treeEntityList) {
MenuInfoDTO parent = new MenuInfoDTO();
parent.setId(MenuTreeUtil.SXTB_PC_MENU_PID);
parent.setMenuName(SXTB_PC_MENU_NAME);
MenuTreeUtil.builderTree(treeEntityList, parent);
return parent;
}
}
package com.mmc.iuav.user.util;
import com.mmc.iuav.response.ResultBody;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @Author small
* @Date 2023/7/10 16:24
* @Version 1.0
*/
@Slf4j
@ControllerAdvice
public class VaildExceptionConfig extends ResultBody {
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultBody throwCustomException(MethodArgumentNotValidException methodArgumentNotValidException) {
log.error("[ @Vaild异常捕获 ] " + methodArgumentNotValidException.getMessage());
ResultBody resultBody = new ResultBody();
resultBody.setCode("400");
resultBody.setMessage(methodArgumentNotValidException.getBindingResult().getFieldError().getDefaultMessage());
return resultBody;
}
}
......@@ -4,8 +4,8 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql.default:3306/iuav_cms_dev?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: tmj
password: MMC@2022&MYSQL
username: iuav_dev
password: ${MYSQL_PASSWORD}
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
# druid:
......@@ -39,23 +39,25 @@ spring:
redis:
database: 1
host: redis.default
password: MMC@2022&REDIS
password: ${REDIS_PASSWORD}
port: 6379
#rabbitMQ
rabbitmq:
host: amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.net.mq.amqp.aliyuncs.com
port: 5672
username: MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password: RTg3OUMxQzk4NzU0NDQ4RkQ1RDg4MkEzQjY4M0M3MkQxOTM2QkEyNDoxNjUyNDA4NDk0NDg4
password: ${RABBITMQ_PASSWORD}
virtual-host: dev
wx:
#公众号
sub:
appid: wx5c6a105a0ddca4c5
secret: 96c75255dd26f82f8d55e15b59e101c7
secret: ${WECHAT_SUB_SECRET}
#小程序
app:
id: wx18b7883acd204278
secret: 28afe74ba373830237a8133a7431ee82
secret: ${WECHAT_APPLET_SECRET}
miniprogram-state: trial
env-version: trial
token-path: /userservlet/wechat/getAppletUserAccessToken
......
......@@ -4,8 +4,8 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://rm-wz9dd796t4j1giz6t2o.mysql.rds.aliyuncs.com:3306/iuav_cms_dev?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: tmj
password: MMC@2022&MYSQL
username: iuav_dev
password: IUAV_DEV@2023&MYSQL
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
redis:
......
......@@ -4,8 +4,8 @@ spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql.default:3306/iuav_cms?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: tmj
password: MMC@2022&MYSQL
username: iuav
password: ${MYSQL_PASSWORD}
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
# druid:
......@@ -39,23 +39,23 @@ spring:
redis:
database: 5
host: redis.default
password: MMC@2022&REDIS
password: ${REDIS_PASSWORD}
port: 6379
#rabbitMQ
rabbitmq:
host: amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.net.mq.amqp.aliyuncs.com
port: 5672
username: MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password: RTg3OUMxQzk4NzU0NDQ4RkQ1RDg4MkEzQjY4M0M3MkQxOTM2QkEyNDoxNjUyNDA4NDk0NDg4
password: ${RABBITMQ_PASSWORD}
virtual-host: prod
wx:
sub:
appid: wx5c6a105a0ddca4c5
secret: 96c75255dd26f82f8d55e15b59e101c7
secret: ${WECHAT_SUB_SECRET}
app:
id: wx18b7883acd204278
secret: 28afe74ba373830237a8133a7431ee82
secret: ${WECHAT_APPLET_SECRET}
miniprogram-state: formal
env-version: release
token-path: /userservlet/wechat/getAppletUserAccessToken
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.MenuInfoDao">
<resultMap id="menuInfoResultMap" type="com.mmc.iuav.user.entity.MenuInfoDO">
<id property="id" column="id"/>
<result property="pid" column="pid"/>
<result property="menuName" column="menu_name"/>
<result property="portType" column="port_type"/>
<result property="domType" column="dom_type"/>
<result property="pathInfo" column="path_info"/>
<result property="icon" column="icon"/>
<result property="sort" column="sort"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<insert id="batchAddMenuIds">
insert into menu_role_rel
(
role_id,menu_id,create_time
)
values
<foreach collection="addMenuIds" item="menuId" separator=",">
(
#{roleId},#{menuId},NOW()
)
</foreach>
</insert>
<delete id="batchDeleteMenuIds">
delete from menu_role_rel where role_id = #{roleId} and menu_id in
<foreach collection="deleteMenuIds" item="menuId" open="(" separator=","
close=")">
#{menuId}
</foreach>
</delete>
<select id="listMenuInfo" resultType="com.mmc.iuav.user.entity.MenuInfoDO">
select m.id,m.pid,m.menu_name,m.dom_type,m.path_info
from menu_info m
order by m.sort ASC
</select>
<select id="listRoleMenuInfo" resultType="com.mmc.iuav.user.entity.MenuInfoDO">
select m.id,m.pid,m.menu_name,m.dom_type,m.path_info
from menu_info m
inner join menu_role_rel mr on mr.menu_id=m.id
where mr.role_id = #{roleId}
order by m.sort ASC
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.RoleDao">
<resultMap type="com.mmc.iuav.user.entity.RoleInfoDO"
id="roleInfoResultMap">
<id property="id" column="id"/>
<result property="roleNo" column="role_no"/>
<result property="roleName" column="role_name"/>
<result property="isDeleted" column="is_deleted"/>
<result property="remark" column="remark"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="userAccountId" column="user_account_id"/>
<result property="userName" column="user_name"/>
<result property="updateTime" column="update_time"/>
<result property="userName" column="user_name"/>
</resultMap>
<resultMap id="userAccountResultMap" type="com.mmc.iuav.user.entity.UserAccountDO">
<id property="id" column="id"/>
<result property="uid" column="uid"/>
<result property="phoneNum" column="phone_num"/>
<result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/>
<result property="userImg" column="user_img"/>
<result property="openId" column="open_id"/>
<result property="unionId" column="union_id"/>
<result property="userSex" column="user_sex"/>
<result property="email" column="email"/>
<result property="source" column="source"/>
<result property="accountStatus" column="account_status"/>
<result property="remark" column="remark"/>
<result property="portType" column="port_type"/>
<result property="deleted" column="is_deleted"/>
<result property="createTime" column="createTime"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<select id="countRoleName" resultType="int">
select count(*)
from role_info r
where r.is_deleted=0
<if test=" roleName != null and roleName != '' ">
and role_name = #{roleName}
</if>
</select>
<select id="countRoleNameId" resultType="java.lang.Integer">
select count(*)
from role_info r
where r.is_deleted=0
<if test=" roleName != null and roleName != '' ">
and role_name = #{roleName}
</if>
<if test=" id != null and id != '' ">
and id != #{id}
</if>
</select>
<insert id="insertRoleInfo" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.iuav.user.entity.RoleInfoDO">
insert into role_info(role_no, role_name, user_account_id, remark, create_time)
values (#{roleNo}, #{roleName}, #{userAccountId}, #{remark}, NOW())
</insert>
<update id="updateRoleInfo"
parameterType="com.mmc.iuav.user.entity.RoleInfoDO">
UPDATE role_info
<set>
<if test=" roleName != null and roleName != '' ">
role_name = #{roleName},
</if>
remark = #{remark},
update_time=NOW()
</set>
where id = #{id}
</update>
<select id="listUserRoleInfo" resultType="int"
parameterType="int">
select user_account_id
from user_role_rel
where role_id = #{roleId}
</select>
<update id="removeRoleInfo" parameterType="int">
UPDATE role_info
<set>
is_deleted = 1
</set>
where id = #{id}
</update>
<select id="getRoleInfo" resultMap="roleInfoResultMap"
parameterType="int">
select r.id,
r.role_no,
r.role_name,
r.remark,
r.create_time
from role_info r
where r.id = #{id}
and r.is_deleted = 0
</select>
<select id="countPageRoleInfo" resultType="int"
parameterType="com.mmc.iuav.user.model.qo.RoleInfoQO">
SELECT count(*)
FROM
role_info r
INNER JOIN user_account ua ON r.user_account_id = ua.id
WHERE
r.is_deleted =0
<if test=" NumberOrName != null and NumberOrName != '' ">
and (r.role_no =#{NumberOrName}) or
(r.role_name =#{NumberOrName})
</if>
</select>
<select id="listPageRoleInfo" resultMap="roleInfoResultMap"
parameterType="com.mmc.iuav.user.model.qo.RoleInfoQO">
SELECT
r.id,
r.role_no,
r.role_name,
r.remark,
r.create_time,
r.user_account_id,
ua.user_name,
r.update_time
FROM
role_info r
INNER JOIN user_account ua ON r.user_account_id = ua.id
WHERE
r.is_deleted =0
<if test=" NumberOrName != null and NumberOrName != '' ">
and (r.role_no =#{NumberOrName}) or
(r.role_name =#{NumberOrName})
</if>
order by r.update_time desc, r.create_time desc
limit #{pageNo},#{pageSize}
</select>
<select id="countNotDelUserAccountByRole" resultType="java.lang.Integer">
SELECT count(*)
FROM user_role_rel ur
INNER JOIN user_account ua ON ur.user_account_id = ua.id
WHERE ur.role_id = #{id}
AND ua.is_deleted = 0
</select>
<select id="roleAccountList" resultMap="userAccountResultMap">
SELECT urr.user_account_id,
ua.user_name,
ua.uid,
ua.phone_num,
ua.user_name,
ua.is_deleted
FROM user_role_rel urr
LEFT JOIN user_account ua ON ua.id = urr.user_account_id
WHERE urr.role_id = #{id}
AND ua.is_deleted = 0
</select>
</mapper>
......@@ -57,6 +57,36 @@ spec:
configMapKeyRef:
name: cms-map
key: SW_AGENT_NAME
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: iuav-secret
key: MYSQL_PASSWORD
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: iuav-secret
key: REDIS_PASSWORD
- name: OSS_ACCESS_KEY_SECRET
valueFrom:
secretKeyRef:
name: iuav-secret
key: OSS_ACCESS_KEY_SECRET
- name: WECHAT_SUB_SECRET
valueFrom:
secretKeyRef:
name: iuav-secret
key: WECHAT_SUB_SECRET
- name: WECHAT_APPLET_SECRET
valueFrom:
secretKeyRef:
name: iuav-secret
key: WECHAT_APPLET_SECRET
- name: RABBITMQ_PASSWORD
valueFrom:
secretKeyRef:
name: iuav-secret
key: RABBITMQ_PASSWORD
volumes:
- name: log-of-app
hostPath:
......
......@@ -6,7 +6,6 @@ metadata:
spec:
selector:
app: cms
type: NodePort
ports:
- protocol: TCP
port: 35150
\ No newline at end of file
......@@ -11,11 +11,11 @@ commonAnnotations:
patches:
- path: ./increase_replicas.yaml
- path: ./configMap.yaml
- path: ./service-patch.yaml
target:
kind: Service
name: cms-svc
#- path: ./service-patch.yaml
# target:
# kind: Service
# name: cms-svc
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag: 677d01da80e50371d2f0e7610dab215c65407b6b
newTag: 9b3bd9bc0f9cdefd5cdfedd1a0e7c575252b33e4
......@@ -11,10 +11,10 @@ commonAnnotations:
patches:
- path: increase_replicas.yaml
- path: configMap.yaml
- path: service-patch.yaml
target:
kind: Service
name: cms-svc
#- path: service-patch.yaml
# target:
# kind: Service
# name: cms-svc
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly/cms
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论