From 138e3641fbe49a114a399323aa145774f310627e Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Fri, 11 Jul 2025 18:06:31 +0800
Subject: [PATCH] 订单信息优化

---
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java |    2 
 oying-system/src/main/resources/config/application-dev.yml                                        |    2 
 oying-system/src/main/resources/mapper/sh/OrderMapper.xml                                         |  141 ++++++++++++++++++++---
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java                  |   15 +
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java                  |   25 +++
 oying-system/src/main/java/com/oying/modules/sh/domain/Order.java                                 |   33 +++++
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java                         |   12 --
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java                |    6 +
 oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java                   |   10 +
 oying-system/src/main/resources/config/application-prod.yml                                       |    2 
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java |    4 
 oying-system/src/main/java/com/oying/modules/system/service/impl/MerchantServiceImpl.java         |    2 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java                |   40 ++++++
 oying-system/src/main/java/com/oying/modules/system/domain/Merchant.java                          |    1 
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java                           |    2 
 oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml                          |    9 
 16 files changed, 254 insertions(+), 52 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
index d1893bd..21544b0 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
@@ -1,5 +1,6 @@
 package com.oying.modules.sh.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.oying.base.BaseEntity;
 import cn.hutool.core.bean.BeanUtil;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,6 +9,9 @@
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.Objects;
+import java.util.Set;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -28,6 +32,10 @@
     @ApiModelProperty(value = "主键")
     private Long orderId;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "用户角色")
+    private Set<OrderProductSnapshot> productSnapshots;
+
     @NotBlank
     @ApiModelProperty(value = "订单号")
     private String orderNum;
@@ -39,6 +47,13 @@
     @NotBlank
     @ApiModelProperty(value = "订单状态描述")
     private String orderStatusDescribe;
+
+    @ApiModelProperty(value = "订单状态描述")
+    private String orderRemark;
+
+    @NotBlank
+    @ApiModelProperty(value = "预计送达时间")
+    private String orderTime;
 
     @NotNull
     @ApiModelProperty(value = "用户id")
@@ -116,6 +131,24 @@
     @ApiModelProperty(value = "签名")
     private String paySign;
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Order user = (Order) o;
+        return Objects.equals(orderId, user.orderId) &&
+                Objects.equals(orderNum, user.orderNum);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(orderId, username);
+    }
+
     public void copy(Order source){
         BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
     }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java
index 4c25323..e1afb75 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java
@@ -1,6 +1,5 @@
 package com.oying.modules.sh.domain;
 
-import lombok.Data;
 import cn.hutool.core.bean.BeanUtil;
 import io.swagger.annotations.ApiModelProperty;
 import cn.hutool.core.bean.copier.CopyOptions;
@@ -8,16 +7,20 @@
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
 * @description /
 * @author lixin
 * @date 2025-06-11
 **/
