1.首先實現的效果如下


2.所有訂單頁的連接為:http://shop1.cnsaws.com.cn/shop/mb/order/initialize進入到前端頁面
@RequestMapping(value = "/initialize")
public String initialize(String orderStatus, Model model) {
model.addAttribute("orderStatus", orderStatus);
return "/shopmobile/buyer/smallshop/order/mine-order";
}
注意上方的標紅區域可以看出向頁面傳輸了一個訂單狀態,進入訂單的初始化頁面之后,會異步請求訂單數據
<div class="pro_nav bg_white clearfix fl wp82 order_nav db_l s_09 bg_white">
<a href="javascript:;" class="orderStatus ptb15 js-nav active">全部</a>
<a href="javascript:;" class="orderStatus ptb15 js-nav" orderStatus="DFK">待付款<i class="count"></i></a>
<a href="javascript:;" class="orderStatus ptb15 js-nav" orderStatus="DFH">待發貨<i class="count"></i></a>
<a href="javascript:;" class="orderStatus ptb15 js-nav" orderStatus="TKZ">退款中<i class="count"></i></a>
<span id="orderStatusLine" class="bd_line tc js-line" style="transform: translate3d(0px, 0px, 0px);"><!--<em class="iconfont icon-iconjiantoushang t_orange"></em>--></span>
</div>
</div>
<div class="pro_list lists orderListContent">
</div>
注意上方的標紅區域,這個類涉及到局部刷新
commonPage("/shop/mb/smallshopgoods/order/list","page-content");
后台:
@RequestMapping(value = "/list")
public String list(Orders orderVo, String searchType, Page<Orders> page, Model model) {
// 只能查當前登錄用戶的訂單數據
orderVo.setSellerId(ShiroUserUtil.getShiroUserId());
sellerOrdersService.findSoldOrders(orderVo, page);
model.addAttribute("page", page);
model.addAttribute("searchType", searchType);
model.addAttribute("orderVo", orderVo);
OwnerUserDomain ownerUserDomain = ownerUserDomainService.getSubDomainName(ShiroUserUtil.getProductSerialNumber());
if (!EmptyUtil.isNullOrEmpty(ownerUserDomain)) {
String urlLink = "";
if (request.getServerPort() == 80) {
urlLink = request.getScheme() + "://" + ownerUserDomain.getId() + request.getContextPath();
} else {
urlLink = request.getScheme() + "://" + ownerUserDomain.getId() + ":" + request.getServerPort() + request.getContextPath();
}
model.addAttribute("urlLink", urlLink);
}
return "/shopmobile/buyer/smallshop/order/sold-order-list";
}
上面的控制器調用了一個服務:
public List<Orders> findSoldOrders(Orders orderVo, Page<Orders> page) {
if (EmptyUtil.isNullOrEmpty(orderVo)) {
return null;
}
StringBuilder jpql = new StringBuilder();
Map<String, Object> params = new HashMap<String, Object>();
// 查詢訂單信息
jpql.append("select o from Orders o where o.enableFlag =:enableFlag ");
params.put("enableFlag", EnableFlag.YES);
// 微店訂單查詢,微店訂單查詢VO中不能設置sellerId
if (!EmptyUtil.isNullOrEmpty(orderVo.getSellerId())) {
jpql.append("and (o.sellerId =:sellerId or (exists (select (1) from SmallShopGoodsRelation sr where sr.id = o.smallShopRelationId and sr.sellerId =:smallSellerId and sr.enableFlag = 'YES')) ) ");
params.put("sellerId", orderVo.getSellerId());
params.put("smallSellerId", orderVo.getSellerId());
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getOrderStatus())) { // 如果查詢條件是待評價的狀態則需要查待評價以及買家已評兩種狀態的訂單 jpql.append("and o.orderStatus =:orderStatus "); params.put("orderStatus", orderVo.getOrderStatus()); } if (!EmptyUtil.isNullOrEmpty(orderVo.getDiscussStatus())) { jpql.append("and (o.discussStatus =:discussStatus or o.discussStatus =:discussStatus2) and o.orderStatus =:orderStatus "); params.put("discussStatus", orderVo.getDiscussStatus()); params.put("discussStatus2", DiscussStatus.BUYYER_YP); params.put("orderStatus", OrderStatus.YWC); }
if (!EmptyUtil.isNullOrEmpty(orderVo.getDiscussStatusSearch())) { jpql.append("and (o.discussStatus =:discussStatusSearch) and o.orderStatus =:orderStatus2 "); params.put("discussStatusSearch", orderVo.getDiscussStatusSearch()); params.put("orderStatus2", OrderStatus.YWC); }
if (!EmptyUtil.isNullOrEmpty(orderVo.getHasRefund())) { jpql.append("and o.hasRefund =:hasRefund "); params.put("hasRefund", orderVo.getHasRefund()); }
if (!EmptyUtil.isNullOrEmpty(orderVo.getOrderNo())) {
jpql.append("and o.orderNo like :orderNo ");
params.put("orderNo", "%" + orderVo.getOrderNo() + "%");
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getBuyerName())) {
jpql.append("and o.buyerName like :buyerName ");
params.put("buyerName", "%" + orderVo.getBuyerName() + "%");
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getAcceptName())) {
jpql.append("and o.acceptName like :acceptName ");
params.put("acceptName", "%" + orderVo.getAcceptName() + "%");
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getGoodsName())) {
jpql.append("and EXISTS (select 1 from OrderGoods og,Goods g where og.orderId = o.id and og.goodsId = g.id and g.goodsName like :goodsName) ");
params.put("goodsName", "%" + orderVo.getGoodsName() + "%");
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getOperatorUserId())) {
jpql.append("and EXISTS (select 1 from OrderGoods og,Goods g where og.orderId = o.id and og.goodsId = g.id and g.createUserId =:operatorUserId)");
params.put("operatorUserId", orderVo.getOperatorUserId());
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getMobile())) {
jpql.append("and o.mobile like :mobile ");
params.put("mobile", "%" + orderVo.getMobile() + "%");
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getStartTime())) {
jpql.append("and o.createTime >= :startTime ");
params.put("startTime", orderVo.getStartTime());
}
if (!EmptyUtil.isNullOrEmpty(orderVo.getEndTime())) {
jpql.append("and o.createTime <= :endTime ");
params.put("endTime", DateUtil.getMaxtimeOfDay(orderVo.getEndTime()));
}
jpql.append("order by o.createTime desc");
page = this.dao.findPage(page, jpql.toString(), params);
if (EmptyUtil.isNullOrEmpty(page.getResult())) {
return page.getResult();
}
// 查詢訂單下面包含的訂單商品
for (Orders order : page.getResult()) {
order.setOrderGoodsList(orderGoodsServcie.findByOrderId(order.getId()));
order.setDeliveryDoc(deliveryDocService.getDeliverDocByOrderId(order.getId()));
}
return page.getResult();
}
實體類為:
@Entity
@Table(name = "PT_ORDERS")
public class Orders extends IdEntity {
/** serialVersionUID */
private static final long serialVersionUID = 6482808156442224292L;
/** 產品序列號 */
private String productSerialNumber;
/** 訂單號 */
private String orderNo;
/** 交易流水號 */
private String serialNumber;
/** 買家ID */
private String buyerId;
/** 買家用戶名:此字段為冗余字段 */
private String buyerName;
/** 賣家ID */
private String sellerId;
/** 賣家用戶名:此字段為冗余字段 */
private String sellerName;
/** 店鋪ID:b2c中此字段無值,b2b2c中預留 */
private String shopId;
/** 店鋪名稱:此字段為冗余字段,b2c中此字段無值,b2b2c中預留 */
private String shopName;
/**
* DFK("DFK", "待付款"), DFH("DFH", "待發貨"), DSH("DSH", "待收貨"), YWC("YWC", "交易成功"), YGB("YGB", "已關閉");
*/
private OrderStatus orderStatus;
/** HAVEPAY("HAVEPAY", "已支付"), NOPAY("NOPAY", "未支付"); */
private PayStatus payStatus;
/**
* DPJ("DPJ", "待評價"), BUYYER_YP("BUYYER_YP", "買家已評價"), SELLER_YP("SELLER_YP", "賣家已評價"), DOUBLE_YP("DOUBLE_YP", "雙方已評價");
*/
private DiscussStatus discussStatus;
/**
* 是否有追加評價{@link OAOConstants.YES}
*/
private String hasAddiDiscuss;
/**
* 是否存在退款商品 {@link OAOConstants.YES}
*/
private String hasRefund;
/** 收貨人姓名 */
private String acceptName;
/** 郵編 */
private String zipcode;
/** 聯系電話 */
private String telphone;
/** 手機 */
private String mobile;
/** 省 */
private String province;
/** 市 */
private String city;
/** 區 */
private String area;
/** 收貨詳細地址 */
private String receivingAddress;
/** 發貨點地址ID */
private String shipAddressId;
/** 退貨點地址ID */
private String refundAddressId;
/** 應付商品總金額 原始金額 */
private BigDecimal payableAmount = BigDecimal.ZERO;
/** 實付商品總金額 改價,優惠時改這個字段 */
private BigDecimal realAmount = BigDecimal.ZERO;
/** 使用積分數 */
private Integer useIntegral = 0;
/** 獲得積分數 */
private Integer getIntegral = 0;
/** 積分抵現總金額*/
private BigDecimal integralCash = BigDecimal.ZERO;
/** 總運費金額 原始金額 */
private BigDecimal payableFreight = BigDecimal.ZERO;
/** 實付運費 改價,優惠時改這個字段 */
private BigDecimal realFreight = BigDecimal.ZERO;
/** 會員折扣 */
private Double memberDiscount;
/** 付款時間 */
private Date payTime;
/** 發貨時間 */
private Date sendTime;
/** 系統自動確認收貨時間 */
private Date autoAcceptTime;
/** 是否有過延長確認收貨時間 默認;NO沒有,YES:有 */
private String hasProlong;
/** 下單時間 */
private Date createTime;
/** 用戶收貨時間 */
private Date acceptTime;
/** 訂單完成時間 */
private Date completionTime;
/** 用戶附言 */
private String postscript;
/** 管理員備注 */
private String note;
/** 付款方式*/
private String payType;
/** 訂單刪除狀態:NO:未刪除,RECYCLE:回收站,DELETE:已刪除 */
private DeleteStatus deleteStatus;
/** 一件代發 YES */
private String replaceSend;
/**是否是福氣商品訂單 YES,NO**/
private String isFuOrder;
/**
* 團購類型 COMMON普通團 LADDER階梯團 JOINT拼團 */
private String groupBuyOrder;
/**
* 是否執行了團購退款退款 (標記字段)
*/
private String isBackGroupBuy;
/**
* 下訂單時參團人數
*/
private Long groupBuyPersonsNum =0L;
/**福氣資格等級**/
private Integer fuGoodsLevel = 0;
/**
* 拼團邀請人用戶id
*/
private String joinShareUserId;
/**
* 門店app分享人id(店員分享人id)
*/
private String clerkShareUserId;
// 以下為非PO
/** 訂單商品 */
private List<OrderGoods> orderGoodsList = new ArrayList<OrderGoods>();
// 需要減庫存的貨品id 以及數量
private Map<String, Long> updateStoreProductIds = new HashMap<String, Long>();
// 已購買的所有的貨品id
private List<String> buyProductIdList = new ArrayList<String>();
/** 開始時間:查詢的接受參數*/
private Date startTime;
/** 結束時間:查詢的接受參數*/
private Date endTime;
/** 商品名稱:查詢的接受參數*/
private String goodsName;
/** 發貨信息*/
private DeliveryDoc deliveryDoc;
/**訂單來自哪里 :購物車*/
private String from;
/**收貨地址的id*/
private String recevieAddressId;
/**為訂單列表頁查詢條件所用*/
private DiscussStatus discussStatusSearch;
/**運維人員id**/
private String operatorUserId;
/** 微商品關系id,沒有此字段表示是微商品訂單**/
private String smallShopRelationId;
