修改回调整合分发模式

This commit is contained in:
曹佳豪 2025-07-23 15:45:42 +08:00
parent 83ed8e4150
commit 9d0e0eb33e
26 changed files with 323 additions and 169 deletions

View File

@ -303,3 +303,12 @@ tencent:
secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥 secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥
administrator: "administrator" # 管理员账号 administrator: "administrator" # 管理员账号
expire-time: 604800 # UserSig 过期时间7天单位 expire-time: 604800 # UserSig 过期时间7天单位
# mongodb
data:
mongodb:
uri: 82.156.121.2:37017
database: wzj-shop
username: admin
password: A1969bf8
authentication-database: admin
# replica-set-name: mongoreplset

View File

@ -105,6 +105,12 @@
<groupId>org.dromara</groupId> <groupId>org.dromara</groupId>
<artifactId>ruoyi-system</artifactId> <artifactId>ruoyi-system</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,16 @@
package org.dromara.system.domain;
/**
* 消息模板类型编号常量
*/
public class MessageTemplateType {
public static final String FOLLOW = "1"; // 关注
public static final String UNFOLLOW = "2"; // 取消关注
public static final String LIKE = "3"; // 点赞
public static final String MERCHANT_APPROVED = "5";// 商家通过审核通知
public static final String VIDEO_APPROVED = "6"; // 视频审核通过
public static final String VIDEO_REJECTED = "7"; // 视频审核不通过
public static final String ORDER_NOTICE = "8"; // 订单通知
public static final String VERIFY_SUCCESS = "9"; // 核销成功
public static final String VERIFY_FAIL = "10"; // 核销失败
}

View File

@ -54,4 +54,12 @@ public class SysMessage extends BaseAudit {
/** 扩展参数 */ /** 扩展参数 */
@TableField(exist = false) @TableField(exist = false)
private Map<String, Object> params = new HashMap<>(); private Map<String, Object> params = new HashMap<>();
/** 模板类型编号如1=关注2=取消关注等) */
@TableField(exist = false)
private String templateType;
/** 模板参数 */
@TableField(exist = false)
private Map<String, Object> templateParams;
} }

View File

@ -19,6 +19,7 @@ import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.annotation.TableField;
/** /**
* 消息业务对象 * 消息业务对象
@ -95,6 +96,27 @@ public class SysMessageBo extends BaseAudit {
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC") @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private LocalDateTime sendTime; private LocalDateTime sendTime;
/** 模板类型编号如1=关注2=取消关注等) */
@TableField(exist = false)
private String templateType;
/** 模板参数 */
@TableField(exist = false)
private java.util.Map<String, Object> templateParams;
public String getTemplateType() {
return templateType;
}
public void setTemplateType(String templateType) {
this.templateType = templateType;
}
public java.util.Map<String, Object> getTemplateParams() {
return templateParams;
}
public void setTemplateParams(java.util.Map<String, Object> templateParams) {
this.templateParams = templateParams;
}
/** /**
* 转换为查询条件 * 转换为查询条件
*/ */

View File

@ -11,4 +11,8 @@ import org.dromara.system.domain.vo.SysMessageTemplateVo;
*/ */
public interface SysMessageTemplateMapper extends BaseMapperPlus<SysMessageTemplate, SysMessageTemplateVo> { public interface SysMessageTemplateMapper extends BaseMapperPlus<SysMessageTemplate, SysMessageTemplateVo> {
/**
* 根据模板类型编号查找模板
*/
SysMessageTemplate selectByTemplateType(String templateType);
} }

View File

