/**
* Alipay.com Inc.
* Copyright (c) 2004-2017 All Rights Reserved.
*/
package com.koubei.demoapp.sell.tiny.app.web.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.AlipaySignature;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.koubei.demoapp.sell.tiny.app.core.constant.SystemConstant;
import com.koubei.demoapp.sell.tiny.app.core.dto.ItemDTO;
import com.koubei.demoapp.sell.tiny.app.core.dto.OrderItemDTO;
import com.koubei.demoapp.sell.tiny.app.core.dto.OrderSnapShotDTO;
import com.koubei.demoapp.sell.tiny.app.core.entity.Order;
import com.koubei.demoapp.sell.tiny.app.core.entity.Shop;
import com.koubei.demoapp.sell.tiny.app.core.enums.OrderStatusEnum;
import com.koubei.demoapp.sell.tiny.app.core.service.DishOrderSyncService;
import com.koubei.demoapp.sell.tiny.app.core.service.ItemService;
import com.koubei.demoapp.sell.tiny.app.core.service.OrderService;
import com.koubei.demoapp.sell.tiny.app.core.service.ShopService;
import com.koubei.demoapp.sell.tiny.app.web.Response;
import com.koubei.demoapp.sell.tiny.app.web.constant.OpenApiParam;
import com.koubei.demoapp.sell.tiny.app.web.vo.OrderInfoVO;
import com.koubei.demoapp.sell.tiny.app.web.vo.OrderListVO;
import com.koubei.demoapp.sell.tiny.app.web.vo.OrderPageVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author jianheng.hjh
* @version $Id: ItemController.java, v 0.1 2017-03-28 涓嬪崍5:29 jianheng.hjh Exp $$
*/
@RestController
@RequestMapping("/order")
public class OrderController {
private static final Logger logger = LoggerFactory.getLogger(OrderController.class);
@Autowired
private ItemService itemService;
@Autowired
private OrderService orderService;
@Autowired
private ShopService shopService;
@Autowired
private DishOrderSyncService dishOrderSyncService;
@Value("${alipay.signType}")
private String signType;
@Value("${alipay.version}")
private String version;
@RequestMapping("/pageData.json")
public Response getOrderData(@RequestParam String items) {
return new Response(genOrderDetail(items), 200, null);
}
@RequestMapping("/info.json")
public Response getOrderInfo(@RequestParam String orderNo) {
Order orderDTO = orderService.loadByOrderNO(orderNo);
OrderPageVO orderPageVO = new OrderPageVO();
orderPageVO.setOrderNo(orderNo);
OrderSnapShotDTO snapshot = JSON.parseObject(orderDTO.getSnapshot(), OrderSnapShotDTO.class);
orderPageVO.setShopName(snapshot.getShopName());
Shop shopDTO = shopService.loadById(snapshot.getShopId());
orderPageVO.setShopAvatar(shopDTO.getAvatar());
orderPageVO.setOrderItems(snapshot.getOrderItems());
orderPageVO.setPrice(snapshot.getPrice());
orderPageVO.setOrderStatus(orderDTO.getOrderStatus());
orderPageVO.setOrderStatusDesc("订单" + OrderStatusEnum.fromCode(orderDTO.getOrderStatus()).getDesc());
orderPageVO.setAlipayTradeNo(orderDTO.getAlipayTradeNO());
return Response.success(orderPageVO);
}
@RequestMapping("/items.json")
public Response getItemsInOrder(@RequestParam String orderNo) {
Order order = orderService.loadByOrderNO(orderNo);
if (order == null)
return Response.success(Collections.emptyList());
List<OrderItemDTO> orderItems = JSON.parseObject(order.getSnapshot(), OrderSnapShotDTO.class).getOrderItems();
return Response.success(orderItems);
}
@RequestMapping("/createOrderAndPay.json")
public Response createOrderAndPay(@RequestParam String items, HttpServletRequest request) {
OrderPageVO orderDetail = genOrderDetail(items);
Order order = orderService.createOrder((String) request.getSession().getAttribute("userId"), JSON.toJSONString(orderDetail));
String orderStr = getOrderStr(order.getOrderNO(), "云点餐", orderDetail.getPrice().toString());
OrderInfoVO orderInfoVO = new OrderInfoVO();
orderInfoVO.setOrderStr(orderStr);
orderInfoVO.setOrderNo(order.getOrderNO());
//回流订单数据 订单已下单到厨房, 待支付
// syncOrderByAlipayOpenApi(request, order);
return Response.success(orderInfoVO);
}
@RequestMapping("/createOrder.json")
public Response createOrder(@RequestParam String items, HttpServletRequest request) {
OrderPageVO orderDetail = genOrderDetail(items);
Order order = orderService.createOrder((String) request.getSession().getAttribute("userId"), JSON.toJSONString(orderDetail));
//回流订单数据 订单已下单到厨房, 待支付
// syncOrderByAlipayOpenApi(request, order);
return Response.success(order.getOrderNO());
}
@RequestMapping("/addDishToOrder.json")
public Response addDishToOrder(@RequestParam String orderNo, @RequestParam String items, HttpServletRequest request) {
Order order = orderService.loadByOrderNO(orderNo);
OrderSnapShotDTO snapshot = JSON.parseObject(order.getSnapshot(), OrderSnapShotDTO.class);
Map<Object, Object> map = JSON.parseObject(items, Map.class);
OrderPageVO orderPageVO = new OrderPageVO();
List<OrderItemDTO> orderItems = snapshot.getOrderItems();
Map<Long, OrderItemDTO> orderItemMap = new HashMap<>();
for (OrderItemDTO orderItem : orderItems) {
orderItemMap.put(orderItem.getId(), orderItem);
}
BigDecimal price = snapshot.getPrice();
for (Map.Entry entry : map.entrySet()) {
Long id = Long.parseLong(entry.getKey().toString());
ItemDTO itemDTO = itemService.loadById(id);
if (itemDTO != null) {
orderPageVO.setShopId(itemDTO.getShopId());
Integer qty = Integer.valueOf(entry.getValue().toString());
price = price.add(itemDTO.getPrice().multiply(new BigDecimal(qty)));
if (!orderItemMap.containsKey(id)) {
OrderItemDTO orderItem = new OrderItemDTO();
orderItem.setId(id);
orderItem.setName(itemDTO.getName());
orderItem.setPrice(itemDTO.getPrice());
orderItem.setQuantity(qty);
orderItemMap.put(id, orderItem);
} else {
OrderItemDTO orderItemDTO = orderItemMap.get(id);
orderItemDTO.setQuantity(orderItemDTO.getQuantity() + 1);
}
}
}
snapshot.setOrderItems(new ArrayList<>(orderItemMap.values()));
snapshot.setPrice(price);
order.setSnapshot(JSON.toJSONString(snapshot));
orderService.updateOrderByOrderNO(order);
// syncOrderByAlipayOpenApi(request, order);
return Response.success();
}
@RequestMapping("/payOrder.json")
public Response payOrder(@RequestParam String orderNo) {
Order order = orderService.loadByOrderNO(orderNo);
OrderSnapShotDTO snapshot = JSON.parseObject(order.getSnapshot(), OrderSnapShotDTO.class);
String orderStr = getOrderStr(orderNo, "云点餐", snapshot.getPrice().toString());
logger.info(String.format("orderNo: %s, orderStr: %s", orderNo, orderStr));
return Response.success(orderStr);
}
// private void syncOrderByAlipayO