소스 검색

add 会员分组功能

fushengqian 1 년 전
부모
커밋
829949e502

+ 53 - 0
fuint-application/src/main/java/com/fuint/common/dto/MemberGroupDto.java

@@ -0,0 +1,53 @@
+package com.fuint.common.dto;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 会员分组
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Getter
+@Setter
+public class MemberGroupDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("分组ID")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("分组名称")
+    private String name;
+
+    @ApiModelProperty("所属商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("默认店铺")
+    private Integer storeId;
+
+    @ApiModelProperty("父ID")
+    private Integer parentId;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty("状态,A:激活;N:禁用;D:删除")
+    private String status;
+
+    @ApiModelProperty("备注信息")
+    private String description;
+
+    @ApiModelProperty("最后操作人")
+    private String operator;
+}

+ 58 - 0
fuint-application/src/main/java/com/fuint/common/service/MemberGroupService.java

@@ -0,0 +1,58 @@
+package com.fuint.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fuint.common.dto.MemberGroupDto;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.repository.model.MtUserGroup;
+
+/**
+ * 会员分组业务接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public interface MemberGroupService extends IService<MtUserGroup> {
+
+    /**
+     * 分页查询分组列表
+     *
+     * @param paginationRequest
+     * @return
+     */
+    PaginationResponse<MtUserGroup> queryMemberGroupListByPagination(PaginationRequest paginationRequest) throws BusinessCheckException;
+
+    /**
+     * 新增会员分组
+     *
+     * @param  memberGroupDto
+     * @throws BusinessCheckException
+     */
+    MtUserGroup addMemberGroup(MemberGroupDto memberGroupDto) throws BusinessCheckException;
+
+    /**
+     * 修改卡券分组
+     *
+     * @param  memberGroupDto
+     * @throws BusinessCheckException
+     */
+    MtUserGroup updateMemberGroup(MemberGroupDto memberGroupDto) throws BusinessCheckException;
+
+    /**
+     * 根据组ID获取分组信息
+     *
+     * @param  id 分组ID
+     * @throws BusinessCheckException
+     */
+    MtUserGroup queryMemberGroupById(Integer id) throws BusinessCheckException;
+
+    /**
+     * 根据分组ID删除分组信息
+     *
+     * @param  id       分组ID
+     * @param  operator 操作人
+     * @throws BusinessCheckException
+     */
+    void deleteMemberGroup(Integer id, String operator) throws BusinessCheckException;
+}

+ 174 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/MemberGroupServiceImpl.java