@ -3,18 +3,21 @@ package org.dromara.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.StringSubstitutor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysMessage; import org.dromara.system.domain.SysMessage;
import org.dromara.system.domain.SysMessageTemplate;
import org.dromara.system.domain.SysMessageUser; import org.dromara.system.domain.SysMessageUser;
import org.dromara.system.domain.bo.SysMessageBo; import org.dromara.system.domain.bo.SysMessageBo;
import org.dromara.system.domain.event.MessageEvent; import org.dromara.system.domain.event.MessageEvent;
import org.dromara.system.domain.vo.SysMessageVo; import org.dromara.system.domain.vo.SysMessageVo;
//import org.dromara.system.job.SnailJobApiUtil;
import org.dromara.system.mapper.SysMessageMapper; import org.dromara.system.mapper.SysMessageMapper;
import org.dromara.system.mapper.SysMessageUserMapper; import org.dromara.system.mapper.SysMessageUserMapper;
import org.dromara.system.service.ISysMessageService; import org.dromara.system.service.ISysMessageService;
@ -22,12 +25,7 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -43,6 +41,8 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
private final SysMessageMapper messageMapper; private final SysMessageMapper messageMapper;
private final SysMessageUserMapper messageUserMapper; private final SysMessageUserMapper messageUserMapper;
private final ApplicationEventPublisher eventPublisher; private final ApplicationEventPublisher eventPublisher;
private final SysMessageTemplateServiceImpl messageTemplateService;
@Override @Override
public TableDataInfo<SysMessageVo> selectPageMessageList(SysMessageBo bo, PageQuery pageQuery) { public TableDataInfo<SysMessageVo> selectPageMessageList(SysMessageBo bo, PageQuery pageQuery) {
@ -87,6 +87,16 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int sendMessageToUser(SysMessageBo message, Long userId) { public int sendMessageToUser(SysMessageBo message, Long userId) {
// 新增通过模板类型编号查找并渲染模板轻量变量替换
if (StringUtils.isNotBlank(message.getTemplateType())) {
SysMessageTemplate template = messageTemplateService.selectByTemplateType(message.getTemplateType());
if (template == null) {
throw new RuntimeException("消息模板不存在templateType=" + message.getTemplateType());
}
Map<String, Object> params = message.getTemplateParams();
String content = StringSubstitutor.replace(template.getTemplateContent(), params == null ? new java.util.HashMap<>() : params);
message.setContent(content);
}
//加一个约定 //加一个约定

View File

@ -90,4 +90,13 @@ public class SysMessageTemplateServiceImpl extends ServiceImpl<SysMessageTemplat
queryWrapper.orderByDesc(SysMessageTemplate::getCreateTime); queryWrapper.orderByDesc(SysMessageTemplate::getCreateTime);
return MapstructUtils.convert(templateMapper.selectList(queryWrapper), SysMessageTemplateVo.class); return MapstructUtils.convert(templateMapper.selectList(queryWrapper), SysMessageTemplateVo.class);
} }
/**
* 根据模板类型编号查找模板
*/
public SysMessageTemplate selectByTemplateType(String templateType) {
LambdaQueryWrapper<SysMessageTemplate> lqw = new LambdaQueryWrapper<>();
lqw.eq(SysMessageTemplate::getTemplateType, templateType).eq(SysMessageTemplate::getStatus, 0);
return templateMapper.selectOne(lqw);
}
} }

View File

@ -301,24 +301,14 @@ public class FansController {
* @return * @return
*/ */
@PostMapping("block") @PostMapping("block")
public R block(@RequestParam Long myId, public R block(@RequestParam Long myId, @RequestParam Long vloggerId) {
@RequestParam Long vloggerId) {
// 先执行cancel
// 判断两个id不能为空 // 判断两个id不能为空
if (myId == null || vloggerId==null) { if (myId == null || vloggerId == null) {
return R.ok("id不能为空"); return R.ok("id不能为空");
} }
// 是否已经存在关系
boolean flow = service.queryDoIFollowVloger(myId, vloggerId);
if (flow) {
// 删除业务的执行
service.doCancel(myId, vloggerId);
// 博主的粉丝-1我的关注-1 // 拉黑前只删除我关注对方的关系
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId); service.removeFansRelationship(myId, vloggerId);
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
}
// 拉黑
//检查是否已在黑名单中 //检查是否已在黑名单中
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId); boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);

View File

@ -34,9 +34,12 @@ public class MemberAccountController {
@Tag(name ="查询会员账户表列表") @Tag(name ="查询会员账户表列表")
@PostMapping("/list") @PostMapping("/list")
public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO query, @RequestBody Page page) { public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO bo,
Page<MemberAccount> list = service.page(page,query.toWrapper() ); @RequestParam(defaultValue = "1") int pageNum,
return R.ok(convert.toVO(list)); @RequestParam(defaultValue = "10") int pageSize) {
Page<MemberAccount> page = new Page<>(pageNum, pageSize);
IPage<MemberAccountVO> result = service.pageWithMember(page, bo);
return R.ok(result);
} }
@Tag(name ="导出会员账户表列表") @Tag(name ="导出会员账户表列表")

View File

