Merge branch 'master' of http://122.51.230.86:3000/dianliang/dl_admin
# Conflicts: # ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberCardService.java # ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberCardServiceImpl.java
This commit is contained in:
commit
594a07f933
@ -8,6 +8,8 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.annotation.Anonymous;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -131,19 +133,14 @@ public class BaseCategoryController extends BaseController
|
||||
* @return com.ruoyi.common.core.domain.AjaxResult
|
||||
**/
|
||||
@GetMapping("/listByCode")
|
||||
@Anonymous
|
||||
public AjaxResult listByCode(@RequestParam(value = "code") String code,
|
||||
@RequestParam(value = "isSystem",required = false) Integer isSystem)
|
||||
{
|
||||
List<BaseCategory> list = baseCategoryService.selectByCode(code);
|
||||
if(list.isEmpty()){
|
||||
try {
|
||||
return success(baseCategoryService.listByParentCode(code, isSystem));
|
||||
}catch (ServiceException e){
|
||||
return error("未查询到该字典项!");
|
||||
}
|
||||
LambdaQueryWrapper<BaseCategory> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BaseCategory::getPid,list.get(0).getId());
|
||||
if(null!=isSystem){
|
||||
queryWrapper.eq(BaseCategory::getIsSystem,isSystem);
|
||||
}
|
||||
queryWrapper.orderByAsc(BaseCategory::getSort);
|
||||
return success(baseCategoryService.list(queryWrapper));
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.ruoyi.base.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.base.domain.BaseCardRights;
|
||||
@ -11,24 +12,34 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 会员卡权益Mapper接口
|
||||
*
|
||||
*
|
||||
* @author vinjor-m
|
||||
* @date 2025-03-17
|
||||
*/
|
||||
@Mapper
|
||||
public interface BaseCardRightsMapper extends BaseMapper<BaseCardRights>
|
||||
{
|
||||
public interface BaseCardRightsMapper extends BaseMapper<BaseCardRights> {
|
||||
IPage<BaseCardRights> queryListPage(@Param("entity") BaseCardRights entity, Page<BaseCardRights> page);
|
||||
|
||||
/**
|
||||
* 查询会员卡权益
|
||||
*
|
||||
* @param cardId 会员卡id
|
||||
* @param userType 用户类型
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCardRights>
|
||||
* @author vinjor-M
|
||||
* @date 15:24 2025/3/18
|
||||
* @param cardId 会员卡id
|
||||
* @param userType 用户类型
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCardRights>
|
||||
**/
|
||||
**/
|
||||
List<CardRightsVO> getByIdAndType(@Param("cardId") String cardId, @Param("userType") String userType);
|
||||
|
||||
int removeByCardId(@Param("cardId") String cardId);
|
||||
|
||||
/**
|
||||
* 通过会员卡id查询会员卡权益
|
||||
*
|
||||
* @param cardId 会员卡id
|
||||
* @return java.util.List<com.ruoyi.base.vo.CardRightsVO>
|
||||
* @author PQZ
|
||||
* @date 10:36 2025/3/27
|
||||
**/
|
||||
List<CardRightsVO> queryByCardId(@Param("cardId") String cardId);
|
||||
}
|
||||
|
@ -42,5 +42,5 @@ public interface IBaseCardRightsService extends IService<BaseCardRights>
|
||||
* @param cardId 会员卡id
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCardRights>
|
||||
**/
|
||||
List<BaseCardRights> queryByCardId(String cardId);
|
||||
List<CardRightsVO> queryByCardId(String cardId);
|
||||
}
|
||||
|
@ -24,4 +24,14 @@ public interface IBaseCategoryService extends IService<BaseCategory>
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCategory>
|
||||
**/
|
||||
List<BaseCategory> selectByCode(String code);
|
||||
|
||||
/**
|
||||
* 根据code查下级分类字典--列表
|
||||
* @author vinjor-M
|
||||
* @date 17:01 2025/3/25
|
||||
* @param code 编码
|
||||
* @param isSystem 是否系统级
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCategory>
|
||||
**/
|
||||
List<BaseCategory> listByParentCode(String code, Integer isSystem);
|
||||
}
|
||||
|
@ -89,9 +89,7 @@ public class BaseCardRightsServiceImpl extends ServiceImpl<BaseCardRightsMapper,
|
||||
* @date 16:31 2025/3/26
|
||||
**/
|
||||
@Override
|
||||
public List<BaseCardRights> queryByCardId(String cardId) {
|
||||
LambdaQueryWrapper<BaseCardRights> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(BaseCardRights::getCardId,cardId).eq(DlBaseEntity::getDelFlag,0);
|
||||
return list(lambdaQueryWrapper);
|
||||
public List<CardRightsVO> queryByCardId(String cardId) {
|
||||
return baseCardRightsMapper.queryByCardId(cardId);
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import com.ruoyi.base.mapper.BaseCardMapper;
|
||||
import com.ruoyi.base.service.IBaseCardRightsService;
|
||||
import com.ruoyi.base.service.IBaseCardService;
|
||||
import com.ruoyi.base.vo.BaseCardVO;
|
||||
import com.ruoyi.base.vo.CardRightsVO;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -49,7 +50,7 @@ public class BaseCardServiceImpl extends ServiceImpl<BaseCardMapper,BaseCard> i
|
||||
BaseCardVO cardVO = new BaseCardVO();
|
||||
BaseCard card = getById(cardId);
|
||||
BeanUtils.copyProperties(card,cardVO);
|
||||
List<BaseCardRights> rights = cardRightsService.queryByCardId(cardId);
|
||||
List<CardRightsVO> rights = cardRightsService.queryByCardId(cardId);
|
||||
cardVO.setRights(rights);
|
||||
return cardVO;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package com.ruoyi.base.service.impl;
|
||||
import java.util.List;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -42,4 +43,28 @@ public class BaseCategoryServiceImpl extends ServiceImpl<BaseCategoryMapper,Base
|
||||
public List<BaseCategory> selectByCode(String code) {
|
||||
return this.list(new LambdaQueryWrapper<BaseCategory>().eq(BaseCategory::getCode,code));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据code查分类字典--列表
|
||||
*
|
||||
* @param code 编码
|
||||
* @param isSystem 是否系统级
|
||||
* @return java.util.List<com.ruoyi.base.domain.BaseCategory>
|
||||
* @author vinjor-M
|
||||
* @date 17:01 2025/3/25
|
||||
**/
|
||||
@Override
|
||||
public List<BaseCategory> listByParentCode(String code, Integer isSystem) {
|
||||
List<BaseCategory> list = this.selectByCode(code);
|
||||
if(list.isEmpty()){
|
||||
throw new ServiceException("未查询到该字典项!");
|
||||
}
|
||||
LambdaQueryWrapper<BaseCategory> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BaseCategory::getPid,list.get(0).getId());
|
||||
if(null!=isSystem){
|
||||
queryWrapper.eq(BaseCategory::getIsSystem,isSystem);
|
||||
}
|
||||
queryWrapper.orderByAsc(BaseCategory::getSort);
|
||||
return list(queryWrapper);
|
||||
}
|
||||
}
|
||||
|
@ -9,5 +9,5 @@ import java.util.List;
|
||||
@Data
|
||||
public class BaseCardVO extends BaseCard {
|
||||
/**会员卡关联权益*/
|
||||
List<BaseCardRights> rights;
|
||||
List<CardRightsVO> rights;
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package com.ruoyi.base.vo;
|
||||
|
||||
import com.ruoyi.base.domain.BaseCardRights;
|
||||
import com.ruoyi.base.domain.BaseRights;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
@ -6,7 +6,10 @@ import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.busi.query.AppNoticeQuery;
|
||||
import com.ruoyi.busi.query.BusiNoticeQuery;
|
||||
import com.ruoyi.busi.vo.BusiNoticeVo;
|
||||
import com.ruoyi.common.annotation.Anonymous;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -49,7 +52,7 @@ public class BusiNoticeController extends BaseController
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
|
||||
{
|
||||
Page<BusiNotice> page = new Page<>(pageNum, pageSize);
|
||||
IPage<BusiNotice> list = busiNoticeService.queryListPage(query,page);
|
||||
IPage<BusiNoticeVo> list = busiNoticeService.queryListPage(query,page);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
@ -136,4 +139,24 @@ public class BusiNoticeController extends BaseController
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序端查询通告列表
|
||||
* @author vinjor-M
|
||||
* @date 15:39 2025/3/25
|
||||
* @param query 查询条件
|
||||
* @param pageNum TODO
|
||||
* @param pageSize TODO
|
||||
* @return com.ruoyi.common.core.domain.AjaxResult
|
||||
**/
|
||||
@GetMapping("/appList")
|
||||
@Anonymous
|
||||
public AjaxResult appList(AppNoticeQuery query,
|
||||
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
|
||||
{
|
||||
Page<BusiNotice> page = new Page<>(pageNum, pageSize);
|
||||
IPage<BusiNoticeVo> list = busiNoticeService.queryAppListPage(query,page);
|
||||
return success(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.busi.domain.BusiNotice;
|
||||
import com.ruoyi.busi.query.AppNoticeQuery;
|
||||
import com.ruoyi.busi.query.BusiNoticeQuery;
|
||||
import com.ruoyi.busi.vo.BusiNoticeVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@ -19,7 +20,7 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
*/
|
||||
@Mapper
|
||||
public interface BusiNoticeMapper extends BaseMapper<BusiNotice> {
|
||||
IPage<BusiNotice> queryListPage(@Param("entity") BusiNoticeQuery query, Page<BusiNotice> page);
|
||||
IPage<BusiNoticeVo> queryListPage(@Param("entity") BusiNoticeQuery query, Page<BusiNotice> page);
|
||||
|
||||
/**
|
||||
* 查询博主报名的通告
|
||||
@ -30,4 +31,14 @@ public interface BusiNoticeMapper extends BaseMapper<BusiNotice> {
|
||||
* @date 11:04 2025/3/22
|
||||
**/
|
||||
List<BusiNoticeVo> queryListByUserId(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 小程序端查询通告列表
|
||||
* @author vinjor-M
|
||||
* @date 15:41 2025/3/25
|
||||
* @param query TODO
|
||||
* @param page
|
||||
* @return com.baomidou.mybatisplus.core.metadata.IPage<com.ruoyi.busi.domain.BusiNotice>
|
||||
**/
|
||||
IPage<BusiNoticeVo> queryAppListPage(@Param("entity") AppNoticeQuery query, Page<BusiNotice> page);
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.ruoyi.busi.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.busi.domain.BusiNoticeSign;
|
||||
@ -18,4 +20,13 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
public interface BusiNoticeSignMapper extends BaseMapper<BusiNoticeSign>
|
||||
{
|
||||
IPage<BusiNoticeSign> queryListPage(@Param("entity") BusiNoticeSign entity, Page<BusiNoticeSign> page);
|
||||
|
||||
/**
|
||||
* 查某些公告的报名数量
|
||||
* @author vinjor-M
|
||||
* @date 16:50 2025/3/25
|
||||
* @param idList 公告id
|
||||
* @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
|
||||
**/
|
||||
List<Map<String,Object>> selectReportNumByIdList(@Param("list")List<String> idList);
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
package com.ruoyi.busi.query;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 小程序端查询通告条件
|
||||
* @author vinjor-M
|
||||
* @date 15:40 2025/3/25
|
||||
**/
|
||||
@Data
|
||||
public class AppNoticeQuery {
|
||||
/** 排序方式:new-最新;money-高奖励; */
|
||||
private String sortBy;
|
||||
/** 品牌置换--只要有值代表查品牌置换 */
|
||||
private String gift;
|
||||
/** 平台code */
|
||||
private String platformCode;
|
||||
/** 领域code */
|
||||
private String bloggerType;
|
||||
/** 搜索的文字 */
|
||||
private String searchValue;
|
||||
/** 奖励类型选中值:""-不限 | money-稿费 | gift-赠品 */
|
||||
private String rewardType;
|
||||
/** 粉丝量要求-上限 */
|
||||
private Double fansUp;
|
||||
/** 粉丝量要求-下限 */
|
||||
private Double fansDown;
|
||||
/** 稿费要求-上限 */
|
||||
private Double feeUp;
|
||||
/** 稿费要求-下限 */
|
||||
private Double feeDown;
|
||||
|
||||
}
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.busi.domain.BusiNotice;
|
||||
import com.ruoyi.busi.query.AppNoticeQuery;
|
||||
import com.ruoyi.busi.query.BusiNoticeQuery;
|
||||
import com.ruoyi.busi.vo.BusiNoticeVo;
|
||||
|
||||
@ -41,7 +42,7 @@ public interface IBusiNoticeService extends IService<BusiNotice>
|
||||
* @param query 查询参数
|
||||
* @param page 分页参数
|
||||
*/
|
||||
IPage<BusiNotice> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page);
|
||||
IPage<BusiNoticeVo> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page);
|
||||
/**
|
||||
* 保存
|
||||
* @param data 保存参数
|
||||
@ -59,4 +60,14 @@ public interface IBusiNoticeService extends IService<BusiNotice>
|
||||
* @param query 审核参数
|
||||
*/
|
||||
void auditInfo(BusiNoticeQuery query);
|
||||
|
||||
/**
|
||||
* 小程序端查询通告列表
|
||||
* @author vinjor-M
|
||||
* @date 15:41 2025/3/25
|
||||
* @param query TODO
|
||||
* @param page TODO
|
||||
* @return com.baomidou.mybatisplus.core.metadata.IPage<com.ruoyi.busi.domain.BusiNotice>
|
||||
**/
|
||||
IPage<BusiNoticeVo> queryAppListPage(AppNoticeQuery query, Page<BusiNotice> page);
|
||||
}
|
||||
|
@ -1,22 +1,26 @@
|
||||
package com.ruoyi.busi.service.impl;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.ruoyi.base.domain.BaseCategory;
|
||||
import com.ruoyi.base.service.IBaseCategoryService;
|
||||
import com.ruoyi.busi.mapper.BusiNoticeSignMapper;
|
||||
import com.ruoyi.busi.query.AppNoticeQuery;
|
||||
import com.ruoyi.busi.vo.BusiNoticeVo;
|
||||
import com.ruoyi.common.core.domain.DlBaseEntity;
|
||||
import java.util.Optional;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.ruoyi.busi.utils.JaccardSimilarity;
|
||||
import com.ruoyi.busi.utils.NoticeUtils;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.busi.query.BusiNoticeQuery;
|
||||
import com.ruoyi.constant.DictConstants;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@ -33,11 +37,17 @@ import com.ruoyi.busi.service.IBusiNoticeService;
|
||||
@Service
|
||||
public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNotice> implements IBusiNoticeService
|
||||
{
|
||||
@Autowired
|
||||
private IBaseCategoryService baseCategoryService;
|
||||
@Autowired
|
||||
private BusiNoticeMapper busiNoticeMapper;
|
||||
@Autowired
|
||||
private BusiNoticeSignMapper busiNoticeSignMapper;
|
||||
@Autowired
|
||||
private NoticeUtils noticeUtils;
|
||||
|
||||
@Override
|
||||
public IPage<BusiNotice> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page) {
|
||||
public IPage<BusiNoticeVo> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page) {
|
||||
return busiNoticeMapper.queryListPage(query, page);
|
||||
}
|
||||
|
||||
@ -62,8 +72,8 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
|
||||
data.setApprovalStatus("1");
|
||||
//遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警
|
||||
for (BusiNotice busiNotice : list) {
|
||||
double v1 = JaccardSimilarity.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle());
|
||||
double v2 = JaccardSimilarity.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail());
|
||||
double v1 = NoticeUtils.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle());
|
||||
double v2 = NoticeUtils.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail());
|
||||
if (v1>=0.7&&v2>=0.7){
|
||||
//title 和 detail 相似度大于70% 待审核
|
||||
data.setApprovalStatus("0");
|
||||
@ -127,8 +137,8 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
|
||||
data.setApprovalStatus("1");
|
||||
//遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警
|
||||
for (BusiNotice busiNotice : list) {
|
||||
double v1 = JaccardSimilarity.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle());
|
||||
double v2 = JaccardSimilarity.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail());
|
||||
double v1 = NoticeUtils.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle());
|
||||
double v2 = NoticeUtils.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail());
|
||||
if (v1>=0.7&&v2>=0.7){
|
||||
//title 和 detail 相似度大于70% 待审核
|
||||
data.setApprovalStatus("0");
|
||||
@ -152,5 +162,49 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序端查询通告列表
|
||||
*
|
||||
* @param query TODO
|
||||
* @param page TODO
|
||||
* @return com.baomidou.mybatisplus.core.metadata.IPage<com.ruoyi.busi.domain.BusiNotice>
|
||||
* @author vinjor-M
|
||||
* @date 15:41 2025/3/25
|
||||
**/
|
||||
@Override
|
||||
public IPage<BusiNoticeVo> queryAppListPage(AppNoticeQuery query, Page<BusiNotice> page) {
|
||||
IPage<BusiNoticeVo> pageList = busiNoticeMapper.queryAppListPage(query,page);
|
||||
List<String> idList = pageList.getRecords().stream().map(BusiNotice::getId).collect(Collectors.toList());
|
||||
if(!idList.isEmpty()){
|
||||
//查报名数量
|
||||
List<Map<String,Object>> mapList = busiNoticeSignMapper.selectReportNumByIdList(idList);
|
||||
//转map
|
||||
Map<String,Object> objectMap = mapList.stream().collect(Collectors.toMap(each-> Objects.toString(each.get("id"),""),each->each.get("reportNum")));
|
||||
//查博主类型字典
|
||||
List<BaseCategory> categoryList = baseCategoryService.listByParentCode(DictConstants.BLOGGER_TYPES_KEY,null);
|
||||
//转map
|
||||
Map<String,String> categoryMap = categoryList.stream().collect(Collectors.toMap(BaseCategory::getCode,BaseCategory::getTitle));
|
||||
pageList.getRecords().forEach(item->{
|
||||
//报名数量、浏览量、相关字典转换
|
||||
if(null==item.getViewNum()){
|
||||
item.setViewNum(0);
|
||||
}
|
||||
if(!objectMap.containsKey(item.getId()) || null==objectMap.get(item.getId())){
|
||||
item.setReportNum(0);
|
||||
}else{
|
||||
item.setReportNum((Integer) objectMap.get(item.getId()));
|
||||
}
|
||||
item.setBloggerTypesText(noticeUtils.translateBloggerTypes(item.getBloggerTypes(),categoryMap));
|
||||
if(StringUtils.isNotEmpty(item.getImages())){
|
||||
item.setMainImage(item.getImages().split(StrUtil.COMMA)[0]);
|
||||
}
|
||||
});
|
||||
}
|
||||
//TODO 后续需要拼接开通会员的通告主发布的通告,增加曝光度,这部分逻辑需要商讨
|
||||
return pageList;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,14 +1,17 @@
|
||||
package com.ruoyi.busi.utils;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.Arrays;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
/**
|
||||
* 文本相似度对比
|
||||
* @author 朱春云
|
||||
* @version 1.0
|
||||
*/
|
||||
public class JaccardSimilarity {
|
||||
@Component
|
||||
public class NoticeUtils {
|
||||
|
||||
public static double computeJaccardSimilarity(String str1, String str2) {
|
||||
Set<String> set1 = Arrays.stream(str1.split("\\s+")) // 分词,这里按空格分割,可以根据需要调整正则表达式
|
||||
.collect(Collectors.toSet());
|
||||
@ -22,4 +25,18 @@ public class JaccardSimilarity {
|
||||
union.removeAll(intersection); // 从并集中移除交集部分(因为我们只计算交集的元素)
|
||||
return (double) intersection.size() / union.size(); // 返回相似度比例
|
||||
}
|
||||
/**
|
||||
* 翻译通告的博主类型字典
|
||||
* @author vinjor-M
|
||||
* @date 17:10 2025/3/25
|
||||
* @return java.lang.String
|
||||
**/
|
||||
public String translateBloggerTypes(String bloggerTypes, Map<String,String> categoryMap){
|
||||
List<String> rtnList = new ArrayList<>();
|
||||
List<String> bloggerTypeList = Arrays.asList(bloggerTypes.split(StrUtil.COMMA));
|
||||
bloggerTypeList.forEach(item->{
|
||||
rtnList.add(categoryMap.get(item));
|
||||
});
|
||||
return String.join(" ",rtnList);
|
||||
}
|
||||
}
|
@ -8,10 +8,21 @@ import lombok.Data;
|
||||
public class BusiNoticeVo extends BusiNotice {
|
||||
/**发布者名称**/
|
||||
private String userNickName;
|
||||
/**发布者头像*/
|
||||
private String avatar;
|
||||
/** 平台名称 */
|
||||
private String platformName;
|
||||
/** 是否超级报名*/
|
||||
private String isSuper;
|
||||
/**通告合作状态*/
|
||||
private String signStatus;
|
||||
/**产品主图*/
|
||||
private String mainImage;
|
||||
|
||||
/**浏览量*/
|
||||
private Integer viewNum;
|
||||
/**报名量*/
|
||||
private Integer reportNum;
|
||||
/**博主类型-text*/
|
||||
private String bloggerTypesText;
|
||||
}
|
||||
|
@ -5,12 +5,16 @@ import io.jsonwebtoken.Claims;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* 通用常量信息
|
||||
* 通用字典常量信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class DictConstants
|
||||
{
|
||||
/**
|
||||
* 博主类型字典key
|
||||
*/
|
||||
public static final String BLOGGER_TYPES_KEY ="dl_blogger_type";
|
||||
/**
|
||||
* 权益类型字典--是否支持
|
||||
*/
|
||||
@ -20,6 +24,21 @@ public class DictConstants
|
||||
*/
|
||||
public static final String RIGHTS_TYPE_NUMBER = "02";
|
||||
|
||||
/**
|
||||
* 用户类型字典--通告主
|
||||
*/
|
||||
public static final String USER_TYPE_TGZ = "01";
|
||||
/**
|
||||
* 用户类型字典--博主
|
||||
*/
|
||||
public static final String USER_TYPE_BZ = "02";
|
||||
|
||||
|
||||
/**
|
||||
* 是否字典--是
|
||||
*/
|
||||
public static final String YES_NO_YES = "1";
|
||||
/**
|
||||
* 是否字典--否
|
||||
*/
|
||||
public static final String YES_NO_NO = "0";
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.ruoyi.constant;
|
||||
|
||||
/**
|
||||
* 通用常量信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class StrConstants
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
@ -30,7 +30,7 @@ public class MemberRights extends DlBaseEntity
|
||||
|
||||
/** 用户id */
|
||||
@Excel(name = "用户id")
|
||||
private String userId;
|
||||
private Long userId;
|
||||
|
||||
/** 用户类型(数据字典:dl_user_type) */
|
||||
@Excel(name = "用户类型", readConverterExp = "数=据字典:dl_user_type")
|
||||
@ -54,10 +54,10 @@ public class MemberRights extends DlBaseEntity
|
||||
|
||||
/** 权益值(权益类型为是否时:0代表不支持,1代表支持;权益类型为数量限制时:0代表不限制,其他数字代表具体限制数量) */
|
||||
@Excel(name = "权益值(权益类型为是否时:0代表不支持,1代表支持;权益类型为数量限制时:0代表不限制,其他数字代表具体限制数量)")
|
||||
private Long rightsValue;
|
||||
private Integer rightsValue;
|
||||
|
||||
/** 剩余值 */
|
||||
@Excel(name = "剩余值")
|
||||
private Long remaining;
|
||||
private Integer remaining;
|
||||
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ import com.ruoyi.common.annotation.Excel;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.constant.DictConstants;
|
||||
import lombok.*;
|
||||
import com.ruoyi.common.core.domain.DlBaseEntity;
|
||||
|
||||
@ -71,4 +73,19 @@ public class MemberUser extends DlBaseEntity
|
||||
@Excel(name = "博主-剩余积分")
|
||||
private Long bPoints;
|
||||
|
||||
public MemberUser (String userType, SysUser user,Integer addNotice){
|
||||
this.userType = userType;
|
||||
this.userId = user.getUserId();
|
||||
this.tel = user.getPhonenumber();
|
||||
if(DictConstants.USER_TYPE_BZ.equals(userType)){
|
||||
//博主
|
||||
this.bPoints=0L;
|
||||
}else{
|
||||
//通告主
|
||||
this.tRemaining = addNotice;
|
||||
this.tTotalNum = 0L;
|
||||
this.tFansNum = 0;
|
||||
this.tOpenDisturb = DictConstants.YES_NO_NO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会员开卡记录Mapper接口
|
||||
@ -14,5 +15,13 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface MemberCardMapper extends BaseMapper<MemberCard>
|
||||
{
|
||||
|
||||
/**
|
||||
* 查询某会员当前生效的所有会员卡id
|
||||
* @author vinjor-M
|
||||
* @date 11:32 2025/3/26
|
||||
* @param userId TODO
|
||||
* @param userType TODO
|
||||
* @return java.util.List<java.lang.String>
|
||||
**/
|
||||
List<MemberCard> selectCardIdByUserId(@Param("userId")Long userId,@Param("userType")String userType,@Param("nowDate")String nowDate);
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import java.util.List;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会员权益(定时任务重置剩余值),用户id、会员卡id、权益对应1Mapper接口
|
||||
@ -15,4 +16,13 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
public interface MemberRightsMapper extends BaseMapper<MemberRights>
|
||||
{
|
||||
|
||||
/**
|
||||
* 查某用户某些会员卡的权益明细
|
||||
* @author vinjor-M
|
||||
* @date 13:52 2025/3/26
|
||||
* @param cardIdList 会员卡id集和
|
||||
* @param userId 用户id
|
||||
* @return java.util.List<com.ruoyi.member.domain.MemberRights>
|
||||
**/
|
||||
List<MemberRights> selectUserRightsByCardIds(@Param("list")List<String> cardIdList,@Param("userId")Long userId);
|
||||
}
|
||||
|
@ -3,8 +3,12 @@ package com.ruoyi.member.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.ruoyi.member.domain.MemberOrder;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import com.ruoyi.member.vo.MemberRightsVO;
|
||||
import com.ruoyi.member.vo.ViewRightsVO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 会员开卡记录Service接口
|
||||
@ -33,4 +37,13 @@ public interface IMemberCardService extends IService<MemberCard> {
|
||||
**/
|
||||
void dealMemberCard(MemberOrder order);
|
||||
|
||||
/**
|
||||
* 查当前会员权益列表
|
||||
* @author vinjor-M
|
||||
* @date 11:26 2025/3/26
|
||||
* @param userType 用户类型
|
||||
* @param userId 用户id
|
||||
**/
|
||||
Map<String,Map<String, ViewRightsVO>> selectMemberRights(Long userId, String userType);
|
||||
|
||||
}
|
||||
|
@ -13,5 +13,5 @@ import java.util.List;
|
||||
*/
|
||||
public interface IMemberPointsService extends IService<MemberPoints> {
|
||||
|
||||
void dealMemberPoints(Long userId, List<BaseP> );
|
||||
// void dealMemberPoints(Long userId);
|
||||
}
|
||||
|
@ -1,16 +1,27 @@
|
||||
package com.ruoyi.member.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.base.vo.CardRightsVO;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员权益(定时任务重置剩余值),用户id、会员卡id、权益对应1Service接口
|
||||
*
|
||||
*
|
||||
* @author pqz
|
||||
* @date 2025-03-17
|
||||
*/
|
||||
public interface IMemberRightsService extends IService<MemberRights>
|
||||
{
|
||||
public interface IMemberRightsService extends IService<MemberRights> {
|
||||
|
||||
/**
|
||||
* 处理会员权益
|
||||
*
|
||||
* @param userId 用户表id
|
||||
* @param rights 权益
|
||||
* @author PQZ
|
||||
* @date 15:45 2025/3/27
|
||||
**/
|
||||
void dealRights(Long userId, String userType,List<CardRightsVO> rights);
|
||||
}
|
||||
|
@ -47,4 +47,13 @@ public interface IMemberUserService extends IService<MemberUser> {
|
||||
**/
|
||||
MemberUserVO bloggerDetail(Long userId);
|
||||
|
||||
/**
|
||||
* 微信授权登陆
|
||||
* @author vinjor-M
|
||||
* @date 15:55 2025/3/26
|
||||
* @param openid TODO
|
||||
* @param decryptResult TODO
|
||||
* @return java.lang.String
|
||||
**/
|
||||
String wxLogin(String openid,String decryptResult);
|
||||
}
|
||||
|
@ -1,15 +1,25 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.base.domain.BaseCard;
|
||||
import com.ruoyi.base.service.IBaseCardService;
|
||||
import com.ruoyi.base.vo.BaseCardVO;
|
||||
import com.ruoyi.common.core.domain.DlBaseEntity;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.constant.DictConstants;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.ruoyi.member.domain.MemberOrder;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import com.ruoyi.member.mapper.MemberCardMapper;
|
||||
import com.ruoyi.member.mapper.MemberRightsMapper;
|
||||
import com.ruoyi.member.service.IMemberCardService;
|
||||
import com.ruoyi.member.service.IMemberRightsService;
|
||||
import com.ruoyi.member.vo.MemberRightsVO;
|
||||
import com.ruoyi.member.vo.ViewRightsVO;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -17,6 +27,8 @@ import javax.annotation.Resource;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 会员开卡记录Service业务层处理
|
||||
@ -30,6 +42,10 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
|
||||
private MemberCardMapper memberCardMapper;
|
||||
@Resource
|
||||
private IBaseCardService baseCardService;
|
||||
@Autowired
|
||||
private IMemberRightsService rightsService;
|
||||
@Autowired
|
||||
private MemberRightsMapper memberRightsMapper;
|
||||
|
||||
|
||||
/**
|
||||
@ -64,9 +80,24 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
|
||||
/*1、数据初始化*/
|
||||
//查询会员卡
|
||||
BaseCardVO card = baseCardService.queryByCardId(order.getGoodsId());
|
||||
//计算到期时间
|
||||
Date startTime = new Date();
|
||||
Date endTime = getEndTime(startTime,order.getGoodsCycle());
|
||||
//查询当前时间是否存在有效会员卡
|
||||
List<MemberCard> cardList = checkMemberCard(order.getGoodsId(), order.getUserId());
|
||||
|
||||
/*2、计算到期时间*/
|
||||
Date startTime;
|
||||
Date endTime;
|
||||
if (cardList.isEmpty()){
|
||||
//计算到期时间
|
||||
startTime = new Date();
|
||||
endTime = getEndTime(startTime, order.getGoodsCycle());
|
||||
//新增时需要处理会员权益
|
||||
rightsService.dealRights(order.getUserId(),order.getUserType(),card.getRights());
|
||||
} else {
|
||||
startTime = cardList.get(0).getEndDate();
|
||||
endTime = getEndTime(startTime,order.getGoodsCycle());
|
||||
}
|
||||
|
||||
/*3、保存会员开卡记录*/
|
||||
//初始化会员开通记录
|
||||
MemberCard memberCard = new MemberCard();
|
||||
memberCard.setUserId(order.getUserId());
|
||||
@ -76,10 +107,28 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
|
||||
memberCard.setCardName(card.getCardName());
|
||||
memberCard.setStartDate(startTime);
|
||||
memberCard.setEndDate(endTime);
|
||||
/*2、处理会员权益*/
|
||||
|
||||
/*3、保存记录*/
|
||||
save(memberCard);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询会员卡开卡记录
|
||||
*
|
||||
* @param cardId 卡id
|
||||
* @param userId 用户id
|
||||
* @return java.util.List<com.ruoyi.member.domain.MemberCard>
|
||||
* @author PQZ
|
||||
* @date 16:09 2025/3/27
|
||||
**/
|
||||
private List<MemberCard> checkMemberCard(String cardId, Long userId) {
|
||||
Date time = new Date();
|
||||
LambdaQueryWrapper<MemberCard> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper
|
||||
.eq(MemberCard::getCardId, cardId)
|
||||
.eq(MemberCard::getUserId, userId)
|
||||
.eq(DlBaseEntity::getDelFlag, 0)
|
||||
.ge(MemberCard::getStartDate, time)
|
||||
.lt(MemberCard::getEndDate, time);
|
||||
return list(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -109,4 +158,70 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
|
||||
}
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查当前会员权益列表
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @param userType 用户类型
|
||||
* @author vinjor-M
|
||||
* @date 11:26 2025/3/26
|
||||
**/
|
||||
@Override
|
||||
public Map<String, Map<String, ViewRightsVO>> selectMemberRights(Long userId, String userType) {
|
||||
Map<String, Map<String, ViewRightsVO>> rtnMap = new HashMap<>();
|
||||
//当前时间
|
||||
String nowDate = DateUtil.formatDate(new Date());
|
||||
if (null == userId) {
|
||||
userId = SecurityUtils.getUserId();
|
||||
}
|
||||
List<MemberCard> cardList = memberCardMapper.selectCardIdByUserId(userId, userType, nowDate);
|
||||
if (cardList.isEmpty()) {
|
||||
//未开通任何会员卡
|
||||
rtnMap.put("tgz", new HashMap<>());
|
||||
rtnMap.put("bz", new HashMap<>());
|
||||
} else {
|
||||
//开通会员卡了,根据会员卡id,查询出所有权益
|
||||
List<MemberRights> memberRightsList = memberRightsMapper.selectUserRightsByCardIds(cardList.stream().map(MemberCard::getCardId).collect(Collectors.toList()), userId);
|
||||
//通告主权益
|
||||
Map<String, ViewRightsVO> tgzRightsMap = new HashMap<>();
|
||||
//博主权益
|
||||
Map<String, ViewRightsVO> bzRightsMap = new HashMap<>();
|
||||
memberRightsList.forEach(item -> {
|
||||
if (DictConstants.USER_TYPE_TGZ.equals(item.getUserType())) {
|
||||
//通告主
|
||||
this.checkRights(tgzRightsMap, item);
|
||||
} else if (DictConstants.USER_TYPE_BZ.equals(item.getUserType())) {
|
||||
//博主
|
||||
this.checkRights(bzRightsMap, item);
|
||||
}
|
||||
});
|
||||
rtnMap.put("tgz", tgzRightsMap);
|
||||
rtnMap.put("bz", bzRightsMap);
|
||||
}
|
||||
return rtnMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param memberRightsMap 会员权益map
|
||||
* @param item 这个权益
|
||||
* @author vinjor-M
|
||||
* @date 14:19 2025/3/26
|
||||
**/
|
||||
private void checkRights(Map<String, ViewRightsVO> memberRightsMap, MemberRights item) {
|
||||
ViewRightsVO newRights = new ViewRightsVO();
|
||||
BeanUtils.copyProperties(item, newRights);
|
||||
if (memberRightsMap.containsKey(item.getRightsCode())) {
|
||||
//有这个权益了
|
||||
ViewRightsVO oldRights = memberRightsMap.get(item.getRightsCode());
|
||||
if (DictConstants.RIGHTS_TYPE_NUMBER.equals(item.getRightsType()) &&
|
||||
oldRights.getRemaining() < item.getRemaining()) {
|
||||
//权益类型是数量限制的,且新的权益剩余值比原来的大,取新的
|
||||
memberRightsMap.put(item.getRightsCode(), newRights);
|
||||
}
|
||||
} else {
|
||||
//没有这个权益,直接加
|
||||
memberRightsMap.put(item.getRightsCode(), newRights);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.member.domain.MemberOrder;
|
||||
import com.ruoyi.member.mapper.MemberOrderMapper;
|
||||
import com.ruoyi.member.service.IMemberCardService;
|
||||
import com.ruoyi.member.service.IMemberCouponService;
|
||||
import com.ruoyi.member.service.IMemberOrderService;
|
||||
import com.ruoyi.member.vo.MemberOrderVO;
|
||||
import lombok.SneakyThrows;
|
||||
@ -31,6 +32,8 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper,Member
|
||||
private MemberOrderMapper memberOrderMapper;
|
||||
@Resource
|
||||
private IMemberCardService cardService;
|
||||
@Resource
|
||||
private IMemberCouponService couponService;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -1,25 +1,52 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.base.vo.CardRightsVO;
|
||||
import com.ruoyi.member.domain.MemberCard;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import com.ruoyi.member.mapper.MemberRightsMapper;
|
||||
import com.ruoyi.member.service.IMemberRightsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.member.mapper.MemberRightsMapper;
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import com.ruoyi.member.service.IMemberRightsService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员权益(定时任务重置剩余值),用户id、会员卡id、权益对应1Service业务层处理
|
||||
*
|
||||
*
|
||||
* @author pqz
|
||||
* @date 2025-03-17
|
||||
*/
|
||||
@Service
|
||||
public class MemberRightsServiceImpl extends ServiceImpl<MemberRightsMapper,MemberRights> implements IMemberRightsService
|
||||
{
|
||||
public class MemberRightsServiceImpl extends ServiceImpl<MemberRightsMapper, MemberRights> implements IMemberRightsService {
|
||||
@Autowired
|
||||
private MemberRightsMapper memberRightsMapper;
|
||||
|
||||
|
||||
/**
|
||||
* 处理会员权益
|
||||
*
|
||||
* @param userId 用户表id
|
||||
* @param rights 权益
|
||||
* @author PQZ
|
||||
* @date 15:45 2025/3/27
|
||||
**/
|
||||
@Override
|
||||
public void dealRights(Long userId, String userType, List<CardRightsVO> rights) {
|
||||
List<MemberRights> saveList = new ArrayList<>();
|
||||
rights.forEach(item -> {
|
||||
MemberRights memberRights = new MemberRights();
|
||||
memberRights.setUserId(userId);
|
||||
memberRights.setUserType(userType);
|
||||
memberRights.setCardId(item.getCardId());
|
||||
memberRights.setRightsCode(item.getCode());
|
||||
memberRights.setRightsType(item.getRightsType());
|
||||
memberRights.setRightsCycle(item.getRightsCycle());
|
||||
memberRights.setRightsValue(item.getRightsValue());
|
||||
memberRights.setRemaining(item.getRightsValue());
|
||||
saveList.add(memberRights);
|
||||
});
|
||||
saveBatch(saveList);
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,29 @@
|
||||
package com.ruoyi.member.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.busi.service.IBusiEvaluateService;
|
||||
import com.ruoyi.busi.service.IBusiNoticeService;
|
||||
import com.ruoyi.common.config.DlRightsConfig;
|
||||
import com.ruoyi.common.config.WxAppConfig;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.ruoyi.constant.DictConstants;
|
||||
import com.ruoyi.framework.web.service.TokenService;
|
||||
import com.ruoyi.member.domain.MemberUser;
|
||||
import com.ruoyi.member.mapper.MemberUserMapper;
|
||||
import com.ruoyi.member.service.IMemberBusiCardService;
|
||||
import com.ruoyi.member.service.IMemberCardService;
|
||||
import com.ruoyi.member.service.IMemberUserService;
|
||||
import com.ruoyi.member.vo.MemberUserVO;
|
||||
import com.ruoyi.system.mapper.SysUserMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@ -34,6 +45,12 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
|
||||
private IBusiNoticeService noticeService;
|
||||
@Resource
|
||||
private IMemberBusiCardService busiCardService;
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
@Autowired
|
||||
private SysUserMapper userMapper;
|
||||
@Autowired
|
||||
private DlRightsConfig dlRightsConfig;
|
||||
|
||||
|
||||
/**
|
||||
@ -89,4 +106,66 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
|
||||
result.setNoticeVos(noticeService.queryListByUserId(userId));
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信授权登陆
|
||||
*
|
||||
* @param openid TODO
|
||||
* @param decryptResult TODO
|
||||
* @return java.lang.String
|
||||
* @author vinjor-M
|
||||
* @date 15:53 2025/3/26
|
||||
**/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String wxLogin(String openid, String decryptResult) {
|
||||
//字符串转json
|
||||
JSONObject jsonObject = JSONObject.parseObject(decryptResult);
|
||||
//手机号
|
||||
String phone = jsonObject.getString("phoneNumber");
|
||||
//根据openid判断数据库中是否有该用户
|
||||
//根据openid查询用户信息
|
||||
SysUser wxUser = userMapper.selectWxUserByOpenIdOrPhone(openid,null);
|
||||
if(null==wxUser){
|
||||
//根据openId没查到,再根据手机号查
|
||||
wxUser = userMapper.selectWxUserByOpenIdOrPhone(null,phone);
|
||||
}
|
||||
//如果查不到,则新增,查到了,则更新
|
||||
SysUser user = new SysUser();
|
||||
if (wxUser == null) {
|
||||
// 新增
|
||||
// 设置姓名 ,默认使用昵称+随机数,防止重复姓名的发生 数据库中把username的长度修改的长一点
|
||||
user.setUserName(phone);
|
||||
user.setNickName("微信用户");
|
||||
user.setOpenId(openid);
|
||||
user.setPhonenumber(phone);
|
||||
user.setSex("2");
|
||||
user.setCreateTime(DateUtils.getNowDate());
|
||||
//新增 用户
|
||||
userMapper.insertUser(user);
|
||||
//插入用户扩展信息表数据
|
||||
this.save(new MemberUser(DictConstants.USER_TYPE_TGZ,user,dlRightsConfig.getAddNotice()));
|
||||
this.save(new MemberUser(DictConstants.USER_TYPE_BZ,user,null));
|
||||
}else {
|
||||
//,查到了
|
||||
if(!"0".equals(wxUser.getStatus())){
|
||||
//非正常状态,无法登录
|
||||
throw new ServiceException("账号状态异常");
|
||||
}
|
||||
// 更新
|
||||
user = wxUser;
|
||||
if(!openid.equals(user.getOpenId())){
|
||||
user.setOpenId(openid);
|
||||
user.setUpdateTime(DateUtils.getNowDate());
|
||||
userMapper.updateUser(user);
|
||||
}
|
||||
}
|
||||
//组装token信息
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setOpenId(openid);
|
||||
loginUser.setUser(user);
|
||||
loginUser.setUserId(user.getUserId());
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,16 @@
|
||||
package com.ruoyi.member.vo;
|
||||
|
||||
import com.ruoyi.member.domain.MemberRights;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 会员拥有的权益明细
|
||||
* @author vinjor-M
|
||||
* @date 11:25 2025/3/26
|
||||
**/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class MemberRightsVO extends MemberRights {
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.ruoyi.member.vo;
|
||||
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 会员权限浏览使用
|
||||
* @author vinjor-M
|
||||
* @date 15:09 2025/3/26
|
||||
**/
|
||||
@Data
|
||||
public class ViewRightsVO {
|
||||
/** 权益编码 */
|
||||
private String rightsCode;
|
||||
/** 剩余值 (权益类型为是否时:0代表不支持,1代表支持;权益类型为数量限制时:0代表不限制,其他数字代表具体限制数量) */
|
||||
private Long remaining;
|
||||
}
|
@ -13,6 +13,8 @@ import com.alibaba.fastjson2.JSONObject;
|
||||
import com.ruoyi.common.config.WxAppConfig;
|
||||
import com.ruoyi.common.core.domain.model.WxLoginBody;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.member.service.IMemberCardService;
|
||||
import com.ruoyi.member.service.IMemberUserService;
|
||||
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -60,6 +62,10 @@ public class SysLoginController
|
||||
|
||||
@Autowired
|
||||
private SysPermissionService permissionService;
|
||||
@Autowired
|
||||
private IMemberUserService memberUserService;
|
||||
@Autowired
|
||||
private IMemberCardService memberCardService;
|
||||
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
@ -94,7 +100,7 @@ public class SysLoginController
|
||||
|
||||
if (StringUtils.hasText(decryptResult)){
|
||||
//如果解析成功,获取token
|
||||
String token = loginService.wxLogin(openid,decryptResult);
|
||||
String token = memberUserService.wxLogin(openid,decryptResult);
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
ajax.put(Constants.TOKEN, token);
|
||||
return ajax;
|
||||
@ -143,6 +149,7 @@ public class SysLoginController
|
||||
ajax.put("user", user);
|
||||
ajax.put("roles", roles);
|
||||
ajax.put("permissions", permissions);
|
||||
ajax.put("rights", memberCardService.selectMemberRights(loginUser.getUserId(),null));
|
||||
return ajax;
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,11 @@ xss:
|
||||
excludes: /system/notice
|
||||
# 匹配链接
|
||||
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||
# 微信小程序配置
|
||||
# 微信小程序配置----dl
|
||||
wx-app:
|
||||
appId: wxd8ef44a8268672e4
|
||||
appSecret: 30c18855ceb0ab0f9801407c998199c2
|
||||
appSecret: 30c18855ceb0ab0f9801407c998199c2
|
||||
# 普通用户权益值
|
||||
dl-rights:
|
||||
# 每月发布通告额度
|
||||
addNotice: 3
|
@ -48,5 +48,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND dbr.id IS NOT NULL
|
||||
ORDER BY dbr.sort,dbr.create_time
|
||||
</select>
|
||||
<select id="queryByCardId" resultType="com.ruoyi.base.vo.CardRightsVO">
|
||||
SELECT
|
||||
dbr.*,
|
||||
dbcr.card_id,
|
||||
dbcr.rights_value
|
||||
FROM
|
||||
dl_base_rights dbr
|
||||
LEFT JOIN dl_base_card_rights dbcr ON dbr.id = dbcr.rights_id
|
||||
AND dbcr.del_flag = 0
|
||||
WHERE
|
||||
dbr.del_flag = 0
|
||||
AND dbcr.card_id = #{cardId}
|
||||
ORDER BY dbr.sort,dbr.create_time
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -56,5 +56,66 @@
|
||||
WHERE
|
||||
dbns.user_id = #{userId}
|
||||
</select>
|
||||
<select id="queryAppListPage" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
|
||||
SELECT
|
||||
dbn.*,
|
||||
dbnv.view_num AS viewNum,
|
||||
su.avatar,
|
||||
su.nick_name AS userNickName
|
||||
FROM
|
||||
dl_busi_notice dbn
|
||||
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
|
||||
LEFT JOIN sys_user su ON dbn.user_id = su.user_id
|
||||
WHERE
|
||||
dbn.del_flag = 0
|
||||
AND (dbn.approval_status = '1')
|
||||
<if test="entity.gift!=null and entity.gift!=''">
|
||||
AND ( dbn.gift_detail IS NOT NULL AND dbn.gift_detail != '' )
|
||||
</if>
|
||||
<if test="entity.platformCode!=null and entity.platformCode!=''">
|
||||
AND ( dbn.platform_code =#{entity.platformCode} )
|
||||
</if>
|
||||
<if test="entity.bloggerType!=null and entity.bloggerType!=''">
|
||||
AND ( dbn.blogger_types LIKE CONCAT('%',#{entity.bloggerType},'%') )
|
||||
</if>
|
||||
<if test="entity.searchValue!=null and entity.searchValue!=''">
|
||||
AND ( dbn.title LIKE CONCAT('%',#{entity.searchValue},'%') OR
|
||||
dbn.detail LIKE CONCAT('%',#{entity.searchValue},'%') )
|
||||
</if>
|
||||
<if test="entity.rewardType=='money'">
|
||||
AND ( dbn.fee_down IS NOT NULL OR dbn.fee_up IS NOT NULL )
|
||||
</if>
|
||||
<if test="entity.rewardType=='gift'">
|
||||
AND ( dbn.gift_detail IS NOT NULL AND dbn.gift_detail!='' )
|
||||
</if>
|
||||
<if test="entity.fansUp!=null">
|
||||
AND ( dbn.fans_up <=#{entity.fansUp} )
|
||||
</if>
|
||||
<if test="entity.fansDown!=null">
|
||||
AND ( dbn.fans_up >=#{entity.fansDown} )
|
||||
</if>
|
||||
<if test="entity.feeUp!=null">
|
||||
AND ( dbn.fee_up <=#{entity.feeUp} )
|
||||
</if>
|
||||
<if test="entity.feeDown!=null">
|
||||
AND ( dbn.fee_down >=#{entity.feeDown} )
|
||||
</if>
|
||||
ORDER BY
|
||||
<choose>
|
||||
<when test="entity.sortBy=='new'">
|
||||
-- 查最新的 --
|
||||
dbn.create_time DESC
|
||||
</when>
|
||||
<when test="entity.sortBy=='money'">
|
||||
-- 查高奖励 --
|
||||
dbn.fee_up DESC
|
||||
</when>
|
||||
<otherwise>
|
||||
-- 默认正序排列 --
|
||||
dbn.create_time ASC
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
@ -39,4 +39,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="entity.status != null and entity.status != ''"> and status = #{entity.status}</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="selectReportNumByIdList" resultType="java.util.Map">
|
||||
SELECT
|
||||
dbns.id,
|
||||
COUNT( dbns.id ) AS reportNum
|
||||
FROM
|
||||
dl_busi_notice_sign dbns
|
||||
WHERE
|
||||
dbns.del_flag = 0
|
||||
AND dbns.notice_id IN
|
||||
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
GROUP BY
|
||||
dbns.id
|
||||
</select>
|
||||
</mapper>
|
@ -22,6 +22,26 @@
|
||||
<sql id="selectMemberCardVo">
|
||||
select id, user_id, user_type, card_id, start_date, end_date, order_id, creator, create_time, updater, update_time, del_flag from dl_member_card
|
||||
</sql>
|
||||
<select id="selectCardIdByUserId" resultType="com.ruoyi.member.domain.MemberCard">
|
||||
SELECT
|
||||
dmc.id,
|
||||
dmc.user_id,
|
||||
dmc.user_type,
|
||||
dmc.card_id
|
||||
FROM
|
||||
dl_member_card dmc
|
||||
WHERE
|
||||
dmc.del_flag = 0
|
||||
<if test="userId!=null">
|
||||
AND dmc.user_id = #{userId}
|
||||
</if>
|
||||
<if test="userType!=null and userType!=''">
|
||||
AND dmc.user_type = #{userType}
|
||||
</if>
|
||||
<if test="nowDate!=null and nowDate!=''">
|
||||
AND dmc.start_date <= #{nowDate} AND dmc.end_date >= #{nowDate}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
@ -21,6 +21,18 @@
|
||||
<sql id="selectMemberRightsVo">
|
||||
select id, user_id, user_type, card_id, rights_code, rights_type, rights_cycle, rights_value, remaining, create_time, update_time from dl_member_rights
|
||||
</sql>
|
||||
<select id="selectUserRightsByCardIds" resultType="com.ruoyi.member.domain.MemberRights">
|
||||
SELECT
|
||||
dmr.*
|
||||
FROM
|
||||
dl_member_rights dmr
|
||||
WHERE
|
||||
dmr.user_id = #{userId}
|
||||
AND dmr.card_id IN
|
||||
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
@ -0,0 +1,14 @@
|
||||
package com.ruoyi.common.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "dl-rights")
|
||||
@Data
|
||||
public class DlRightsConfig {
|
||||
/** 每月发布通告额度 */
|
||||
private Integer addNotice;
|
||||
|
||||
}
|
@ -34,14 +34,18 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
|
||||
baseDO.setUpdateTime(current);
|
||||
}
|
||||
// 获取当前的用户
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
// 当前登录用户不为空,创建人为空,则当前登录用户为创建人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {
|
||||
baseDO.setCreator(userId.toString());
|
||||
}
|
||||
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) {
|
||||
baseDO.setUpdater(userId.toString());
|
||||
try {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
// 当前登录用户不为空,创建人为空,则当前登录用户为创建人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {
|
||||
baseDO.setCreator(userId.toString());
|
||||
}
|
||||
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) {
|
||||
baseDO.setUpdater(userId.toString());
|
||||
}
|
||||
}catch (Exception e){
|
||||
//拦截异常,不抛出
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -62,9 +66,13 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
|
||||
// }
|
||||
//更新数据时,强制更新数据的更新时间和更新人
|
||||
setFieldValByName("updateTime", new Date(), metaObject);
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
if (Objects.nonNull(userId)) {
|
||||
setFieldValByName("updater", userId.toString(), metaObject);
|
||||
try {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
if (Objects.nonNull(userId)) {
|
||||
setFieldValByName("updater", userId.toString(), metaObject);
|
||||
}
|
||||
}catch (Exception e){
|
||||
//拦截异常,不抛出
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,62 +106,6 @@ public class SysLoginService
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信登录
|
||||
*
|
||||
* @param decryptResult 登录凭证 只能用一次
|
||||
* @return
|
||||
*/
|
||||
public String wxLogin(String openid,String decryptResult){
|
||||
//字符串转json
|
||||
JSONObject jsonObject = JSONObject.parseObject(decryptResult);
|
||||
//手机号
|
||||
String phone = jsonObject.getString("phoneNumber");
|
||||
//根据openid判断数据库中是否有该用户
|
||||
//根据openid查询用户信息
|
||||
SysUser wxUser = userMapper.selectWxUserByOpenIdOrPhone(openid,null);
|
||||
if(null==wxUser){
|
||||
//根据openId没查到,再根据手机号查
|
||||
wxUser = userMapper.selectWxUserByOpenIdOrPhone(null,phone);
|
||||
}
|
||||
//如果查不到,则新增,查到了,则更新
|
||||
SysUser user = new SysUser();
|
||||
if (wxUser == null) {
|
||||
// 新增
|
||||
// 设置姓名 ,默认使用昵称+随机数,防止重复姓名的发生 数据库中把username的长度修改的长一点
|
||||
user.setUserName(phone);
|
||||
user.setNickName("微信用户");
|
||||
user.setOpenId(openid);
|
||||
user.setPhonenumber(phone);
|
||||
user.setSex("2");
|
||||
user.setCreateTime(DateUtils.getNowDate());
|
||||
//新增 用户
|
||||
userMapper.insertUser(user);
|
||||
}else {
|
||||
//,查到了
|
||||
if(!"0".equals(wxUser.getStatus())){
|
||||
//非正常状态,无法登录
|
||||
throw new ServiceException("账号状态异常");
|
||||
}
|
||||
// 更新
|
||||
user = wxUser;
|
||||
if(!openid.equals(user.getOpenId())){
|
||||
user.setOpenId(openid);
|
||||
user.setUpdateTime(DateUtils.getNowDate());
|
||||
userMapper.updateUser(user);
|
||||
}
|
||||
}
|
||||
|
||||
//组装token信息
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setOpenId(openid);
|
||||
loginUser.setUser(user);
|
||||
loginUser.setUserId(user.getUserId());
|
||||
|
||||
// 生成token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验验证码
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user