添加订单接口

This commit is contained in:
2025-10-27 16:51:14 +08:00
parent a5a10898a2
commit 90e28f056a
20 changed files with 313 additions and 116 deletions

View File

@@ -46,6 +46,10 @@
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-trade-api</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-product-api</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>

View File

@@ -4,10 +4,9 @@ import cn.hutool.core.collection.CollUtil;
import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.memberapi.api.user.MemberUserApi;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderDetailRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;
import com.tashow.cloud.productapi.api.product.ProdApi;
import com.tashow.cloud.productapi.api.product.dto.ProdDO;
import com.tashow.cloud.trade.controller.admin.order.vo.*;
import com.tashow.cloud.trade.convert.order.TradeOrderConvert;
import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderDO;
import com.tashow.cloud.trade.dal.dataobject.order.TradeOrderItemDO;
@@ -20,10 +19,7 @@ import jakarta.annotation.security.PermitAll;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -49,9 +45,12 @@ public class TradeOrderController {
@Resource
private MemberUserApi memberUserApi;
@Resource
private ProdApi prodApi;
/**
* 获得交易订单分页
*
* @param reqVO
* @return
*/
@@ -73,6 +72,7 @@ public class TradeOrderController {
/**
* 获得交易订单详情
*
* @param id 订单编号
* @return
*/
@@ -92,10 +92,9 @@ public class TradeOrderController {
return success(TradeOrderConvert.INSTANCE.convert(order, orderItems, orderLogs));
}
//
/**
* 获得交易订单统计
*
* @return
*/
@GetMapping("/summary")
@@ -104,73 +103,58 @@ public class TradeOrderController {
public CommonResult<TradeOrderSummaryRespVO> getOrderSummary() {
return success(tradeOrderQueryService.getOrderSummary());
}
//
// // 获得交易订单的物流轨迹
// // id: 交易订单编号
// @GetMapping("/get-express-track-list")
/**
* 取消订单
*
* @return
*/
@PutMapping("/cancel")
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
// public CommonResult<List<?>> getOrderExpressTrackList(@RequestParam("id") Long id) {
// return success(TradeOrderConvert.INSTANCE.convertList02(
// tradeOrderQueryService.getExpressTrackList(id)));
// }
//
// // 订单发货
// @PutMapping("/delivery")
public CommonResult<Boolean> cancel(@RequestParam("id") Long id) {
return success(tradeOrderUpdateService.cancelOrderByAdmin(id));
}
// 订单备注
@PutMapping("/update-remark")
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> deliveryOrder(@RequestBody TradeOrderDeliveryReqVO deliveryReqVO) {
// tradeOrderUpdateService.deliveryOrder(deliveryReqVO);
// return success(true);
// }
//
// // 订单备注
// @PutMapping("/update-remark")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderRemark(@RequestBody TradeOrderRemarkReqVO reqVO) {
// tradeOrderUpdateService.updateOrderRemark(reqVO);
// return success(true);
// }
//
// // 订单调价
// @PutMapping("/update-price")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderPrice(@RequestBody TradeOrderUpdatePriceReqVO reqVO) {
// tradeOrderUpdateService.updateOrderPrice(reqVO);
// return success(true);
// }
//
// // 修改订单收货地址
// @PutMapping("/update-address")
// @PreAuthorize("@ss.hasPermission('trade:order:update')")
// public CommonResult<Boolean> updateOrderAddress(@RequestBody TradeOrderUpdateAddressReqVO reqVO) {
// tradeOrderUpdateService.updateOrderAddress(reqVO);
// return success(true);
// }
//
// // 订单核销
// // id: 交易订单编号
// @PutMapping("/pick-up-by-id")
// @PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
// public CommonResult<Boolean> pickUpOrderById(@RequestParam("id") Long id) {
// tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), id);
// return success(true);
// }
//
// // 订单核销
// // pickUpVerifyCode: 自提核销码
// @PutMapping("/pick-up-by-verify-code")
// @PreAuthorize("@ss.hasPermission('trade:order:pick-up')")
// public CommonResult<Boolean> pickUpOrderByVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
// tradeOrderUpdateService.pickUpOrderByAdmin(getLoginUserId(), pickUpVerifyCode);
// return success(true);
// }
//
// // 查询核销码对应的订单
// // pickUpVerifyCode: 自提核销码
// @GetMapping("/get-by-pick-up-verify-code")
public CommonResult<Boolean> updateOrderRemark(@RequestBody TradeOrderRemarkReqVO reqVO) {
tradeOrderUpdateService.updateOrderRemark(reqVO);
return success(true);
}
/**
* 交易快照
*
* @return
*/
@GetMapping("/fastPhoto")
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
// public CommonResult<TradeOrderDetailRespVO> getByPickUpVerifyCode(@RequestParam("pickUpVerifyCode") String pickUpVerifyCode) {
// TradeOrderDO tradeOrder = tradeOrderUpdateService.getByPickUpVerifyCode(pickUpVerifyCode);
// return success(TradeOrderConvert.INSTANCE.convert2(tradeOrder, null));
// }
public CommonResult<TradeOrderFastPhotoRespVo> fastPhoto(TradeOrderFastPhotoReqVo reqVo) {
//获取交易订单详情
TradeOrderItemDO orderItem = tradeOrderQueryService.getOrderItem(reqVo.getItemId());
//获取产品详情
ProdDO prodInfo = prodApi.getProdInfo(reqVo.getSpuId());
return success(TradeOrderConvert.INSTANCE.convert(orderItem,prodInfo));
}
/**
* 服务信息修改记录
*
* @return
*/
@GetMapping("/subTimeLog")
@PermitAll
// @PreAuthorize("@ss.hasPermission('trade:order:query')")
public CommonResult<TradeOrderFastPhotoRespVo> subTimeLog(TradeOrderFastPhotoReqVo reqVo) {
//获取交易订单详情
TradeOrderItemDO orderItem = tradeOrderQueryService.getOrderItem(reqVo.getItemId());
//获取产品详情
return success(TradeOrderConvert.INSTANCE.convert(orderItem,null));
}
}

View File

@@ -0,0 +1,12 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import lombok.Data;
@Data
public class TradeOrderFastPhotoReqVo {
//订单项id
private Long itemId;
//产品id
private Long spuId;
}

View File

@@ -0,0 +1,20 @@
package com.tashow.cloud.trade.controller.admin.order.vo;
import lombok.Data;
@Data
public class TradeOrderFastPhotoRespVo {
//产品主图
private String pic;
//产品轮播图
private String imgs;
//商品名称
private String spuName;
//商品概述
private String brief;
//sku
private String skuName;
//商品详细描述
private String content;
}

View File

@@ -3,7 +3,6 @@ package com.tashow.cloud.trade.convert.order;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.util.collection.CollectionUtils;
import com.tashow.cloud.common.util.date.LocalDateTimeUtils;
@@ -14,6 +13,7 @@ import com.tashow.cloud.memberapi.api.address.dto.MemberAddressRespDTO;
import com.tashow.cloud.memberapi.api.user.dto.MemberUserRespDTO;
import com.tashow.cloud.payapi.api.order.dto.PayOrderCreateReqDTO;
import com.tashow.cloud.payapi.enums.DictTypeConstants;
import com.tashow.cloud.productapi.api.product.dto.ProdDO;
import com.tashow.cloud.trade.controller.admin.base.member.user.MemberUserRespVO;
import com.tashow.cloud.trade.controller.admin.order.vo.*;
import com.tashow.cloud.trade.controller.app.order.vo.*;
@@ -36,7 +36,6 @@ import com.tashow.cloud.tradeapi.enums.order.TradeOrderStatusEnum;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.time.LocalDateTime;
@@ -107,21 +106,17 @@ public interface TradeOrderConvert {
}
return orderVO;
}
// @Mappings(
// @Mapping(target ="items.tradeServeInfo", source = "tradeServeInfo",qualifiedByName = "jsonToMap")
// )
TradeOrderDetailRespVO convert2(TradeOrderDO order, List<TradeOrderItemDO> items, List<TradeOrderLogDO> statusList);
//endregion
@Named("jsonToMap")
default Map<String, Object> jsonToMap(String json) {
try {
return new ObjectMapper().readValue(json, Map.class);
} catch (Exception e) {
throw new RuntimeException("json转换map出错", e);
}
}
//region修改订单
TradeOrderDO convert(TradeOrderRemarkReqVO reqVO);
//endregion
//region 订单快照
TradeOrderFastPhotoRespVo convert(TradeOrderItemDO itemDO, ProdDO prodDO);
//endregion
@Mappings({
@@ -272,7 +267,7 @@ public interface TradeOrderConvert {
TradeOrderDO convert(TradeOrderUpdatePriceReqVO reqVO);
TradeOrderDO convert(TradeOrderRemarkReqVO reqVO);
default BrokerageAddReqBO convert(MemberUserRespDTO user, TradeOrderItemDO item,
ProductSpuRespDTO spu, ProductSkuRespDTO sku) {

View File

@@ -0,0 +1,44 @@
package com.tashow.cloud.trade.dal.dataobject.order;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.time.LocalDateTime;
/**
* 订单预约时间修改记录 DO
*
* @author 芋道源码
*/
@TableName("tz_trade_sub_log")
@KeySequence("tz_trade_sub_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TradeSubLogDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 用户编号
*/
private Long userId;
/**
* 订单号
*/
private Long orderId;
/**
* 预约时间
*/
private LocalDateTime subTime;
}

View File

@@ -0,0 +1,15 @@
package com.tashow.cloud.trade.dal.mysql.order;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import com.tashow.cloud.trade.dal.dataobject.order.TradeSubLogDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 订单预约时间修改记录 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface TradeSubLogMapper extends BaseMapperX<TradeSubLogDO> {
}

View File

@@ -6,6 +6,7 @@ import com.tashow.cloud.payapi.api.order.PayOrderApi;
import com.tashow.cloud.payapi.api.refund.PayRefundApi;
import com.tashow.cloud.payapi.api.transfer.PayTransferApi;
import com.tashow.cloud.payapi.api.wallet.PayWalletApi;
import com.tashow.cloud.productapi.api.product.ProdApi;
import com.tashow.cloud.systemapi.api.notify.NotifyMessageSendApi;
import com.tashow.cloud.systemapi.api.social.SocialClientApi;
import com.tashow.cloud.systemapi.api.social.SocialUserApi;
@@ -16,6 +17,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {
MemberUserApi.class, MemberAddressApi.class,
ProdApi.class,
PayOrderApi.class, PayRefundApi.class, PayTransferApi.class, PayWalletApi.class,
AdminUserApi.class, NotifyMessageSendApi.class, SocialClientApi.class, SocialUserApi.class
})

View File

@@ -2,6 +2,7 @@ package com.tashow.cloud.trade.service.order;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderFastPhotoReqVo;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;
import com.tashow.cloud.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
@@ -157,4 +158,10 @@ public interface TradeOrderQueryService {
*/
List<TradeOrderItemDO> getOrderItemListByOrderId(Collection<Long> orderIds);
/**
* 获取订单交易快照
* @param reqVo
* @return
*/
TradeOrderItemDO getFastPhoto(TradeOrderFastPhotoReqVo reqVo);
}

View File

@@ -1,9 +1,11 @@
package com.tashow.cloud.trade.service.order;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderFastPhotoReqVo;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderPageReqVO;
import com.tashow.cloud.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;
import com.tashow.cloud.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
@@ -17,6 +19,7 @@ import com.tashow.cloud.trade.framework.delivery.core.client.ExpressClientFactor
import com.tashow.cloud.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO;
import com.tashow.cloud.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;
import com.tashow.cloud.trade.service.delivery.DeliveryExpressService;
import com.tashow.cloud.tradeapi.enums.order.TradeOrderRefundStatusEnum;
import com.tashow.cloud.tradeapi.enums.order.TradeOrderStatusEnum;
import com.tashow.cloud.tradeapi.enums.order.TradeOrderTypeEnum;
import jakarta.annotation.Resource;
@@ -238,4 +241,10 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
return SpringUtil.getBean(getClass());
}
@Override
public TradeOrderItemDO getFastPhoto(TradeOrderFastPhotoReqVo reqVo) {
return null;
}
}

View File

@@ -89,6 +89,12 @@ public interface TradeOrderUpdateService {
* @param id 订单编号
*/
void cancelOrderByMember(Long userId, Long id);
/**
* 【管理员】取消交易订单
*
* @param id 订单编号
*/
boolean cancelOrderByAdmin(Long id);
/**
* 【系统】自动取消订单

View File

@@ -511,19 +511,38 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
public void cancelOrderByMember(Long userId, Long id) {
// 1.1 校验存在
TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id,userId);
if (order == null) {
throw exception(ORDER_NOT_FOUND);
}
// 1.2 校验状态
// if (ObjectUtil.notEqual(order.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
// throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
// }
if (ObjectUtil.notEqual(order.getOrderStatus(), TradeOrderStatusEnum.WAITPAID.getStatus())) {
throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
}
// 2. 取消订单
cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
}
@Override
@Transactional(rollbackFor = Exception.class)
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ADMIN_CANCEL)
public boolean cancelOrderByAdmin(Long id) {
// 1.1 校验存在
TradeOrderDO order = tradeOrderMapper.selectById(id);
if (order == null) {
throw exception(ORDER_NOT_FOUND);
}
// 1.2 校验状态
if (ObjectUtil.notEqual(order.getOrderStatus(), TradeOrderStatusEnum.WAITPAID.getStatus())) {
throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
}
// 2. 取消订单
cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
return true;
}
@Override
public int cancelOrderBySystem() {
// 1. 查询过期的待支付订单

View File

@@ -0,0 +1,28 @@
package com.tashow.cloud.trade.service.order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tashow.cloud.trade.dal.dataobject.order.TradeSubLogDO;
/**
* 订单预约时间修改记录 Service 接口
*
* @author 芋道源码
*/
public interface TradeSubLogService extends IService<TradeSubLogDO> {
/**
* 删除订单预约时间修改记录
*
* @param id 编号
*/
void deleteTradeSubLog(Long id);
/**
* 获得订单预约时间修改记录
*
* @param id 编号
* @return 订单预约时间修改记录
*/
TradeSubLogDO getTradeSubLog(Long id);
}

View File

@@ -0,0 +1,41 @@
package com.tashow.cloud.trade.service.order;
import com.tashow.cloud.trade.dal.dataobject.order.TradeSubLogDO;
import com.tashow.cloud.trade.dal.mysql.order.TradeSubLogMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
/**
* 订单预约时间修改记录 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class TradeSubLogServiceImpl implements TradeSubLogService {
@Resource
private TradeSubLogMapper tradeSubLogMapper;
@Override
public void deleteTradeSubLog(Long id) {
// 校验存在
validateTradeSubLogExists(id);
// 删除
tradeSubLogMapper.deleteById(id);
}
private void validateTradeSubLogExists(Long id) {
if (tradeSubLogMapper.selectById(id) == null) {
// throw exception(TRADE_SUB_LOG_NOT_EXISTS);
}
}
@Override
public TradeSubLogDO getTradeSubLog(Long id) {
return tradeSubLogMapper.selectById(id);
}
}