From ba11b8586b1f3a6b072d787719083a792e1d1671 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 03 Jul 2025 16:04:03 +0800
Subject: [PATCH] feat(mall): 添加衣速达订单相关功能

---
 src/main/java/cc/mrbird/febs/mall/dto/clothes/ApiClothesOrderListVoDto.java         |   29 +++
 src/main/java/cc/mrbird/febs/mall/mapper/ClothesOrderMapper.java                    |    7 
 src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderItemInfoVo.java         |   25 +++
 src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListVo.java             |   34 ++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java           |   23 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java     |   12 +
 src/main/java/cc/mrbird/febs/mall/entity/ClothesOrder.java                          |    2 
 src/main/resources/mapper/modules/ClothesOrderMapper.xml                            |   29 +++
 src/main/java/cc/mrbird/febs/mall/controller/clothes/ApiClothesOrderController.java |   29 +++
 src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java     |   13 +
 src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListInfoVo.java         |  104 +++++++++++++
 src/main/java/cc/mrbird/febs/mall/entity/MallExpressInfo.java                       |    2 
 src/main/java/cc/mrbird/febs/mall/service/ApiClothesOrderService.java               |   11 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesOrderServiceImpl.java      |  153 +++++++++++++++++-
 14 files changed, 448 insertions(+), 25 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/clothes/ApiClothesOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/clothes/ApiClothesOrderController.java
index f68f950..0ff92f2 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/clothes/ApiClothesOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/clothes/ApiClothesOrderController.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.mall.dto.clothes.*;
 import cc.mrbird.febs.mall.service.ApiClothesOrderService;
 import cc.mrbird.febs.mall.service.ApiClothesService;
+import cc.mrbird.febs.mall.vo.OrderDetailVo;
 import cc.mrbird.febs.mall.vo.OrderListVo;
 import cc.mrbird.febs.mall.vo.clothes.*;
 import io.swagger.annotations.Api;
@@ -86,10 +87,36 @@
             @ApiResponse(code = 200, message = "success", response = ApiClothesOrderPayVo.class)
     })
     @PostMapping(value = "/payOrder")
-    public FebsResponse payOrder(@RequestBody ApiClothesOrderPayDto dto) {
+    public FebsResponse payOrder(@RequestBody @Validated ApiClothesOrderPayDto dto) {
 
         return apiClothesOrderService.payOrder(dto);
     }
 
+    @ApiOperation(value = "订单列表", notes = "订单列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiClothesOrderListVo.class)
+    })
+    @PostMapping(value = "/orderList")
+    public FebsResponse orderList(@RequestBody @Validated ApiClothesOrderListVoDto dto) {
+
+        return apiClothesOrderService.findOrderList(dto);
+    }
+
+    @ApiOperation(value = "订单详情", notes = "订单详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiClothesOrderListInfoVo.class)
+    })
+    @GetMapping(value = "/orderDetails/{id}")
+    public FebsResponse orderDetails(@PathVariable("id") Long id) {
+
+        return apiClothesOrderService.orderDetails(id);
+    }
+
+    @ApiOperation(value = "确认收货", notes = "确认收货")
+    @PostMapping(value = "/confirm/{id}")
+    public FebsResponse confirm(@PathVariable("id") Long id) {
+        return apiClothesOrderService.confirmOrder(id);
+    }
+
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
index f1417d8..a868dc7 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/order/ViewMallOrderController.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.mall.entity.MallExpressInfo;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
 import cc.mrbird.febs.mall.entity.MallOrderRefund;
 import cc.mrbird.febs.mall.mapper.MallExpressInfoMapper;
 import cc.mrbird.febs.mall.mapper.MallInvoiceMapper;
