【同步】BOOT 和 CLOUD 的功能(支付相关)
This commit is contained in:
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.conversation.KeFuConversationRespVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.conversation.KeFuConversationUpdatePinnedReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuConversationDO;
|
||||
import cn.iocoder.yudao.module.promotion.service.kefu.KeFuConversationService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -34,6 +35,25 @@ public class KeFuConversationController {
|
||||
@Resource
|
||||
private MemberUserApi memberUserApi;
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得客服会话")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('promotion:kefu-conversation:query')")
|
||||
public CommonResult<KeFuConversationRespVO> getConversation(@RequestParam("id") Long id) {
|
||||
KeFuConversationDO conversation = conversationService.getConversation(id);
|
||||
if (conversation == null) {
|
||||
return success(null);
|
||||
}
|
||||
|
||||
// 拼接数据
|
||||
KeFuConversationRespVO result = BeanUtils.toBean(conversation, KeFuConversationRespVO.class);
|
||||
MemberUserRespDTO memberUser = memberUserApi.getUser(conversation.getUserId()).getCheckedData();
|
||||
if (memberUser != null) {
|
||||
result.setUserAvatar(memberUser.getAvatar()).setUserNickname(memberUser.getNickname());
|
||||
}
|
||||
return success(result);
|
||||
}
|
||||
|
||||
@PutMapping("/update-conversation-pinned")
|
||||
@Operation(summary = "置顶/取消置顶客服会话")
|
||||
@PreAuthorize("@ss.hasPermission('promotion:kefu-conversation:update')")
|
||||
|
||||
@@ -2,9 +2,8 @@ package cn.iocoder.yudao.module.promotion.controller.admin.kefu;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageRespVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO;
|
||||
@@ -20,6 +19,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
@@ -56,19 +56,18 @@ public class KeFuMessageController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得客服消息分页")
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获得客服消息列表")
|
||||
@PreAuthorize("@ss.hasPermission('promotion:kefu-message:query')")
|
||||
public CommonResult<PageResult<KeFuMessageRespVO>> getKeFuMessagePage(@Valid KeFuMessagePageReqVO pageReqVO) {
|
||||
public CommonResult<List<KeFuMessageRespVO>> getKeFuMessageList(@Valid KeFuMessageListReqVO pageReqVO) {
|
||||
// 获得数据
|
||||
PageResult<KeFuMessageDO> pageResult = messageService.getKeFuMessagePage(pageReqVO);
|
||||
List<KeFuMessageDO> list = messageService.getKeFuMessageList(pageReqVO);
|
||||
|
||||
// 拼接数据
|
||||
PageResult<KeFuMessageRespVO> result = BeanUtils.toBean(pageResult, KeFuMessageRespVO.class);
|
||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(filterList(result.getList(),
|
||||
List<KeFuMessageRespVO> result = BeanUtils.toBean(list, KeFuMessageRespVO.class);
|
||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(filterList(result,
|
||||
item -> UserTypeEnum.ADMIN.getValue().equals(item.getSenderType())), KeFuMessageRespVO::getSenderId));
|
||||
result.getList().forEach(item-> findAndThen(userMap, item.getSenderId(),
|
||||
user -> item.setSenderAvatar(user.getAvatar())));
|
||||
result.forEach(item -> findAndThen(userMap, item.getSenderId(), user -> item.setSenderAvatar(user.getAvatar())));
|
||||
return success(result);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 客服消息列表 Request VO")
|
||||
@Data
|
||||
public class KeFuMessageListReqVO {
|
||||
|
||||
private static final Integer LIMIT = 10;
|
||||
|
||||
@Schema(description = "会话编号", example = "12580")
|
||||
@NotNull(message = "会话编号不能为空")
|
||||
private Long conversationId;
|
||||
|
||||
@Schema(description = "发送时间", example = "2024-03-27 12:00:00")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "每次查询条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
@NotNull(message = "每次查询条数不能为空")
|
||||
@Min(value = 1, message = "每次查询条数最小值为 1")
|
||||
@Max(value = 100, message = "每次查询最大值为 100")
|
||||
private Integer limit = LIMIT;
|
||||
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
@Schema(description = "管理后台 - 客服消息分页 Request VO")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class KeFuMessagePageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "会话编号", example = "12580")
|
||||
private Long conversationId;
|
||||
|
||||
}
|
||||
@@ -5,11 +5,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 积分商城活动分页 Request VO")
|
||||
@Data
|
||||
@@ -17,20 +12,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
||||
@ToString(callSuper = true)
|
||||
public class PointActivityPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "积分商城活动商品", example = "19509")
|
||||
private Long spuId;
|
||||
|
||||
@Schema(description = "活动状态", example = "2")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
@@ -2,13 +2,14 @@ package cn.iocoder.yudao.module.promotion.controller.app.kefu;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageRespVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO;
|
||||
import cn.iocoder.yudao.module.promotion.service.kefu.KeFuMessageService;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -17,7 +18,13 @@ import jakarta.validation.Valid;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
@Tag(name = "用户 APP - 客服消息")
|
||||
@@ -29,6 +36,9 @@ public class AppKeFuMessageController {
|
||||
@Resource
|
||||
private KeFuMessageService kefuMessageService;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
@PostMapping("/send")
|
||||
@Operation(summary = "发送客服消息")
|
||||
public CommonResult<Long> sendKefuMessage(@Valid @RequestBody AppKeFuMessageSendReqVO sendReqVO) {
|
||||
@@ -44,11 +54,17 @@ public class AppKeFuMessageController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得客服消息分页")
|
||||
public CommonResult<PageResult<KeFuMessageRespVO>> getKefuMessagePage(@Valid AppKeFuMessagePageReqVO pageReqVO) {
|
||||
PageResult<KeFuMessageDO> pageResult = kefuMessageService.getKeFuMessagePage(pageReqVO, getLoginUserId());
|
||||
return success(BeanUtils.toBean(pageResult, KeFuMessageRespVO.class));
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获得客服消息列表")
|
||||
public CommonResult<List<KeFuMessageRespVO>> getKefuMessageList(@Valid AppKeFuMessagePageReqVO pageReqVO) {
|
||||
List<KeFuMessageDO> list = kefuMessageService.getKeFuMessageList(pageReqVO, getLoginUserId());
|
||||
|
||||
// 拼接数据
|
||||
List<KeFuMessageRespVO> result = BeanUtils.toBean(list, KeFuMessageRespVO.class);
|
||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(filterList(result,
|
||||
item -> UserTypeEnum.ADMIN.getValue().equals(item.getSenderType())), KeFuMessageRespVO::getSenderId));
|
||||
result.forEach(item -> findAndThen(userMap, item.getSenderId(), user -> item.setSenderAvatar(user.getAvatar())));
|
||||
return success(result);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,16 +1,33 @@
|
||||
package cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
@Schema(description = "用户 App - 客服消息分页 Request VO")
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "用户 App - 客服消息 Request VO")
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class AppKeFuMessagePageReqVO extends PageParam {
|
||||
public class AppKeFuMessagePageReqVO {
|
||||
|
||||
private static final Integer LIMIT = 10;
|
||||
|
||||
@Schema(description = "会话编号", example = "12580")
|
||||
private Long conversationId;
|
||||
|
||||
@Schema(description = "发送时间", example = "2024-03-27 12:00:00")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "每次查询条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
@NotNull(message = "每次查询条数不能为空")
|
||||
@Min(value = 1, message = "每次查询条数最小值为 1")
|
||||
@Max(value = 100, message = "每次查询最大值为 100")
|
||||
private Integer limit = LIMIT;
|
||||
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "用户 App - 积分商城活动 Response VO")
|
||||
@Data
|
||||
public class AppPointActivityRespVO {
|
||||
@@ -30,20 +28,6 @@ public class AppPointActivityRespVO {
|
||||
@ExcelProperty("积分商城活动总库存")
|
||||
private Integer totalStock;
|
||||
|
||||
// TODO @puhui999:只返回必要的字段,例如说 remark、sort、createTime 应该是不需要的呢。也可以看看别的也不需要哈。
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("排序")
|
||||
private Integer sort;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
// ========== 商品字段 ==========
|
||||
|
||||
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, // 从 SPU 的 name 读取
|
||||
|
||||
@@ -217,8 +217,7 @@ public interface CombinationActivityConvert {
|
||||
List<CombinationRecordDO> createRecords = new ArrayList<>(count);
|
||||
for (int i = 0; i < count; i++) {
|
||||
// 基础信息和团长保持一致
|
||||
CombinationRecordDO newRecord = BeanUtils.toBean(headRecord, CombinationRecordDO.class)
|
||||
.setId(null).setHeadId(headRecord.getHeadId());
|
||||
CombinationRecordDO newRecord = convert5(headRecord).setHeadId(headRecord.getId());
|
||||
// 虚拟信息
|
||||
newRecord.setCount(0) // 会单独更新下,在后续的 Service 逻辑里
|
||||
.setUserId(0L).setNickname("").setAvatar("").setOrderId(0L);
|
||||
@@ -226,5 +225,7 @@ public interface CombinationActivityConvert {
|
||||
}
|
||||
return createRecords;
|
||||
}
|
||||
@Mapping(target = "id", ignore = true)
|
||||
CombinationRecordDO convert5(CombinationRecordDO headRecord);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package cn.iocoder.yudao.module.promotion.dal.mysql.kefu;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@@ -21,10 +19,20 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface KeFuMessageMapper extends BaseMapperX<KeFuMessageDO> {
|
||||
|
||||
default PageResult<KeFuMessageDO> selectPage(KeFuMessagePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<KeFuMessageDO>()
|
||||
.eqIfPresent(KeFuMessageDO::getConversationId, reqVO.getConversationId())
|
||||
.orderByDesc(KeFuMessageDO::getCreateTime));
|
||||
/**
|
||||
* 获得消息列表
|
||||
* 1. 第一次查询时,不带时间,默认查询最新的十条消息
|
||||
* 2. 第二次查询时,带时间,查询历史消息
|
||||
*
|
||||
* @param reqVO 列表请求
|
||||
* @return 消息列表
|
||||
*/
|
||||
default List<KeFuMessageDO> selectList(KeFuMessageListReqVO reqVO) {
|
||||
return selectList(new QueryWrapperX<KeFuMessageDO>()
|
||||
.eqIfPresent("conversation_id", reqVO.getConversationId())
|
||||
.ltIfPresent("create_time", reqVO.getCreateTime())
|
||||
.orderByDesc("create_time")
|
||||
.limitN(reqVO.getLimit()));
|
||||
}
|
||||
|
||||
default List<KeFuMessageDO> selectListByConversationIdAndUserTypeAndReadStatus(Long conversationId, Integer userType,
|
||||
@@ -40,10 +48,4 @@ public interface KeFuMessageMapper extends BaseMapperX<KeFuMessageDO> {
|
||||
.in(KeFuMessageDO::getId, ids));
|
||||
}
|
||||
|
||||
default PageResult<KeFuMessageDO> selectPage(AppKeFuMessagePageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<KeFuMessageDO>()
|
||||
.eqIfPresent(KeFuMessageDO::getConversationId, pageReqVO.getConversationId())
|
||||
.orderByDesc(KeFuMessageDO::getCreateTime));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,12 +19,8 @@ public interface PointActivityMapper extends BaseMapperX<PointActivityDO> {
|
||||
|
||||
default PageResult<PointActivityDO> selectPage(PointActivityPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<PointActivityDO>()
|
||||
.eqIfPresent(PointActivityDO::getSpuId, reqVO.getSpuId())
|
||||
.eqIfPresent(PointActivityDO::getStatus, reqVO.getStatus())
|
||||
.eqIfPresent(PointActivityDO::getRemark, reqVO.getRemark())
|
||||
.eqIfPresent(PointActivityDO::getSort, reqVO.getSort())
|
||||
.betweenIfPresent(PointActivityDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(PointActivityDO::getId));
|
||||
.orderByDesc(PointActivityDO::getSort));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -375,7 +375,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
|
||||
CombinationRecordDO updateRecord = new CombinationRecordDO().setId(item.getId())
|
||||
.setStatus(status.getStatus()).setEndTime(now);
|
||||
if (CombinationRecordStatusEnum.isSuccess(status.getStatus())) { // 虚拟成团完事更改状态成功后还需要把参与人数修改为成团需要人数
|
||||
updateRecord.setUserCount(updateRecord.getUserSize());
|
||||
updateRecord.setUserCount(records.size());
|
||||
}
|
||||
updateRecords.add(updateRecord);
|
||||
});
|
||||
|
||||
@@ -13,6 +13,14 @@ import java.util.List;
|
||||
*/
|
||||
public interface KeFuConversationService {
|
||||
|
||||
/**
|
||||
* 获得客服会话
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 客服会话
|
||||
*/
|
||||
KeFuConversationDO getConversation(Long id);
|
||||
|
||||
/**
|
||||
* 【管理员】删除客服会话
|
||||
*
|
||||
|
||||
@@ -30,6 +30,11 @@ public class KeFuConversationServiceImpl implements KeFuConversationService {
|
||||
@Resource
|
||||
private KeFuConversationMapper conversationMapper;
|
||||
|
||||
@Override
|
||||
public KeFuConversationDO getConversation(Long id) {
|
||||
return conversationMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteKefuConversation(Long id) {
|
||||
// 校验存在
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package cn.iocoder.yudao.module.promotion.service.kefu;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 客服消息 Service 接口
|
||||
*
|
||||
@@ -46,7 +47,7 @@ public interface KeFuMessageService {
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 客服消息分页
|
||||
*/
|
||||
PageResult<KeFuMessageDO> getKeFuMessagePage(KeFuMessagePageReqVO pageReqVO);
|
||||
List<KeFuMessageDO> getKeFuMessageList(KeFuMessageListReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 【会员】获得客服消息分页
|
||||
@@ -55,6 +56,6 @@ public interface KeFuMessageService {
|
||||
* @param userId 用户编号
|
||||
* @return 客服消息分页
|
||||
*/
|
||||
PageResult<KeFuMessageDO> getKeFuMessagePage(AppKeFuMessagePageReqVO pageReqVO, Long userId);
|
||||
List<KeFuMessageDO> getKeFuMessageList(AppKeFuMessagePageReqVO pageReqVO, Long userId);
|
||||
|
||||
}
|
||||
@@ -2,14 +2,12 @@ package cn.iocoder.yudao.module.promotion.service.kefu;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
|
||||
import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
|
||||
import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO;
|
||||
@@ -23,6 +21,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
@@ -113,9 +112,9 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
|
||||
// 2.3 发送消息通知会员,管理员已读 -> 会员更新发送的消息状态
|
||||
KeFuMessageDO keFuMessage = getFirst(filterList(messageList, message -> UserTypeEnum.MEMBER.getValue().equals(message.getSenderType())));
|
||||
assert keFuMessage != null; // 断言避免警告
|
||||
getSelf().sendAsyncMessageToMember(keFuMessage.getSenderId(), KEFU_MESSAGE_ADMIN_READ, StrUtil.EMPTY);
|
||||
getSelf().sendAsyncMessageToMember(keFuMessage.getSenderId(), KEFU_MESSAGE_ADMIN_READ, conversation.getId());
|
||||
// 2.4 通知所有管理员消息已读
|
||||
getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_ADMIN_READ, StrUtil.EMPTY);
|
||||
getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_ADMIN_READ, conversation.getId());
|
||||
}
|
||||
|
||||
private void validateReceiverExist(Long receiverId, Integer receiverType) {
|
||||
@@ -138,20 +137,20 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<KeFuMessageDO> getKeFuMessagePage(KeFuMessagePageReqVO pageReqVO) {
|
||||
return keFuMessageMapper.selectPage(pageReqVO);
|
||||
public List<KeFuMessageDO> getKeFuMessageList(KeFuMessageListReqVO pageReqVO) {
|
||||
return keFuMessageMapper.selectList(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<KeFuMessageDO> getKeFuMessagePage(AppKeFuMessagePageReqVO pageReqVO, Long userId) {
|
||||
public List<KeFuMessageDO> getKeFuMessageList(AppKeFuMessagePageReqVO pageReqVO, Long userId) {
|
||||
// 1. 获得客服会话
|
||||
KeFuConversationDO conversation = conversationService.getConversationByUserId(userId);
|
||||
if (conversation == null) {
|
||||
return PageResult.empty();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
// 2. 设置会话编号
|
||||
pageReqVO.setConversationId(conversation.getId());
|
||||
return keFuMessageMapper.selectPage(pageReqVO);
|
||||
return keFuMessageMapper.selectList(BeanUtils.toBean(pageReqVO, KeFuMessageListReqVO.class));
|
||||
}
|
||||
|
||||
private KeFuMessageServiceImpl getSelf() {
|
||||
|
||||
Reference in New Issue
Block a user