Commit 1e4e02ec2fdee3c822a80c0fcf0020b539b1c324

Authored by YunaiV
2 parents fd2d0673 a484007d

Merge branch 'develop' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into master-jdk17

yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/vo/message/AppKeFuMessageRespVO.java deleted
1 -package cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message;  
2 -  
3 -import io.swagger.v3.oas.annotations.media.Schema;  
4 -import lombok.Data;  
5 -  
6 -import java.time.LocalDateTime;  
7 -  
8 -@Schema(description = "用户 App - 客服消息 Response VO")  
9 -@Data  
10 -public class AppKeFuMessageRespVO {  
11 -  
12 - @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23202")  
13 - private Long id;  
14 -  
15 - @Schema(description = "会话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "12580")  
16 - private Long conversationId;  
17 -  
18 - @Schema(description = "发送人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24571")  
19 - private Long senderId;  
20 -  
21 - @Schema(description = "发送人类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
22 - private Integer senderType;  
23 -  
24 - @Schema(description = "接收人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29124")  
25 - private Long receiverId;  
26 -  
27 - @Schema(description = "接收人类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")  
28 - private Integer receiverType;  
29 -  
30 - @Schema(description = "消息类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
31 - private Integer contentType;  
32 -  
33 - @Schema(description = "消息", requiredMode = Schema.RequiredMode.REQUIRED)  
34 - private String content;  
35 -  
36 - @Schema(description = "是否已读", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
37 - private Boolean readStatus;  
38 -  
39 - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)  
40 - private LocalDateTime createTime;  
41 -  
42 -}  
43 \ No newline at end of file 0 \ No newline at end of file
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java
@@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; @@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8 import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; 8 import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi; 9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
  10 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
10 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO; 11 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
  12 +import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageRespVO;
11 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO; 13 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO;
12 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO; 14 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
13 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO; 15 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO;
@@ -15,6 +17,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuConversationDO; @@ -15,6 +17,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuConversationDO;
15 import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO; 17 import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO;
16 import cn.iocoder.yudao.module.promotion.dal.mysql.kefu.KeFuMessageMapper; 18 import cn.iocoder.yudao.module.promotion.dal.mysql.kefu.KeFuMessageMapper;
17 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 19 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
  20 +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
18 import jakarta.annotation.Resource; 21 import jakarta.annotation.Resource;
19 import org.springframework.scheduling.annotation.Async; 22 import org.springframework.scheduling.annotation.Async;
20 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
@@ -66,9 +69,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { @@ -66,9 +69,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
66 conversationService.updateConversationLastMessage(kefuMessage); 69 conversationService.updateConversationLastMessage(kefuMessage);
67 70
68 // 3.1 发送消息给会员 71 // 3.1 发送消息给会员
69 - getSelf().sendAsyncMessageToMember(conversation.getUserId(), KEFU_MESSAGE_TYPE, kefuMessage); 72 + AdminUserRespDTO user = adminUserApi.getUser(kefuMessage.getSenderId());
  73 + KeFuMessageRespVO message = BeanUtils.toBean(kefuMessage, KeFuMessageRespVO.class).setSenderAvatar(user.getAvatar());
  74 + getSelf().sendAsyncMessageToMember(conversation.getUserId(), KEFU_MESSAGE_TYPE, message);
70 // 3.2 通知所有管理员更新对话 75 // 3.2 通知所有管理员更新对话
71 - getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, kefuMessage); 76 + getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, message);
72 return kefuMessage.getId(); 77 return kefuMessage.getId();
73 } 78 }
74 79
@@ -84,7 +89,9 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { @@ -84,7 +89,9 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
84 // 2. 更新会话消息冗余 89 // 2. 更新会话消息冗余
85 conversationService.updateConversationLastMessage(kefuMessage); 90 conversationService.updateConversationLastMessage(kefuMessage);
86 // 3. 通知所有管理员更新对话 91 // 3. 通知所有管理员更新对话
87 - getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, kefuMessage); 92 + MemberUserRespDTO user = memberUserApi.getUser(kefuMessage.getSenderId());
  93 + KeFuMessageRespVO message = BeanUtils.toBean(kefuMessage, KeFuMessageRespVO.class).setSenderAvatar(user.getAvatar());
  94 + getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, message);
88 return kefuMessage.getId(); 95 return kefuMessage.getId();
89 } 96 }
90 97
@@ -112,9 +119,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { @@ -112,9 +119,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
112 // 2.3 发送消息通知会员,管理员已读 -> 会员更新发送的消息状态 119 // 2.3 发送消息通知会员,管理员已读 -> 会员更新发送的消息状态
113 KeFuMessageDO keFuMessage = getFirst(filterList(messageList, message -> UserTypeEnum.MEMBER.getValue().equals(message.getSenderType()))); 120 KeFuMessageDO keFuMessage = getFirst(filterList(messageList, message -> UserTypeEnum.MEMBER.getValue().equals(message.getSenderType())));
114 assert keFuMessage != null; // 断言避免警告 121 assert keFuMessage != null; // 断言避免警告
115 - getSelf().sendAsyncMessageToMember(keFuMessage.getSenderId(), KEFU_MESSAGE_ADMIN_READ, conversation.getId()); 122 + getSelf().sendAsyncMessageToMember(keFuMessage.getSenderId(), KEFU_MESSAGE_ADMIN_READ,
  123 + new KeFuMessageRespVO().setConversationId(keFuMessage.getConversationId())); // 统一返回 json 格式
116 // 2.4 通知所有管理员消息已读 124 // 2.4 通知所有管理员消息已读
117 - getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_ADMIN_READ, conversation.getId()); 125 + getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_ADMIN_READ,
  126 + new KeFuMessageRespVO().setConversationId(keFuMessage.getConversationId())); // 统一返回 json 格式
118 } 127 }
119 128
120 private void validateReceiverExist(Long receiverId, Integer receiverType) { 129 private void validateReceiverExist(Long receiverId, Integer receiverType) {
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java
@@ -213,7 +213,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { @@ -213,7 +213,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
213 } 213 }
214 double totalChargeValue = getTotalChargeValue(orderItems, chargeMode); 214 double totalChargeValue = getTotalChargeValue(orderItems, chargeMode);
215 double totalPrice = TradePriceCalculatorHelper.calculateTotalPayPrice(orderItems); 215 double totalPrice = TradePriceCalculatorHelper.calculateTotalPayPrice(orderItems);
216 - return totalChargeValue >= templateFree.getFreeCount() && totalPrice >= templateFree.getFreePrice(); 216 + return totalChargeValue <= templateFree.getFreeCount() && totalPrice >= templateFree.getFreePrice();
217 } 217 }
218 218
219 private double getTotalChargeValue(List<OrderItem> orderItems, Integer chargeMode) { 219 private double getTotalChargeValue(List<OrderItem> orderItems, Integer chargeMode) {