From 53f83462c6b0b5cbf366a1a8eb2243d2927b300b Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Tue, 27 May 2025 10:05:04 +0800
Subject: [PATCH] feat(mall): 添加会员标识设置功能
---
src/main/java/cc/mrbird/febs/mall/vo/memberLevel/AdminMemberLabelSetDto.java | 15 ++
src/main/resources/templates/febs/views/modules/levelView/labelList.html | 20 +++
src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java | 3
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java | 4
src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java | 12 ++
src/main/java/cc/mrbird/febs/mall/mapper/HappyMemberLabelRecordMapper.java | 7 +
src/main/resources/templates/febs/views/modules/levelView/labelSet.html | 135 ++++++++++++++++++++++
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java | 39 +++++
src/main/java/cc/mrbird/febs/mall/vo/AdminLabelSetVo.java | 11 +
src/main/java/cc/mrbird/febs/mall/controller/memberLevel/ViewHappyMemberLevelController.java | 55 ++++++++
src/main/java/cc/mrbird/febs/mall/entity/HappyMemberLabelRecord.java | 20 +++
11 files changed, 312 insertions(+), 9 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java b/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java
index ed96941..9be99a7 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/AdminHappyMemberLevelController.java
@@ -16,6 +16,7 @@
import cc.mrbird.febs.mall.entity.HappyActivityOption;
import cc.mrbird.febs.mall.service.AdminMemberLevelService;
import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
+import cc.mrbird.febs.mall.vo.memberLevel.AdminMemberLabelSetDto;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
@@ -75,6 +76,17 @@
return adminMemberLevelService.labelUpdate(dto);
}
+
+ /**
+ * 会员标识-设置
+ */
+ @PostMapping("labelMemberSet")
+ @ControllerEndpoint(operation = "会员标识-设置", exceptionMessage = "操作失败")
+ public FebsResponse labelMemberSet(@RequestBody @Valid AdminMemberLabelSetDto dto) {
+
+ return adminMemberLevelService.labelMemberSet(dto);
+ }
+
/**
* 会员等级-列表
* @return
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/ViewHappyMemberLevelController.java b/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/ViewHappyMemberLevelController.java
index 362fe38..ceb2e51 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/ViewHappyMemberLevelController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/memberLevel/ViewHappyMemberLevelController.java
@@ -5,13 +5,12 @@
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.entity.*;
-import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper;
-import cc.mrbird.febs.mall.mapper.HappyActivityOptionMapper;
-import cc.mrbird.febs.mall.mapper.HappyMemberLabelMapper;
-import cc.mrbird.febs.mall.mapper.HappySaleLevelMapper;
+import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.AdminMemberLevelService;
import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
+import cc.mrbird.febs.mall.vo.AdminLabelSetVo;
import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
@@ -19,6 +18,10 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
@Controller("levelView")
@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/levelView")
@@ -28,6 +31,8 @@
private final AdminMemberLevelService adminMemberLevelService;
private final HappySaleLevelMapper happySaleLevelMapper;
private final HappyMemberLabelMapper happyMemberLabelMapper;
+ private final HappyMemberLabelRecordMapper happyMemberLabelRecordMapper;
+ private final MallMemberMapper mallMemberMapper;
/**
* 会员标识列表
@@ -63,6 +68,48 @@
}
/**
+ * 设置会员标识
+ * @param id
+ * @param model
+ * @return
+ */
+ @GetMapping("labelSet/{id}")
+ @RequiresPermissions("labelSet:view")
+ public String labelSet(@PathVariable long id, Model model) {
+ HappyMemberLabel happyMemberLabel = happyMemberLabelMapper.selectById(id);
+
+ //右侧数据
+ List<HappyMemberLabelRecord> happyMemberLabelRecords = happyMemberLabelRecordMapper.selectList(
+ new LambdaQueryWrapper<HappyMemberLabelRecord>()
+ .eq(HappyMemberLabelRecord::getLabelId, id)
+ );
+
+ //stream流操作happyMemberLabelRecords,获取memberId的set集合
+ Set<Long> memberIds = happyMemberLabelRecords.stream().map(HappyMemberLabelRecord::getMemberId).collect(Collectors.toSet());
+
+ //左侧数据
+ List<MallMember> mallMembers = mallMemberMapper.selectList(
+ new LambdaQueryWrapper<MallMember>()
+ .select(MallMember::getId, MallMember::getName,MallMember::getRealName, MallMember::getPhone)
+ .isNotNull(MallMember::getPhone)
+ .eq(MallMember::getAccountStatus, MallMember.ACCOUNT_STATUS_ENABLE)
+ );
+ //stream流操作mallMembers,生成一个新的List<MallMemberVo>
+ List<AdminLabelSetVo> adminLabelSetVos = mallMembers.stream().map(mallMember -> {
+ AdminLabelSetVo adminLabelSetVo = new AdminLabelSetVo();
+ adminLabelSetVo.setId(mallMember.getId());
+ adminLabelSetVo.setLabelName(mallMember.getName()+"("+mallMember.getRealName()+")"+mallMember.getPhone());
+ return adminLabelSetVo;
+ }).collect(Collectors.toList());
+
+
+ model.addAttribute("adminLabelSetVos", adminLabelSetVos);
+ model.addAttribute("memberIds", memberIds);
+ model.addAttribute("labelId", id);
+ return FebsUtil.view("modules/levelView/labelSet");
+ }
+
+ /**
* 会员等级列表
*/
@GetMapping("levelList")
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyMemberLabelRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyMemberLabelRecord.java
new file mode 100644
index 0000000..7e2e68a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyMemberLabelRecord.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@TableName("happy_member_label_record")
+public class HappyMemberLabelRecord extends BaseEntity {
+ /**
+ *
+ `member_id` bigint(20) DEFAULT NULL COMMENT '名称',
+ `label_id` bigint(20) DEFAULT NULL,
+ */
+ private Long memberId;
+ private Long labelId;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyMemberLabelRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyMemberLabelRecordMapper.java
new file mode 100644
index 0000000..b46af1c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyMemberLabelRecordMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.HappyMemberLabelRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface HappyMemberLabelRecordMapper extends BaseMapper<HappyMemberLabelRecord> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java b/src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java
index 87d6799..9d21361 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/AdminMemberLevelService.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.mall.entity.HappyMemberLabel;
import cc.mrbird.febs.mall.entity.HappyMemberLevel;
import cc.mrbird.febs.mall.entity.HappySaleLevel;
+import cc.mrbird.febs.mall.vo.memberLevel.AdminMemberLabelSetDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -23,6 +24,8 @@
FebsResponse labelUpdate(AdminMemberLabelUpdateDto dto);
+ FebsResponse labelMemberSet(AdminMemberLabelSetDto dto);
+
FebsResponse levelAll();
IPage<HappySaleLevel> getSaleLevelListInPage(AdminSaleLevelDto dto, QueryRequest request);
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java
index b95426d..c3f5e98 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMemberLevelServiceImpl.java
@@ -4,15 +4,15 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
import cc.mrbird.febs.mall.dto.memberLevel.*;
-import cc.mrbird.febs.mall.entity.HappyActivityCategory;
-import cc.mrbird.febs.mall.entity.HappyMemberLabel;
-import cc.mrbird.febs.mall.entity.HappyMemberLevel;
-import cc.mrbird.febs.mall.entity.HappySaleLevel;
+import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.HappyMemberLabelMapper;
+import cc.mrbird.febs.mall.mapper.HappyMemberLabelRecordMapper;
import cc.mrbird.febs.mall.mapper.HappyMemberLevelMapper;
import cc.mrbird.febs.mall.mapper.HappySaleLevelMapper;
import cc.mrbird.febs.mall.service.AdminMemberLevelService;
+import cc.mrbird.febs.mall.vo.memberLevel.AdminMemberLabelSetDto;
import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -30,11 +30,13 @@
@Service
@RequiredArgsConstructor
@Transactional
-public class AdminMemberLevelServiceImpl extends ServiceImpl<HappyMemberLevelMapper, HappyMemberLevel> implements AdminMemberLevelService {
+public class
+AdminMemberLevelServiceImpl extends ServiceImpl<HappyMemberLevelMapper, HappyMemberLevel> implements AdminMemberLevelService {
private final HappyMemberLevelMapper happyMemberLevelMapper;
private final HappySaleLevelMapper happySaleLevelMapper;
private final HappyMemberLabelMapper happyMemberLabelMapper;
+ private final HappyMemberLabelRecordMapper happyMemberLabelRecordMapper;
@Override
public IPage<HappyMemberLevel> getLevelListInPage(AdminMemberLevelDto dto, QueryRequest request) {
@@ -92,6 +94,33 @@
}
@Override
+ public FebsResponse labelMemberSet(AdminMemberLabelSetDto dto) {
+ Long labelId = dto.getLabelId();
+ List<Long> memberIdList = dto.getMemberIdList();
+ HappyMemberLabel happyMemberLabel = happyMemberLabelMapper.selectById(labelId);
+ if (ObjectUtil.isNotEmpty(happyMemberLabel)) {
+ if(CollUtil.isNotEmpty(memberIdList)){
+ LambdaQueryWrapper<HappyMemberLabelRecord> happyMemberLabelRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ happyMemberLabelRecordLambdaQueryWrapper.eq(HappyMemberLabelRecord::getLabelId,labelId);
+ happyMemberLabelRecordLambdaQueryWrapper.in(HappyMemberLabelRecord::getMemberId,memberIdList);
+ happyMemberLabelRecordMapper.delete(happyMemberLabelRecordLambdaQueryWrapper);
+
+ for (Long memberId:memberIdList){
+ HappyMemberLabelRecord happyMemberLabelRecord = new HappyMemberLabelRecord();
+ happyMemberLabelRecord.setMemberId(memberId);
+ happyMemberLabelRecord.setLabelId(labelId);
+ happyMemberLabelRecordMapper.insert(happyMemberLabelRecord);
+ }
+ }else{
+ LambdaQueryWrapper<HappyMemberLabelRecord> happyMemberLabelRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ happyMemberLabelRecordLambdaQueryWrapper.eq(HappyMemberLabelRecord::getLabelId,labelId);
+ happyMemberLabelRecordMapper.delete(happyMemberLabelRecordLambdaQueryWrapper);
+ }
+ }
+ return new FebsResponse().success().message("操作成功");
+ }
+
+ @Override
public FebsResponse levelAll() {
List<HappyMemberLevel> happyMemberLevels = happyMemberLevelMapper.selectList(
new LambdaQueryWrapper<HappyMemberLevel>()
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
index 7f3d843..8c2676e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -752,6 +752,10 @@
if(mallOrderInfo == null){
throw new FebsException("订单不存在!");
}
+ if(mallOrderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()){
+ throw new FebsException("订单不是待收货状态!");
+ }
+
MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(mallOrderInfo.getTakeUniqueCode());
if(mallTeamLeader==null){
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminLabelSetVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminLabelSetVo.java
new file mode 100644
index 0000000..7ba8c06
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminLabelSetVo.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.vo;
+
+import lombok.Data;
+
+@Data
+public class AdminLabelSetVo {
+
+ private Long id;
+
+ private String labelName;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/memberLevel/AdminMemberLabelSetDto.java b/src/main/java/cc/mrbird/febs/mall/vo/memberLevel/AdminMemberLabelSetDto.java
new file mode 100644
index 0000000..b6f6c9b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/memberLevel/AdminMemberLabelSetDto.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.mall.vo.memberLevel;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AdminMemberLabelSetDto {
+
+
+ private Long labelId;
+
+ private List<Long> memberIdList;
+}
diff --git a/src/main/resources/templates/febs/views/modules/levelView/labelList.html b/src/main/resources/templates/febs/views/modules/levelView/labelList.html
index 5593004..df18c9b 100644
--- a/src/main/resources/templates/febs/views/modules/levelView/labelList.html
+++ b/src/main/resources/templates/febs/views/modules/levelView/labelList.html
@@ -37,6 +37,7 @@
<script type="text/html" id="memberLabelToolbar">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="labelAdd:add" lay-event="labelAdd">新增</button>
+ <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="labelSet:view" lay-event="labelSet">设置会员标识</button>
</div>
</script>
@@ -137,6 +138,24 @@
}
});
}
+
+ if (layEvent === 'labelSet') {
+ var checkData = table.checkStatus('memberLabelTable').data;
+ if (checkData.length > 1 || checkData.length === 0) {
+ febs.alert.warn('每次操作一个会员标识');
+ return;
+ }
+ febs.modal.open('设置会员标识', 'modules/levelView/labelSet/' + checkData[0].id, {
+ btn: ['提交', '取消'],
+ area:['100%','100%'],
+ yes: function (index, layero) {
+ $('#label-set').find('#submit').trigger('click');
+ },
+ btn2: function () {
+ layer.closeAll();
+ }
+ });
+ }
});
function initmemberLabelTable() {
@@ -147,6 +166,7 @@
toolbar:"#memberLabelToolbar",
defaultToolbar:[],
cols: [[
+ {type: 'checkbox'},
{type: 'numbers', title: '', width: 80},
{title: '操作', toolbar: '#memberLabelOption', minWidth: 200, align: 'center'},
{field: 'name', title: '名称', minWidth: 150,align:'center'},
diff --git a/src/main/resources/templates/febs/views/modules/levelView/labelSet.html b/src/main/resources/templates/febs/views/modules/levelView/labelSet.html
new file mode 100644
index 0000000..d4228ff
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/levelView/labelSet.html
@@ -0,0 +1,135 @@
+<div class="layui-fluid layui-anim febs-anim" id="label-set" lay-title="设置">
+ <div class="layui-row febs-container">
+ <div class="layui-col-md12">
+ <div class="layui-fluid" id="memberLabel-set">
+ <form class="layui-form" action="" lay-filter="memberLabel-set-form">
+ <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
+ <ul class="layui-tab-title">
+ <li class="layui-this">基础信息</li>
+ </ul>
+ <div class="layui-tab-content">
+ <input type="text" name="labelId"
+ placeholder="" autoComplete="off" class="layui-input">
+ <div class="layui-tab-item layui-show">
+ <div class="layui-form-item">
+ <div id="memberSetMove"></div>
+ </div>
+ </div>
+ <div class="layui-tab-item layui-show">
+ <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="memberSetMoveQuery">
+ <i class="layui-icon">获取右侧数据</i>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="layui-form-item febs-hide">
+ <button class="layui-btn" lay-submit="" lay-filter="memberLabel-set-form-submit" id="submit">保存</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script data-th-inline="javascript">
+ layui.use(['febs','form', 'transfer'], function () {
+ var $ = layui.jquery,
+ febs = layui.febs,
+ layer = layui.layer,
+ form = layui.form,
+ transfer = layui.transfer,
+ adminLabelSetVos = [[${adminLabelSetVos}]],
+ memberIds = [[${memberIds}]],
+ labelId = [[${labelId}]],
+ $view = $('#label-set'),
+
+ $memberSetMoveQuery = $view.find('#memberSetMoveQuery')
+ ;
+
+ // var getData = transfer.getData('demo1');
+ // $("button").click(function(){
+ // alert(getData)
+ // });
+ // 查询按钮
+ $memberSetMoveQuery.on('click', function () {
+ console.log(transfer.getData('memberSetMove-set'))
+
+ let data1 = transfer.getData('memberSetMove-set');
+ //获取data1中的value,返回一个数组
+ let memberIdList = data1.map(function(item){
+ return item.value;
+ });
+
+ console.log(memberIdList)
+ });
+
+
+ form.render();
+ inithappyMemberLabelSet();
+ function inithappyMemberLabelSet() {
+ console.log("adminLabelSetVos:", adminLabelSetVos); // 调试信息
+ console.log("memberIds:", memberIds); // 调试信息
+ console.log("labelId:", labelId); // 调试信息
+ form.val("memberLabel-set-form", {
+ "labelId": labelId,
+ });
+ // 转换数据格式(假设接口返回的数据结构需要处理)
+ var dataLeft = adminLabelSetVos.map(function(item){
+ return {
+ value: item.id, // 值字段
+ title: item.labelName // 显示文本
+ }
+ });
+ var dataRight = memberIds.map(function(item){
+ return {
+ value: item, // 值字段
+ }
+ });
+
+ // 渲染穿梭框
+ transfer.render({
+ elem: '#memberSetMove',
+ data: dataLeft,
+ id: 'memberSetMove-set', // 唯一标识
+ title: ['待设置列表', '已设置列表'],
+ width: 300,
+ height: 400,
+ showSearch: true,
+ value: memberIds,
+ });
+ }
+
+ form.on('submit(memberLabel-set-form-submit)', function (data) {
+ let data1 = transfer.getData('memberSetMove-set');
+ //获取data1中的value,返回一个数组
+ let memberIdList = data1.map(function(item){
+ return item.value;
+ });
+ data.field.memberIdList = memberIdList;
+ data.field.labelId = labelId;
+ $.ajax({
+ 'url':ctx + 'admin/level/labelMemberSet',
+ 'type':'post',
+ 'dataType':'json',
+ 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
+ 'traditional': true,//ajax传递数组必须添加属性
+ 'data':JSON.stringify(data.field),
+ 'success':function (data) {
+ if(data.code==200){
+ layer.closeAll();
+ febs.alert.success(data.message);
+ $('#febs-label').find('#query').click();
+ }else{
+ febs.alert.warn(data.message);
+ }
+ },
+ 'error':function () {
+ febs.alert.warn('服务器繁忙');
+ }
+ })
+ return false;
+ });
+
+
+ });
+</script>
\ No newline at end of file
--
Gitblit v1.9.1