From 5bfca56efa58d6132086350b205d8a33a6c83d74 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 7 Jun 2023 18:08:49 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E5=AE=8C=E5=96=84=20TODO=20?= =?UTF-8?q?=E6=8F=90=E5=88=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao-module-trade-biz/pom.xml | 6 +- .../service/order/TradeOrderServiceImpl.java | 79 ++++++++++++++----- .../api/notify/NotifyMessageSendApi.java | 5 ++ .../api/notify/dto/NotifyTemplateReqDTO.java | 34 ++++++++ .../enums/notify/NotifyTemplateTypeEnum.java | 26 ++++++ .../api/notify/NotifyMessageSendApiImpl.java | 12 ++- 6 files changed, 141 insertions(+), 21 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifyTemplateReqDTO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeEnum.java diff --git a/yudao-module-mall/yudao-module-trade-biz/pom.xml b/yudao-module-mall/yudao-module-trade-biz/pom.xml index 4eb0164d4..24b2097ba 100644 --- a/yudao-module-mall/yudao-module-trade-biz/pom.xml +++ b/yudao-module-mall/yudao-module-trade-biz/pom.xml @@ -23,7 +23,6 @@ yudao-module-trade-api ${revision} - cn.iocoder.boot yudao-module-product-api @@ -44,6 +43,11 @@ yudao-module-member-api ${revision} + + cn.iocoder.boot + yudao-module-system-api + ${revision} + diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java index 8e75dd985..666841eee 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java @@ -6,7 +6,9 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.core.KeyValue; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.TerminalEnum; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.module.member.api.address.AddressApi; @@ -21,6 +23,11 @@ import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO; import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO; +import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; +import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; +import cn.iocoder.yudao.module.system.api.notify.dto.NotifyTemplateReqDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.enums.notify.NotifyTemplateTypeEnum; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderCreateReqVO; @@ -29,6 +36,7 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettle import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO; import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.cart.TradeCartDO; +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; @@ -38,6 +46,7 @@ import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; import cn.iocoder.yudao.module.trade.enums.order.*; import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; import cn.iocoder.yudao.module.trade.service.cart.TradeCartService; +import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; import cn.iocoder.yudao.module.trade.service.price.TradePriceService; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; @@ -74,6 +83,8 @@ public class TradeOrderServiceImpl implements TradeOrderService { private TradeCartService tradeCartService; @Resource private TradePriceService tradePriceService; + @Resource + private DeliveryExpressService deliveryExpressService; @Resource private ProductSkuApi productSkuApi; @@ -85,7 +96,10 @@ public class TradeOrderServiceImpl implements TradeOrderService { private CouponApi couponApi; @Resource private MemberUserApi memberUserApi; - + @Resource + private AdminUserApi adminUserApi; + @Resource + private NotifyMessageSendApi notifyMessageSendApi; @Resource private TradeOrderProperties tradeOrderProperties; @@ -123,7 +137,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 计算订单价格 * - * @param userId 用户编号 + * @param userId 用户编号 * @param settlementReqVO 结算信息 * @return 订单价格 */ @@ -162,7 +176,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 校验收件地址是否存在 * - * @param userId 用户编号 + * @param userId 用户编号 * @param addressId 收件地址编号 * @return 收件地址 */ @@ -181,7 +195,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { order.setStatus(TradeOrderStatusEnum.UNPAID.getStatus()); order.setType(TradeOrderTypeEnum.NORMAL.getType()); order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); - order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); + order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); order.setTerminal(TerminalEnum.H5.getTerminal()); // todo 数据来源? // 支付信息 order.setAdjustPrice(0).setPayed(false); @@ -201,12 +215,12 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 执行创建完创建完订单后的逻辑 - * + *

