修改回调整合分发模式
This commit is contained in:
parent
83ed8e4150
commit
9d0e0eb33e
@ -303,3 +303,12 @@ tencent:
|
||||
secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥
|
||||
administrator: "administrator" # 管理员账号
|
||||
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
|
||||
|
@ -105,6 +105,12 @@
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-text</artifactId>
|
||||
<version>1.10.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -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"; // 核销失败
|
||||
}
|
@ -54,4 +54,12 @@ public class SysMessage extends BaseAudit {
|
||||
/** 扩展参数 */
|
||||
@TableField(exist = false)
|
||||
private Map<String, Object> params = new HashMap<>();
|
||||
|
||||
/** 模板类型编号(如1=关注,2=取消关注等) */
|
||||
@TableField(exist = false)
|
||||
private String templateType;
|
||||
|
||||
/** 模板参数 */
|
||||
@TableField(exist = false)
|
||||
private Map<String, Object> templateParams;
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import java.time.LocalDateTime;
|
||||
|
||||
import java.util.Date;
|
||||
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")
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为查询条件
|
||||
*/
|
||||
|
@ -11,4 +11,8 @@ import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
*/
|
||||
public interface SysMessageTemplateMapper extends BaseMapperPlus<SysMessageTemplate, SysMessageTemplateVo> {
|
||||
|
||||
/**
|
||||
* 根据模板类型编号查找模板
|
||||
*/
|
||||
SysMessageTemplate selectByTemplateType(String templateType);
|
||||
}
|
@ -3,18 +3,21 @@ package org.dromara.system.service.impl;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.text.StringSubstitutor;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.SysMessageUser;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.event.MessageEvent;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
//import org.dromara.system.job.SnailJobApiUtil;
|
||||
import org.dromara.system.mapper.SysMessageMapper;
|
||||
import org.dromara.system.mapper.SysMessageUserMapper;
|
||||
import org.dromara.system.service.ISysMessageService;
|
||||
@ -22,12 +25,7 @@ import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -43,6 +41,8 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
||||
private final SysMessageMapper messageMapper;
|
||||
private final SysMessageUserMapper messageUserMapper;
|
||||
private final ApplicationEventPublisher eventPublisher;
|
||||
private final SysMessageTemplateServiceImpl messageTemplateService;
|
||||
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SysMessageVo> selectPageMessageList(SysMessageBo bo, PageQuery pageQuery) {
|
||||
@ -87,6 +87,16 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
//加一个约定
|
||||
|
@ -90,4 +90,13 @@ public class SysMessageTemplateServiceImpl extends ServiceImpl<SysMessageTemplat
|
||||
queryWrapper.orderByDesc(SysMessageTemplate::getCreateTime);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -301,24 +301,14 @@ public class FansController {
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("block")
|
||||
public R block(@RequestParam Long myId,
|
||||
@RequestParam Long vloggerId) {
|
||||
// 先执行cancel
|
||||
public R block(@RequestParam Long myId, @RequestParam Long vloggerId) {
|
||||
// 判断两个id不能为空
|
||||
if (myId == null || vloggerId==null) {
|
||||
if (myId == null || vloggerId == null) {
|
||||
return R.ok("id不能为空");
|
||||
}
|
||||
// 是否已经存在关系
|
||||
boolean flow = service.queryDoIFollowVloger(myId, vloggerId);
|
||||
if (flow) {
|
||||
// 删除业务的执行
|
||||
service.doCancel(myId, vloggerId);
|
||||
|
||||
// 博主的粉丝-1,我的关注-1
|
||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
|
||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
|
||||
}
|
||||
// 拉黑
|
||||
// 拉黑前只删除“我关注对方”的关系
|
||||
service.removeFansRelationship(myId, vloggerId);
|
||||
|
||||
//检查是否已在黑名单中
|
||||
boolean hasblock = memberBlockService.hasBlocked(myId, vloggerId);
|
||||
|
@ -34,9 +34,12 @@ public class MemberAccountController {
|
||||
|
||||
@Tag(name ="查询会员账户表列表")
|
||||
@PostMapping("/list")
|
||||
public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO query, @RequestBody Page page) {
|
||||
Page<MemberAccount> list = service.page(page,query.toWrapper() );
|
||||
return R.ok(convert.toVO(list));
|
||||
public R<IPage<MemberAccountVO>> list(@RequestBody MemberAccountBO bo,
|
||||
@RequestParam(defaultValue = "1") int pageNum,
|
||||
@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 ="导出会员账户表列表")
|
||||
|
@ -1,13 +1,13 @@
|
||||
package com.wzj.soopin.member.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.member.annotation.MemberFillMethod;
|
||||
import com.wzj.soopin.member.convert.MemberAddressConvert;
|
||||
import com.wzj.soopin.member.domain.bo.MemberAddressBO;
|
||||
import com.wzj.soopin.member.domain.po.MemberAddress;
|
||||
import com.wzj.soopin.member.domain.vo.MemberAddressVO;
|
||||
import org.dromara.system.mapper.AddressMapper;
|
||||
import com.wzj.soopin.member.service.IMemberAddressService;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
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.log.annotation.Log;
|
||||
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 java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 会员收货地址Controller
|
||||
@ -36,6 +36,8 @@ public class MemberAddressController {
|
||||
|
||||
private final MemberAddressConvert convert;
|
||||
|
||||
|
||||
|
||||
@Tag(name ="查询会员收货地址列表")
|
||||
@PostMapping("/list")
|
||||
@MemberFillMethod
|
||||
|
@ -41,18 +41,34 @@ public class MemberAccountBO extends BaseBO {
|
||||
|
||||
@Schema(description ="营收")
|
||||
private BigDecimal revenue;
|
||||
|
||||
private String nickname;
|
||||
private String phone;
|
||||
|
||||
private String name;
|
||||
|
||||
@Schema(description ="余额")
|
||||
private BigDecimal moneyBalance;
|
||||
public LambdaQueryWrapper<MemberAccount> toWrapper() {
|
||||
return new LambdaQueryWrapper<MemberAccount>()
|
||||
.eq(MemberAccount::getId, id)
|
||||
.eq(MemberAccount::getType, type)
|
||||
.eq(MemberAccount::getMemberId, id);
|
||||
LambdaQueryWrapper<MemberAccount> wrapper = new LambdaQueryWrapper<>();
|
||||
if (id != null) {
|
||||
wrapper.eq(MemberAccount::getId, 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,8 +32,6 @@ public class MemberAccountVO {
|
||||
private Long id;
|
||||
|
||||
@Schema(description ="name")
|
||||
private String name;
|
||||
|
||||
@Schema(description ="phone")
|
||||
private String phone;
|
||||
private String nickname; // 会员姓名
|
||||
private String phone; // 会员手机号
|
||||
}
|
||||
|
@ -1,7 +1,11 @@
|
||||
package com.wzj.soopin.member.mapper;
|
||||
|
||||
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.vo.MemberAccountVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@ -13,5 +17,6 @@ import java.util.List;
|
||||
* @author zcc
|
||||
*/
|
||||
public interface MemberAccountMapper extends BaseMapper<MemberAccount> {
|
||||
IPage<MemberAccountVO> selectAccountWithMember(Page<?> page, @Param("bo") MemberAccountBO bo);
|
||||
}
|
||||
|
||||
|
@ -34,4 +34,7 @@ public interface IFansService extends IService<Fans> {
|
||||
|
||||
|
||||
Long countFansByVloggerId(Long vloggerId);
|
||||
|
||||
// 拉黑前只删除“我关注对方”的关系
|
||||
void removeFansRelationship(Long myId, Long vloggerId);
|
||||
}
|
||||
|
@ -1,10 +1,15 @@
|
||||
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.wzj.soopin.member.domain.bo.MemberAccountBO;
|
||||
import com.wzj.soopin.member.domain.po.MemberAccount;
|
||||
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
|
||||
|
||||
public interface IMemberAccountService extends IService<MemberAccount> {
|
||||
|
||||
MemberAccount getMemberAccount(Long memberId);
|
||||
|
||||
IPage<MemberAccountVO> pageWithMember(Page<?> page, MemberAccountBO bo);
|
||||
}
|
||||
|
@ -45,6 +45,11 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void doFollow(Long myId, Long vloggerId) {
|
||||
// 幂等性校验:已存在则不再插入
|
||||
Fans existing = queryFansRelationship(myId, vloggerId);
|
||||
if (existing != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Fans fans = new Fans();
|
||||
fans.setFanId(myId);
|
||||
@ -66,18 +71,18 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
||||
Member follower = memberService.getById(myId);
|
||||
Member vlogger = memberService.getById(vloggerId);
|
||||
if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
|
||||
Long templateId = 1938489429145284609L;
|
||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||
if (template != null) {
|
||||
String content = template.getTemplateContent()
|
||||
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname())
|
||||
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTitle(template.getTitle());
|
||||
messageBo.setContent(content);
|
||||
messageBo.setSenderId(myId);
|
||||
sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||
}
|
||||
// 新版:使用模板类型编号和参数
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||
params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
// 关注类型编号
|
||||
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.FOLLOW);
|
||||
messageBo.setTemplateParams(params);
|
||||
messageBo.setSenderId(myId);
|
||||
// 补充:设置消息标题,防止title为null
|
||||
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 vlogger = memberService.getById(vloggerId);
|
||||
if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
|
||||
Long templateId = 1938491158159028226L;
|
||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||
if (template != null) {
|
||||
String content = template.getTemplateContent()
|
||||
.replace("${followerNickname}", follower.getNickname() == null ? "" : follower.getNickname())
|
||||
.replace("${vloggerNickname}", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTitle(template.getTitle());
|
||||
messageBo.setContent(content);
|
||||
messageBo.setSenderId(myId);
|
||||
sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||
}
|
||||
// 新版:使用模板类型编号和参数
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||
params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.UNFOLLOW); // 取关类型编号
|
||||
messageBo.setTemplateParams(params);
|
||||
messageBo.setSenderId(myId);
|
||||
// 补充:设置消息标题,防止title为null
|
||||
messageBo.setTitle("取消关注通知");
|
||||
sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,4 +170,13 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
||||
public Long countFansByVloggerId(Long 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.wzj.soopin.member.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
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.wzj.soopin.member.domain.po.MemberAccount;
|
||||
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());
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<MemberAccountVO> pageWithMember(Page<?> page, MemberAccountBO bo) {
|
||||
return baseMapper.selectAccountWithMember(page, bo);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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>
|
@ -34,6 +34,8 @@ public class AftersaleVO extends BaseAudit {
|
||||
@Schema(description = "订单编号")
|
||||
private Long orderSn;
|
||||
|
||||
private String nickname; // 会员昵称
|
||||
private String phone; // 会员手机号
|
||||
|
||||
/** 退款金额 */
|
||||
@Schema(description = "退款金额")
|
||||
|
@ -533,14 +533,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
log.info("模板信息为: {}", template);
|
||||
|
||||
if (template != null) {
|
||||
String content = template.getTemplateContent()
|
||||
.replace("${orderSn}", order.getOrderSn())
|
||||
.replace("${productName}", orderItemMapper.getName(orderId));
|
||||
log.info("模板内容为: {}", content);
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("orderSn", order.getOrderSn());
|
||||
params.put("productName", orderItemMapper.getName(orderId));
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTitle(template.getTitle());
|
||||
messageBo.setContent(content);
|
||||
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.ORDER_NOTICE);
|
||||
messageBo.setTemplateParams(params);
|
||||
messageBo.setSenderId(memberId);
|
||||
messageBo.setTitle(template.getTitle());
|
||||
sysMessageService.sendMessageToUser(messageBo, memberId);
|
||||
}
|
||||
}
|
||||
|
@ -220,61 +220,42 @@ public class VerificationCodeServiceImpl extends ServiceImpl<VerificationCodesM
|
||||
|
||||
@Override
|
||||
public void sendMessage(CodeVerificationDto codeVerificationDto) {
|
||||
|
||||
String code = codeVerificationDto.getCodeValue();
|
||||
Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code);
|
||||
String productName = (String) resultMap.get("productName");
|
||||
Long memberId = (Long) resultMap.get("memberId");
|
||||
|
||||
LocalDateTime verificationTime = codeMapper.verificationTime(code);
|
||||
String formattedTime = verificationTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
|
||||
// 核销成功模板ID
|
||||
Long templateId = 1940678210012340225L;
|
||||
// 查询模板信息
|
||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||
log.info("模板信息为: {}", template);
|
||||
|
||||
if (template != null) {
|
||||
String content = template.getTemplateContent()
|
||||
.replace("${productName}", productName)
|
||||
.replace("${verificationTime}",formattedTime);
|
||||
log.info("模板内容为: {}", content);
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTitle(template.getTitle());
|
||||
messageBo.setContent(content);
|
||||
messageBo.setSenderId(memberId);
|
||||
sysMessageService.sendMessageToUser(messageBo, memberId);
|
||||
}
|
||||
// 改为新版模板类型调用
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("productName", productName);
|
||||
params.put("verificationTime", formattedTime);
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_SUCCESS); // 核销成功类型编号
|
||||
messageBo.setTemplateParams(params);
|
||||
messageBo.setSenderId(memberId);
|
||||
messageBo.setTitle("核销成功通知"); // 补充:设置消息标题
|
||||
sysMessageService.sendMessageToUser(messageBo, memberId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessageNo(CodeVerificationDto codeVerificationDto) {
|
||||
String code = codeVerificationDto.getCodeValue();
|
||||
|
||||
Map<String, Object> resultMap = codeMapper.getProduvtNameAndMemberId(code);
|
||||
String productName = (String) resultMap.get("productName");
|
||||
Long memberId = (Long) resultMap.get("memberId");
|
||||
|
||||
String reason = codeMapper.getReason(code);
|
||||
|
||||
// 核销成功模板ID
|
||||
Long templateId = 1940687666448195586L;
|
||||
// 查询模板信息
|
||||
SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
||||
log.info("模板信息为: {}", template);
|
||||
|
||||
if (template != null) {
|
||||
String content = template.getTemplateContent()
|
||||
.replace("${productName}", productName)
|
||||
.replace("${reason}",reason);
|
||||
log.info("模板内容为: {}", content);
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTitle(template.getTitle());
|
||||
messageBo.setContent(content);
|
||||
messageBo.setSenderId(memberId);
|
||||
sysMessageService.sendMessageToUser(messageBo, memberId);
|
||||
}
|
||||
// 核销失败模板ID
|
||||
// 改为新版模板类型调用
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("productName", productName);
|
||||
params.put("reason", reason);
|
||||
SysMessageBo messageBo = new SysMessageBo();
|
||||
messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.VERIFY_FAIL); // 核销失败类型编号
|
||||
messageBo.setTemplateParams(params);
|
||||
messageBo.setSenderId(memberId);
|
||||
messageBo.setTitle("核销失败通知"); // 补充:设置消息标题
|
||||
sysMessageService.sendMessageToUser(messageBo, memberId);
|
||||
}
|
||||
}
|
||||
|
@ -109,11 +109,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="getlist" resultType="com.wzj.soopin.order.domain.vo.AftersaleVO">
|
||||
SELECT
|
||||
a.*,
|
||||
o.order_sn AS orderSn
|
||||
o.order_sn AS orderSn,
|
||||
m.nickname AS nickname,
|
||||
m.phone_encrypted AS phone
|
||||
FROM
|
||||
oms_aftersale a
|
||||
LEFT JOIN
|
||||
oms_order o ON a.order_id = o.id
|
||||
LEFT JOIN
|
||||
ums_member m ON a.member_id = m.id
|
||||
where 1=1
|
||||
|
||||
<if test="query.memberId != null and query.memberId != ''">
|
||||
|
@ -1,9 +1,9 @@
|
||||
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.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.HttpServletResponse;
|
||||
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.system.config.AjaxResult;
|
||||
import org.dromara.system.config.ServerConfig;
|
||||
|
||||
import org.dromara.system.domain.Address;
|
||||
import org.dromara.system.domain.dto.AddressDTO;
|
||||
import org.dromara.system.mapper.AddressMapper;
|
||||
import org.dromara.system.utils.FileUploadUtils;
|
||||
import org.dromara.system.utils.FileUtils;
|
||||
import org.slf4j.Logger;
|
||||
@ -44,9 +47,9 @@ public class SysAddressController
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
@Autowired
|
||||
private AddressMapper addressMapper;
|
||||
|
||||
// @Autowired
|
||||
// private AddressMapper addressMapper;
|
||||
|
||||
/**
|
||||
* 通用下载请求
|
||||
@ -132,53 +135,53 @@ public class SysAddressController
|
||||
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);
|
||||
// }
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.member.domain.po;
|
||||
package org.dromara.system.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
@ -1,17 +1,16 @@
|
||||
package org.dromara.system.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
//import com.wzj.soopin.member.domain.po.Address;
|
||||
|
||||
import java.util.List;
|
||||
import org.dromara.system.domain.Address;
|
||||
|
||||
/**
|
||||
* 【请填写功能名称】Mapper接口
|
||||
*
|
||||
* @author sjm
|
||||
*/
|
||||
//@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
||||
//public interface AddressMapper extends BaseMapper<Address> {
|
||||
//
|
||||
//}
|
||||
@InterceptorIgnore(tenantLine = "true") // 忽略租户过滤
|
||||
public interface AddressMapper extends BaseMapper<Address> {
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user