This commit is contained in:
zengtao01
2024-07-02 09:19:33 +08:00
parent b5c4ff33ad
commit f6b77d41b3
25 changed files with 519 additions and 17 deletions

View File

@ -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, "请先添加人员");
}

View File

@ -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<Boolean> rechargeByAdmin(RechargeVO vo) {
return success(cardService.rechargeByAdmin(vo));
}
}

View File

@ -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 <description class purpose>
* @since 2024/6/27
*/
@Data
public class RechargeVO {
private List<Long> userIds;
private Long groupId;
private BigDecimal money;
}

View File

@ -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<Long> 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<Boolean> 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<Boolean> 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<MemberGroupRespVO> 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<PageResult<MemberGroupRespVO>> getGroupPage(@Valid MemberGroupPageReqVO pageVO) {
PageResult<MemberGroupDO> pageResult = groupService.getGroupPage(pageVO);
return success(MemberGroupConvert.INSTANCE.convertPage(pageResult));
}
@PostMapping("/addMember")
@Operation(summary = "小组添加成员")
//@PreAuthorize("@ss.hasPermission('member:group:create')")
public CommonResult<Long> addMember(@RequestBody MemberGroupVO vo) {
groupService.addMember(vo);
return success(null);
}
@GetMapping("/getMember")
@Operation(summary = "获取小组成员")
//@PreAuthorize("@ss.hasPermission('member:group:create')")
public CommonResult<PageResult<MemberUserDO>> getMemberByGroupId(MemberGroupPageVO vo) {
return success(groupService.getMemberByGroupId(vo));
}
@PostMapping("/deleteMember")
@Operation(summary = "小组删除成员")
//@PreAuthorize("@ss.hasPermission('member:group:create')")
public CommonResult<Long> deleteMember(@RequestBody MemberGroupVO vo) {
groupService.deleteMember(vo);
return success(null);
}
@PostMapping("/getUserList")
@Operation(summary = "人员列表")
//@PreAuthorize("@ss.hasPermission('member:group:create')")
public CommonResult<PageResult<MemberUserDO>> getUserList(@Valid @RequestBody MemberUserListVO vo) {
return success(groupService.getUserList(vo));
}
}

View File

@ -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 <description class purpose>
* @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;
}

View File

@ -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 <description class purpose>
* @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<Long> userId;
}

View File

@ -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<Boolean> bindFace(Long userId,Long faceId){
return success(memberUserService.bindFace(userId,faceId));
}
@PutMapping("/bindCard")
@Operation(summary = "绑卡")
public CommonResult<Boolean> bindCard(String cardId){
return success(memberUserService.bindCard(cardId));
}
@PostMapping("/create")
@Operation(summary = "创建会员")
public CommonResult<MemberUserDO> create(@RequestBody MemberUserAddVO addVO){
return success(memberUserService.create(addVO));
}
}

View File

@ -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;
}

View File

@ -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<Long> ids;
@Schema(description = "小组id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long groupId;
private String name;
}

View File

@ -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("配置值")

View File

