优化
This commit is contained in:
@ -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, "请先添加人员");
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
@ -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("配置值")
|
||||
|
@ -34,11 +34,11 @@ public class AllocDO extends BaseDO {
|
||||
/**
|
||||
* 所属模块
|
||||
*/
|
||||
private Long moudle;
|
||||
private String moudle;
|
||||
/**
|
||||
* 配置名
|
||||
*/
|
||||
private Long allocName;
|
||||
private String allocName;
|
||||
/**
|
||||
* 配置值
|
||||
*/
|
||||
|
@ -58,4 +58,9 @@ public class CardDO extends BaseDO {
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 赠送金额
|
||||
*/
|
||||
private BigDecimal giftAmount;
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ public enum CostTypeEnum {
|
||||
MORNING("2", "早餐"),
|
||||
NOON("3", "午餐"),
|
||||
NIGHT("4", "晚餐"),
|
||||
ADMIN_PAY("5","管理后台充值")
|
||||
;
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
@ -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>
|
Reference in New Issue
Block a user