diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index 8592bbe1..6945dd91 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -81,5 +81,6 @@ public interface ErrorCodeConstants { ErrorCode INSUFFICIENT_BALANCE = new ErrorCode(1_004_099_007, "余额不足30元,请充值"); ErrorCode CARD_ALREADY_BIND = new ErrorCode(1_004_099_008, "卡号已绑定"); ErrorCode ORDER_NOT_COMPLETE = new ErrorCode(1_004_099_009, "订单未完成"); - + ErrorCode NEED_ADD_USER = new ErrorCode(1_007_901_004, "请先添加人员"); } + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java index c0bca522..30e24a10 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/CardController.java @@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardRespVO; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.card.vo.RechargeVO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.service.card.CardService; import io.swagger.v3.oas.annotations.Operation; @@ -152,4 +153,12 @@ public class CardController { return success(cardService.getMoney()); } + @PutMapping("/rechargeByAdmin") + @Operation(summary = "管理后台充值") + //@PreAuthorize("@ss.hasPermission('member:card:update')") + public CommonResult rechargeByAdmin(RechargeVO vo) { + return success(cardService.rechargeByAdmin(vo)); + } + + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/vo/RechargeVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/vo/RechargeVO.java new file mode 100644 index 00000000..87b4f44c --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/card/vo/RechargeVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.member.controller.admin.card.vo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author zt + * @description + * @since 2024/6/27 + */ +@Data +public class RechargeVO { + private List userIds; + private Long groupId; + private BigDecimal money; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java index 566e516a..00bfc393 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/MemberGroupController.java @@ -2,16 +2,30 @@ package cn.iocoder.yudao.module.member.controller.admin.group; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.group.vo.*; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupRespVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupSimpleRespVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.convert.group.MemberGroupConvert; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.service.group.MemberGroupService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; @@ -31,14 +45,14 @@ public class MemberGroupController { @PostMapping("/create") @Operation(summary = "创建用户分组") - @PreAuthorize("@ss.hasPermission('member:group:create')") + //@PreAuthorize("@ss.hasPermission('member:group:create')") public CommonResult createGroup(@Valid @RequestBody MemberGroupCreateReqVO createReqVO) { return success(groupService.createGroup(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新用户分组") - @PreAuthorize("@ss.hasPermission('member:group:update')") + //@PreAuthorize("@ss.hasPermission('member:group:update')") public CommonResult updateGroup(@Valid @RequestBody MemberGroupUpdateReqVO updateReqVO) { groupService.updateGroup(updateReqVO); return success(true); @@ -47,7 +61,7 @@ public class MemberGroupController { @DeleteMapping("/delete") @Operation(summary = "删除用户分组") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('member:group:delete')") + //@PreAuthorize("@ss.hasPermission('member:group:delete')") public CommonResult deleteGroup(@RequestParam("id") Long id) { groupService.deleteGroup(id); return success(true); @@ -56,7 +70,7 @@ public class MemberGroupController { @GetMapping("/get") @Operation(summary = "获得用户分组") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('member:group:query')") + //@PreAuthorize("@ss.hasPermission('member:group:query')") public CommonResult getGroup(@RequestParam("id") Long id) { MemberGroupDO group = groupService.getGroup(id); return success(MemberGroupConvert.INSTANCE.convert(group)); @@ -72,10 +86,41 @@ public class MemberGroupController { @GetMapping("/page") @Operation(summary = "获得用户分组分页") - @PreAuthorize("@ss.hasPermission('member:group:query')") + //@PreAuthorize("@ss.hasPermission('member:group:query')") public CommonResult> getGroupPage(@Valid MemberGroupPageReqVO pageVO) { PageResult pageResult = groupService.getGroupPage(pageVO); return success(MemberGroupConvert.INSTANCE.convertPage(pageResult)); } + @PostMapping("/addMember") + @Operation(summary = "小组添加成员") + //@PreAuthorize("@ss.hasPermission('member:group:create')") + public CommonResult addMember(@RequestBody MemberGroupVO vo) { + groupService.addMember(vo); + return success(null); + } + + @GetMapping("/getMember") + @Operation(summary = "获取小组成员") + //@PreAuthorize("@ss.hasPermission('member:group:create')") + public CommonResult> getMemberByGroupId(MemberGroupPageVO vo) { + return success(groupService.getMemberByGroupId(vo)); + } + + @PostMapping("/deleteMember") + @Operation(summary = "小组删除成员") + //@PreAuthorize("@ss.hasPermission('member:group:create')") + public CommonResult deleteMember(@RequestBody MemberGroupVO vo) { + groupService.deleteMember(vo); + return success(null); + } + + @PostMapping("/getUserList") + @Operation(summary = "人员列表") + //@PreAuthorize("@ss.hasPermission('member:group:create')") + public CommonResult> getUserList(@Valid @RequestBody MemberUserListVO vo) { + return success(groupService.getUserList(vo)); + } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageVO.java new file mode 100644 index 00000000..85386d49 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupPageVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.member.controller.admin.group.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author zt + * @description + * @since 2024/6/27 + */ +@Data +public class MemberGroupPageVO extends PageParam { + + @Schema(description = "小组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "小组ID不能为空") + private Long groupId; + + private String nickname; + + private Integer limitOne; + + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupVO.java new file mode 100644 index 00000000..b9bac032 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.member.controller.admin.group.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * @author zt + * @description + * @since 2024/6/27 + */ +@Data +public class MemberGroupVO { + + @Schema(description = "小组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "小组ID不能为空") + private Long groupId; + + @Schema(description = "小组ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @Size(min = 1, message = "至少添加一个会员") + private List userId; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java index f36c3618..cd3f7c28 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java @@ -3,7 +3,12 @@ package cn.iocoder.yudao.module.member.controller.admin.user; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserAddVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserRespVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateLevelReqVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdatePointReqVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; @@ -21,12 +26,22 @@ import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.validation.Valid; import java.time.LocalDateTime; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -125,4 +140,23 @@ public class MemberUserController { return success(memberUserService.getUserHeat(userId,startDate,endDate,orderId)); } + @PutMapping("/bindFace") + @Operation(summary = "绑脸") + public CommonResult bindFace(Long userId,Long faceId){ + return success(memberUserService.bindFace(userId,faceId)); + } + + @PutMapping("/bindCard") + @Operation(summary = "绑卡") + public CommonResult bindCard(String cardId){ + return success(memberUserService.bindCard(cardId)); + } + + @PostMapping("/create") + @Operation(summary = "创建会员") + public CommonResult create(@RequestBody MemberUserAddVO addVO){ + return success(memberUserService.create(addVO)); + } + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserAddVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserAddVO.java new file mode 100644 index 00000000..0b55c349 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserAddVO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.hibernate.validator.constraints.URL; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * 会员用户 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class MemberUserAddVO { + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") + @NotNull(message = "手机号不能为空") + private String mobile; + + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotNull(message = "用户昵称不能为空") + private String nickname; + + @Schema(description = "头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/x.png") + @URL(message = "头像必须是 URL 格式") + private String avatar; + + @NotNull(message = "注册IP不能为空") + private String registerIp; + + @Schema(description = "用户真名", example = "李四") + private String name; + + @Schema(description = "用户性别", example = "1") + private Byte sex; + + @Schema(description = "所在地编号", example = "4371") + private Long areaId; + + @Schema(description = "所在地全程", example = "上海上海市普陀区") + private String areaName; + + @Schema(description = "出生日期", example = "2023-03-12") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDateTime birthday; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserListVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserListVO.java new file mode 100644 index 00000000..f4ebc1da --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserListVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.member.controller.admin.user.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 会员用户 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class MemberUserListVO extends PageParam { + @Schema(hidden = true) + private List ids; + @Schema(description = "小组id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long groupId; + private String name; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/alloc/vo/AppAllocRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/alloc/vo/AppAllocRespVO.java index 0cc21f6b..efc1a672 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/alloc/vo/AppAllocRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/alloc/vo/AppAllocRespVO.java @@ -18,11 +18,11 @@ public class AppAllocRespVO { @Schema(description = "所属模块") @ExcelProperty("所属模块") - private Long moudle; + private String moudle; @Schema(description = "配置名", example = "张三") @ExcelProperty("配置名") - private Long allocName; + private String allocName; @Schema(description = "配置值") @ExcelProperty("配置值") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/alloc/AllocDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/alloc/AllocDO.java index d23527be..7b201b7c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/alloc/AllocDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/alloc/AllocDO.java @@ -34,11 +34,11 @@ public class AllocDO extends BaseDO { /** * 所属模块 */ - private Long moudle; + private String moudle; /** * 配置名 */ - private Long allocName; + private String allocName; /** * 配置值 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java index 7f30db30..c4413410 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/card/CardDO.java @@ -58,4 +58,9 @@ public class CardDO extends BaseDO { */ private String type; + /** + * 赠送金额 + */ + private BigDecimal giftAmount; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/card/CardMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/card/CardMapper.java index 55dc4c12..a100172f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/card/CardMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/card/CardMapper.java @@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Select; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; /** * 余额变动明细 Mapper @@ -46,4 +47,7 @@ public interface CardMapper extends BaseMapperX { AppCardMonthVO selectMonth(@Param("userId") Long userId,@Param("flag") String flag, @Param("startTime") LocalDateTime startTime, @Param("endTime")LocalDateTime endTime); @Select("select SUM(change_money) from member_card where user_id= #{userId} and flag= #{flag}") BigDecimal selectAddMoney(@Param("userId") Long userId,@Param("flag") String flag); + + + List selectMoneyList(List list); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java index da4f7b7a..23b5ee04 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/group/MemberGroupMapper.java @@ -4,8 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -28,4 +31,15 @@ public interface MemberGroupMapper extends BaseMapperX { default List selectListByStatus(Integer status) { return selectList(MemberGroupDO::getStatus, status); } + + + void addMember(@Param("groupId")Long groupId, @Param("list")List memberIds); + + List getMemberByGroupId(MemberGroupPageVO vo); + + void deleteMember(@Param("groupId")Long groupId, @Param("list")List memberIds); + + Long memberCount(MemberGroupPageVO vo); + + List getMemberList(Long groupId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java index 5a692845..d9c29d1b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -97,4 +98,12 @@ public interface MemberUserMapper extends BaseMapperX { @Delete("delete from user_face where user_id = #{faceId}") void deleteFace(Long faceId); + + default PageResult selectUserList(MemberUserListVO listVO) { + // 分页查询 + return selectPage(listVO, new LambdaQueryWrapperX() + .likeIfPresent(MemberUserDO::getNickname, listVO.getName()) + .notIn(MemberUserDO::getId, listVO.getIds()) + .orderByDesc(MemberUserDO::getId)); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java index a93a7066..873c105b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java @@ -16,6 +16,7 @@ public enum CostTypeEnum { MORNING("2", "早餐"), NOON("3", "午餐"), NIGHT("4", "晚餐"), + ADMIN_PAY("5","管理后台充值") ; /** diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardService.java index ccf0e1bf..747ae92d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.member.service.card; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.card.vo.RechargeVO; import cn.iocoder.yudao.module.member.controller.app.card.vo.AppCardMonthVO; import cn.iocoder.yudao.module.member.controller.app.card.vo.AppCardPageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; @@ -86,4 +87,5 @@ public interface CardService { AppCardMonthVO getMonthMoney(Long userId,String flag, String time); + Boolean rechargeByAdmin(RechargeVO vo); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardServiceImpl.java index 9c91a895..f5047920 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/card/CardServiceImpl.java @@ -1,15 +1,19 @@ package cn.iocoder.yudao.module.member.service.card; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO; +import cn.iocoder.yudao.module.member.controller.admin.card.vo.RechargeVO; import cn.iocoder.yudao.module.member.controller.app.card.vo.AppCardMonthVO; import cn.iocoder.yudao.module.member.controller.app.card.vo.AppCardPageReqVO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper; +import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.util.MemberConstants; @@ -24,10 +28,13 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CARD_NOT_EXISTS; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.NEED_ADD_USER; /** * 余额变动明细 Service 实现类 @@ -43,6 +50,9 @@ public class CardServiceImpl implements CardService { @Resource private MemberUserService userService; + @Resource + private MemberGroupMapper memberGroupMapper; + @Override public Long createCard(CardSaveReqVO createReqVO) { // 插入 @@ -168,7 +178,53 @@ public class CardServiceImpl implements CardService { AppCardMonthVO appCardMonthVO = cardMapper.selectMonth(userId, flag, firstDayOfMonthStart, lastDayOfMonthEnd); return appCardMonthVO; + } + @Override + public Boolean rechargeByAdmin(RechargeVO vo) { + List memberList = new ArrayList<>(); + if (vo.getGroupId() != null) { + memberList.addAll(memberGroupMapper.getMemberList(vo.getGroupId())); + } else { + if (CollectionUtil.isEmpty(vo.getUserIds())){ + throw new ServiceException(NEED_ADD_USER); + } + memberList.addAll(vo.getUserIds()); + } + + List cardDOS = cardMapper.selectMoneyList(memberList); + ArrayList addList = new ArrayList<>(); + List cardUserIds = cardDOS.stream().map(card -> card.getUserId()).collect(Collectors.toList()); + + List newIds = memberList.stream() + .filter(id -> !cardUserIds.contains(id)) + .collect(Collectors.toList()); + //重新计算已有的金额 + for (CardDO cardDO : cardDOS) { + CardDO add = new CardDO(); + add.setUserId(cardDO.getUserId()); + add.setFlag(CardDO.ADD); + add.setChangeMoney(vo.getMoney()); + add.setType(CostTypeEnum.ADMIN_PAY.getCode()); + BigDecimal oldMoney = cardDO.getMoney(); + add.setMoney(oldMoney.add(vo.getMoney()).setScale(2, BigDecimal.ROUND_HALF_UP)); + addList.add(add); + } + //添加新的用户金额 + if (CollectionUtil.isNotEmpty(newIds)) { + for (Long id : newIds) { + CardDO add = new CardDO(); + add.setUserId(id); + add.setFlag(CardDO.ADD); + add.setChangeMoney(vo.getMoney()); + add.setType(CostTypeEnum.ADMIN_PAY.getCode()); + add.setMoney(vo.getMoney()); + addList.add(add); + } + } + + //批量添加 + return cardMapper.insertBatch(addList); } } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java index 2a8303ef..61759af0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupService.java @@ -4,8 +4,12 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import javax.validation.Valid; import java.util.Collection; @@ -81,4 +85,34 @@ public interface MemberGroupService { return getGroupListByStatus(CommonStatusEnum.ENABLE.getStatus()); } + /** + * 小组添加成员 + * + * @param addVO 添加参数 + */ + void addMember(MemberGroupVO addVO); + + /** + * 获取小组所有会员 + * + * @param vo 小组ID + * @return 所有会员 + */ + PageResult getMemberByGroupId(MemberGroupPageVO vo); + + /** + * 删除会员 + * + * @param deleteVO 小组ID + */ + void deleteMember(MemberGroupVO deleteVO); + + /** + * 人员列表 + * + * @param + */ + PageResult getUserList(MemberUserListVO listVO); + + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java index cdf1e4fe..4d6bd088 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/group/MemberGroupServiceImpl.java @@ -5,9 +5,13 @@ import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageVO; import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO; +import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.convert.group.MemberGroupConvert; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import org.springframework.stereotype.Service; @@ -100,4 +104,33 @@ public class MemberGroupServiceImpl implements MemberGroupService { return memberGroupMapper.selectListByStatus(status); } + @Override + public void addMember(MemberGroupVO addVO) { + memberGroupMapper.addMember(addVO.getGroupId(),addVO.getUserId()); + } + + @Override + public PageResult getMemberByGroupId(MemberGroupPageVO vo) { + vo.setLimitOne((vo.getPageNo()-1)*vo.getPageSize()); + + PageResult result = new PageResult<>(); + result.setList(memberGroupMapper.getMemberByGroupId(vo)); + result.setTotal(memberGroupMapper.memberCount(vo)); + return result; + } + + @Override + public void deleteMember(MemberGroupVO deleteVO) { + memberGroupMapper.deleteMember(deleteVO.getGroupId(),deleteVO.getUserId()); + } + + @Override + public PageResult getUserList(MemberUserListVO listVO) { + List memberList = memberGroupMapper.getMemberList(listVO.getGroupId()); + listVO.setIds(memberList); + PageResult groupUserList = memberUserService.getGroupUserList(listVO); + + return groupUserList; + + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java index 7e2f4d07..c1716e39 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/order/OrderServiceImpl.java @@ -294,10 +294,15 @@ public class OrderServiceImpl implements OrderService { OrderMoneyRespVO orderMoneyRespVO = new OrderMoneyRespVO(); //获取充值的金额 BigDecimal add = cardMapper.selectAddMoney(userId, CardDO.ADD); - + if(add == null){ + add = BigDecimal.ZERO; + } orderMoneyRespVO.setRechargeMoney(add); //消费的金额 BigDecimal minus = cardMapper.selectAddMoney(userId, CardDO.MINUS); + if(minus == null){ + minus = BigDecimal.ZERO; + } orderMoneyRespVO.setConsumeMoney(minus); //获取会员余额 BigDecimal subtract = add.subtract(minus); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index 2eb6ad8f..13cfbd13 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.member.service.user; import cn.iocoder.yudao.framework.common.enums.TerminalEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.validation.Mobile; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserAddVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; @@ -227,4 +229,15 @@ public interface MemberUserService { * @return */ Map getDishesList(String platesNum); + + /** + * 后台创建用户 + */ + MemberUserDO create(MemberUserAddVO addVO); + + /** + * 查询小组外的用户 + */ + PageResult getGroupUserList(MemberUserListVO listVO); + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 415692b2..3e8f65c0 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -18,6 +18,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserAddVO; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserListVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO; @@ -677,4 +679,28 @@ public class MemberUserServiceImpl implements MemberUserService { map.put("money", String.valueOf(moneyByUserId)); return map; } + + @Override + public MemberUserDO create(MemberUserAddVO addVO) { + // 用户已经存在 + MemberUserDO userSelect = memberUserMapper.selectByMobile(addVO.getMobile()); + if (userSelect != null) { + return userSelect; + } + // 用户不存在,则进行创建 + // 生成密码 + String password = IdUtil.fastSimpleUUID(); + // 插入用户 + MemberUserDO user = new MemberUserDO(); + BeanUtil.copyProperties(addVO,user); + user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 + user.setPassword(encodePassword(password)); // 加密密码 + memberUserMapper.insert(user); + return user; + } + + @Override + public PageResult getGroupUserList(MemberUserListVO listVO) { + return memberUserMapper.selectUserList(listVO); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/card/CardMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/card/CardMapper.xml index a0da3ca7..7d6786d6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/card/CardMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/card/CardMapper.xml @@ -8,5 +8,17 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml new file mode 100644 index 00000000..69ebc635 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/group/MemberGroupMapper.xml @@ -0,0 +1,56 @@ + + + + + + + INSERT INTO member_group_member (group_id, member_id) + VALUES + + (#{groupId}, #{item}) + + + + + + + delete from member_group_member + where group_id = #{groupId} and member_id in + + #{id} + + + + + + + + \ No newline at end of file