* 例如说:优惠劵的扣减、积分的扣减、支付单的创建等等 * - * @param userId 用户编号 - * @param createReqVO 创建订单请求 - * @param tradeOrderDO 交易订单 + * @param userId 用户编号 + * @param createReqVO 创建订单请求 + * @param tradeOrderDO 交易订单 * @param calculateRespBO 订单价格计算结果 */ private void afterCreateTradeOrder(Long userId, AppTradeOrderCreateReqVO createReqVO, @@ -265,11 +279,11 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 校验交易订单满足被支付的条件 - * + *

* 1. 交易订单未支付 * 2. 支付单已支付 * - * @param id 交易订单编号 + * @param id 交易订单编号 * @param payOrderId 支付订单编号 * @return 交易订单 */ @@ -324,8 +338,11 @@ public class TradeOrderServiceImpl implements TradeOrderService { public void deliveryOrder(Long userId, TradeOrderDeliveryReqVO deliveryReqVO) { // 校验并获得交易订单(可发货) TradeOrderDO order = validateOrderDeliverable(deliveryReqVO.getId()); - - // TODO 芋艿:logisticsId 校验存在 + // TODO 芋艿:logisticsId 校验存在 发货物流公司 fix + DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(deliveryReqVO.getLogisticsId()); + if (deliveryExpress == null) { + throw exception(DELIVERY_EXPRESS_NOT_EXISTS); + } // 更新 TradeOrderDO 状态为已发货,等待收货 int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), @@ -338,8 +355,32 @@ public class TradeOrderServiceImpl implements TradeOrderService { // TODO 芋艿:发送订单变化的消息 - // TODO 芋艿:发送站内信 - + // TODO 芋艿:发送站内信 fix + // 1、获取模版编码为 order_delivery 的模版,判断是否存在 存在放回 true + if (!notifyMessageSendApi.validateNotifyTemplate("order_delivery")) { + // 1、1 站内信模版不存在则创建模版 + NotifyTemplateReqDTO templateReqDTO = new NotifyTemplateReqDTO(); + templateReqDTO.setName("订单发货通知模版"); + templateReqDTO.setCode("order_delivery"); + templateReqDTO.setType(NotifyTemplateTypeEnum.NOTIFICATION_MESSAGE.getType()); // 系统消息 + // 获取操作用户 + // AdminUserRespDTO user = adminUserApi.getUser(userId); + // templateReqDTO.setNickname(user.getNickname()); + templateReqDTO.setNickname(UserTypeEnum.ADMIN.getName()); + templateReqDTO.setContent("订单:{orderId}{msg}"); + templateReqDTO.setStatus(CommonStatusEnum.ENABLE.getStatus()); + notifyMessageSendApi.createNotifyTemplate(templateReqDTO); + } + // 2、构造消息 + Map msgMap = new HashMap<>(); + msgMap.put("orderId", deliveryReqVO.getId()); + msgMap.put("msg", TradeOrderStatusEnum.DELIVERED.getStatus()); + // 2、发送站内信 + notifyMessageSendApi.sendSingleMessageToAdmin( + new NotifySendSingleToUserReqDTO() + .setUserId(userId) + .setTemplateCode("order_delivery") + .setTemplateParams(msgMap)); // TODO 芋艿:OrderLog // TODO 设计:like:是否要单独一个 delivery 发货单表??? @@ -349,7 +390,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 校验交易订单满足被发货的条件 - * + *

* 1. 交易订单未发货 * * @param id 交易订单编号 @@ -363,7 +404,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { } // 校验订单是否是待发货状态 if (!TradeOrderStatusEnum.isUndelivered(order.getStatus()) - || ObjectUtil.notEqual(order.getDeliveryStatus(), TradeOrderDeliveryStatusEnum.UNDELIVERED.getStatus())) { + || ObjectUtil.notEqual(order.getDeliveryStatus(), TradeOrderDeliveryStatusEnum.UNDELIVERED.getStatus())) { throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_UNDELIVERED); } return order; @@ -397,11 +438,11 @@ public class TradeOrderServiceImpl implements TradeOrderService { /** * 校验交易订单满足可售货的条件 - * + *

* 1. 交易订单待收货 * * @param userId 用户编号 - * @param id 交易订单编号 + * @param id 交易订单编号 * @return 交易订单 */ private TradeOrderDO validateOrderReceivable(Long userId, Long id) { @@ -476,7 +517,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { public void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus, Integer refundPrice) { // 如果退款成功,则 refundPrice 非空 if (Objects.equals(newAfterSaleStatus, TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()) - && refundPrice == null) { + && refundPrice == null) { throw new IllegalArgumentException(StrUtil.format("id({}) 退款成功,退款金额不能为空", id)); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java index facedfade..8e816d880 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApi.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.api.notify; import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; +import cn.iocoder.yudao.module.system.api.notify.dto.NotifyTemplateReqDTO; import javax.validation.Valid; @@ -27,4 +28,8 @@ public interface NotifyMessageSendApi { */ Long sendSingleMessageToMember(@Valid NotifySendSingleToUserReqDTO reqDTO); + + boolean validateNotifyTemplate(String orderDelivery); + + void createNotifyTemplate(NotifyTemplateReqDTO templateReqDTO); } diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifyTemplateReqDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifyTemplateReqDTO.java new file mode 100644 index 000000000..09d5b6fff --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/notify/dto/NotifyTemplateReqDTO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.system.api.notify.dto; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.validation.InEnum; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class NotifyTemplateReqDTO { + + @NotEmpty(message = "模版名称不能为空") + private String name; + + @NotNull(message = "模版编码不能为空") + private String code; + + @NotNull(message = "模版类型不能为空") + private Integer type; + + @NotEmpty(message = "发送人名称不能为空") + private String nickname; + + @NotEmpty(message = "模版内容不能为空") + private String content; + + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "状态必须是 {value}") + private Integer status; + + private String remark; + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeEnum.java new file mode 100644 index 000000000..dccfb1977 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeEnum.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.system.enums.notify; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 通知模板类型枚举 + * + * @author HUIHUI + */ +@Getter +@AllArgsConstructor +public enum NotifyTemplateTypeEnum { + + /** + * 系统消息 + */ + SYSTEM_MESSAGE(2), + /** + * 通知消息 + */ + NOTIFICATION_MESSAGE(1); + + private final Integer type; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApiImpl.java index fc5ba1d12..ee169a1c3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/notify/NotifyMessageSendApiImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.system.api.notify; import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; -import cn.iocoder.yudao.module.system.service.notify.NotifyMessageService; +import cn.iocoder.yudao.module.system.api.notify.dto.NotifyTemplateReqDTO; import cn.iocoder.yudao.module.system.service.notify.NotifySendService; import org.springframework.stereotype.Service; @@ -30,4 +30,14 @@ public class NotifyMessageSendApiImpl implements NotifyMessageSendApi { reqDTO.getTemplateCode(), reqDTO.getTemplateParams()); } + @Override + public boolean validateNotifyTemplate(String orderDelivery) { + return false; + } + + @Override + public void createNotifyTemplate(NotifyTemplateReqDTO templateReqDTO) { + + } + }