-@Data
+@Getter
+@Setter
 @TableName("sh_order_address_snapshot")
 public class OrderAddressSnapshot implements Serializable {
 
@@ -26,8 +29,8 @@
     private Long snapshotId;
 
     @NotNull
-    @ApiModelProperty(value = "订单ID")
-    private Long orderId;
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
 
     @NotBlank
     @ApiModelProperty(value = "收货人姓名")
@@ -49,6 +52,10 @@
     @ApiModelProperty(value = "街道")
     private String street;
 
+    @ApiModelProperty(value = "短地址")
+    @NotBlank
+    private String shortAddress;
+
     @NotBlank
     @ApiModelProperty(value = "详细地址")
     private String detail;
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
index a9a2237..f3eb947 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
@@ -1,6 +1,5 @@
 package com.oying.modules.sh.domain;
 
-import lombok.Data;
 import cn.hutool.core.bean.BeanUtil;
 import io.swagger.annotations.ApiModelProperty;
 import cn.hutool.core.bean.copier.CopyOptions;
@@ -8,16 +7,21 @@
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.Objects;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
 * @description /
 * @author lixin
 * @date 2025-06-11
 **/
-@Data
+@Getter
+@Setter
 @TableName("sh_order_product_snapshot")
 public class OrderProductSnapshot implements Serializable {
 
@@ -86,6 +90,23 @@
     @ApiModelProperty(value = "状态")
     private String payState;
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        OrderProductSnapshot snapshot = (OrderProductSnapshot) o;
+        return Objects.equals(snapshotId, snapshot.snapshotId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(snapshotId);
+    }
+
     public void copy(OrderProductSnapshot source){
         BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
     }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java
index 4f28d07..e7b91a0 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java
@@ -16,6 +16,6 @@
     @ApiModelProperty(value = "每页数据量", example = "10")
     private Integer size = 10;
 
-    @ApiModelProperty(value = "订单ID")
-    private Long orderId;
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
index 2aadb4a..76e8eee 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
@@ -18,6 +18,9 @@
     @ApiModelProperty(value = "每页数据量", example = "10")
     private Integer size = 10;
 
+    @ApiModelProperty(value = "商品模糊查询")
+    private String blurry;
+
     @ApiModelProperty(value = "订单状态")
     private Integer orderStatus;
 
@@ -43,4 +46,7 @@
     private String payType;
     private List<String> payTime;
     private List<Timestamp> createTime;
+
+    @ApiModelProperty(value = "偏移量", hidden = true)
+    private long offset;
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java b/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
index 7119f9d..03bb2da 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
@@ -5,7 +5,8 @@
 import lombok.Getter;
 import lombok.Setter;
 
-import java.sql.Timestamp;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
@@ -17,16 +18,21 @@
 @Setter
 public class SubmitOrder {
 
+    @NotNull(message = "地址不能为空")
     @ApiModelProperty(value = "地址ID")
     private Long addressId;
+    @NotBlank(message = "送达时间不能为空")
     @ApiModelProperty(value = "送达时间")
-    private Timestamp dateTime;
+    private String dateTime;
+    @NotNull(message = "门店不能为空")
     @ApiModelProperty(value = "门店ID")
     private Long storeId;
+    @NotNull(message = "商品不能为空")
     @ApiModelProperty(value = "商品&数量")
     private List<ProductOrder> products;
     @ApiModelProperty(value = "备注")
     private String remark;
+    @NotBlank(message = "支付类型不能为空")
     @ApiModelProperty(value = "支付类型")
     private PayTypeEnum payType;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java
index e7fb24b..a879aba 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java
@@ -21,6 +21,8 @@
 
     List<Order> findAll(@Param("criteria") OrderQueryCriteria criteria);
 
+    Long countAll(@Param("criteria") OrderQueryCriteria criteria);
+
     Order getByOrderNum(String orderNum);
 
     void updatePayStatus(String orderNum, String payState, String payMessage, String payTime);
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
index 3ee152d..4bee5be 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
@@ -1,7 +1,6 @@
 package com.oying.modules.sh.rest;
 
 import com.oying.annotation.Log;
-import com.oying.exception.BadRequestException;
 import com.oying.modules.sh.domain.request.GeneratorOrder;
 import com.oying.modules.sh.domain.request.SubmitOrder;
 import com.oying.modules.sh.service.OrderService;
@@ -48,17 +47,6 @@
     @ApiOperation("查询订单信息")
     @PreAuthorize("@el.check('order:list')")
     public ResponseEntity<Object> queryOrder(OrderQueryCriteria criteria) {
-        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
-        return new ResponseEntity<>(R.success(orderService.queryAll(criteria, page)), HttpStatus.OK);
-    }
-
-    @GetMapping("app")
-    @ApiOperation("APP:查询订单信息")
-    @PreAuthorize("@el.check('order:list')")
-    public ResponseEntity<Object> appQueryOrder(OrderQueryCriteria criteria) {
-        if (criteria.getStoreId() == null) {
-            throw new BadRequestException("请选择门店");
-        }
         Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
         return new ResponseEntity<>(R.success(orderService.queryAll(criteria, page)), HttpStatus.OK);
     }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java
index a137b6f..6438a09 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java
@@ -70,7 +70,7 @@
         List<Map<String, Object>> list = new ArrayList<>();
         for (OrderAddressSnapshot orderAddressSnapshot : all) {
             Map<String, Object> map = new LinkedHashMap<>();
-            map.put("订单ID", orderAddressSnapshot.getOrderId());
+            map.put("订单号", orderAddressSnapshot.getOrderNum());
             map.put("收货人姓名", orderAddressSnapshot.getReceiverName());
             map.put("收货人电话", orderAddressSnapshot.getReceiverPhone());
             map.put("省份", orderAddressSnapshot.getProvince());
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
index aaae919..243f9ea 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
@@ -10,12 +10,15 @@
 import com.oying.modules.pc.store.domain.Store;
 import com.oying.modules.pc.store.service.StoreService;
 import com.oying.modules.sh.domain.Order;
+import com.oying.modules.sh.domain.OrderAddressSnapshot;
 import com.oying.modules.sh.domain.OrderProductSnapshot;
+import com.oying.modules.sh.domain.UserAddress;
 import com.oying.modules.sh.domain.request.GeneratorOrder;
 import com.oying.modules.sh.domain.request.ProductOrder;
 import com.oying.modules.sh.domain.request.SubmitOrder;
 import com.oying.modules.sh.domain.vo.OrderInfo;
 import com.oying.modules.sh.domain.vo.ProductInfo;
+import com.oying.modules.sh.service.OrderAddressSnapshotService;
 import com.oying.modules.sh.service.OrderProductSnapshotService;
 import com.oying.modules.sh.service.UserAddressService;
 import com.oying.utils.*;
@@ -53,13 +56,17 @@
     private final ProductService productService;
     private final SwiftPassService swiftPassService;
     private final OrderProductSnapshotService productSnapshotService;
+    private final OrderAddressSnapshotService addressSnapshotService;
     private final RedisUtils redisUtils;
     private final StoreService storeService;
     private final static String DESCRIBE = "哦应:";
 
     @Override
     public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) {
-        return PageUtil.toPage(orderMapper.findAll(criteria, page));
+        criteria.setOffset(page.offset());
+        List<Order> list = orderMapper.findAll(criteria);
+        Long total = orderMapper.countAll(criteria);
+        return PageUtil.toPage(list, total);
     }
 
     @Override
@@ -70,8 +77,12 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public synchronized Order submitOrder(SubmitOrder submit, HttpServletRequest request) {
-        if (!submit.getPayType().equals(PayTypeEnum.HWC)) {
-            throw new BadRequestException("支付类型暂未开放");
+        switch (submit.getPayType()) {
+            case HWC:
+            case HWC2:
+                break;
+            default:
+                throw new BadRequestException("支付类型暂未开放");
         }
         String orderNum = redisUtils.generateOrderSn(GenerateEnum.ORDER.getKey());
         // 总金额
@@ -82,7 +93,6 @@
         OrderInfo info = generatorOrder(generator);
         // 商品快照
         List<OrderProductSnapshot> snapshots = new ArrayList<>();
-
         for (ProductInfo productInfo : info.getProducts()) {
             Product product = productInfo.getProduct();
             OrderProductSnapshot snapshot = new OrderProductSnapshot();
@@ -117,6 +127,8 @@
         order.setOrderNum(orderNum);
         order.setOrderStatus(OrderStatusEnum.ZERO.getKey());
         order.setOrderStatusDescribe(OrderStatusEnum.ZERO.getValue());
+        order.setOrderRemark(submit.getRemark() != null ? submit.getRemark() : "");
+        order.setOrderTime(submit.getDateTime());
         order.setUserId(SecurityUtils.getCurrentUserId());
         order.setUsername(SecurityUtils.getCurrentUsername());
         Store store = storeService.getById(submit.getStoreId());
@@ -150,11 +162,31 @@
             order.setPayMessage(PayStateEnum.SUCCESS.getValue());
             order.setPayTime(DateUtil.localDateTimeFormat(now.toLocalDateTime(), DateUtil.SDF_YMDHMS));
         }
+        UserAddress address = userAddressService.getById(submit.getAddressId());
+        OrderAddressSnapshot snapshot = getOrderAddressSnapshot(orderNum, address);
+        addressSnapshotService.save(snapshot);
         orderMapper.insert(order);
         productSnapshotService.saveBatch(snapshots);
         return order;
     }
 
+    private static OrderAddressSnapshot getOrderAddressSnapshot(String orderNum, UserAddress address) {
+        OrderAddressSnapshot snapshot = new OrderAddressSnapshot();
+        snapshot.setOrderNum(orderNum);
+        snapshot.setReceiverName(address.getReceiverName());
+        snapshot.setReceiverPhone(address.getReceiverPhone());
+        snapshot.setProvince(address.getProvince() != null ? address.getProvince() : "");
+        snapshot.setCity(address.getCity() != null ? address.getCity() : "");
+        snapshot.setDistrict(address.getDistrict() != null ? address.getDistrict() : "");
+        snapshot.setStreet(address.getStreet() != null ? address.getStreet() : "");
+        snapshot.setShortAddress(address.getShortAddress());
+        snapshot.setDetail(address.getDetail());
+        snapshot.setLongitude(address.getLongitude());
+        snapshot.setLatitude(address.getLatitude());
+        snapshot.setTag(address.getTag());
+        return snapshot;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public synchronized OrderInfo generatorOrder(GeneratorOrder criteria) {
diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/Merchant.java b/oying-system/src/main/java/com/oying/modules/system/domain/Merchant.java
index 3c6a316..7d443e4 100644
--- a/oying-system/src/main/java/com/oying/modules/system/domain/Merchant.java
+++ b/oying-system/src/main/java/com/oying/modules/system/domain/Merchant.java
@@ -34,7 +34,6 @@
     @ApiModelProperty(value = "名称")
     private String merchantName;
 
-    @NotBlank
     @ApiModelProperty(value = "商户编码")
     private String merchantCode;
 
diff --git a/oying-system/src/main/java/com/oying/modules/system/service/impl/MerchantServiceImpl.java b/oying-system/src/main/java/com/oying/modules/system/service/impl/MerchantServiceImpl.java
index f8e0219..fc2cc34 100644
--- a/oying-system/src/main/java/com/oying/modules/system/service/impl/MerchantServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/system/service/impl/MerchantServiceImpl.java
@@ -1,5 +1,6 @@
 package com.oying.modules.system.service.impl;
 
+import cn.hutool.core.util.IdUtil;
 import com.oying.modules.system.domain.Merchant;
 import com.oying.modules.system.domain.UserMerchant;
 import com.oying.modules.system.mapper.MerchantMapper;
@@ -47,6 +48,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void create(Merchant resources) {
+        resources.setMerchantCode(IdUtil.getSnowflakeNextIdStr());
         merchantMapper.insert(resources);
         UserMerchant userMerchant = new UserMerchant();
         userMerchant.setMerchantId(resources.getMerchantId());
diff --git a/oying-system/src/main/resources/config/application-dev.yml b/oying-system/src/main/resources/config/application-dev.yml
index afb8b1c..36ab729 100644
--- a/oying-system/src/main/resources/config/application-dev.yml
+++ b/oying-system/src/main/resources/config/application-dev.yml
@@ -173,7 +173,7 @@
   # 支付通知地址
   notify-url: http://1.95.124.88:8088/api/swiftPass/alipayCallback
   # 退款通知地址
-  refund-url: https://1.95.124.88:8088/api/swiftPass/returnNotify
+  refund-url: http://1.95.124.88:8088/api/swiftPass/returnNotify
 
 obs:
   access_key_id: RZ1UIOZDZ58DD4NWPD6Q
diff --git a/oying-system/src/main/resources/config/application-prod.yml b/oying-system/src/main/resources/config/application-prod.yml
index 2f4bb75..02030c1 100644
--- a/oying-system/src/main/resources/config/application-prod.yml
+++ b/oying-system/src/main/resources/config/application-prod.yml
@@ -184,7 +184,7 @@
   # 支付通知地址
   notify-url: http://1.95.124.88:8088/api/swiftPass/alipayCallback
   # 退款通知地址
-  refund-url: https://1.95.124.88:8088/api/swiftPass/returnNotify
+  refund-url: http://1.95.124.88:8088/api/swiftPass/returnNotify
 
 obs:
   access_key_id: RZ1UIOZDZ58DD4NWPD6Q
diff --git a/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml
index 10dd77d..c7d07c8 100644
--- a/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml
+++ b/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml
@@ -3,13 +3,14 @@
 <mapper namespace="com.oying.modules.sh.mapper.OrderAddressSnapshotMapper">
     <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderAddressSnapshot">
         <id column="snapshot_id" property="snapshotId"/>
-        <result column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
         <result column="receiver_name" property="receiverName"/>
         <result column="receiver_phone" property="receiverPhone"/>
         <result column="province" property="province"/>
         <result column="city" property="city"/>
         <result column="district" property="district"/>
         <result column="street" property="street"/>
+        <result column="short_address" property="shortAddress"/>
         <result column="detail" property="detail"/>
         <result column="longitude" property="longitude"/>
         <result column="latitude" property="latitude"/>
@@ -17,7 +18,7 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        snapshot_id, order_id, receiver_name, receiver_phone, province, city, district, street, detail, longitude, latitude, tag
+        snapshot_id, order_num, receiver_name, receiver_phone, province, city, district, street, short_address, detail, longitude, latitude, tag
     </sql>
 
     <select id="findAll" resultMap="BaseResultMap">
@@ -25,8 +26,8 @@
         <include refid="Base_Column_List"/>
         from sh_order_address_snapshot
         <where>
-            <if test="criteria.orderId != null">
-                and order_id = #{criteria.orderId}
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
             </if>
         </where>
         order by snapshot_id desc
diff --git a/oying-system/src/main/resources/mapper/sh/OrderMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
index 7162d03..bd2fb2c 100644
--- a/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
+++ b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
@@ -6,6 +6,8 @@
         <result column="order_num" property="orderNum"/>
         <result column="order_status" property="orderStatus"/>
         <result column="order_status_describe" property="orderStatusDescribe"/>
+        <result column="order_remark" property="orderRemark"/>
+        <result column="order_time" property="orderTime"/>
         <result column="user_id" property="userId"/>
         <result column="username" property="username"/>
         <result column="store_id" property="storeId"/>
@@ -31,63 +33,166 @@
         <result column="create_time" property="createTime"/>
         <result column="update_by" property="updateBy"/>
         <result column="update_time" property="updateTime"/>
+        <collection property="productSnapshots" ofType="com.oying.modules.sh.domain.OrderProductSnapshot">
+            <id column="snapshot_id" property="snapshotId"/>
+            <result column="product_id" property="productId"/>
+            <result column="product_code" property="productCode"/>
+            <result column="product_barcode" property="productBarcode"/>
+            <result column="product_name" property="productName"/>
+            <result column="product_title" property="productTitle"/>
+            <result column="product_main_image" property="productMainImage"/>
+            <result column="product_description" property="productDescription"/>
+            <result column="param_data" property="paramData"/>
+            <result column="unit_price" property="unitPrice"/>
+            <result column="detail_count" property="detailCount"/>
+            <result column="original_price" property="originalPrice"/>
+            <result column="paid_price" property="paidPrice"/>
+            <result column="actually_pay_price" property="actuallyPayPrice"/>
+            <result column="pay_state" property="payState"/>
+        </collection>
     </resultMap>
 
     <sql id="Base_Column_List">
-        order_id, order_num, order_status, order_status_describe, user_id, username, store_id, store_name, store_logo, order_describe, original_price, paid_price, actually_pay_price, pay_state, pay_message, pay_type, pay_time, expire_time, openid, app_id, timestamp, nonce_str, package_val, sign_type, pay_sign, create_by, create_time, update_by, update_time
+        o.order_id, o.order_num, o.order_status, o.order_status_describe, o.order_remark, o.order_time, o.user_id, o.username, o.store_id,
+        o.store_name, o.store_logo, o.order_describe, o.original_price, o.paid_price, o.actually_pay_price, o.pay_state, o.pay_message,
+        o.pay_type, o.pay_time, o.expire_time, o.openid, o.app_id, o.timestamp, o.nonce_str, o.package_val, o.sign_type, o.pay_sign,
+        o.create_by, o.create_time, o.update_by, o.update_time
+    </sql>
+
+    <sql id="product_Column_List">
+        p.snapshot_id, p.product_id, p.product_code, p.product_barcode, p.product_name, p.product_title,
+        p.product_main_image, p.product_description, p.param_data, p.unit_price, p.detail_count, p.original_price, p.paid_price,
+        p.actually_pay_price, p.pay_state
     </sql>
 
     <update id="updatePayStatus">
-        update sh_order set pay_state = #{payState}, pay_message = #{payMessage},
-                            pay_time = #{payTime} where order_num = #{orderNum}
+        update sh_order
+        set pay_state   = #{payState},
+            pay_message = #{payMessage},
+            pay_time    = #{payTime}
+        where order_num = #{orderNum}
     </update>
 
     <update id="updateCloseStatus">
-        update sh_order set pay_state = #{payState} where order_num = #{orderNum}
+        update sh_order
+        set pay_state = #{payState}
+        where order_num = #{orderNum}
     </update>
 
     <select id="findAll" resultMap="BaseResultMap">
+        select o.*,
+        <include refid="product_Column_List"/>
+        from (
         select
         <include refid="Base_Column_List"/>
-        from sh_order
+        from sh_order as o
         <where>
             <if test="criteria.orderNum != null and criteria.orderNum != ''">
-                and order_num like concat('%',#{criteria.orderNum},'%')
+                and o.order_num like concat('%',#{criteria.orderNum},'%')
             </if>
             <if test="criteria.orderStatus != null and criteria.orderStatus != ''">
-                and order_status = #{criteria.orderStatus}
+                and o.order_status = #{criteria.orderStatus}
             </if>
             <if test="criteria.userId != null and criteria.userId != ''">
-                and user_id = #{criteria.userId}
+                and o.user_id = #{criteria.userId}
             </if>
             <if test="criteria.username != null and criteria.username != ''">
-                and username like concat('%',#{criteria.username},'%')
+                and o.username like concat('%',#{criteria.username},'%')
             </if>
             <if test="criteria.storeId != null and criteria.storeId != ''">
-                and store_id = #{criteria.storeId}
+                and o.store_id = #{criteria.storeId}
             </if>
             <if test="criteria.orderDescribe != null and criteria.orderDescribe != ''">
-                and order_describe like concat('%',#{criteria.orderDescribe},'%')
+                and o.order_describe like concat('%',#{criteria.orderDescribe},'%')
             </if>
             <if test="criteria.payState != null and criteria.payState != ''">
-                and pay_state = #{criteria.payState}
+                and o.pay_state = #{criteria.payState}
             </if>
             <if test="criteria.payType != null and criteria.payType != ''">
-                and pay_type = #{criteria.payType}
+                and o.pay_type = #{criteria.payType}
             </if>
             <if test="criteria.payTime != null and criteria.payTime.size() > 0">
-                AND pay_time BETWEEN #{criteria.payTime[0]} AND #{criteria.payTime[1]}
+                AND o.pay_time BETWEEN #{criteria.payTime[0]} AND #{criteria.payTime[1]}
             </if>
             <if test="criteria.createTime != null and criteria.createTime.size() > 0">
-                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+                AND o.create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
             </if>
         </where>
-        order by order_id desc
+        order by o.order_id desc
+        <if test="criteria.offset != null">
+            limit #{criteria.offset}, #{criteria.size}
+        </if>
+        ) o
+        left join sh_order_product_snapshot as p on p.order_num = o.order_num
+        where 1=1
+        <if test="criteria.blurry != null and criteria.blurry != ''">
+            and (o.product_code like concat('%',#{criteria.blurry},'%')
+            or o.product_barcode like concat('%',#{criteria.blurry},'%')
+            or o.product_name like concat('%',#{criteria.blurry},'%')
+            or o.product_title like concat('%',#{criteria.blurry},'%')
+            or o.product_description like concat('%',#{criteria.blurry},'%'))
+        </if>
+        order by o.order_id desc
     </select>
     <select id="getByOrderNum" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
-        from sh_order
-        where order_num = #{orderNum}
+        from sh_order as o
+        where o.order_num = #{orderNum}
+    </select>
+    <select id="countAll" resultType="java.lang.Long">
+        select count(1)
+        from ( select distinct o.*,
+        p.product_code,
+        p.product_barcode,
+        p.product_name,
+        p.product_title,
+        p.product_description
+        from (
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order as o
+        <where>
+            <if test="criteria.orderNum != null and criteria.orderNum != ''">
+                and o.order_num like concat('%',#{criteria.orderNum},'%')
+            </if>
+            <if test="criteria.orderStatus != null and criteria.orderStatus != ''">
+                and o.order_status = #{criteria.orderStatus}
+            </if>
+            <if test="criteria.userId != null and criteria.userId != ''">
+                and o.user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.username != null and criteria.username != ''">
+                and o.username like concat('%',#{criteria.username},'%')
+            </if>
+            <if test="criteria.storeId != null and criteria.storeId != ''">
+                and o.store_id = #{criteria.storeId}
+            </if>
+            <if test="criteria.orderDescribe != null and criteria.orderDescribe != ''">
+                and o.order_describe like concat('%',#{criteria.orderDescribe},'%')
+            </if>
+            <if test="criteria.payState != null and criteria.payState != ''">
+                and o.pay_state = #{criteria.payState}
+            </if>
+            <if test="criteria.payType != null and criteria.payType != ''">
+                and o.pay_type = #{criteria.payType}
+            </if>
+            <if test="criteria.payTime != null and criteria.payTime.size() > 0">
+                AND o.pay_time BETWEEN #{criteria.payTime[0]} AND #{criteria.payTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND o.create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        ) o
+        left join sh_order_product_snapshot as p on p.order_num = o.order_num
+        where 1=1
+        <if test="criteria.blurry != null and criteria.blurry != ''">
+            and (p.product_code like concat('%',#{criteria.blurry},'%')
+            or p.product_barcode like concat('%',#{criteria.blurry},'%')
+            or p.product_name like concat('%',#{criteria.blurry},'%')
+            or p.product_title like concat('%',#{criteria.blurry},'%')
+            or p.product_description like concat('%',#{criteria.blurry},'%'))
+        </if>) t
     </select>
 </mapper>

--
Gitblit v1.9.3