@@ -17,6 +18,7 @@
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
@@ -82,9 +84,16 @@
     @RequiresPermissions("deliverGoods:update")
     public String deliverGoods(@PathVariable long id, Model model) {
         AdminMallOrderVo data = adminMallOrderService.getMallOrderInfoById(id);
+        MallOrderInfo mallOrderInfo = adminMallOrderService.getBaseMapper().selectById(id);
         data.setExpressCom("极兔快递");
-        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
-        if(ObjectUtil.isNotEmpty(mallExpressInfo)){
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, id)
+                        .eq(MallExpressInfo::getOrderNo, mallOrderInfo.getOrderNo())
+                        .last("limit 1")
+        );
+//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
+        if(ObjectUtil.isNotNull(mallExpressInfo)){
             data.setExpressNo(mallExpressInfo.getExpressNo());
             data.setExpressCom(mallExpressInfo.getExpressCom());
         }else{
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/clothes/ApiClothesOrderListVoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/clothes/ApiClothesOrderListVoDto.java
new file mode 100644
index 0000000..ff147fb
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/clothes/ApiClothesOrderListVoDto.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.mall.dto.clothes;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiClothesOrderListVoDto", description = "参数")
+public class ApiClothesOrderListVoDto {
+
+    @NotNull(message = "页码不能为空")
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @NotNull(message = "每页数量不能为空")
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索参数", example = "1")
+    private String query;
+
+    @ApiModelProperty(value = "订单状态", example = "状态 1-待支付 2-待发货 3-待收货 4-已完成 5-已取消")
+    private Integer status;
+
+    @ApiModelProperty(hidden = true)
+    private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/ClothesOrder.java b/src/main/java/cc/mrbird/febs/mall/entity/ClothesOrder.java
index 6b56495..0d0e73a 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/ClothesOrder.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/ClothesOrder.java
@@ -8,7 +8,7 @@
 import java.util.Date;
 
 @Data
-@TableName("clothes_order_graft")
+@TableName("clothes_order")
 public class ClothesOrder extends BaseEntity {
     /**
      *
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallExpressInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallExpressInfo.java
index b632a13..09fe17a 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallExpressInfo.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallExpressInfo.java
@@ -17,6 +17,8 @@
 
     private Long memberId;
 
+    private String orderNo;
+
     private String expressNo;
 
     private String expressCom;
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesOrderMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesOrderMapper.java
index 1219d6f..5a4d2bd 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/ClothesOrderMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/ClothesOrderMapper.java
@@ -1,7 +1,14 @@
 package cc.mrbird.febs.mall.mapper;
 
+import cc.mrbird.febs.mall.dto.clothes.ApiClothesOrderListVoDto;
 import cc.mrbird.febs.mall.entity.ClothesOrder;
+import cc.mrbird.febs.mall.vo.clothes.ApiClothesOrderListVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 
 public interface ClothesOrderMapper extends BaseMapper<ClothesOrder> {
+
+    Page<ApiClothesOrderListVo> selectPageInOrder(Page<ApiClothesOrderListVo> page,  @Param("record")ApiClothesOrderListVoDto dto);
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/ApiClothesOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/ApiClothesOrderService.java
index dc4bb2c..77d2fbe 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/ApiClothesOrderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/ApiClothesOrderService.java
@@ -1,10 +1,7 @@
 package cc.mrbird.febs.mall.service;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.mall.dto.clothes.ApiClothesOrderDraftDto;
-import cc.mrbird.febs.mall.dto.clothes.ApiClothesOrderInfoDto;
-import cc.mrbird.febs.mall.dto.clothes.ApiClothesOrderPayDto;
-import cc.mrbird.febs.mall.dto.clothes.ApiMyDraftPageDto;
+import cc.mrbird.febs.mall.dto.clothes.*;
 import cc.mrbird.febs.mall.entity.ClothesOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -25,4 +22,10 @@
     FebsResponse delOrder(Long id);
 
     FebsResponse payOrder(ApiClothesOrderPayDto dto);
+
+    FebsResponse findOrderList(ApiClothesOrderListVoDto dto);
+
+    FebsResponse orderDetails(Long id);
+
+    FebsResponse confirmOrder(Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
index 030d529..7ace13c 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -17,6 +17,7 @@
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -140,8 +141,15 @@
     @Override
     public AdminOrderDetailVo getMallOrderDetailById(long id) {
         AdminOrderDetailVo adminOrderDetailVo = mallOrderInfoMapper.getMallOrderDetailById(id);
-        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
-        if(ObjectUtil.isNotEmpty(mallExpressInfo)){
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, id)
+                        .eq(MallExpressInfo::getOrderNo, adminOrderDetailVo.getOrderNo())
+                        .last("limit 1")
+        );
+
+//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
+        if(ObjectUtil.isNotNull(mallExpressInfo)){
             adminOrderDetailVo.setExpressNo(mallExpressInfo.getExpressNo());
             adminOrderDetailVo.setExpressCom(mallExpressInfo.getExpressCom());
         }
@@ -496,9 +504,15 @@
         if(StrUtil.isEmpty(expressCom)){
             return new FebsResponse().fail().message("请输入物流公司");
         }
-        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, mallOrderInfo.getId())
+                        .eq(MallExpressInfo::getOrderNo, mallOrderInfo.getOrderNo())
+                        .last("limit 1")
+        );
+//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
 
-        if(ObjectUtil.isEmpty(mallExpressInfo)){
+        if(ObjectUtil.isNull(mallExpressInfo)){
             return new FebsResponse().fail().message("请先发货");
         }
         mallExpressInfo.setExpressNo(expressNo);
@@ -584,6 +598,7 @@
         MallExpressInfo mallExpressInfo = new MallExpressInfo();
         mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
         mallExpressInfo.setOrderId(mallOrderInfo.getId());
+        mallExpressInfo.setOrderNo(deliverGoodsDto.getOrderNo());
         mallExpressInfo.setExpressNo(deliverGoodsDto.getExpressNo());
         mallExpressInfo.setExpressCom(deliverGoodsDto.getExpressCom());
         mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode());
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesOrderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesOrderServiceImpl.java
index 59d82e7..e0a46d9 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesOrderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiClothesOrderServiceImpl.java
@@ -14,14 +14,14 @@
 import cc.mrbird.febs.mall.service.ApiClothesOrderService;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
-import cc.mrbird.febs.mall.vo.clothes.ApiClothesOrderInfoVo;
-import cc.mrbird.febs.mall.vo.clothes.ApiClothesOrderPayVo;
-import cc.mrbird.febs.mall.vo.clothes.ApiMyDraftVo;
+import cc.mrbird.febs.mall.vo.clothes.*;
 import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
 import cc.mrbird.febs.pay.service.IPayService;
 import cc.mrbird.febs.pay.service.IXcxPayService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
@@ -65,6 +65,7 @@
     private final MallAddressInfoMapper mallAddressInfoMapper;
     private final MallMemberCouponMapper mallMemberCouponMapper;
     private final MallGoodsCouponMapper mallGoodsCouponMapper;
+    private final MallExpressInfoMapper mallExpressInfoMapper;
 
     private final AgentProducer agentProducer;
     private final IXcxPayService iXcxPayService;
@@ -460,9 +461,13 @@
                 throw new FebsException("详情参数错误");
             }
         }
-        /**
-         *  计算优惠金额、运费和实际支付金额
-         */
+
+        total = total.multiply(new BigDecimal(orderInfo.getGoodsCnt())).setScale(2, RoundingMode.DOWN);
+        orderInfo.setAmount(total);
+
+                /**
+                 *  计算优惠金额、运费和实际支付金额
+                 */
         BigDecimal discountAmount = BigDecimal.ZERO;
         MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
         if(ObjectUtil.isNotEmpty(dto.getMemberCouponId())){
@@ -484,13 +489,12 @@
                 orderInfo.setMemberCouponId(memberCouponId);
             }
         }
-        BigDecimal deliveryAmount = dto.getDeliveryAmount() == null ? BigDecimal.ZERO : dto.getDeliveryAmount();
-
-        orderInfo.setAmount(total);
         orderInfo.setDiscountAmount(discountAmount);
+
+        BigDecimal deliveryAmount = dto.getDeliveryAmount() == null ? BigDecimal.ZERO : dto.getDeliveryAmount();
         orderInfo.setCarriage(deliveryAmount);
 
-        BigDecimal realAmount = total.subtract(discountAmount).add(deliveryAmount);
+        BigDecimal realAmount = total.subtract(discountAmount).add(deliveryAmount).setScale(2, RoundingMode.DOWN);
         orderInfo.setRealAmount(realAmount);
         clothesOrderMapper.updateById(orderInfo);
 
@@ -550,6 +554,7 @@
         if(
                 ObjectUtil.isNotNull(clothesOrder)
                 && ClothesEnum.DOWN.getCode() == clothesOrder.getDelFlag()
+                && ClothesOrderStatusEnum.CANCEL.getValue() == clothesOrder.getStatus()
         ){
             clothesOrderMapper.update(null,
                     Wrappers.lambdaUpdate(ClothesOrder.class)
@@ -677,4 +682,132 @@
         return new FebsResponse().success().data(apiClothesOrderPayVo).message("支付成功");
     }
 
+    @Override
+    public FebsResponse findOrderList(ApiClothesOrderListVoDto dto) {
+
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+        dto.setMemberId(memberId);
+
+
+        // 创建分页对象,传入当前页和每页大小
+        Page<ApiClothesOrderListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+        // 调用Mapper方法获取活动分页数据
+        Page<ApiClothesOrderListVo> voPage = clothesOrderMapper.selectPageInOrder(page, dto);
+
+        return new FebsResponse().success().data(voPage);
+    }
+
+
+
+    private List<ApiClothesOrderItemInfoVo> buildOrderItemInfo(Long id) {
+        List<ApiClothesOrderItemInfoVo> vos = new ArrayList<>();
+        List<ClothesOrderItem> clothesOrderItems = clothesOrderItemMapper.selectList(
+                Wrappers.lambdaQuery(ClothesOrderItem.class)
+                        .eq(ClothesOrderItem::getOrderId, id)
+        );
+        if(CollUtil.isNotEmpty(clothesOrderItems)){
+            for (ClothesOrderItem item : clothesOrderItems) {
+                ApiClothesOrderItemInfoVo vo = new ApiClothesOrderItemInfoVo();
+                vo.setName(item.getName());
+                vo.setPrice(item.getPrice());
+                vo.setType(item.getType());
+                vo.setRemark(item.getRemark());
+
+
+                vos.add( vo);
+            }
+        }
+        return vos;
+
+    }
+
+    @Override
+    public FebsResponse orderDetails(Long id) {
+
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        ApiClothesOrderListInfoVo apiClothesOrderListInfoVo = new ApiClothesOrderListInfoVo();
+
+        ClothesOrder clothesOrder = clothesOrderMapper.selectById(id);
+        if(ObjectUtil.isNull(clothesOrder)){
+            throw new FebsException("订单不存在");
+        }
+        apiClothesOrderListInfoVo.setId(clothesOrder.getId());
+        apiClothesOrderListInfoVo.setOrderNo(clothesOrder.getOrderNo());
+        apiClothesOrderListInfoVo.setOrderTime(clothesOrder.getOrderTime());
+        apiClothesOrderListInfoVo.setAmount(clothesOrder.getAmount());
+        apiClothesOrderListInfoVo.setRealAmount(clothesOrder.getRealAmount());
+
+        ClothesType clothesType = clothesTypeMapper.selectById(clothesOrder.getTypeId());
+        if(ObjectUtil.isNotNull(clothesType)){
+            apiClothesOrderListInfoVo.setTypeName(clothesType.getName());
+            apiClothesOrderListInfoVo.setTypeImage(clothesType.getImage());
+        }
+
+        apiClothesOrderListInfoVo.setGoodsCnt(clothesOrder.getGoodsCnt());
+        apiClothesOrderListInfoVo.setPayMethod(clothesOrder.getPayMethod());
+        apiClothesOrderListInfoVo.setStatus(clothesOrder.getStatus());
+
+        apiClothesOrderListInfoVo.setLongitude(clothesOrder.getLongitude());
+        apiClothesOrderListInfoVo.setLatitude(clothesOrder.getLatitude());
+        apiClothesOrderListInfoVo.setName(clothesOrder.getName());
+        apiClothesOrderListInfoVo.setPhone(clothesOrder.getPhone());
+        apiClothesOrderListInfoVo.setAddress(clothesOrder.getAddress());
+
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, clothesOrder.getId())
+                        .eq(MallExpressInfo::getOrderNo, clothesOrder.getOrderNo())
+                        .last("limit 1")
+        );
+        if(ObjectUtil.isNotNull(mallExpressInfo)){
+            apiClothesOrderListInfoVo.setExpressNo(mallExpressInfo.getExpressNo());
+            apiClothesOrderListInfoVo.setExpressCom(mallExpressInfo.getExpressCom());
+        }
+
+        List<ApiClothesOrderItemInfoVo> items = buildOrderItemInfo(clothesOrder.getId());
+        apiClothesOrderListInfoVo.setItems(items);
+
+        if (OrderStatusEnum.WAIT_PAY.getValue() == clothesOrder.getStatus()) {
+            Date endTime = DateUtil.offsetMinute(clothesOrder.getOrderTime(), 1440);
+
+            long remainTime = DateUtil.between(new Date(), endTime, DateUnit.SECOND, false);
+            apiClothesOrderListInfoVo.setRemainTime(remainTime);
+        }
+        apiClothesOrderListInfoVo.setCarriage(clothesOrder.getCarriage());
+        apiClothesOrderListInfoVo.setRemark(clothesOrder.getRemark());
+        apiClothesOrderListInfoVo.setCommentState(clothesOrder.getCommentState());
+
+        return new FebsResponse().success().data(apiClothesOrderListInfoVo);
+    }
+
+    @Override
+    public FebsResponse confirmOrder(Long id) {
+        MallMember member = LoginUserUtil.getLoginUser();
+
+        ClothesOrder orderInfo =clothesOrderMapper.selectById(id);
+        if(ObjectUtil.isNull(orderInfo)){
+            throw new FebsException("订单不存在");
+        }
+        if (member.getId() != orderInfo.getMemberId()) {
+            throw new FebsException("无权限操作");
+        }
+        if (ClothesEnum.UP.getCode() == orderInfo.getDelFlag()) {
+            throw new FebsException("订单不存在");
+        }
+
+        if (orderInfo.getStatus() != ClothesOrderStatusEnum.WAIT_FINISH.getValue()) {
+            throw new FebsException("订单不是待收货状态");
+        }
+
+        clothesOrderMapper.update(null,
+                Wrappers.lambdaUpdate(ClothesOrder.class)
+                .set(ClothesOrder::getStatus, OrderStatusEnum.FINISH.getValue())
+                .set(ClothesOrder::getUpdatedTime, new Date())
+                .eq(ClothesOrder::getId, id)
+                .eq(ClothesOrder::getMemberId, member.getId())
+                );
+        return new FebsResponse().success().message("操作成功");
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 031f3a6..e7e5c42 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -34,6 +34,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -871,8 +872,15 @@
             }
         }
 
