/**
 * @filename: OrderMatchInputResources.java 2019年12月19日
 * @project exchange  V1.0
 * Copyright(c) 2020 flying-cattle Co. Ltd. 
 * All right reserved. 
 */
package com.flying.cattle.exchange.data;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.flying.cattle.exchange.entity.Order;
import com.flying.cattle.exchange.model.CancelOrderParam;
import com.flying.cattle.exchange.model.JsonResult;
import com.flying.cattle.exchange.model.OrderParam;
import com.flying.cattle.exchange.util.DataUtil;
import com.flying.cattle.exchange.util.SnowflakeIdWorker;

import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName: OrderMatchInputResources
 * @Description: 撮合订单输入数据源
 * @author flying-cattle
 * @date 2019年12月19日
 */
@Slf4j
@RestController
@RequestMapping("/exchange/order")
@Api(value = "订单服务", tags = {"订单服务"})
public class OrderMatchInputResources {
	
	@Autowired
    private MessageSource messageSource;
	
	@Autowired
	private KafkaTemplate<String, String> template;
	
	/**
	 * @Title: addNewOrder
	 * @Description: TODO(添加新的订单)
	 * @param  参数
	 * @return void 返回类型
	 * @throws
	 */
	@PostMapping("/addNewOrder")
	public JsonResult<Order> addNewOrder(@RequestBody @Valid OrderParam param, BindingResult result) {
		try {
			JsonResult<Order> res=new JsonResult<Order>();
			if (result.hasErrors()) { //参数校验失败
				return res.error(result, messageSource);
			}
			Order order = DataUtil.paramToOrder(param);
			order.setId(SnowflakeIdWorker.generateId());
			order.setUid(SnowflakeIdWorker.generateId());
			//关联用户,资产校验,或其他校验
			
			//校验完成推送消息
			template.send("new_order", order.toJsonString());
			return res.success(order);
		} catch (Exception e) {
			log.error("添加新的订单错误:"+e);
			e.printStackTrace();
			return new JsonResult<Order>(e);
		}
	}
	

	/**
	 * @Title: addNewOrder
	 * @Description: TODO(添加新的订单)
	 * @param  参数
	 * @return void 返回类型
	 * @throws
	 */
	@PostMapping("/cancelOrder")
	public JsonResult<Object> cancelOrder(@RequestBody @Valid CancelOrderParam param, BindingResult result) {
		try {
			JsonResult<Object> res=new JsonResult<Object>();
			if (result.hasErrors()) { //参数校验失败
				return res.error(result, messageSource);
			}
			//查看是否是可以撤销的状态
			template.send("cancel_order", param.toJsonString());
			return res.success("操作成功!");
		} catch (Exception e) {
			log.error("添加新的订单错误:"+e);
			e.printStackTrace();
			return new JsonResult<Object>(e);
		}
	}
}