@ -1,13 +1,13 @@
package com.wzj.soopin.member.controller; package com.wzj.soopin.member.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.annotation.MemberFillMethod; import com.wzj.soopin.member.annotation.MemberFillMethod;
import com.wzj.soopin.member.convert.MemberAddressConvert; import com.wzj.soopin.member.convert.MemberAddressConvert;
import com.wzj.soopin.member.domain.bo.MemberAddressBO; import com.wzj.soopin.member.domain.bo.MemberAddressBO;
import com.wzj.soopin.member.domain.po.MemberAddress; import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.member.domain.vo.MemberAddressVO; import com.wzj.soopin.member.domain.vo.MemberAddressVO;
import org.dromara.system.mapper.AddressMapper;
import com.wzj.soopin.member.service.IMemberAddressService; import com.wzj.soopin.member.service.IMemberAddressService;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -15,10 +15,10 @@ import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.springframework.http.ResponseEntity; import org.dromara.common.redis.redis.RedisService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.*;
/** /**
* 会员收货地址Controller * 会员收货地址Controller
@ -36,6 +36,8 @@ public class MemberAddressController {
private final MemberAddressConvert convert; private final MemberAddressConvert convert;
@Tag(name ="查询会员收货地址列表") @Tag(name ="查询会员收货地址列表")
@PostMapping("/list") @PostMapping("/list")
@MemberFillMethod @MemberFillMethod

View File

@ -41,18 +41,34 @@ public class MemberAccountBO extends BaseBO {
@Schema(description ="营收") @Schema(description ="营收")
private BigDecimal revenue; private BigDecimal revenue;
private String nickname;
private String phone; private String phone;
private String name;
@Schema(description ="余额") @Schema(description ="余额")
private BigDecimal moneyBalance; private BigDecimal moneyBalance;
public LambdaQueryWrapper<MemberAccount> toWrapper() { public LambdaQueryWrapper<MemberAccount> toWrapper() {
return new LambdaQueryWrapper<MemberAccount>() LambdaQueryWrapper<MemberAccount> wrapper = new LambdaQueryWrapper<>();
.eq(MemberAccount::getId, id) if (id != null) {
.eq(MemberAccount::getType, type) wrapper.eq(MemberAccount::getId, id);
.eq(MemberAccount::getMemberId, id); }
if (type != null) {
wrapper.eq(MemberAccount::getType, type);
}
if (memberId != null) {
wrapper.eq(MemberAccount::getMemberId, memberId);
}
if (integral != null) {
wrapper.eq(MemberAccount::getIntegral, integral);
}
if (wallet != null) {
wrapper.eq(MemberAccount::getWallet, wallet);
}
if (revenue != null) {
wrapper.eq(MemberAccount::getRevenue, revenue);
}
return wrapper;
} }
} }

View File

@ -32,8 +32,6 @@ public class MemberAccountVO {
private Long id; private Long id;
@Schema(description ="name") @Schema(description ="name")
private String name; private String nickname; // 会员姓名
private String phone; // 会员手机号
@Schema(description ="phone")
private String phone;
} }

View File

@ -1,7 +1,11 @@
package com.wzj.soopin.member.mapper; package com.wzj.soopin.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.MemberAccount; import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -13,5 +17,6 @@ import java.util.List;
* @author zcc * @author zcc
*/ */
public interface MemberAccountMapper extends BaseMapper<MemberAccount> { public interface MemberAccountMapper extends BaseMapper<MemberAccount> {
IPage<MemberAccountVO> selectAccountWithMember(Page<?> page, @Param("bo") MemberAccountBO bo);
} }

View File

@ -34,4 +34,7 @@ public interface IFansService extends IService<Fans> {
Long countFansByVloggerId(Long vloggerId); Long countFansByVloggerId(Long vloggerId);
// 拉黑前只删除我关注对方的关系
void removeFansRelationship(Long myId, Long vloggerId);
} }

View File

@ -1,10 +1,15 @@
package com.wzj.soopin.member.service; package com.wzj.soopin.member.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.bo.MemberAccountBO;
import com.wzj.soopin.member.domain.po.MemberAccount; import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.vo.MemberAccountVO; import com.wzj.soopin.member.domain.vo.MemberAccountVO;
public interface IMemberAccountService extends IService<MemberAccount> { public interface IMemberAccountService extends IService<MemberAccount> {
MemberAccount getMemberAccount(Long memberId); MemberAccount getMemberAccount(Long memberId);
IPage<MemberAccountVO> pageWithMember(Page<?> page, MemberAccountBO bo);
} }

