Commit 1e4e02ec2fdee3c822a80c0fcf0020b539b1c324
Merge branch 'develop' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into master-jdk17
Showing
3 changed files
with
15 additions
and
48 deletions
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) { |