修改回调整合分发模式

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" # 你的密钥
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

View File

@ -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>

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)
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.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;
}
/**
* 转换为查询条件
*/

View File

@ -11,4 +11,8 @@ import org.dromara.system.domain.vo.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.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);
}
//加一个约定

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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 ="导出会员账户表列表")

View File

@ -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

View File

@ -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;
}
}

View File

@ -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; // 会员手机号
}

View File

@ -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);
}

View File

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

View File

@ -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);
}

View File

@ -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());
}
}
}

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.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);
}
}

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 = "订单编号")
private Long orderSn;
private String nickname; // 会员昵称
private String phone; // 会员手机号
/** 退款金额 */
@Schema(description = "退款金额")

View File

@ -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);
}
}

View File

@ -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);
}
}

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
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 != ''">

View File

@ -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);
// }
}

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 io.swagger.v3.oas.annotations.media.Schema;

View File

@ -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> {
}