From f81a4a8cbf8a7b6cc709cd5d1bb66a9c5ccf0c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 5 Mar 2025 09:36:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/ShopMsgPushController.java | 14 +++ .../czg/controller/admin/SysController.java | 92 ++++++++++++++ .../czg/account/dto/ShopPushOpenIdDTO.java | 59 +++++++++ .../czg/account/dto/user/SysUserAddDTO.java | 74 ++++++++++++ .../czg/account/dto/user/SysUserEditDTO.java | 92 ++++++++++++++ .../czg/account/entity/ShopPushOpenId.java | 65 ++++++++++ .../java/com/czg/account/entity/SysUser.java | 2 +- .../service/ShopPushOpenIdService.java | 14 +++ .../czg/account/service/SysUserService.java | 16 +++ .../account/mapper/ShopPushOpenIdMapper.java | 14 +++ .../impl/AuthorizationServiceImpl.java | 5 +- .../impl/ShopPushOpenIdServiceImpl.java | 18 +++ .../service/impl/SysUserServiceImpl.java | 113 +++++++++++++++++- .../resources/mapper/ShopPushOpenIdMapper.xml | 7 ++ 14 files changed, 582 insertions(+), 3 deletions(-) create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/ShopMsgPushController.java create mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/SysController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopPushOpenIdDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserAddDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopPushOpenId.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPushOpenIdService.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopPushOpenIdMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPushOpenIdServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/ShopPushOpenIdMapper.xml diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopMsgPushController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopMsgPushController.java new file mode 100644 index 00000000..b1a767f6 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopMsgPushController.java @@ -0,0 +1,14 @@ +package com.czg.controller.admin; + +import com.czg.resp.CzgResult; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 店铺消息推送相关 + * @author Administrator + */ +@RestController +@RequestMapping("/admin/shopMsgPush") +public class ShopMsgPushController { +} diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/SysController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/SysController.java new file mode 100644 index 00000000..09163d77 --- /dev/null +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/SysController.java @@ -0,0 +1,92 @@ +package com.czg.controller.admin; + +import com.czg.account.dto.user.SysUserAddDTO; +import com.czg.account.dto.user.SysUserEditDTO; +import com.czg.account.entity.SysUser; +import com.czg.account.entity.SysUsersRoles; +import com.czg.account.service.SysUserService; +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.annotation.SaAdminCheckRole; +import com.czg.resp.CzgResult; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; + +/** + * 系统用户管理 + * @author Administrator + */ +@RestController +@RequestMapping("/admin/sysUser") +public class SysController { + @Resource + private SysUserService sysUserService; + + /** + * 系统用户列表 + * @param key 名称或邮箱搜索 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param status 状态:1启用、0禁用 + * @return 分页数据 + */ +// @SaAdminCheckPermission("sysUser:list") + @SaAdminCheckRole("admin") + @GetMapping + public CzgResult> list(String key, String startTime, String endTime, Integer status) { + return CzgResult.success(sysUserService.getPage(key, startTime, endTime, status)); + } + + /** + * 系统账号修改 + * @param sysUserEditDTO 修改信息 + * @return 是否成功 + */ +// @SaAdminCheckPermission("sysUser:edit") + @SaAdminCheckRole("admin") + @PutMapping + public CzgResult edit(@RequestBody @Validated SysUserEditDTO sysUserEditDTO) { + return CzgResult.success(sysUserService.edit(sysUserEditDTO)); + } + + /** + * 系统用户删除 + * @param id 用户id + * @return 是否成功 + */ +// @SaAdminCheckPermission("sysUser:del") + @SaAdminCheckRole("admin") + @DeleteMapping + public CzgResult del(@RequestParam Integer id) { + return CzgResult.success(sysUserService.delete(id)); + } + + /** + * 系统用户添加 + * @param sysUserAddDTO 添加信息 + * @return 是否成功 + */ + @SaAdminCheckRole("admin") + @PostMapping + public CzgResult add(@RequestBody @Validated SysUserAddDTO sysUserAddDTO) { + return CzgResult.success(sysUserService.add(sysUserAddDTO)); + } + + /** + * 系统用户导出 + * @param key 名称或邮箱搜索 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param status 状态:1启用、0禁用 + * @throws IOException IO异常 + */ + @SaAdminCheckRole("admin") + @GetMapping("/download") + public void download(String key, String startTime, String endTime, Integer status, HttpServletResponse response) throws IOException { + sysUserService.download(key, startTime, endTime, status, response); + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopPushOpenIdDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopPushOpenIdDTO.java new file mode 100644 index 00000000..7db6f813 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/ShopPushOpenIdDTO.java @@ -0,0 +1,59 @@ + +package com.czg.account.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户推送信息表 实体类。 + * + * @author zs + * @since 2025-03-03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopPushOpenIdDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Integer id; + + private Integer shopId; + + /** + * 微信openid + */ + private String openId; + + /** + * 备注 + */ + private String remark; + + /** + * 状态 1 正常 0 禁用 + */ + private String status; + + /** + * 创建时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** + * 修改时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserAddDTO.java new file mode 100644 index 00000000..49433454 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserAddDTO.java @@ -0,0 +1,74 @@ +package com.czg.account.dto.user; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author Administrator + */ +@Data +public class SysUserAddDTO { + + /** + * 账号 + */ + @NotBlank(message = "账号不为空") + private String account; + + /** + * 昵称 + */ + @NotBlank(message = "昵称不为空") + private String nickName; + + /** + * 性别 + */ + @NotBlank(message = "性别不为空") + private String gender; + + /** + * 手机号码 + */ + @NotBlank(message = "手机号不为空") + private String phone; + + /** + * 邮箱 + */ + @NotBlank(message = "邮箱不为空") + private String email; + + /** + * 头像 + */ + @NotBlank(message = "头像不为空") + private String avatar; + + /** + * 密码 + */ + @NotBlank(message = "密码不为空") + private String password; + + /** + * 是否为admin账号 + */ + @NotNull(message = "是否为admin账号不为空") + private Boolean isAdmin; + + /** + * 状态:1启用、0禁用 + */ + private Integer status; + + /** + * 角色id + */ + private Long roleId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditDTO.java new file mode 100644 index 00000000..edae8fa9 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/user/SysUserEditDTO.java @@ -0,0 +1,92 @@ +package com.czg.account.dto.user; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author Administrator + */ +@Data +public class SysUserEditDTO { + /** + * ID + */ + @NotNull(message = "ID不能为空") + private Long id; + + /** + * 账号 + */ + @Size(min = 1, message = "账号不为空") + private String account; + + /** + * 昵称 + */ + @Size(min = 1, message = "昵称不为空") + private String nickName; + + /** + * 性别 + */ + private String gender; + + /** + * 手机号码 + */ + @Size(min = 1, message = "手机号不为空") + private String phone; + + /** + * 邮箱 + */ + @Size(min = 1, message = "邮箱不为空") + private String email; + + /** + * 头像 + */ + @Size(min = 1, message = "头像不为空") + private String avatar; + + /** + * 密码 + */ + @Size(min = 1, message = "密码不为空") + private String password; + + /** + * 是否为admin账号 + */ + private Boolean isAdmin; + + /** + * 状态:1启用、0禁用 + */ + private Integer status; + + /** + * 创建者 + */ + private Long createUserId; + + /** + * 更新者 + */ + private Long updateUserId; + + /** + * 修改密码的时间 + */ + private LocalDateTime pwdResetTime; + + /** + * 角色id + */ + private Long roleId; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopPushOpenId.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopPushOpenId.java new file mode 100644 index 00000000..378e9833 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopPushOpenId.java @@ -0,0 +1,65 @@ +package com.czg.account.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户推送信息表 实体类。 + * + * @author zs + * @since 2025-03-03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_push_open_id") +public class ShopPushOpenId implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Integer id; + + private Integer shopId; + + /** + * 微信openid + */ + private String openId; + + /** + * 备注 + */ + private String remark; + + /** + * 状态 1 正常 0 禁用 + */ + private String status; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + /** + * 修改时间 + */ + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUser.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUser.java index 41d78f09..d31913d7 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUser.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/SysUser.java @@ -78,7 +78,7 @@ public class SysUser implements Serializable { /** * 状态:1启用、0禁用 */ - private Integer stauts; + private Integer status; /** * 创建者 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPushOpenIdService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPushOpenIdService.java new file mode 100644 index 00000000..c1c1054d --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPushOpenIdService.java @@ -0,0 +1,14 @@ +package com.czg.account.service; + +import com.mybatisflex.core.service.IService; +import com.czg.account.entity.ShopPushOpenId; + +/** + * 用户推送信息表 服务层。 + * + * @author zs + * @since 2025-03-03 + */ +public interface ShopPushOpenIdService extends IService { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysUserService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysUserService.java index b1111197..4a92c625 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysUserService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysUserService.java @@ -1,7 +1,13 @@ package com.czg.account.service; +import com.czg.account.dto.user.SysUserAddDTO; +import com.czg.account.dto.user.SysUserEditDTO; import com.czg.account.entity.SysUser; +import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; /** * 系统用户 服务层。 @@ -16,4 +22,14 @@ public interface SysUserService extends IService { Boolean updateSysUserPwd(long sysUserId, String accountPwd); Boolean removeUserAndRole(Long id); + + Page getPage(String key, String startTime, String endTime, Integer status); + + Boolean edit(SysUserEditDTO sysUserEditDTO); + + Boolean delete(Integer id); + + Boolean add(SysUserAddDTO sysUserAddDTO); + + void download(String key, String startTime, String endTime, Integer status, HttpServletResponse response) throws IOException; } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopPushOpenIdMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopPushOpenIdMapper.java new file mode 100644 index 00000000..aab641bb --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/ShopPushOpenIdMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.account.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.account.entity.ShopPushOpenId; + +/** + * 用户推送信息表 映射层。 + * + * @author zs + * @since 2025-03-03 + */ +public interface ShopPushOpenIdMapper extends BaseMapper { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java index d0ba4680..62d0b8e5 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/AuthorizationServiceImpl.java @@ -83,7 +83,7 @@ public class AuthorizationServiceImpl implements AuthorizationService { if (sysUser == null) { throw new ApiNotPrintException("登录账号不存在"); } - if (StatusEnum.DISABLE.value() == sysUser.getStauts()) { + if (StatusEnum.DISABLE.value() == sysUser.getStatus()) { throw new ApiNotPrintException("账户未启用"); } @@ -143,6 +143,9 @@ public class AuthorizationServiceImpl implements AuthorizationService { if (shopStaffPromissionList != null && !shopStaffPromissionList.isEmpty()) { promissionList.addAll(shopStaffPromissionList); } + if (user.getIsAdmin()) { + promissionList.add("admin"); + } StpKit.USER.addPermissionList(promissionList); String platformType = ServletUtil.getHeaderIgnoreCase(ServletUtil.getRequest(), "platformType"); if (PlatformTypeEnum.PC_CLIENT.getValue().equals(platformType)) { diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPushOpenIdServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPushOpenIdServiceImpl.java new file mode 100644 index 00000000..f6d0961d --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPushOpenIdServiceImpl.java @@ -0,0 +1,18 @@ +package com.czg.service.account.service.impl; + +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.account.entity.ShopPushOpenId; +import com.czg.account.service.ShopPushOpenIdService; +import com.czg.service.account.mapper.ShopPushOpenIdMapper; +import org.springframework.stereotype.Service; + +/** + * 用户推送信息表 服务层实现。 + * + * @author zs + * @since 2025-03-03 + */ +@Service +public class ShopPushOpenIdServiceImpl extends ServiceImpl implements ShopPushOpenIdService{ + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java index d03a31e4..d00d2545 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysUserServiceImpl.java @@ -1,7 +1,13 @@ package com.czg.service.account.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import com.czg.account.dto.user.SysUserAddDTO; +import com.czg.account.dto.user.SysUserEditDTO; import com.czg.account.entity.SysRole; import com.czg.account.entity.SysUser; import com.czg.account.entity.SysUsersRoles; @@ -12,11 +18,20 @@ import com.czg.sa.StpKit; import com.czg.service.account.mapper.SysRoleMapper; import com.czg.service.account.mapper.SysUserMapper; import com.czg.service.account.mapper.SysUsersRolesMapper; +import com.czg.utils.PageUtil; +import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; + +import static com.mybatisflex.core.query.QueryMethods.column; + /** * 系统用户 服务层实现。 * @@ -42,7 +57,7 @@ public class SysUserServiceImpl extends ServiceImpl imp sysUser.setAccount(accountName); sysUser.setNickName(nickname); sysUser.setPhone(phone); - sysUser.setStauts(1); + sysUser.setStatus(1); sysUser.setCreateUserId(StpKit.USER.getLoginIdAsLong()); save(sysUser); sysUser.setPassword(SecureUtil.md5(sysUser.getId() + accountPwd)); @@ -68,6 +83,7 @@ public class SysUserServiceImpl extends ServiceImpl imp sysUser.setPassword(SecureUtil.md5(sysUser.getId() + accountPwd)); sysUser.setUpdateUserId(sysUserId); sysUser.setUpdateTime(DateUtil.date().toLocalDateTime()); + sysUser.setPwdResetTime(DateUtil.date().toLocalDateTime()); return updateById(sysUser); } @@ -76,4 +92,99 @@ public class SysUserServiceImpl extends ServiceImpl imp sysUsersRolesMapper.deleteByQuery(new QueryWrapper().eq(SysUsersRoles::getUserId, id)); return removeById(id); } + + @Override + public Page getPage(String key, String startTime, String endTime, Integer status) { + QueryWrapper queryWrapper = new QueryWrapper(); + if (StrUtil.isNotBlank(key)) { + queryWrapper.and(column(SysUser::getAccount).like(key).or(column(SysUser::getNickName).like(key))); + } + + if (StrUtil.isNotBlank(startTime)) { + queryWrapper.ge(SysUser::getCreateTime, DateUtil.parse(startTime)); + } + + if (StrUtil.isNotBlank(endTime)) { + queryWrapper.le(SysUser::getCreateTime, DateUtil.parse(endTime)); + } + + if (status != null) { + queryWrapper.eq(SysUser::getStatus, status); + } + return page(PageUtil.buildPage(), queryWrapper); + } + + @Override + public Boolean edit(SysUserEditDTO sysUserEditDTO) { + long count = count(new QueryWrapper().eq(SysUser::getAccount, sysUserEditDTO.getAccount()).ne(SysUser::getId, sysUserEditDTO.getId())); + if (count > 0) { + throw new ApiNotPrintException("账号已存在"); + } + + SysUser sysUser = getById(sysUserEditDTO.getId()); + BeanUtil.copyProperties(sysUserEditDTO, sysUser); + if (StrUtil.isNotBlank(sysUserEditDTO.getPassword())) { + sysUser.setPassword(SecureUtil.md5(sysUser.getId() + sysUserEditDTO.getPassword())); + sysUser.setPwdResetTime(DateUtil.date().toLocalDateTime()); + } + + if (sysUserEditDTO.getRoleId() != null) { + SysUsersRoles usersRoles = new SysUsersRoles(); + usersRoles.setRoleId(sysUserEditDTO.getRoleId()); + usersRoles.setUserId(sysUser.getId()); + sysUsersRolesMapper.updateByQuery(usersRoles, new QueryWrapper().eq(SysUsersRoles::getUserId, sysUser.getId())); + } + return updateById(sysUser); + } + + @Override + public Boolean delete(Integer id) { + SysUser sysUser = getById(id); + if (sysUser == null) { + throw new ApiNotPrintException("用户不存在"); + } + int i = sysUsersRolesMapper.deleteByQuery(new QueryWrapper().eq(SysUsersRoles::getUserId, id)); + return i > 0; + } + + @Override + public Boolean add(SysUserAddDTO sysUserAddDTO) { + long count = count(new QueryWrapper().eq(SysUser::getAccount, sysUserAddDTO.getAccount())); + if (count > 0) { + throw new ApiNotPrintException("账号已存在"); + } + + SysUser sysUser = BeanUtil.copyProperties(sysUserAddDTO, SysUser.class); + boolean save = save(sysUser); + if (save) { + sysUser.setPassword(SecureUtil.md5(sysUser.getId() + sysUserAddDTO.getPassword())); + } + + SysUsersRoles usersRoles = new SysUsersRoles(); + usersRoles.setRoleId(sysUserAddDTO.getRoleId()); + usersRoles.setUserId(sysUser.getId()); + sysUsersRolesMapper.insert(usersRoles); + return updateById(sysUser); + } + + @Override + public void download(String key, String startTime, String endTime, Integer status, HttpServletResponse response) throws IOException { + Page sysUserPage = getPage(key, startTime, endTime, status); + List records = sysUserPage.getRecords(); + + // 1. 创建 ExcelWriter + // true 表示使用 XLSX 格式 + ExcelWriter writer = ExcelUtil.getWriter(true); + + // 2. 写入数据 + writer.write(records, true); + + // 3. 设置响应头,返回 Excel + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户列表.xlsx", "UTF-8")); + + // 4. 写入到响应流 + writer.flush(response.getOutputStream(), true); + writer.close(); + } } diff --git a/cash-service/account-service/src/main/resources/mapper/ShopPushOpenIdMapper.xml b/cash-service/account-service/src/main/resources/mapper/ShopPushOpenIdMapper.xml new file mode 100644 index 00000000..c3933725 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/ShopPushOpenIdMapper.xml @@ -0,0 +1,7 @@ + + + + +