View File

@ -45,6 +45,11 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void doFollow(Long myId, Long vloggerId) { public void doFollow(Long myId, Long vloggerId) {
// 幂等性校验已存在则不再插入
Fans existing = queryFansRelationship(myId, vloggerId);
if (existing != null) {
return;
}
Fans fans = new Fans(); Fans fans = new Fans();
fans.setFanId(myId); fans.setFanId(myId);
@ -66,18 +71,18 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
Member follower = memberService.getById(myId); Member follower = memberService.getById(myId);
Member vlogger = memberService.getById(vloggerId); Member vlogger = memberService.getById(vloggerId);
if (follower != null && vlogger != null && !myId.equals(vloggerId)) { if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
Long templateId = 1938489429145284609L; // 新版使用模板类型编号和参数
SysMessageTemplateVo template = templateService.selectTemplateById(templateId); Map<String, Object> params = new HashMap<>();
if (template != null) { params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
String content = template.getTemplateContent() params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname()) SysMessageBo messageBo = new SysMessageBo();
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname()); // 关注类型编号
SysMessageBo messageBo = new SysMessageBo(); messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.FOLLOW);
messageBo.setTitle(template.getTitle()); messageBo.setTemplateParams(params);
messageBo.setContent(content); messageBo.setSenderId(myId);
messageBo.setSenderId(myId); // 补充设置消息标题防止title为null
sysMessageService.sendMessageToUser(messageBo, vloggerId); messageBo.setTitle("关注通知");
} sysMessageService.sendMessageToUser(messageBo, vloggerId);
} }
} }
@ -116,18 +121,17 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
Member follower = memberService.getById(myId); Member follower = memberService.getById(myId);
Member vlogger = memberService.getById(vloggerId); Member vlogger = memberService.getById(vloggerId);
if (follower != null && vlogger != null && !myId.equals(vloggerId)) { if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
Long templateId = 1938491158159028226L; // 新版使用模板类型编号和参数
SysMessageTemplateVo template = templateService.selectTemplateById(templateId); Map<String, Object> params = new HashMap<>();
if (template != null) { params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
String content = template.getTemplateContent() params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname()) SysMessageBo messageBo = new SysMessageBo();
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname()); messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.UNFOLLOW); // 取关类型编号
SysMessageBo messageBo = new SysMessageBo(); messageBo.setTemplateParams(params);
messageBo.setTitle(template.getTitle()); messageBo.setSenderId(myId);
messageBo.setContent(content); // 补充设置消息标题防止title为null
messageBo.setSenderId(myId); messageBo.setTitle("取消关注通知");
sysMessageService.sendMessageToUser(messageBo, vloggerId); sysMessageService.sendMessageToUser(messageBo, vloggerId);
}
} }
} }
@ -166,4 +170,13 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
public Long countFansByVloggerId(Long vloggerId) { public Long countFansByVloggerId(Long vloggerId) {
return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getVloggerId, vloggerId)); return baseMapper.selectCount(new LambdaQueryWrapper<Fans>().eq(Fans::getVloggerId, vloggerId));
} }
// 拉黑前只删除我关注对方的关系
@Override
public void removeFansRelationship(Long myId, Long vloggerId) {
Fans fan = queryFansRelationship(myId, vloggerId);
if (fan != null) {
baseMapper.deleteById(fan.getId());
}
}
} }

View File

