fix:完善 TODO 提到的问题

This commit is contained in:
puhui999 2023-06-07 18:08:49 +08:00
parent db7e47faa2
commit 5bfca56efa
6 changed files with 141 additions and 21 deletions

View File

@ -23,7 +23,6 @@
<artifactId>yudao-module-trade-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-product-api</artifactId>
@ -44,6 +43,11 @@
<artifactId>yudao-module-member-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-system-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件 -->
<dependency>

View File

@ -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 {
/**
* 执行创建完创建完订单后的逻辑
*
* <p>
* 例如说优惠劵的扣减积分的扣减支付单的创建等等
*
* @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 {
/**
* 校验交易订单满足被支付的条件
*
* <p>
* 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")) {
// 11 站内信模版不存在则创建模版
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<String, Object> 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 {
/**
* 校验交易订单满足被发货的条件
*
* <p>
* 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 {
/**
* 校验交易订单满足可售货的条件
*
* <p>
* 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));
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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) {
}
}