@ -34,11 +34,11 @@ public class AllocDO extends BaseDO {
/**
* 所属模块
*/
private Long moudle;
private String moudle;
/**
* 配置名
*/
private Long allocName;
private String allocName;
/**
* 配置值
*/

View File

@ -58,4 +58,9 @@ public class CardDO extends BaseDO {
*/
private String type;
/**
* 赠送金额
*/
private BigDecimal giftAmount;
}

View File

@ -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<CardDO> {
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<CardDO> selectMoneyList(List<Long> list);
}

View File

@ -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<MemberGroupDO> {
default List<MemberGroupDO> selectListByStatus(Integer status) {
return selectList(MemberGroupDO::getStatus, status);
}
void addMember(@Param("groupId")Long groupId, @Param("list")List<Long> memberIds);
List<MemberUserDO> getMemberByGroupId(MemberGroupPageVO vo);
void deleteMember(@Param("groupId")Long groupId, @Param("list")List<Long> memberIds);
Long memberCount(MemberGroupPageVO vo);
List<Long> getMemberList(Long groupId);
}

View File

@ -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<MemberUserDO> {
@Delete("delete from user_face where user_id = #{faceId}")
void deleteFace(Long faceId);
default PageResult<MemberUserDO> selectUserList(MemberUserListVO listVO) {
// 分页查询
return selectPage(listVO, new LambdaQueryWrapperX<MemberUserDO>()
.likeIfPresent(MemberUserDO::getNickname, listVO.getName())
.notIn(MemberUserDO::getId, listVO.getIds())
.orderByDesc(MemberUserDO::getId));
}
}

View File

@ -16,6 +16,7 @@ public enum CostTypeEnum {
MORNING("2", "早餐"),
NOON("3", "午餐"),
NIGHT("4", "晚餐"),
ADMIN_PAY("5","管理后台充值")
;
/**

View File

@ -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);
}

View File

@ -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<Long> 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<CardDO> cardDOS = cardMapper.selectMoneyList(memberList);
ArrayList<CardDO> addList = new ArrayList<>();
List<Long> cardUserIds = cardDOS.stream().map(card -> card.getUserId()).collect(Collectors.toList());
List<Long> 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);
}
}

View File

@ -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<MemberUserDO> getMemberByGroupId(MemberGroupPageVO vo);
/**
* 删除会员
*
* @param deleteVO 小组ID
*/
void deleteMember(MemberGroupVO deleteVO);
/**
* 人员列表
*
* @param
*/
PageResult<MemberUserDO> getUserList(MemberUserListVO listVO);
}

View File

@ -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<MemberUserDO> getMemberByGroupId(MemberGroupPageVO vo) {
vo.setLimitOne((vo.getPageNo()-1)*vo.getPageSize());
PageResult<MemberUserDO> 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<MemberUserDO> getUserList(MemberUserListVO listVO) {
List<Long> memberList = memberGroupMapper.getMemberList(listVO.getGroupId());
listVO.setIds(memberList);
PageResult<MemberUserDO> groupUserList = memberUserService.getGroupUserList(listVO);
return groupUserList;
}
}

View File

@ -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);

View File

@ -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<String,String> getDishesList(String platesNum);
/**
* 后台创建用户
*/
MemberUserDO create(MemberUserAddVO addVO);
/**
* 查询小组外的用户
*/
PageResult<MemberUserDO> getGroupUserList(MemberUserListVO listVO);
}

View File

@ -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<MemberUserDO> getGroupUserList(MemberUserListVO listVO) {
return memberUserMapper.selectUserList(listVO);
}
}

View File

@ -8,5 +8,17 @@
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectMoneyList" resultType="cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO">
select *
from member_card mc
right join (select user_id, max(create_time) as create_time
from member_card
where user_id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
group by user_id) uc
on uc.user_id = mc.user_id and uc.create_time = mc.create_time
</select>
</mapper>

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<insert id="addMember">
INSERT INTO member_group_member (group_id, member_id)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{groupId}, #{item})
</foreach>
</insert>
<select id="getMemberByGroupId" resultType="cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO">
select mu.*
from member_group_member mgm
left join yudao.member_user mu on mgm.member_id = mu.id
where mgm.group_id = #{groupId}
and mu.status = 0
<if test="nickname != null and nickname !=''">
and mu.nickname like concat('%',#{nickname},'%')
</if>
order by mgm.create_time desc
limit #{limitOne},#{pageSize}
</select>
<delete id="deleteMember">
delete from member_group_member
where group_id = #{groupId} and member_id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="memberCount" resultType="Long">
select count(*)
from member_group_member mgm
left join yudao.member_user mu on mgm.member_id = mu.id
where mgm.group_id = #{groupId}
and mu.status = 0
<if test="nickname != null and nickname !=''">
and mu.nickname like concat('%',#{nickname},'%')
</if>
order by mgm.create_time desc
</select>
<select id="getMemberList" resultType="Long">
select group_id from member_group_member where group_id = #{groupId}
</select>
</mapper>