-        MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
-        if(ObjectUtil.isNotEmpty(expressInfo)){
+        MallExpressInfo expressInfo = expressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, orderInfo.getId())
+                        .eq(MallExpressInfo::getOrderNo, orderInfo.getOrderNo())
+                        .last("limit 1")
+        );
+
+//        MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
+        if(ObjectUtil.isNotNull(expressInfo)){
             orderDetailVo.setExpressNo(expressInfo.getExpressNo());
             orderDetailVo.setExpressCom(expressInfo.getExpressCom());
         }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderItemInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderItemInfoVo.java
new file mode 100644
index 0000000..f8f5a05
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderItemInfoVo.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.vo.clothes;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "ApiClothesOrderItemInfoVo", description = "参数")
+public class ApiClothesOrderItemInfoVo {
+
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "类型 1图案 2图案位置 3工艺 4布料 5尺码 6尺码自定义")
+    private Integer type;
+
+    @ApiModelProperty(value = "订单编号")
+    private String remark;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListInfoVo.java
new file mode 100644
index 0000000..4bd0569
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListInfoVo.java
@@ -0,0 +1,104 @@
+package cc.mrbird.febs.mall.vo.clothes;
+
+import cc.mrbird.febs.mall.vo.OrderItemVo;
+import cc.mrbird.febs.mall.vo.OrderRefundVo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(value = "ApiClothesOrderListInfoVo", description = "参数")
+public class ApiClothesOrderListInfoVo {
+
+
+    @ApiModelProperty(value = "订单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "下单时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date orderTime;
+
+    @ApiModelProperty(value = "总价")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "实付款")
+    private BigDecimal realAmount;
+
+    @ApiModelProperty(value = "类型名称")
+    private String typeName;
+
+    @ApiModelProperty(value = "类型图片")
+    private String typeImage;
+
+    @ApiModelProperty(value = "数量")
+    private Integer goodsCnt;
+
+    @ApiModelProperty(value = "支付方式")
+    private String payMethod;
+
+    public Integer getPayMethodType() {
+        if (this.payMethod == null) {
+            return 0;
+        }
+        switch (this.payMethod) {
+            case "微信支付" :
+                return 1;
+            case "支付宝支付" :
+                return 2;
+            case "余额支付" :
+                return 3;
+            default:
+                return 3;
+        }
+    }
+
+    @ApiModelProperty(value = "支付方式类型")
+    private Integer payMethodType;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "送货上门经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "送货上门纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "收货人姓名")
+    private String name;
+
+    @ApiModelProperty(value = "收货人电话")
+    private String phone;
+
+    @ApiModelProperty(value = "收货人地址")
+    private String address;
+
+    @ApiModelProperty(value = "物流单号")
+    private String expressNo;
+
+    @ApiModelProperty(value = "物流公司")
+    private String expressCom;
+
+    @ApiModelProperty(value = "订单明细")
+    private List<ApiClothesOrderItemInfoVo> items;
+
+    @ApiModelProperty(value = "剩余时间")
+    private Long remainTime;
+
+    @ApiModelProperty(value = "运费")
+    private BigDecimal carriage;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "分享社区 1:待分享 2:已分享")
+    private Integer commentState;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListVo.java
new file mode 100644
index 0000000..57e967c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/clothes/ApiClothesOrderListVo.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.mall.vo.clothes;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "ApiClothesOrderListVo", description = "参数")
+public class ApiClothesOrderListVo {
+
+    @ApiModelProperty(value = "订单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "总价")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "实付款")
+    private BigDecimal realAmount;
+
+    @ApiModelProperty(value = "类型名称")
+    private String typeName;
+
+    @ApiModelProperty(value = "类型图片")
+    private String typeImage;
+
+    @ApiModelProperty(value = "数量")
+    private Integer goodsCnt;
+
+    @ApiModelProperty(value = "订单状态", example = "状态 1-待支付 2-待发货 3-待收货 4-已完成 5-已取消")
+    private Integer status;
+
+}
diff --git a/src/main/resources/mapper/modules/ClothesOrderMapper.xml b/src/main/resources/mapper/modules/ClothesOrderMapper.xml
index 4edd12c..7e48374 100644
--- a/src/main/resources/mapper/modules/ClothesOrderMapper.xml
+++ b/src/main/resources/mapper/modules/ClothesOrderMapper.xml
@@ -2,6 +2,33 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cc.mrbird.febs.mall.mapper.ClothesOrderMapper">
 
-
+    <select id="selectPageInOrder" resultType="cc.mrbird.febs.mall.vo.clothes.ApiClothesOrderListVo">
+        select
+            a.id as id,
+            a.amount as amount,
+            a.real_amount as realAmount,
+            a.status as status,
+            b.name as typeName,
+            b.image as typeImage,
+            a.goods_cnt as goodsCnt
+        from clothes_order_graft a
+        left join clothes_type b on a.type_id = b.id
+        <where>
+            and a.member_id = #{record.memberId}
+            <if test="record != null">
+                <if test="record.query != null and record.query != ''">
+                    and (
+                        b.name like CONCAT('%', CONCAT(#{record.query}, '%')) or
+                    )
+                </if>
+                <if test="record.status != null">
+                    and (
+                        a.status  = #{record.status}
+                    )
+                </if>
+            </if>
+        </where>
+        order by a.CREATED_TIME desc
+    </select>
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1