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 | 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 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 8 | 8 | import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; |
| 9 | 9 | import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
| 10 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | |
| 10 | 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 | 13 | import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO; |
| 12 | 14 | import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO; |
| 13 | 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 | 17 | import cn.iocoder.yudao.module.promotion.dal.dataobject.kefu.KeFuMessageDO; |
| 16 | 18 | import cn.iocoder.yudao.module.promotion.dal.mysql.kefu.KeFuMessageMapper; |
| 17 | 19 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 20 | +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | |
| 18 | 21 | import jakarta.annotation.Resource; |
| 19 | 22 | import org.springframework.scheduling.annotation.Async; |
| 20 | 23 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -66,9 +69,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { |
| 66 | 69 | conversationService.updateConversationLastMessage(kefuMessage); |
| 67 | 70 | |
| 68 | 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 | 75 | // 3.2 通知所有管理员更新对话 |
| 71 | - getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, kefuMessage); | |
| 76 | + getSelf().sendAsyncMessageToAdmin(KEFU_MESSAGE_TYPE, message); | |
| 72 | 77 | return kefuMessage.getId(); |
| 73 | 78 | } |
| 74 | 79 | |
| ... | ... | @@ -84,7 +89,9 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { |
| 84 | 89 | // 2. 更新会话消息冗余 |
| 85 | 90 | conversationService.updateConversationLastMessage(kefuMessage); |
| 86 | 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 | 95 | return kefuMessage.getId(); |
| 89 | 96 | } |
| 90 | 97 | |
| ... | ... | @@ -112,9 +119,11 @@ public class KeFuMessageServiceImpl implements KeFuMessageService { |
| 112 | 119 | // 2.3 发送消息通知会员,管理员已读 -> 会员更新发送的消息状态 |
| 113 | 120 | KeFuMessageDO keFuMessage = getFirst(filterList(messageList, message -> UserTypeEnum.MEMBER.getValue().equals(message.getSenderType()))); |
| 114 | 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 | 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 | 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 | 213 | } |
| 214 | 214 | double totalChargeValue = getTotalChargeValue(orderItems, chargeMode); |
| 215 | 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 | 219 | private double getTotalChargeValue(List<OrderItem> orderItems, Integer chargeMode) { | ... | ... |