From 8c6f0393f6f12928e3f549517e2b63c1e6798df1 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 16 Dec 2021 17:35:23 +0800 Subject: [PATCH] 20211216 --- src/main/resources/mapper/modules/VideoVipInfoMapper.xml | 4 src/main/java/cc/mrbird/febs/video/dto/AdminSetVipDto.java | 14 +++ src/main/java/cc/mrbird/febs/video/service/impl/AdminVideoMemberServiceImpl.java | 65 +++++++++++++++ src/main/java/cc/mrbird/febs/video/mapper/VideoVipInfoMapper.java | 3 src/main/java/cc/mrbird/febs/video/controller/AdminVideoMemberController.java | 27 ++++++ src/main/resources/templates/febs/views/videoMember/memberList.html | 49 +++++++++--- src/main/java/cc/mrbird/febs/video/entity/VideoVipInfoEntity.java | 5 + src/main/resources/templates/febs/views/videoMember/setVip.html | 33 ++++---- src/main/java/cc/mrbird/febs/video/vo/AdminVideoMemberVo.java | 2 src/main/java/cc/mrbird/febs/video/service/IAdminVideoMemberService.java | 5 + 10 files changed, 169 insertions(+), 38 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/video/controller/AdminVideoMemberController.java b/src/main/java/cc/mrbird/febs/video/controller/AdminVideoMemberController.java index 1abf8a2..ec02290 100644 --- a/src/main/java/cc/mrbird/febs/video/controller/AdminVideoMemberController.java +++ b/src/main/java/cc/mrbird/febs/video/controller/AdminVideoMemberController.java @@ -4,12 +4,14 @@ import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.video.dto.AdminSetVipDto; import cc.mrbird.febs.video.service.IAdminVideoMemberService; import cc.mrbird.febs.video.entity.VideoMemberEntity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.util.Map; @@ -31,7 +33,7 @@ } @PostMapping("resetPwd/{id}") - @ControllerEndpoint(operation = "会员列表---重置密码", exceptionMessage = "重置密码失败") + @ControllerEndpoint(operation = "会员列表---重置密码", exceptionMessage = "操作失败") public FebsResponse resetPwd(@PathVariable("id") Long id) { return adminVideoMemberService.resetPwd(id); } @@ -42,7 +44,7 @@ * @return */ @GetMapping("closeAccount/{id}") - @ControllerEndpoint(operation = "会员列表---禁止", exceptionMessage = "禁止失败") + @ControllerEndpoint(operation = "会员列表---禁止", exceptionMessage = "操作失败") public FebsResponse closeAccount(@NotNull(message = "{required}") @PathVariable Long id) { return adminVideoMemberService.closeAccount(id); } @@ -53,11 +55,30 @@ * @return */ @GetMapping("openAccount/{id}") - @ControllerEndpoint(operation = "会员列表---开启", exceptionMessage = "开启失败") + @ControllerEndpoint(operation = "会员列表---开启", exceptionMessage = "操作失败") public FebsResponse openAccount(@NotNull(message = "{required}") @PathVariable Long id) { return adminVideoMemberService.openAccount(id); } + /** + * 会员列表-会员VIP设置 + */ + @PostMapping("setVip") + @ControllerEndpoint(operation = "会员列表-会员VIP设置", exceptionMessage = "操作失败") + public FebsResponse setVip(@Valid AdminSetVipDto adminSetVipDto) { + return adminVideoMemberService.setVip(adminSetVipDto); + } + + + /** + * 会员列表-取消会员资格 + */ + @GetMapping("cancelVip/{id}") + @ControllerEndpoint(operation = "会员列表---取消会员资格", exceptionMessage = "操作失败") + public FebsResponse cancelVip(@PathVariable("id") Long id) { + return adminVideoMemberService.cancelVip(id); + } + } diff --git a/src/main/java/cc/mrbird/febs/video/dto/AdminSetVipDto.java b/src/main/java/cc/mrbird/febs/video/dto/AdminSetVipDto.java new file mode 100644 index 0000000..8b4711d --- /dev/null +++ b/src/main/java/cc/mrbird/febs/video/dto/AdminSetVipDto.java @@ -0,0 +1,14 @@ +package cc.mrbird.febs.video.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel(value = "ApiMyVideoCollectionDto", description = "接收参数类") +public class AdminSetVipDto { + + private Long id; + + private String vipType; + +} diff --git a/src/main/java/cc/mrbird/febs/video/entity/VideoVipInfoEntity.java b/src/main/java/cc/mrbird/febs/video/entity/VideoVipInfoEntity.java index 09371f1..987b2b6 100644 --- a/src/main/java/cc/mrbird/febs/video/entity/VideoVipInfoEntity.java +++ b/src/main/java/cc/mrbird/febs/video/entity/VideoVipInfoEntity.java @@ -23,4 +23,9 @@ private Date buyTime; private Date expireTime; + + /** + * 生效状态 1:生效中 2:已过期 + */ + private Integer state; } diff --git a/src/main/java/cc/mrbird/febs/video/mapper/VideoVipInfoMapper.java b/src/main/java/cc/mrbird/febs/video/mapper/VideoVipInfoMapper.java index 09a42b7..4cb0ee8 100644 --- a/src/main/java/cc/mrbird/febs/video/mapper/VideoVipInfoMapper.java +++ b/src/main/java/cc/mrbird/febs/video/mapper/VideoVipInfoMapper.java @@ -2,11 +2,12 @@ import cc.mrbird.febs.video.entity.VideoVipInfoEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.lettuce.core.dynamic.annotation.Param; import java.util.List; public interface VideoVipInfoMapper extends BaseMapper<VideoVipInfoEntity> { - List<VideoVipInfoEntity> selectVideoVipInfoByMemberId(long id); + List<VideoVipInfoEntity> selectVideoVipInfoByMemberIdAndState(@Param("memberId") long id, @Param("state")Integer state); } diff --git a/src/main/java/cc/mrbird/febs/video/service/IAdminVideoMemberService.java b/src/main/java/cc/mrbird/febs/video/service/IAdminVideoMemberService.java index 9584498..e8750df 100644 --- a/src/main/java/cc/mrbird/febs/video/service/IAdminVideoMemberService.java +++ b/src/main/java/cc/mrbird/febs/video/service/IAdminVideoMemberService.java @@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.video.dto.AdminSetVipDto; import cc.mrbird.febs.video.entity.VideoMemberEntity; import cc.mrbird.febs.video.vo.AdminVideoMemberVo; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -18,4 +19,8 @@ FebsResponse openAccount(Long id); AdminVideoMemberVo getAdminVideoMemberVoById(long id); + + FebsResponse setVip(AdminSetVipDto adminSetVipDto); + + FebsResponse cancelVip(Long id); } diff --git a/src/main/java/cc/mrbird/febs/video/service/impl/AdminVideoMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/video/service/impl/AdminVideoMemberServiceImpl.java index 0e03c5a..4a9770e 100644 --- a/src/main/java/cc/mrbird/febs/video/service/impl/AdminVideoMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/video/service/impl/AdminVideoMemberServiceImpl.java @@ -3,22 +3,28 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.video.dto.AdminSetVipDto; import cc.mrbird.febs.video.entity.VideoMemberEntity; import cc.mrbird.febs.video.entity.VideoVipInfoEntity; +import cc.mrbird.febs.video.enumeration.VipTypeEnum; import cc.mrbird.febs.video.mapper.VideoMemberMapper; import cc.mrbird.febs.video.mapper.VideoVipInfoMapper; import cc.mrbird.febs.video.service.IAdminVideoMemberService; import cc.mrbird.febs.video.vo.AdminVideoMemberVo; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.List; @Slf4j @@ -36,6 +42,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public FebsResponse resetPwd(Long id) { VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(id); if (videoMemberEntity == null) { @@ -49,6 +56,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public FebsResponse closeAccount(Long id) { VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(videoMemberEntity)) { @@ -60,6 +68,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public FebsResponse openAccount(Long id) { VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(videoMemberEntity)) { @@ -74,9 +83,61 @@ public AdminVideoMemberVo getAdminVideoMemberVoById(long id) { VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(id); AdminVideoMemberVo adminVideoMemberVo = new AdminVideoMemberVo(); - adminVideoMemberVo.setMemberId(videoMemberEntity.getId()); + adminVideoMemberVo.setId(videoMemberEntity.getId()); return adminVideoMemberVo; } + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse setVip(AdminSetVipDto adminSetVipDto) { + VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(adminSetVipDto.getId()); + videoMemberEntity.setIsVip(VideoMemberEntity.ISVIP_STATUS_YES); + this.baseMapper.updateById(videoMemberEntity); + + List<VideoVipInfoEntity> videoVipInfoEntities = videoVipInfoMapper.selectVideoVipInfoByMemberIdAndState(adminSetVipDto.getId(),1); + if(CollUtil.isNotEmpty(videoVipInfoEntities)){ + return new FebsResponse().fail().message("用户的会员还未失效"); + } + + VideoVipInfoEntity videoVipInfoEntity = new VideoVipInfoEntity(); + videoVipInfoEntity.setMemberId(adminSetVipDto.getId()); + videoVipInfoEntity.setVipType(adminSetVipDto.getVipType()); + videoVipInfoEntity.setBuyTime(new Date()); + videoVipInfoEntity.setState(1); + if(VipTypeEnum.MONTH.name().equals(adminSetVipDto.getVipType())){ + videoVipInfoEntity.setExpireTime(DateUtil.offset(new Date(), DateField.MONTH,1)); + } + if(VipTypeEnum.PERIOD.name().equals(adminSetVipDto.getVipType())){ + videoVipInfoEntity.setExpireTime(DateUtil.offset(new Date(), DateField.MONTH,3)); + } + if(VipTypeEnum.YEAR.name().equals(adminSetVipDto.getVipType())){ + videoVipInfoEntity.setExpireTime(DateUtil.offset(new Date(), DateField.MONTH,12)); + } + videoVipInfoMapper.insert(videoVipInfoEntity); + return new FebsResponse().success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public FebsResponse cancelVip(Long id) { + VideoMemberEntity videoMemberEntity = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(videoMemberEntity)) { + return new FebsResponse().fail().message("用户不存在"); + } + if(VideoMemberEntity.ISVIP_STATUS_NO.equals(videoMemberEntity.getIsVip())){ + return new FebsResponse().fail().message("当前用户还不是会员,无法取消"); + } + videoMemberEntity.setIsVip(VideoMemberEntity.ISVIP_STATUS_NO); + this.baseMapper.updateById(videoMemberEntity); + List<VideoVipInfoEntity> videoVipInfoEntities = videoVipInfoMapper.selectVideoVipInfoByMemberIdAndState(videoMemberEntity.getId(),1); + if(CollUtil.isNotEmpty(videoVipInfoEntities)){ + for(VideoVipInfoEntity videoVipInfoEntity : videoVipInfoEntities){ + videoVipInfoEntity.setState(2); + videoVipInfoMapper.updateById(videoVipInfoEntity); + } + } + return new FebsResponse().success(); + } + } diff --git a/src/main/java/cc/mrbird/febs/video/vo/AdminVideoMemberVo.java b/src/main/java/cc/mrbird/febs/video/vo/AdminVideoMemberVo.java index 296a0c6..60cd33d 100644 --- a/src/main/java/cc/mrbird/febs/video/vo/AdminVideoMemberVo.java +++ b/src/main/java/cc/mrbird/febs/video/vo/AdminVideoMemberVo.java @@ -7,6 +7,6 @@ @ApiModel(value = "AdminVideoMemberVo", description = "返回参数类") public class AdminVideoMemberVo { - private Long memberId; + private Long id; } diff --git a/src/main/resources/mapper/modules/VideoVipInfoMapper.xml b/src/main/resources/mapper/modules/VideoVipInfoMapper.xml index da5888e..92598e4 100644 --- a/src/main/resources/mapper/modules/VideoVipInfoMapper.xml +++ b/src/main/resources/mapper/modules/VideoVipInfoMapper.xml @@ -4,8 +4,8 @@ - <select id="selectVideoVipInfoByMemberId" resultType="cc.mrbird.febs.video.entity.VideoVipInfoEntity"> - select * from video_vip_info where member_id=#{memberId} + <select id="selectVideoVipInfoByMemberIdAndState" resultType="cc.mrbird.febs.video.entity.VideoVipInfoEntity"> + select * from video_vip_info where member_id = #{id} and state = #{state} </select> diff --git a/src/main/resources/templates/febs/views/videoMember/memberList.html b/src/main/resources/templates/febs/views/videoMember/memberList.html index 3eb66e2..12c9afc 100644 --- a/src/main/resources/templates/febs/views/videoMember/memberList.html +++ b/src/main/resources/templates/febs/views/videoMember/memberList.html @@ -98,34 +98,58 @@ resetPwd(data.id); }); } + + if (layEvent === 'cancelVip') { + if(data.isVip == 1){ + febs.modal.confirm('会员设置', '是否取消用户会员资格?', function () { + cancelVip(data.id); + }); + }else if(data.isVip == 2){ + febs.alert.success('当前用户还不是会员,无法取消'); + }else{ + febs.alert.success('请刷新页面重试'); + } + } if (layEvent === 'setVip') { - febs.modal.open('系统拨付', 'videoMember/setVip/' + data.id, { - btn: ['提交', '取消'], - yes: function (index, layero) { - $('#setVip-update').find('#submit').trigger('click'); - }, - btn2: function () { - layer.closeAll(); - } - }); + if(data.isVip == 2){ + febs.modal.open('会员设置', 'videoMember/setVip/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#setVip-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + }else if(data.isVip == 1){ + febs.alert.success('当前用户已经是会员,无法重新设置'); + }else{ + febs.alert.success('请刷新页面重试'); + } } }); function closeAccount(id) { febs.get(ctx + 'admin/videoMember/closeAccount/' + id, null, function () { - febs.alert.success('禁用成功'); + febs.alert.success('成功'); $query.click(); }); } function openAccount(id) { febs.get(ctx + 'admin/videoMember/openAccount/' + id, null, function () { - febs.alert.success('开启成功'); + febs.alert.success('成功'); $query.click(); }); } function resetPwd(id) { febs.post(ctx + 'admin/videoMember/resetPwd/' + id, null, function () { - febs.alert.success('重置成功'); + febs.alert.success('成功'); + $query.click(); + }); + } + function cancelVip(id) { + febs.get(ctx + 'admin/videoMember/cancelVip/' + id, null, function () { + febs.alert.success('成功'); $query.click(); }); } @@ -189,6 +213,7 @@ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="resetPwd" shiro:hasPermission="user:update">重置密码</button>' +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="close" shiro:hasPermission="user:update">禁用</button>' +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="setVip" shiro:hasPermission="user:update">设置会员</button>' + +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="cancelVip" shiro:hasPermission="user:update">取消会员</button>' }else{ return'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="resetPwd" shiro:hasPermission="user:update">重置密码</button>' +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="open" shiro:hasPermission="user:update">启用</button>' diff --git a/src/main/resources/templates/febs/views/videoMember/setVip.html b/src/main/resources/templates/febs/views/videoMember/setVip.html index 6b3c82d..8693256 100644 --- a/src/main/resources/templates/febs/views/videoMember/setVip.html +++ b/src/main/resources/templates/febs/views/videoMember/setVip.html @@ -18,8 +18,8 @@ #setVip-update img{ max-width:100px } - </style> + <div class="layui-fluid" id="setVip-update"> <form class="layui-form" action="" lay-filter="setVip-update-form"> <div class="layui-form-item febs-hide"> @@ -29,15 +29,17 @@ </div> </div> <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">当前余额:</label> - <div class="layui-input-block"> - <input type="number" name="balance" lay-verify="required" autocomplete="off" class="layui-input" readonly> - </div> - </div> - <div class="layui-form-item"> - <label class="layui-form-label febs-form-item-require">拨付数目:</label> - <div class="layui-input-block"> - <input type="number" name="addBalance" lay-verify="required" autocomplete="off" class="layui-input"> + <label class="layui-form-label febs-form-item-require">会员级别:</label> + <div class="layui-form-item"> + <div class="layui-input-block"> + <input type="radio" name="vipType" value="MONTH" title="月卡" checked=""> + </div> + <div class="layui-input-block"> + <input type="radio" name="vipType" value="PERIOD" title="季卡"> + </div> + <div class="layui-input-block"> + <input type="radio" name="vipType" value="YEAR" title="年卡"> + </div> </div> </div> <div class="layui-form-item febs-hide"> @@ -56,7 +58,7 @@ form = layui.form, laydate = layui.laydate, eleTree = layui.eleTree, - systemPay = [[${systemPay}]], + setVip = [[${setVip}]], $view = $('#setVip-update'), validate = layui.validate; @@ -66,22 +68,19 @@ }); formSelects.render(); - - initUserValue(); function initUserValue() { form.val("setVip-update-form", { - "id": systemPay.id, - "balance": systemPay.balance, + "id": setVip.id }); } form.on('submit(setVip-update-form-submit)', function (data) { - febs.post(ctx + 'admin/mallMember/updateSystemPay', data.field, function () { + febs.post(ctx + 'admin/videoMember/setVip/', data.field, function () { layer.closeAll(); febs.alert.success('操作成功'); - $('#febs-newInfo').find('#reset').click(); + $('#febs-user').find('#reset').click(); }); return false; }); -- Gitblit v1.9.1