@ -2,6 +2,7 @@ package com.wzj.soopin.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.member.domain.po.MemberAccount; import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.bo.MemberAccountBO; import com.wzj.soopin.member.domain.bo.MemberAccountBO;
@ -38,6 +39,10 @@ public class MemberAccountServiceImpl extends ServiceImpl<MemberAccountMapper,Me
return baseMapper.selectPage(page,query.toWrapper()); return baseMapper.selectPage(page,query.toWrapper());
} }
@Override
public IPage<MemberAccountVO> pageWithMember(Page<?> page, MemberAccountBO bo) {
return baseMapper.selectAccountWithMember(page, bo);
}
} }

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wzj.soopin.member.mapper.MemberAccountMapper">
<select id="selectAccountWithMember" resultType="com.wzj.soopin.member.domain.vo.MemberAccountVO">
SELECT
a.*, a.integral_balance AS integral, m.nickname, m.phone_encrypted AS phone
FROM ums_account a
LEFT JOIN ums_member m ON a.member_id = m.id
<where>
<if test="bo.id != null">
AND a.id = #{bo.id}
</if>
<if test="bo.type != null">
AND a.type = #{bo.type}
</if>
<if test="bo.memberId != null">
AND a.member_id = #{bo.memberId}
</if>
<if test="bo.integral != null">
AND a.integral_balance = #{bo.integral}
</if>
<if test="bo.wallet != null">
AND a.wallet = #{bo.wallet}
</if>
<if test="bo.revenue != null">
AND a.revenue = #{bo.revenue}
</if>
<if test="bo.nickname != null and bo.nickname != ''">
AND (m.nickname LIKE CONCAT('%', #{bo.nickname}, '%') OR m.nickname IS NULL)
</if>
<if test="bo.phone != null and bo.phone != ''">
AND (m.phone_encrypted LIKE CONCAT('%', #{bo.phone}, '%') OR m.phone_encrypted IS NULL)
</if>
</where>
</select>
</mapper>

View File

@ -34,6 +34,8 @@ public class AftersaleVO extends BaseAudit {
@Schema(description = "订单编号") @Schema(description = "订单编号")
private Long orderSn; private Long orderSn;
private String nickname; // 会员昵称
private String phone; // 会员手机号
/** 退款金额 */ /** 退款金额 */
@Schema(description = "退款金额") @Schema(description = "退款金额")

View File

@ -533,14 +533,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
log.info("模板信息为: {}", template); log.info("模板信息为: {}", template);
if (template != null) { if (template != null) {
String content = template.getTemplateContent() Map<String, Object> params = new HashMap<>();
.replace("${orderSn}", order.getOrderSn()) params.put("orderSn", order.getOrderSn());
.replace("${productName}", orderItemMapper.getName(orderId)); params.put("productName", orderItemMapper.getName(orderId));
log.info("模板内容为: {}", content);
SysMessageBo messageBo = new SysMessageBo(); SysMessageBo messageBo = new SysMessageBo();
messageBo.setTitle(template.getTitle()); messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.ORDER_NOTICE);
messageBo.setContent(content); messageBo.setTemplateParams(params);
messageBo.setSenderId(memberId); messageBo.setSenderId(memberId);
messageBo.setTitle(template.getTitle());
sysMessageService.sendMessageToUser(messageBo, memberId); sysMessageService.sendMessageToUser(messageBo, memberId);
} }
} }

View File

@ -220,61 +220,42 @@ public class VerificationCodeServiceImpl extends ServiceImpl<VerificationCodesM
@Override @Override
public void sendMessage(CodeVerificationDto codeVerificationDto) { public void sendMessage(CodeVerificationDto codeVerificationDto) {
String code = codeVerificationDto.getCodeValue(); String code = codeVerificationDto.getCodeValue();
Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code); Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code);
String productName = (String) resultMap.get("productName"); String productName = (String) resultMap.get("productName");
Long memberId = (Long) resultMap.get("memberId"); Long memberId = (Long) resultMap.get("memberId");
LocalDateTime verificationTime = codeMapper.verificationTime(code); LocalDateTime verificationTime = codeMapper.verificationTime(code);
String formattedTime = verificationTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String formattedTime = verificationTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 核销成功模板ID // 核销成功模板ID
Long templateId = 1940678210012340225L; // 改为新版模板类型调用
// 查询模板信息 Map<String, Object> params = new HashMap<>();
SysMessageTemplateVo template = templateService.selectTemplateById(templateId); params.put("productName", productName);
log.info("模板信息为: {}", template); params.put("verificationTime", formattedTime);
SysMessageBo messageBo = new SysMessageBo();
if (template != null) { messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_SUCCESS); // 核销成功类型编号
String content = template.getTemplateContent() messageBo.setTemplateParams(params);
.replace("${productName}", productName) messageBo.setSenderId(memberId);
.replace("${verificationTime}",formattedTime); messageBo.setTitle("核销成功通知"); // 补充设置消息标题
log.info("模板内容为: {}", content); sysMessageService.sendMessageToUser(messageBo, memberId);
SysMessageBo messageBo = new SysMessageBo();
messageBo.setTitle(template.getTitle());
messageBo.setContent(content);
messageBo.setSenderId(memberId);
sysMessageService.sendMessageToUser(messageBo, memberId);
}
} }
@Override @Override
public void sendMessageNo(CodeVerificationDto codeVerificationDto) { public void sendMessageNo(CodeVerificationDto codeVerificationDto) {
String code = codeVerificationDto.getCodeValue(); String code = codeVerificationDto.getCodeValue();
Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code); Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code);
String productName = (String) resultMap.get("productName"); String productName = (String) resultMap.get("productName");
Long memberId = (Long) resultMap.get("memberId"); Long memberId = (Long) resultMap.get("memberId");
String reason = codeMapper.getReason(code); String reason = codeMapper.getReason(code);
// 核销失败模板ID
// 核销成功模板ID // 改为新版模板类型调用
Long templateId = 1940687666448195586L; Map<String, Object> params = new HashMap<>();
// 查询模板信息 params.put("productName", productName);
SysMessageTemplateVo template = templateService.selectTemplateById(templateId); params.put("reason", reason);
log.info("模板信息为: {}", template); SysMessageBo messageBo = new SysMessageBo();
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_FAIL); // 核销失败类型编号
if (template != null) { messageBo.setTemplateParams(params);
String content = template.getTemplateContent() messageBo.setSenderId(memberId);
.replace("${productName}", productName) messageBo.setTitle("核销失败通知"); // 补充设置消息标题
.replace("${reason}",reason); sysMessageService.sendMessageToUser(messageBo, memberId);
log.info("模板内容为: {}", content);
SysMessageBo messageBo = new SysMessageBo();
messageBo.setTitle(template.getTitle());
messageBo.setContent(content);
messageBo.setSenderId(memberId);
sysMessageService.sendMessageToUser(messageBo, memberId);
}
} }
} }

