package com.dev.swms.server.service.interfaceLog;


import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.dev.swms.server.model.interfaceLog.InterfaceLog;
import com.dev.swms.server.model.receiving.ASN;
import com.dev.swms.server.model.receiving.MoveDoc;
import com.dev.swms.server.model.shipping.BOL;
import com.dev.swms.server.model.shipping.PickTicket;

@Transactional(readOnly=true)
public interface InterfaceLogManager {
	/**
	 * 按照指定条件获取待处理接口日志
	 * @param types
	 * @param status
	 * @return
	 */
	List<InterfaceLog> getLogsByConditions(List<String> types, String status);
	
	/**
	 * 接收接口数据并存入接口日志表
	 * @return
	 */
	@Transactional
	String receive(final String xml);

	/**
	 * 根据指定类型调用接口发送数据
	 * @param log
	 * @param type (REQUEST---发送请求数据 RESPONSE---发送响应数据)
	 * @return
	 */
	@Transactional
	boolean send(InterfaceLog log, String type);
	
	/**
	 * 读取接口日志表中的库存审核信息，以此为依据查看WMS库存
	 * 调用OMS/TMS接口发布库存查询结果数据
	 * @param order
	 * @throws Exception
	 */
	@Transactional
	public void inventoryResponse(InterfaceLog log) throws Exception;
	
	/**
	 * 读取接口日志表中的订单生效信息，以此为依据创建ASN或发货单
	 * 调用OMS/TMS接口发布订单生效反馈数据
	 * @param str
	 * @throws Exception
	 */
	@Transactional
	void availableOrderResponse(InterfaceLog log) throws Exception;
	
	/**
	 * ASN收货完成或手工关闭ASN时调用该方法，将ASN收货情况包装为接口数据，写入接口日志表
	 * 调用OMS/TMS接口发布ASN收货反馈消息
	 * @param asn
	 */
	@Transactional
	void asnReceiveResponse(ASN asn);
	
	/**
	 * MoveDoc上架关闭时调用该方法，将MoveDoc对应ASN的上架情况包装为接口数据，写入接口日志表
	 * 调用OMS/TMS接口发布ASN上架反馈消息
	 * @param asn
	 */
	@Transactional
	void putawayResponse(MoveDoc moveDoc);
	
	/**
	 * 发货单拣货完成时或手工关闭发货单时调用该方法，将PickTicket的拣货情况包装为接口数据，写入接口日志表
	 * 调用OMS/TMS接口发布PickTicket拣货反馈消息
	 * @param asn
	 */
	@Transactional
	void pickResponse(PickTicket pickTicket);

	/**
	 * BOL发货完成时调用该方法，将BOL对应发货单的发货情况包装为接口数据，写入接口日志表
	 * 调用OMS/TMS接口发布PickTicket发货反馈消息
	 * @param asn
	 */
	@Transactional
	void bolShipResponse(BOL bol);
}
