diff --git a/src/main/java/com/cgs/e_commerce/module/marketing/controller/SmsHomeCarouselController.java b/src/main/java/com/cgs/e_commerce/module/marketing/controller/SmsHomeCarouselController.java new file mode 100644 index 0000000..de44062 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/marketing/controller/SmsHomeCarouselController.java @@ -0,0 +1,91 @@ +package com.cgs.e_commerce.module.marketing.controller; + +import com.cgs.e_commerce.common.utils.AliOssUtil; +import com.cgs.e_commerce.common.utils.Result; +import com.cgs.e_commerce.module.marketing.entity.SmsHomeCarousel; +import com.cgs.e_commerce.module.marketing.service.SmsHomeCarouselService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@RestController +@RequestMapping("/marketing/carousel") +public class SmsHomeCarouselController { + + @Autowired + private SmsHomeCarouselService carouselService; + + @PostMapping("/upload") + public Result uploadCarouselPic(@RequestParam("file") MultipartFile file) throws IOException { + // 1. 校验文件 + if (file.isEmpty()) { + return Result.error("上传文件不能为空"); + } + // 2. 获取原文件名,处理文件名防止重复 + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null || !originalFilename.contains(".")) { + return Result.error("文件格式非法"); + } + String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); + // 3. 调用阿里云OSS工具类上传文件,获取URL + String picUrl = AliOssUtil.uploadFile(filename, file.getInputStream()); + // 4. 返回OSS的图片URL给前端 + return Result.success(picUrl); + } + + // ========== 原添加接口(无需修改逻辑,前端需先调用/upload获取URL,再传入pic字段) ========== + @PostMapping + public Result addCarousel(@RequestBody SmsHomeCarousel carousel) { + carouselService.addCarousel(carousel); + return Result.success("轮播添加成功"); + } + + // ========== 原更新接口(逻辑不变,前端同样先上传图片获取新URL,再更新pic字段) ========== + @PostMapping("/update") + public Result updateCarousel(@RequestBody SmsHomeCarousel carousel) { + SmsHomeCarousel existingCarousel = carouselService.getCarouselById(carousel.getId()); + if (existingCarousel == null) { + return Result.error("轮播不存在"); + } + carouselService.updateCarousel(carousel); + return Result.success("轮播更新成功"); + } + + @PostMapping("/list") + public Result> getCarouselList() { + List carousels = carouselService.getCarouselList(); + return Result.success(carousels); + } + + @PostMapping("/detail") + public Result getCarouselDetail(@RequestBody Map params) { + Long id = params.get("id"); + SmsHomeCarousel carousel = carouselService.getCarouselById(id); + if (carousel == null) { + return Result.error("轮播不存在"); + } + return Result.success(carousel); + } + + @PostMapping("/delete") + public Result deleteCarousel(@RequestBody Map params) { + Long id = params.get("id"); + SmsHomeCarousel existingCarousel = carouselService.getCarouselById(id); + if (existingCarousel == null) { + return Result.error("轮播不存在"); + } + carouselService.deleteCarousel(id); + return Result.success("轮播删除成功"); + } + + @PostMapping("/enabled") + public Result> getEnabledCarouselList() { + List carousels = carouselService.getEnabledCarouselList(); + return Result.success(carousels); + } +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/marketing/entity/SmsHomeCarousel.java b/src/main/java/com/cgs/e_commerce/module/marketing/entity/SmsHomeCarousel.java new file mode 100644 index 0000000..864a9d1 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/marketing/entity/SmsHomeCarousel.java @@ -0,0 +1,14 @@ +package com.cgs.e_commerce.module.marketing.entity; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class SmsHomeCarousel { + private Long id; + @NotBlank(message = "图片url不能为空") + private String pic; + private String url; + private Integer sort; + private Integer status; +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/marketing/mapper/SmsHomeCarouselMapper.java b/src/main/java/com/cgs/e_commerce/module/marketing/mapper/SmsHomeCarouselMapper.java new file mode 100644 index 0000000..f25423c --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/marketing/mapper/SmsHomeCarouselMapper.java @@ -0,0 +1,35 @@ +package com.cgs.e_commerce.module.marketing.mapper; + +import com.cgs.e_commerce.module.marketing.entity.SmsHomeCarousel; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface SmsHomeCarouselMapper { + // 新增轮播 + @Insert("insert into sms_home_carousel(pic, url, sort, status) " + + "values(#{pic}, #{url}, #{sort}, #{status})") + @Options(useGeneratedKeys = true, keyProperty = "id") + void addCarousel(SmsHomeCarousel carousel); + + // 查询轮播列表 + @Select("select * from sms_home_carousel order by sort asc") + List getCarouselList(); + + // 根据ID查询轮播 + @Select("select * from sms_home_carousel where id = #{id}") + SmsHomeCarousel getCarouselById(Long id); + + // 更新轮播 + @Update("update sms_home_carousel set pic = #{pic}, url = #{url}, sort = #{sort}, status = #{status} where id = #{id}") + void updateCarousel(SmsHomeCarousel carousel); + + // 删除轮播 + @Delete("delete from sms_home_carousel where id = #{id}") + void deleteCarousel(Long id); + + // 查询启用的轮播列表(前端展示用) + @Select("select * from sms_home_carousel where status = 1 order by sort asc") + List getEnabledCarouselList(); +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/marketing/service/SmsHomeCarouselService.java b/src/main/java/com/cgs/e_commerce/module/marketing/service/SmsHomeCarouselService.java new file mode 100644 index 0000000..b1e2149 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/marketing/service/SmsHomeCarouselService.java @@ -0,0 +1,38 @@ +package com.cgs.e_commerce.module.marketing.service; + +import com.cgs.e_commerce.module.marketing.entity.SmsHomeCarousel; +import com.cgs.e_commerce.module.marketing.mapper.SmsHomeCarouselMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class SmsHomeCarouselService { + @Autowired + private SmsHomeCarouselMapper carouselMapper; + + public void addCarousel(SmsHomeCarousel carousel) { + carouselMapper.addCarousel(carousel); + } + + public List getCarouselList() { + return carouselMapper.getCarouselList(); + } + + public SmsHomeCarousel getCarouselById(Long id) { + return carouselMapper.getCarouselById(id); + } + + public void updateCarousel(SmsHomeCarousel carousel) { + carouselMapper.updateCarousel(carousel); + } + + public void deleteCarousel(Long id) { + carouselMapper.deleteCarousel(id); + } + + public List getEnabledCarouselList() { + return carouselMapper.getEnabledCarouselList(); + } +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/controller/SysMenuController.java b/src/main/java/com/cgs/e_commerce/module/system/controller/SysMenuController.java new file mode 100644 index 0000000..92bbfc3 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/controller/SysMenuController.java @@ -0,0 +1,107 @@ +package com.cgs.e_commerce.module.system.controller; + +import com.cgs.e_commerce.common.utils.Result; +import com.cgs.e_commerce.module.system.dto.RoleMenuAssignDto; +import com.cgs.e_commerce.module.system.entity.SysMenu; +import com.cgs.e_commerce.module.system.entity.SysUserMenu; +import com.cgs.e_commerce.module.system.service.SysMenuService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/sys/menu") +@Slf4j +public class SysMenuController { + @Autowired + private SysMenuService sysMenuService; + + @PostMapping("/list") + public Result> list() { + List menus = sysMenuService.listWithTree(); + log.info("获取菜单列表成功,共{}个菜单", menus.size()); + return Result.success(menus); + } + + @PostMapping("/add") + public Result add(@RequestBody @Validated SysMenu sysMenu) { + sysMenuService.add(sysMenu); + log.info("菜单添加成功:{}", sysMenu.getMenuName()); + return Result.success("添加成功"); + } + + @PostMapping("/update") + public Result update(@RequestBody @Validated SysMenu sysMenu) { + sysMenuService.update(sysMenu); + log.info("菜单更新成功:{}", sysMenu.getMenuName()); + return Result.success("修改成功"); + } + + @PostMapping("/delete") + public Result delete(@RequestBody Long id) { + if (id == null || id <= 0) { + return Result.error("菜单ID不能为空且必须大于0"); + } + sysMenuService.delete(id); + log.info("菜单删除成功:ID={}", id); + return Result.success("删除成功"); + } + + // ====================== 2. 角色-菜单权限分配 ====================== + @PostMapping("/role/assign") + public Result assignMenusToRole(@RequestBody RoleMenuAssignDto dto) { + Long roleId = dto.getRoleId(); + List menuIds = dto.getMenuIds(); + + if (roleId == null || roleId <= 0) { + return Result.error("角色ID不能为空且必须大于0"); + } + if (menuIds == null || menuIds.isEmpty()) { + return Result.error("菜单ID列表不能为空"); + } + sysMenuService.assignMenusToRole(roleId, menuIds); + log.info("角色菜单分配成功:角色ID={}, 菜单数={}", roleId, menuIds.size()); + return Result.success("分配成功"); + } + + /** + * 获取角色已分配的菜单ID + */ + @PostMapping("/role/menus") + public Result> getRoleMenuIds(@RequestBody Long roleId) { + if (roleId == null || roleId <= 0) { + return Result.error("角色ID不能为空且必须大于0"); + } + List menuIds = sysMenuService.getMenuIdsByRoleId(roleId); + log.info("获取角色菜单ID成功:角色ID={}", roleId); + return Result.success(menuIds); + } + + // ====================== 3. 用户菜单查询 ====================== + + /** + * 获取当前登录用户菜单(GET → POST) + */ + @PostMapping("/user/current") + public Result> getCurrentUserMenus() { + List menus = sysMenuService.getCurrentUserMenus(); + log.info("获取当前用户菜单成功,共{}个菜单", menus.size()); + return Result.success(menus); + } + + /** + * 根据用户ID获取菜单 + */ + @PostMapping("/user/list") + public Result> getMenusByUserId(@RequestBody Long userId) { + if (userId == null || userId <= 0) { + return Result.error("用户ID不能为空且必须大于0"); + } + List menus = sysMenuService.getMenusByUserId(userId); + log.info("获取用户菜单列表成功,用户ID={},共{}个菜单", userId, menus.size()); + return Result.success(menus); + } +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/controller/SysRoleController.java b/src/main/java/com/cgs/e_commerce/module/system/controller/SysRoleController.java new file mode 100644 index 0000000..5cc1447 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/controller/SysRoleController.java @@ -0,0 +1,70 @@ +package com.cgs.e_commerce.module.system.controller; + +import com.cgs.e_commerce.common.utils.Result; +import com.cgs.e_commerce.module.system.dto.RoleAssignDto; +import com.cgs.e_commerce.module.system.entity.SysRole; +import com.cgs.e_commerce.module.system.entity.SysUser; +import com.cgs.e_commerce.module.system.entity.SysUserRole; +import com.cgs.e_commerce.module.system.service.SysRoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/sys/role") +@Slf4j +public class SysRoleController { + @Autowired + private SysRoleService sysRoleService; + + @PostMapping("/add") + public Result add(@RequestBody @Validated SysRole sysRole) { + sysRoleService.add(sysRole); + log.info("角色添加成功:{}", sysRole.getRoleName()); + return Result.success("添加成功"); + } + + @PostMapping("/list") + public Result> list() { + List roles = sysRoleService.list(); + log.info("获取角色列表成功,共{}个角色", roles.size()); + return Result.success(roles); + } + + @PostMapping("/update") + public Result update(@RequestBody @Validated SysRole sysRole) { + sysRoleService.update(sysRole); + log.info("角色更新成功:{}", sysRole.getRoleName()); + return Result.success("修改成功"); + } + + @PostMapping("/delete") + public Result delete(@RequestBody Long id) { + sysRoleService.delete(id); + log.info("角色删除成功:id={}", id); + return Result.success("删除成功"); + } + + @PostMapping("/user/roleList") + public Result> getRolesByUserId(@RequestBody Long userId) { + List roles = sysRoleService.listByUserId(userId); + return Result.success(roles); + } + + @PostMapping("/user/assign") + public Result assignRole(@RequestBody RoleAssignDto dto) { + sysRoleService.assignUserRole(dto.getUserId(), dto.getRoleId()); + log.info("用户角色分配成功:userId={}, roleId={}", dto.getUserId(), dto.getRoleId()); + return Result.success("分配成功"); + } + + @PostMapping("/user/remove") + public Result removeUserRole(@RequestBody RoleAssignDto dto) { + sysRoleService.removeUserRole(dto.getUserId(), dto.getRoleId()); + log.info("用户角色移除成功:userId={}, roleId={}", dto.getUserId(), dto.getRoleId()); + return Result.success("移除成功"); + } +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/controller/SysUserController.java b/src/main/java/com/cgs/e_commerce/module/system/controller/SysUserController.java new file mode 100644 index 0000000..9fb1ed8 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/controller/SysUserController.java @@ -0,0 +1,137 @@ +package com.cgs.e_commerce.module.system.controller; + +import com.aliyun.oss.common.utils.StringUtils; +import com.cgs.e_commerce.common.utils.*; +import com.cgs.e_commerce.common.vo.system.SysUserVo; +import com.cgs.e_commerce.module.system.dto.SysUserLoginDto; +import com.cgs.e_commerce.module.system.dto.SysUserRegisterDto; +import com.cgs.e_commerce.module.system.entity.SysUser; +import com.cgs.e_commerce.module.system.service.SysUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@Slf4j +@RestController +@RequestMapping("/sys/user") +public class SysUserController { + @Autowired + private SysUserService sysUserService; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @PostMapping("/login") + public Result login(@RequestBody @Validated SysUserLoginDto loginDto) { + String username = loginDto.getUsername(); + String password = loginDto.getPassword(); + + SysUser sysUser = sysUserService.selectByName(username); + if(sysUser==null){ + return Result.error("用户不存在"); + } + if (sysUser.getStatus() == 0) { + return Result.error("账号已被禁用,请联系管理员"); + } + if(BCryptUtils.matches(password,sysUser.getPassword())){ + Map claims = new HashMap<>(); + claims.put("username",username); + claims.put("id",sysUser.getId()); + claims.put("passwordVersion",sysUser.getPasswordVersion()); + String token = JwtUtil.genToken(claims); + + //将token 存储到redis,设置一小时的有效时间 + ValueOperations stringStringValueOperations = stringRedisTemplate.opsForValue(); + stringStringValueOperations.set(token,token,1, TimeUnit.HOURS); + log.info("用户登录成功:{}", username); + return Result.success(token); + } + log.warn("用户登录失败,密码错误:{}", username); + return Result.error("密码错误"); + } + + @PostMapping("/register") + public Result add(@RequestBody @Validated SysUserRegisterDto registerDto){ + String username = registerDto.getUsername(); + String password = registerDto.getPassword(); + + SysUser sysUser = sysUserService.selectByName(username); + if(sysUser!=null){ + return Result.error("用户已存在"); + } + sysUserService.add(username,password); + log.info("用户注册成功:{}", username); + return Result.success("添加成功"); + } + + @PostMapping("/info") + public Result info(){ + Map claims = ThreadLocalUtil.get(); + String username = claims.get("username").toString(); + SysUser sysUser = sysUserService.selectByName(username); + SysUserVo vo=new SysUserVo(); + BeanUtils.copyProperties(sysUser,vo); + return Result.success(vo); + } + + @PostMapping("/list") + public Result> list() { + List list = sysUserService.list(); + List voList= BeanConvertUtils.convertList(list,SysUserVo.class); + return Result.success(voList); + } + + + @PostMapping("/updateStatus") + public Result updateStatus(@RequestBody Map params) { + Long userId = Long.valueOf(params.get("id")); + Integer status = params.get("status"); // 0禁用 1启用 + + if (userId == null || status == null) { + return Result.error("参数不能为空"); + } + + sysUserService.updateStatus(userId,status); + log.info("管理员账号状态修改成功,用户ID:{},状态:{}", userId, status); + return Result.success("状态修改成功"); + } + + + + @PostMapping("/updatePassword") + public Result updatePassword(@RequestBody Map claims, @RequestHeader("Authorization") String token){ + String oldPassword = claims.get("oldPassword"); + String newPassword = claims.get("newPassword"); + String repPassword = claims.get("repPassword"); + if (StringUtils.isNullOrEmpty(oldPassword) || StringUtils.isNullOrEmpty(newPassword) || StringUtils.isNullOrEmpty(repPassword)) { + return Result.error("密码不能为空"); + } + if (!newPassword.equals(repPassword)) { + return Result.error("两次密码不一致"); + } + Mapmap=ThreadLocalUtil.get(); + String username = map.get("username").toString(); + SysUser sysUser = sysUserService.selectByName(username); + + if(BCryptUtils.matches(oldPassword,sysUser.getPassword())) { + sysUserService.updatePassword(newPassword, sysUser.getId()); + int newVersion=sysUser.getPasswordVersion()+1; + sysUserService.updatePasswordVersion(sysUser.getId(),newVersion); +// ValueOperations stringStringValueOperations = stringRedisTemplate.opsForValue(); +// stringStringValueOperations.getOperations().delete(token); + stringRedisTemplate.opsForValue().set("user:passwordVersion:" + sysUser.getId(), String.valueOf(newVersion)); + return Result.success("修改成功"); + } + return Result.error("密码错误"); + } + +} + diff --git a/src/main/java/com/cgs/e_commerce/module/system/dto/RoleAssignDto.java b/src/main/java/com/cgs/e_commerce/module/system/dto/RoleAssignDto.java new file mode 100644 index 0000000..3758656 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/dto/RoleAssignDto.java @@ -0,0 +1,9 @@ +package com.cgs.e_commerce.module.system.dto; + +import lombok.Data; + +@Data +public class RoleAssignDto { + private Long userId; + private Long roleId; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/dto/RoleMenuAssignDto.java b/src/main/java/com/cgs/e_commerce/module/system/dto/RoleMenuAssignDto.java new file mode 100644 index 0000000..9c5a306 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/dto/RoleMenuAssignDto.java @@ -0,0 +1,10 @@ +package com.cgs.e_commerce.module.system.dto; + +import lombok.Data; +import java.util.List; + +@Data +public class RoleMenuAssignDto { + private Long roleId; + private List menuIds; +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserLoginDto.java b/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserLoginDto.java new file mode 100644 index 0000000..00a2ae7 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserLoginDto.java @@ -0,0 +1,14 @@ +package com.cgs.e_commerce.module.system.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +public class SysUserLoginDto { + @NotBlank(message = "用户名不能为空") + private String username; + @NotBlank(message = "密码不能为空") + @Size(min = 6, message = "密码长度不能少于6位") + private String password; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserRegisterDto.java b/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserRegisterDto.java new file mode 100644 index 0000000..ee02a81 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/dto/SysUserRegisterDto.java @@ -0,0 +1,14 @@ +package com.cgs.e_commerce.module.system.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +public class SysUserRegisterDto { + @NotBlank(message = "用户名不能为空") + private String username; + @NotBlank(message = "密码不能为空") + @Size(min = 6, message = "密码长度不能少于6位") + private String password; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysMenu.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysMenu.java new file mode 100644 index 0000000..485c73f --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysMenu.java @@ -0,0 +1,18 @@ +package com.cgs.e_commerce.module.system.entity; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class SysMenu { + private Long id; + @NotEmpty(message = "菜单名称不能为空") + private String menuName; + private Long parentId; + private String path; + private String icon; + private Integer sort; + @NotNull(message = "菜单类型不能为空") + private Integer type; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysOperLog.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysOperLog.java new file mode 100644 index 0000000..decf6b0 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysOperLog.java @@ -0,0 +1,15 @@ +package com.cgs.e_commerce.module.system.entity; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class SysOperLog { + private Long id; + private Long userId; + private String operation; + private String method; + private String params; + private LocalDateTime createTime; +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysRole.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysRole.java new file mode 100644 index 0000000..5a8acd8 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysRole.java @@ -0,0 +1,17 @@ +package com.cgs.e_commerce.module.system.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class SysRole { + private long id; + @NotEmpty(message = "角色名不能为空") + private String roleName; + private String description; + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysRoleMenu.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysRoleMenu.java new file mode 100644 index 0000000..577ef1b --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysRoleMenu.java @@ -0,0 +1,10 @@ +package com.cgs.e_commerce.module.system.entity; + +import lombok.Data; + +@Data +public class SysRoleMenu { + private Long id; + private Long roleId; + private Long menuId; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysUser.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUser.java new file mode 100644 index 0000000..3a9d3d2 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUser.java @@ -0,0 +1,17 @@ +package com.cgs.e_commerce.module.system.entity; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class SysUser { + private long id; + private String username; + private String password; + private String phone; + private Integer status; + private Integer passwordVersion; + // @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserMenu.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserMenu.java new file mode 100644 index 0000000..8fc52cf --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserMenu.java @@ -0,0 +1,10 @@ +package com.cgs.e_commerce.module.system.entity; + +import lombok.Data; + +@Data +public class SysUserMenu { + private Long id; + private Long userId; + private Long menuId; +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserRole.java b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserRole.java new file mode 100644 index 0000000..af057cd --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/entity/SysUserRole.java @@ -0,0 +1,10 @@ +package com.cgs.e_commerce.module.system.entity; + +import lombok.Data; + +@Data +public class SysUserRole { + private Long id; + private Long userId; + private Long roleId; +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/mapper/SysMenuMapper.java b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000..0a706d0 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysMenuMapper.java @@ -0,0 +1,33 @@ +package com.cgs.e_commerce.module.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cgs.e_commerce.module.system.entity.SysMenu; +import com.cgs.e_commerce.module.system.entity.SysUserMenu; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface SysMenuMapper extends BaseMapper { + List list(); + + void add(SysMenu sysMenu); + + void update(SysMenu sysMenu); + + void delete(Long id); + + List getMenusByUserId(Long userId); + + List listWithTree(); // 树形菜单列表 + + void assignMenusToRole(@Param("roleId") Long roleId, @Param("menuIds") List menuIds); // 给角色分配菜单 + + void insertRoleMenus(@Param("roleId") Long roleId, @Param("menuIds") List menuIds); + + void deleteRoleMenusByRoleId(Long roleId); + + List getMenuIdsByRoleId(Long roleId); // 获取角色菜单ID + + List getCurrentUserMenus(); // 获取当前用户菜单 +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/mapper/SysRoleMapper.java b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000..50e20d4 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysRoleMapper.java @@ -0,0 +1,34 @@ +package com.cgs.e_commerce.module.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cgs.e_commerce.module.system.entity.SysRole; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface SysRoleMapper extends BaseMapper { + @Insert("insert into sys_role(role_name,description,create_time) values(#{roleName},#{description},now())") + void add(SysRole role); + + @Select("select * from sys_role") + List list(); + + @Update("update sys_role set role_name=#{roleName},description=#{description},create_time=now() where id=#{id}") + void update(SysRole role); + + @Delete("delete from sys_role where id = #{id}") + void delete(Long id); + + @Select("SELECT r.id, r.role_name, r.description " + + "FROM sys_role r " + + "JOIN sys_user_role ur ON r.id = ur.role_id " + + "WHERE ur.user_id = #{userId}") + List listByUserId(Long userId); + + @Insert("insert into sys_user_role(user_id,role_id) values(#{userId},#{roleId})") + void assignUserRole(Long userId, Long roleId); + + @Delete("delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}") + void removeUserRole(Long userId, Long roleId); +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/mapper/SysUserMapper.java b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..fd46134 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/mapper/SysUserMapper.java @@ -0,0 +1,32 @@ +package com.cgs.e_commerce.module.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cgs.e_commerce.module.system.entity.SysUser; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface SysUserMapper extends BaseMapper{ + @Select("select * from sys_user where username = #{username}") + SysUser selectByName(String username); + + @Select("select * from sys_user ") + List list(); + + @Insert("insert into sys_user(username,password,create_time) " + + "values(#{username},#{password},now())") + void add(String username,String password); + + @Select("select * from sys_user where id = #{id}") + SysUser getInfo(Long id); + + @Update("update sys_user set password = #{password} where id = #{id}") + void updatePassword(String password,Long id); + + @Update("update sys_user set status = #{status} where id = #{id}") + void updateStatus(Long id ,Integer status); + + @Update("update sys_user set password_version = #{version} where id = #{id}") + void updatePasswordVersion(Long id,Integer version); +} \ No newline at end of file diff --git a/src/main/java/com/cgs/e_commerce/module/system/service/SysMenuService.java b/src/main/java/com/cgs/e_commerce/module/system/service/SysMenuService.java new file mode 100644 index 0000000..9ed7abb --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/service/SysMenuService.java @@ -0,0 +1,46 @@ +package com.cgs.e_commerce.module.system.service; + +import com.cgs.e_commerce.module.system.entity.SysMenu; +import com.cgs.e_commerce.module.system.mapper.SysMenuMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class SysMenuService { + @Autowired + private SysMenuMapper sysMenuMapper; + + public void add(SysMenu sysMenu) { + sysMenuMapper.add(sysMenu); + } + + public void update(SysMenu sysMenu) { + sysMenuMapper.update(sysMenu); + } + + public void delete(Long id) { + sysMenuMapper.delete(id); + } + + public List listWithTree() { + return sysMenuMapper.listWithTree(); + } + + public void assignMenusToRole(Long roleId, List menuIds) { + sysMenuMapper.assignMenusToRole(roleId, menuIds); + } + + public List getMenuIdsByRoleId(Long roleId) { + return sysMenuMapper.getMenuIdsByRoleId(roleId); + } + + public List getCurrentUserMenus() { + return sysMenuMapper.getCurrentUserMenus(); + } + + public List getMenusByUserId(Long userId) { + return sysMenuMapper.getMenusByUserId(userId); + } +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/service/SysRoleService.java b/src/main/java/com/cgs/e_commerce/module/system/service/SysRoleService.java new file mode 100644 index 0000000..ee0d1aa --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/service/SysRoleService.java @@ -0,0 +1,43 @@ +package com.cgs.e_commerce.module.system.service; + +import com.cgs.e_commerce.module.system.entity.SysRole; +import com.cgs.e_commerce.module.system.mapper.SysRoleMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class SysRoleService { + @Autowired + private SysRoleMapper sysRoleMapper; + + public void add(SysRole sysRole) { + sysRoleMapper.add(sysRole); + } + + public List list() { + return sysRoleMapper.list(); + } + + public void update(SysRole role) { + sysRoleMapper.update(role); + } + + public void delete(Long id) { + sysRoleMapper.delete(id); + } + + public List listByUserId(Long userId) { + return sysRoleMapper.listByUserId(userId); + } + + public void assignUserRole(Long userId, Long roleId) { + sysRoleMapper.assignUserRole(userId, roleId); + } + + + public void removeUserRole(Long userId, Long roleId) { + sysRoleMapper.removeUserRole(userId, roleId); + } +} diff --git a/src/main/java/com/cgs/e_commerce/module/system/service/SysUserService.java b/src/main/java/com/cgs/e_commerce/module/system/service/SysUserService.java new file mode 100644 index 0000000..5283e55 --- /dev/null +++ b/src/main/java/com/cgs/e_commerce/module/system/service/SysUserService.java @@ -0,0 +1,42 @@ +package com.cgs.e_commerce.module.system.service; + +import com.cgs.e_commerce.common.utils.BCryptUtils; +import com.cgs.e_commerce.module.system.entity.SysUser; +import com.cgs.e_commerce.module.system.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class SysUserService { + @Autowired + private SysUserMapper sysUserMapper; + + + public SysUser selectByName(String username) { + return sysUserMapper.selectByName(username); + } + + public List list() { + return sysUserMapper.list(); + } + + public void updatePassword(String password,Long id) { + String encode = BCryptUtils.encode(password); + sysUserMapper.updatePassword(encode,id); + } + + public void updateStatus(Long id,Integer status) { + sysUserMapper.updateStatus(id,status); + } + + public void updatePasswordVersion(Long id, Integer passwordVersion) { + sysUserMapper.updatePasswordVersion(id,passwordVersion); + } + + public void add(String username,String password) { + String encode = BCryptUtils.encode(password); + sysUserMapper.add(username,encode); + } +} diff --git a/test1.txt b/test1.txt deleted file mode 100644 index 5ef9093..0000000 --- a/test1.txt +++ /dev/null @@ -1 +0,0 @@ -测试分支上传成不成公