@@ -0,0 +1,174 @@
+package com.fuint.common.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fuint.common.dto.MemberGroupDto;
+import com.fuint.common.enums.StatusEnum;
+import com.fuint.common.service.*;
+import com.fuint.common.util.CommonUtil;
+import com.fuint.framework.annoation.OperationServiceLog;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.repository.mapper.MtUserGroupMapper;
+import com.fuint.repository.model.*;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
+import java.lang.String;
+import java.util.*;
+
+/**
+ * 会员分组业务实现类
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Service
+public class MemberGroupServiceImpl extends ServiceImpl<MtUserGroupMapper, MtUserGroup> implements MemberGroupService {
+
+    private static final Logger log = LoggerFactory.getLogger(CouponGroupServiceImpl.class);
+
+    @Resource
+    private MtUserGroupMapper mtUserGroupMapper;
+
+    /**
+     * 分页查询会员分组列表
+     *
+     * @param paginationRequest
+     * @return
+     */
+    @Override
+    public PaginationResponse<MtUserGroup> queryMemberGroupListByPagination(PaginationRequest paginationRequest) {
+        Page<MtCouponGroup> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
+        LambdaQueryWrapper<MtUserGroup> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.ne(MtUserGroup::getStatus, StatusEnum.DISABLE.getKey());
+
+        String name = paginationRequest.getSearchParams().get("name") == null ? "" : paginationRequest.getSearchParams().get("name").toString();
+        if (StringUtils.isNotBlank(name)) {
+            lambdaQueryWrapper.like(MtUserGroup::getName, name);
+        }
+        String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
+        if (StringUtils.isNotBlank(status)) {
+            lambdaQueryWrapper.eq(MtUserGroup::getStatus, status);
+        }
+        String id = paginationRequest.getSearchParams().get("id") == null ? "" : paginationRequest.getSearchParams().get("id").toString();
+        if (StringUtils.isNotBlank(id)) {
+            lambdaQueryWrapper.eq(MtUserGroup::getId, id);
+        }
+        String merchantId = paginationRequest.getSearchParams().get("merchantId") == null ? "" : paginationRequest.getSearchParams().get("merchantId").toString();
+        if (StringUtils.isNotBlank(merchantId)) {
+            lambdaQueryWrapper.eq(MtUserGroup::getMerchantId, merchantId);
+        }
+        String storeId = paginationRequest.getSearchParams().get("storeId") == null ? "" : paginationRequest.getSearchParams().get("storeId").toString();
+        if (StringUtils.isNotBlank(storeId)) {
+            lambdaQueryWrapper.eq(MtUserGroup::getStoreId, storeId);
+        }
+
+        lambdaQueryWrapper.orderByDesc(MtUserGroup::getId);
+        List<MtUserGroup> dataList = mtUserGroupMapper.selectList(lambdaQueryWrapper);
+
+        PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
+        PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
+        PaginationResponse<MtUserGroup> paginationResponse = new PaginationResponse(pageImpl, MtUserGroup.class);
+        paginationResponse.setTotalPages(pageHelper.getPages());
+        paginationResponse.setTotalElements(pageHelper.getTotal());
+        paginationResponse.setContent(dataList);
+
+        return paginationResponse;
+    }
+
+    /**
+     * 添加会员分组
+     *
+     * @param  memberGroupDto
+     * @throws BusinessCheckException
+     */
+    @Override
+    @OperationServiceLog(description = "新增会员分组")
+    public MtUserGroup addMemberGroup(MemberGroupDto memberGroupDto) {
+        MtUserGroup userGroup = new MtUserGroup();
+        userGroup.setMerchantId(memberGroupDto.getMerchantId());
+        userGroup.setStoreId(memberGroupDto.getStoreId());
+        userGroup.setName(CommonUtil.replaceXSS(memberGroupDto.getName()));
+        userGroup.setDescription(CommonUtil.replaceXSS(memberGroupDto.getDescription()));
+        userGroup.setStatus(StatusEnum.ENABLED.getKey());
+        userGroup.setCreateTime(new Date());
+        userGroup.setUpdateTime(new Date());
+        userGroup.setOperator(memberGroupDto.getOperator());
+        this.save(userGroup);
+        return userGroup;
+    }
+
+    /**
+     * 根据分组ID获取分组信息
+     *
+     * @param  id 分组ID
+     * @throws BusinessCheckException
+     */
+    @Override
+    public MtUserGroup queryMemberGroupById(Integer id) {
+        return mtUserGroupMapper.selectById(id);
+    }
+
+    /**
+     * 根据ID删除会员分组
+     *
+     * @param  id       分组ID
+     * @param  operator 操作人
+     * @throws BusinessCheckException
+     */
+    @Override
+    @OperationServiceLog(description = "删除会员分组")
+    public void deleteMemberGroup(Integer id, String operator) {
+        MtUserGroup userGroup = queryMemberGroupById(id);
+        if (null == userGroup) {
+            return;
+        }
+
+        userGroup.setStatus(StatusEnum.DISABLE.getKey());
+        userGroup.setUpdateTime(new Date());
+        userGroup.setOperator(operator);
+
+        this.updateById(userGroup);
+    }
+
+    /**
+     * 修改卡券分组
+     *
+     * @param  memberGroupDto
+     * @throws BusinessCheckException
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @OperationServiceLog(description = "更新会员分组")
+    public MtUserGroup updateMemberGroup(MemberGroupDto memberGroupDto) throws BusinessCheckException {
+        MtUserGroup userGroup = queryMemberGroupById(memberGroupDto.getId());
+        if (null == userGroup || StatusEnum.DISABLE.getKey().equalsIgnoreCase(userGroup.getStatus())) {
+            log.error("该分组不存在或已被删除");
+            throw new BusinessCheckException("该分组不存在或已被删除");
+        }
+        if (memberGroupDto.getName() != null) {
+            userGroup.setName(CommonUtil.replaceXSS(memberGroupDto.getName()));
+        }
+        if (memberGroupDto.getDescription() != null) {
+            userGroup.setDescription(CommonUtil.replaceXSS(memberGroupDto.getDescription()));
+        }
+        if (memberGroupDto.getStatus() != null) {
+            userGroup.setStatus(memberGroupDto.getStatus());
+        }
+
+        userGroup.setUpdateTime(new Date());
+        userGroup.setOperator(memberGroupDto.getOperator());
+        this.updateById(userGroup);
+        return userGroup;
+    }
+}

+ 220 - 0
fuint-application/src/main/java/com/fuint/module/backendApi/controller/BackendMemberGroupController.java

@@ -0,0 +1,220 @@
+package com.fuint.module.backendApi.controller;
+
+import com.fuint.common.Constants;
+import com.fuint.common.dto.AccountInfo;
+import com.fuint.common.dto.MemberGroupDto;
+import com.fuint.common.enums.StatusEnum;
+import com.fuint.common.service.CouponService;
+import com.fuint.common.service.MemberGroupService;
+import com.fuint.common.util.TokenUtil;
+import com.fuint.framework.exception.BusinessCheckException;
+import com.fuint.framework.pagination.PaginationRequest;
+import com.fuint.framework.pagination.PaginationResponse;
+import com.fuint.framework.web.BaseController;
+import com.fuint.framework.web.ResponseObject;
+import com.fuint.repository.mapper.MtUserMapper;
+import com.fuint.repository.model.MtUser;
+import com.fuint.repository.model.MtUserGroup;
+import com.fuint.utils.StringUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 会员分组管理controller
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Api(tags="管理端-会员分组相关接口")
+@RestController
+@RequestMapping(value = "/backendApi/memberGroup")
+public class BackendMemberGroupController extends BaseController {
+
+    private static final Logger logger = LoggerFactory.getLogger(BackendMemberGroupController.class);
+
+    @Resource
+    private MtUserMapper mtUserMapper;
+
+    /**
+     * 会员分组服务接口
+     */
+    @Autowired
+    private MemberGroupService memberGroupService;
+
+    /**
+     * 卡券服务接口
+     * */
+    @Autowired
+    CouponService couponService;
+
+    /**
+     * 查询会员分组列表
+     *
+     * @param request
+     * @return
+     * @throws BusinessCheckException
+     */
+    @ApiOperation(value = "查询会员分组列表")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @CrossOrigin
+    public ResponseObject list(HttpServletRequest request) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        Integer page = request.getParameter("page") == null ? 1 : Integer.parseInt(request.getParameter("page"));
+        Integer pageSize = request.getParameter("pageSize") == null ? Constants.PAGE_SIZE : Integer.parseInt(request.getParameter("pageSize"));
+        String name = request.getParameter("name") == null ? "" : request.getParameter("name");
+        String id = request.getParameter("id") == null ? "" : request.getParameter("id");
+        String status = request.getParameter("status") == null ? StatusEnum.ENABLED.getKey() : request.getParameter("status");
+
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        PaginationRequest paginationRequest = new PaginationRequest();
+        paginationRequest.setCurrentPage(page);
+        paginationRequest.setPageSize(pageSize);
+
+        Map<String, Object> searchParams = new HashMap<>();
+        if (StringUtil.isNotEmpty(name)) {
+            searchParams.put("name", name);
+        }
+        if (StringUtil.isNotEmpty(id)) {
+            searchParams.put("id", id);
+        }
+        if (StringUtil.isNotEmpty(status)) {
+            searchParams.put("status", status);
+        }
+        if (accountInfo.getMerchantId() != null && accountInfo.getMerchantId() > 0) {
+            searchParams.put("merchantId", accountInfo.getMerchantId());
+        }
+        if (accountInfo.getStoreId() != null && accountInfo.getStoreId() > 0) {
+            searchParams.put("storeId", accountInfo.getStoreId());
+        }
+
+        paginationRequest.setSearchParams(searchParams);
+        PaginationResponse<MtUserGroup> paginationResponse = memberGroupService.queryMemberGroupListByPagination(paginationRequest);
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("paginationResponse", paginationResponse);
+
+        return getSuccessResult(result);
+    }
+
+    /**
+     * 保存分组信息
+     *
+     * @param request
+     * @param memberGroupDto
+     * @return
+     */
+    @ApiOperation(value = "保存分组信息")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @CrossOrigin
+    public ResponseObject save(HttpServletRequest request, @RequestBody MemberGroupDto memberGroupDto) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+        memberGroupDto.setMerchantId(accountInfo.getMerchantId());
+        memberGroupDto.setStoreId(accountInfo.getStoreId());
+        memberGroupDto.setOperator(accountInfo.getAccountName());
+        if (memberGroupDto.getId() != null && memberGroupDto.getId() > 0) {
+            memberGroupService.updateMemberGroup(memberGroupDto);
+        } else {
+            memberGroupService.addMemberGroup(memberGroupDto);
+        }
+        return getSuccessResult(true);
+    }
+
+    /**
+     * 删除会员分组
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "删除会员分组")
+    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
+    @CrossOrigin
+    public ResponseObject delete(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        // 该分组已有会员,不允许删除
+        Map<String, Object> searchParams = new HashMap<>();
+        searchParams.put("GROUP_ID", id.toString());
+        searchParams.put("status", StatusEnum.ENABLED.getKey());
+        List<MtUser> dataList = mtUserMapper.selectByMap(searchParams);
+        if (dataList.size() > 0) {
+            return getFailureResult(201, "该分组下有会员,不能删除");
+        }
+
+        memberGroupService.deleteMemberGroup(id, accountInfo.getAccountName());
+
+        return getSuccessResult(true);
+    }
+
+    /**
+     * 更新分组状态
+     *
+     * @return
+     */
+    @ApiOperation(value = "更新分组状态")
+    @RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
+    @CrossOrigin
+    public ResponseObject updateStatus(HttpServletRequest request, @RequestBody Map<String, Object> params) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        String status = params.get("status") != null ? params.get("status").toString() : StatusEnum.ENABLED.getKey();
+        Integer id = params.get("id") == null ? 0 : Integer.parseInt(params.get("id").toString());
+
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        String operator = accountInfo.getAccountName();
+        MemberGroupDto groupDto = new MemberGroupDto();
+        groupDto.setOperator(operator);
+        groupDto.setId(id);
+        groupDto.setStatus(status);
+        memberGroupService.updateMemberGroup(groupDto);
+
+        return getSuccessResult(true);
+    }
+
+    /**
+     * 获取分组详情
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "获取分组详情")
+    @RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
+    @CrossOrigin
+    public ResponseObject info(HttpServletRequest request, @PathVariable("id") Integer id) throws BusinessCheckException {
+        String token = request.getHeader("Access-Token");
+        AccountInfo accountInfo = TokenUtil.getAccountInfoByToken(token);
+        if (accountInfo == null) {
+            return getFailureResult(1001, "请先登录");
+        }
+
+        MtUserGroup mtUserGroup = memberGroupService.queryMemberGroupById(id);
+
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("groupInfo", mtUserGroup);
+
+        return getSuccessResult(resultMap);
+    }
+}

+ 14 - 0
fuint-repository/src/main/java/com/fuint/repository/mapper/MtUserGroupMapper.java

@@ -0,0 +1,14 @@
+package com.fuint.repository.mapper;
+
+import com.fuint.repository.model.MtUserGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 会员分组 Mapper 接口
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+public interface MtUserGroupMapper extends BaseMapper<MtUserGroup> {
+
+}

+ 56 - 0
fuint-repository/src/main/java/com/fuint/repository/model/MtUserGroup.java

@@ -0,0 +1,56 @@
+package com.fuint.repository.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 会员分组
+ *
+ * Created by FSQ
+ * CopyRight https://www.fuint.cn
+ */
+@Getter
+@Setter
+@TableName("mt_user_group")
+@ApiModel(value = "MtUserGroup对象", description = "会员分组")
+public class MtUserGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("分组ID")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("分组名称")
+    private String name;
+
+    @ApiModelProperty("所属商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("默认店铺")
+    private Integer storeId;
+
+    @ApiModelProperty("父ID")
+    private Integer parentId;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty("状态,A:激活;N:禁用;D:删除")
+    private String status;
+
+    @ApiModelProperty("备注信息")
+    private String description;
+
+    @ApiModelProperty("最后操作人")
+    private String operator;
+}

+ 1 - 1
fuint-repository/src/main/resources/mapper/MtVerifyCodeMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fuint.repository.mapper.MtVerifyCodeMapper">
     <select id="queryByMobileVerifyCode" resultType="com.fuint.repository.model.MtVerifyCode">
-        select * from mt_verify_code t where t.MOBILE = #{mobile} and t.VERIFY_CODE = #{verifyCode} and t.VERIFY_CODE = 0 and t.EXPIRE_TIME >= #{queryTime}
+        select * from mt_verify_code t where t.MOBILE = #{mobile} and t.VERIFY_CODE = #{verifyCode} and t.VALID_FLAG = 0 and t.EXPIRE_TIME >= #{queryTime}
     </select>
 
     <select id="queryVerifyCodeLastRecord" resultType="com.fuint.repository.model.MtVerifyCode">