Authored by sailing-PC\sailing

add status map data

... ... @@ -4,51 +4,105 @@ import com.google.common.collect.Lists;
import com.yohoufo.order.constants.OrderDetailDesc;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public enum OrderStatus {
WAITING_PAY(0,
"未付款",
WAITING_PAY(0, "未付款", new Node[]{
new Node(
"待付款",
Arrays.asList(ButtonShow.CANCEL_ORDER, ButtonShow.NOW_BUY),
Arrays.asList(ButtonShow.CANCEL_ORDER, ButtonShow.NOW_BUY),
OrderDetailDesc.NO_PAY),
OrderDetailDesc.NO_PAY
),
new Node(
"待买家付款",
Arrays.asList(ButtonShow.SHOW_DETAIL),
null,
OrderDetailDesc.Seller.BUYER_NO_PAY
)
}),
HAS_PAYED(1,
"已付款",
HAS_PAYED(1, "已付款", new Node[]{
new Node(
"商品调拨中",
Arrays.asList(ButtonShow.SHOW_DETAIL),
Lists.newArrayList(),
OrderDetailDesc.BUY_HAS_PAID),
SELLER_SEND_OUT(2,
"商品调拨中(卖家发货,可查物流)",
OrderDetailDesc.BUY_HAS_PAID
),
new Node(
"待发货",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.NOT_SOLD, ButtonShow.DELIVER_GOODS),
Arrays.asList(ButtonShow.NOT_SOLD, ButtonShow.DELIVER_GOODS),
OrderDetailDesc.Seller.BUYER_HAS_PAID
)
}),
SELLER_SEND_OUT(2, "商品调拨中(卖家发货,可查物流)", new Node[]{
new Node(
"商品调拨中",
Arrays.asList(ButtonShow.SHOW_DETAIL),
Lists.newArrayList(),
OrderDetailDesc.SELL_HAS_SENDED),
PLATFORM_CHECKING(3,
"有货平台鉴定中",
OrderDetailDesc.SELL_HAS_SENDED
),
new Node(
"已发货",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.SHOW_EXPRESS),
Arrays.asList(ButtonShow.SHOW_EXPRESS),
null
)
}),
PLATFORM_CHECKING(3, "有货平台鉴定中", new Node[]{
new Node(
"有货平台鉴定中",
Arrays.asList(ButtonShow.SHOW_DETAIL),
Lists.newArrayList(),
OrderDetailDesc.PLATFORM_SEND),
WAITING_RECEIVE(4,
"待收货",
OrderDetailDesc.PLATFORM_SEND
),
new Node(
"有货平台鉴定中",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.SHOW_EXPRESS),
Arrays.asList(ButtonShow.SHOW_EXPRESS),
OrderDetailDesc.Seller.IN_CHECK
)
}),
WAITING_RECEIVE(4, "待收货", new Node[]{
new Node(
"待收货",
Arrays.asList(ButtonShow.SHOW_EXPRESS, ButtonShow.CONFIRM_DELIVERY),
Arrays.asList(ButtonShow.SHOW_EXPRESS, ButtonShow.CONFIRM_DELIVERY),
OrderDetailDesc.CHECK_OK_SEND),
OrderDetailDesc.CHECK_OK_SEND
),
DONE(5,
"已完成",
new Node(
"交易成功",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.DEL_ORDER),
Arrays.asList( ButtonShow.DEL_ORDER),
OrderDetailDesc.Seller.TRADE_DONE
)
}),
DONE(5, "已完成", new Node[]{
new Node(
"交易成功",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.DONE),
OrderDetailDesc.DONE
),
new Node(
"交易成功",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.DEL_ORDER),
Arrays.asList( ButtonShow.DEL_ORDER),
OrderDetailDesc.Seller.TRADE_DONE
)
} ),
// TODO 这种状态不存在
// SELLER_CANCEL_BEFORE_PAY(10,
... ... @@ -58,40 +112,57 @@ public enum OrderStatus {
// Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
// ),
SELLER_CANCEL_AFTER_PAY(11,
"买家付款后卖家取消",
SELLER_CANCEL_AFTER_PAY(11, "买家付款后卖家取消", new Node[]{
new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.SELL_CANCEL_SEND),
OrderDetailDesc.SELL_CANCEL_SEND
),
buildFail4Seller(OrderDetailDesc.Seller.NO_SALE)
}
),
SEND_OUT_TIMEOUT(12,
"超时未发货取消",
SEND_OUT_TIMEOUT(12, "超时未发货取消", new Node[]{
new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.SELL_TIMETOUT_CANCEL),
OrderDetailDesc.SELL_TIMETOUT_CANCEL
),
buildFail4Seller(OrderDetailDesc.Seller.DELIVER_GOODS_TIMEOUT)
}
),
CHECKING_FAKE(13,
"鉴定不通过取消",
CHECKING_FAKE(13, "鉴定不通过取消", new Node[]{
new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.CHECK_FAKE),
OrderDetailDesc.CHECK_FAKE
),
buildFail4Seller(OrderDetailDesc.Seller.CHECK_FAIL)
}),
BUYER_CANCEL_BEFORE_PAY(14,
"支付前取消",
BUYER_CANCEL_BEFORE_PAY(14, "支付前取消", new Node[]{
new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.BUY_CANCEL),
BUYER_CANCEL_TIMEOUT(15,
"超时未支付取消",
"交易失败",
OrderDetailDesc.BUY_CANCEL
),
buildFail4Seller(OrderDetailDesc.Seller.BUYER_CANCEL)
}),
BUYER_CANCEL_TIMEOUT(15, "超时未支付取消", new Node[]{
new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.BUY_AGAIN, ButtonShow.DEL_ORDER),
OrderDetailDesc.BUY_TIMEOUT_CANCEL),
OrderDetailDesc.BUY_TIMEOUT_CANCEL
),
buildFail4Seller(OrderDetailDesc.Seller.BUYER_CANCEL_OF_TIMEOUT)
}),
// CUSTOMER_SERVICE(17,
// "客服取消",
... ... @@ -104,72 +175,105 @@ public enum OrderStatus {
String desc;
/**
* 列表or详情显示状态
*/
String statusStr;
/**
* 订单列表中的按钮
*/
List<ButtonShow> listButtons;
/**
* 详情的按钮
*/
List<ButtonShow> detailButtons;
Node[] nodes;
/**
* 详情页状态说明
*/
String detailDesc;
static Node buildFail4Seller(String detailDesc){
return new Node(
"交易失败",
Arrays.asList(ButtonShow.SHOW_DETAIL, ButtonShow.DEL_ORDER),
Arrays.asList(ButtonShow.DEL_ORDER),
detailDesc
);
}
/**
*
* @param code db中code
* @param desc db中code的含义
* @param statusStr 订单列表中状态显示
* @param listButtons 订单列表显示的按钮
* @param nodes db中code的含义
*/
OrderStatus(int code, String desc, String statusStr, List<ButtonShow> listButtons,
List<ButtonShow> detailButtons, String detailDesc) {
OrderStatus(int code, String desc, Node[] nodes) {
this.code = code;
this.desc = desc;
this.statusStr = statusStr;
this.listButtons = listButtons;
this.detailButtons = detailButtons;
this.detailDesc = detailDesc;
this.nodes = nodes;
}
public int getCode() {
return code;
}
private int getIndex(TabType actorType){
switch (actorType){
case BUY:
return 0;
case SELL:
return 1;
}
return -1;
}
public List<ButtonShow> getListButtons() {
return listButtons;
public List<ButtonShow> getListButtons(TabType actorType) {
return nodes[getIndex(actorType)].listButtons;
}
public List<ButtonShow> getDetailButtons() {
return detailButtons;
public List<ButtonShow> getDetailButtons(TabType actorType) {
return nodes[getIndex(actorType)].detailButtons;
}
public String getDetailDesc() {
return detailDesc;
public String getDetailDesc(TabType actorType) {
return nodes[getIndex(actorType)].detailDesc;
}
public String getStatusStr() {
return statusStr;
public String getStatusStr(TabType actorType) {
return nodes[getIndex(actorType)].statusStr;
}
public static OrderStatus getOrderStatus(int code){
static Map<Integer,OrderStatus> localcache;
static {
localcache = new HashMap<>();
for(OrderStatus v : values()){
if(v.code == code){
return v;
}
localcache.put(v.code, v);
}
}
public static OrderStatus getOrderStatus(int code){
return localcache.get(code);
}
public static class Node{
/**
* 列表or详情显示状态
*/
String statusStr;
/**
* 订单列表中的按钮
*/
List<ButtonShow> listButtons;
/**
* 详情的按钮
*/
List<ButtonShow> detailButtons;
/**
* 详情页状态说明
*/
String detailDesc;
public Node(String statusStr,
List<ButtonShow> listButtons,
List<ButtonShow> detailButtons,
String detailDesc) {
this.statusStr = statusStr;
this.listButtons = listButtons;
this.detailButtons = detailButtons;
this.detailDesc = detailDesc;
}
return null;
}
}
... ...
... ... @@ -58,4 +58,24 @@ public interface OrderDetailDesc {
* 非直接显示
*/
String DONE = OrderConstant.EXPRESS_SENDTIME_TO_QUERY;
interface Seller{
String TRADE_DONE = "您出售的商品鉴定通过,支付的保证金已退还至您的支付账户,货款已打入您的有货账户,亲注意查收";
String CHECK_FAIL = "您出售的商品鉴定未通过,商品已寄回,您支付的保证金已作为补偿赔付给买家";
String BUYER_CANCEL = "买家取消订单,您的商品已重新上架出售";
String BUYER_CANCEL_OF_TIMEOUT = "买家未在15分钟内付款,系统取消订单,您的商品已重新上架出售";
String DELIVER_GOODS_TIMEOUT = "您未在48小时内发货,系统取消订单,您支付的保证金作已为补偿赔付给买家";
String IN_CHECK = "有货鉴定中心已收货,您出售的商品正在鉴定中,如鉴定不通过则按您提供的收货地址寄回,您支付的保证金将作为补偿赔付给买家";
String NO_SALE = "您已取消商品出售,您支付的保证金作已为补偿赔付给买家";
String BUYER_HAS_PAID = "买家已付款,请于48小时内发货,超时发货系统自动取消订单并下架商品,您支付的保证金将作为补偿赔付给买家";
String BUYER_NO_PAY = "等待买家付款,15分钟未付款将自动取消订单并重新上架商品";
}
}
... ...
... ... @@ -65,7 +65,6 @@ public class BuyerOrderController {
.orderCode(orderCode)
.tabType(tabType)
.build();
return null;
}
}
... ...
... ... @@ -18,4 +18,6 @@ public class OrderListRequest {
int page;
int limit;
String tabType;
}
... ...
... ... @@ -16,4 +16,5 @@ public class OrderRequest {
long orderCode;
String tabType;
}
... ...
... ... @@ -66,6 +66,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
}
if (TabType.BUY != tabType){
//todo 对于卖家出售中的订单处理
return new OrderDetailInfo();
}
... ... @@ -103,19 +104,21 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
throw new ServiceException(ServiceError.ORDER_ORDERS_GOODS_IS_EMPTY);
}
OrderDetailInfo orderDetailInfo = buildOrderDetail(buyerOrder, orderStatus, buyerOrderGoods, sellerOrderGoods);
OrderDetailInfo orderDetailInfo = buildOrderDetail(buyerOrder, orderStatus, buyerOrderGoods, sellerOrderGoods, tabType);
return orderDetailInfo;
}
private OrderDetailInfo buildOrderDetail(BuyerOrder buyerOrder, OrderStatus orderStatus, BuyerOrderGoods buyerOrderGoods, SellerOrderGoods sellerOrderGoods) {
private OrderDetailInfo buildOrderDetail(BuyerOrder buyerOrder, OrderStatus orderStatus,
BuyerOrderGoods buyerOrderGoods, SellerOrderGoods sellerOrderGoods,
TabType tabType) {
OrderDetailInfo orderDetailInfo = new OrderDetailInfo();
orderDetailInfo.setUid(buyerOrder.getUid());
orderDetailInfo.setOrderCode(buyerOrder.getOrderCode());
orderDetailInfo.setButtons(orderStatus.getDetailButtons());
orderDetailInfo.setButtons(orderStatus.getDetailButtons(tabType));
OrderDetailInfo.StatusDetail statusDetail = getStatusDetail(buyerOrder, orderStatus);
OrderDetailInfo.StatusDetail statusDetail = getStatusDetail(buyerOrder, orderStatus, tabType);
orderDetailInfo.setStatusDetail(statusDetail);
GoodsInfo goodsInfo = getGoodsInfo(sellerOrderGoods);
orderDetailInfo.setGoodsInfo(goodsInfo);
... ... @@ -158,14 +161,14 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
* @param orderStatus
* @return
*/
private OrderDetailInfo.StatusDetail getStatusDetail(BuyerOrder buyerOrder,OrderStatus orderStatus) {
private OrderDetailInfo.StatusDetail getStatusDetail(BuyerOrder buyerOrder,OrderStatus orderStatus, TabType tabType) {
OrderDetailInfo.StatusDetail statusDetail = OrderDetailInfo.StatusDetail.builder()
.status(orderStatus.getCode())
.statuStr(orderStatus.getStatusStr())
.statuStr(orderStatus.getStatusStr(tabType))
.build();
// TODO 需要查询 时间点 and 物流定位
if (OrderConstant.EXPRESS_SENDTIME_TO_QUERY.equals(orderStatus.getDetailDesc())){
if (OrderConstant.EXPRESS_SENDTIME_TO_QUERY.equals(orderStatus.getDetailDesc(tabType))){
}
... ... @@ -187,7 +190,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
// check and init请求参数
List<Integer> statusQuery = initOrderListRequest(request);
TabType tabType = TabType.getTabType(request.getTabType());
int total = buyerOrderMapper.selectCntByUidStatus(request.getUid(), statusQuery);
int limit = request.getLimit();
... ... @@ -210,7 +213,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
List<OrderListInfo> data = Lists.newArrayList();
buyerOrderList.stream().forEach(buyerOrder -> {
OrderListInfo orderListInfo = convertOrderInfo(buyerOrderGoodsMap, sellerOrderGoodsMap, buyerOrder);
OrderListInfo orderListInfo = convertOrderInfo(buyerOrderGoodsMap, sellerOrderGoodsMap, buyerOrder, tabType);
if (orderListInfo == null) return;
data.add(orderListInfo);
... ... @@ -238,7 +241,8 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
*/
private OrderListInfo convertOrderInfo(Map<Long, BuyerOrderGoods> buyerOrderGoodsMap,
Map<Integer, SellerOrderGoods> sellerOrderGoodsMap,
BuyerOrder buyerOrder) {
BuyerOrder buyerOrder,
TabType tabType) {
/**
* 1.查询 buyer_order
... ... @@ -259,10 +263,10 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
return null;
}
orderListInfo.setStatuStr(orderStatus.getStatusStr());
orderListInfo.setStatuStr(orderStatus.getStatusStr(tabType));
// 按钮显示
orderListInfo.setButtons(orderStatus.getListButtons());
orderListInfo.setButtons(orderStatus.getListButtons(tabType));
// 当订单状态是待付款, 显示leftTime
if (orderListInfo.getStatus() == OrderStatus.WAITING_PAY.getCode()){
... ...