View File

@ -109,11 +109,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getlist" resultType="com.wzj.soopin.order.domain.vo.AftersaleVO"> <select id="getlist" resultType="com.wzj.soopin.order.domain.vo.AftersaleVO">
SELECT SELECT
a.*, a.*,
o.order_sn AS orderSn o.order_sn AS orderSn,
m.nickname AS nickname,
m.phone_encrypted AS phone
FROM FROM
oms_aftersale a oms_aftersale a
LEFT JOIN LEFT JOIN
oms_order o ON a.order_id = o.id oms_order o ON a.order_id = o.id
LEFT JOIN
ums_member m ON a.member_id = m.id
where 1=1 where 1=1
<if test="query.memberId != null and query.memberId != ''"> <if test="query.memberId != null and query.memberId != ''">

View File

@ -1,9 +1,9 @@
package org.dromara.system.controller; package org.dromara.system.controller;
//import com.wzj.soopin.member.domain.po.Address;
//import com.wzj.soopin.member.mapper.AddressMapper;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.wzj.soopin.member.domain.po.Address;
//import org.dromara.system.mapper.AddressMapper;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.core.config.RuoYiConfig; import org.dromara.common.core.config.RuoYiConfig;
@ -13,7 +13,10 @@ import org.dromara.common.core.utils.file.MimeTypeUtils;
import org.dromara.common.redis.redis.RedisService; import org.dromara.common.redis.redis.RedisService;
import org.dromara.system.config.AjaxResult; import org.dromara.system.config.AjaxResult;
import org.dromara.system.config.ServerConfig; import org.dromara.system.config.ServerConfig;
import org.dromara.system.domain.Address;
import org.dromara.system.domain.dto.AddressDTO; import org.dromara.system.domain.dto.AddressDTO;
import org.dromara.system.mapper.AddressMapper;
import org.dromara.system.utils.FileUploadUtils; import org.dromara.system.utils.FileUploadUtils;
import org.dromara.system.utils.FileUtils; import org.dromara.system.utils.FileUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -44,9 +47,9 @@ public class SysAddressController
@Autowired @Autowired
private RedisService redisService; private RedisService redisService;
@Autowired
private AddressMapper addressMapper;
// @Autowired
// private AddressMapper addressMapper;
/** /**
* 通用下载请求 * 通用下载请求
@ -132,53 +135,53 @@ public class SysAddressController
log.error("下载文件失败", e); log.error("下载文件失败", e);
} }
} }
@GetMapping("/area")
public AjaxResult getAddressList() {
String addresses = redisService.getAddressList();
if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) {
List<AddressDTO> addressDTOList = JSON.parseArray(addresses, AddressDTO.class);
if(addressDTOList.size()>0){
return AjaxResult.success(addressDTOList);
}
}
QueryWrapper<Address> addressQueryWrapper = new QueryWrapper<>();
addressQueryWrapper.in("level", Arrays.asList(0,1,2));
List<Address> addressList = addressMapper.selectList(addressQueryWrapper);
Map<Long, List<Address>> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode()));
Map<Long, List<Address>> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode()));
List<AddressDTO> result = new ArrayList<>();
addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> {
AddressDTO dto = new AddressDTO();
dto.setId(it.getCode());
dto.setLevel("province");
dto.setName(it.getName());
dto.setPid(0L);
//获取城市列表
List<AddressDTO> child = new ArrayList<>();
if (cityMap.containsKey(it.getCode())) {
cityMap.get(it.getCode()).forEach(city -> {
AddressDTO cityDto = new AddressDTO();
cityDto.setId(city.getCode());
cityDto.setLevel("city");
cityDto.setName(city.getName());
cityDto.setPid(city.getParentCode());
cityDto.setChildren(districtMap.containsKey(city.getCode()) ?
districtMap.get(city.getCode()).stream().map(district -> {
AddressDTO districtDto = new AddressDTO();
districtDto.setId(district.getCode());
districtDto.setLevel("district");
districtDto.setName(district.getName());
districtDto.setPid(district.getParentCode());
return districtDto;
}).collect(Collectors.toList()) : Collections.EMPTY_LIST);
child.add(cityDto);
});
}
dto.setChildren(child);
result.add(dto);
});
redisService.setAddressList(JSON.toJSONString(result));
return AjaxResult.success(result);
}
// @GetMapping("/common/area")
// public AjaxResult getAddressList() {
// String addresses = redisService.getAddressList();
// if (org.apache.commons.lang3.StringUtils.isNotEmpty(addresses)) {
// List<AddressDTO> addressDTOList = JSON.parseArray(addresses, AddressDTO.class);
// if(addressDTOList.size()>0){
// return AjaxResult.success(addressDTOList);
// }
// }
// QueryWrapper<Address> addressQueryWrapper = new QueryWrapper<>();
// addressQueryWrapper.in("level", Arrays.asList(0,1,2));
// List<Address> addressList = addressMapper.selectList(addressQueryWrapper);
// Map<Long, List<Address>> cityMap = addressList.stream().filter(it -> it.getLevel() == 1).collect(Collectors.groupingBy(it -> it.getParentCode()));
// Map<Long, List<Address>> districtMap = addressList.stream().filter(it -> it.getLevel() == 2).collect(Collectors.groupingBy(it -> it.getParentCode()));
// List<AddressDTO> result = new ArrayList<>();
// addressList.stream().filter(it -> it.getLevel() == 0).forEach(it -> {
// AddressDTO dto = new AddressDTO();
// dto.setId(it.getCode());
// dto.setLevel("province");
// dto.setName(it.getName());
// dto.setPid(0L);
// //获取城市列表
// List<AddressDTO> child = new ArrayList<>();
// if (cityMap.containsKey(it.getCode())) {
// cityMap.get(it.getCode()).forEach(city -> {
// AddressDTO cityDto = new AddressDTO();
// cityDto.setId(city.getCode());
// cityDto.setLevel("city");
// cityDto.setName(city.getName());
// cityDto.setPid(city.getParentCode());
// cityDto.setChildren(districtMap.containsKey(city.getCode()) ?
// districtMap.get(city.getCode()).stream().map(district -> {
// AddressDTO districtDto = new AddressDTO();
// districtDto.setId(district.getCode());
// districtDto.setLevel("district");
// districtDto.setName(district.getName());
// districtDto.setPid(district.getParentCode());
// return districtDto;
// }).collect(Collectors.toList()) : Collections.EMPTY_LIST);
// child.add(cityDto);
// });
// }
// dto.setChildren(child);
// result.add(dto);
// });
// redisService.setAddressList(JSON.toJSONString(result));
// return AjaxResult.success(result);
// }
} }

View File

@ -1,4 +1,4 @@
package com.wzj.soopin.member.domain.po; package org.dromara.system.domain;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;

View File

@ -1,17 +1,16 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
//import com.wzj.soopin.member.domain.po.Address; import org.dromara.system.domain.Address;
import java.util.List;
/** /**
* 请填写功能名称Mapper接口 * 请填写功能名称Mapper接口
* *
* @author sjm * @author sjm
*/ */
//@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤 @InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
//public interface AddressMapper extends BaseMapper<Address> { public interface AddressMapper extends BaseMapper<Address> {
//
//} }