package org.xmx0632.deliciousfruit.erp; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.xmx0632.deliciousfruit.erp.bo.ErpAddress; import org.xmx0632.deliciousfruit.erp.bo.ErpApiInputRequest; import org.xmx0632.deliciousfruit.erp.bo.ErpApiReadRequest; import org.xmx0632.deliciousfruit.erp.bo.ErpCard; import org.xmx0632.deliciousfruit.erp.bo.ErpCash; import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCard; import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCash; import org.xmx0632.deliciousfruit.erp.bo.ErpChangeCoin; import org.xmx0632.deliciousfruit.erp.bo.ErpChangePoint; import org.xmx0632.deliciousfruit.erp.bo.ErpCustomer; import org.xmx0632.deliciousfruit.erp.bo.ErpOrder; import org.xmx0632.deliciousfruit.erp.bo.ErpOrderCard; import org.xmx0632.deliciousfruit.erp.bo.ErpOrderCash; import org.xmx0632.deliciousfruit.erp.bo.ErpOrderProduct; import org.xmx0632.deliciousfruit.erp.bo.ErpProduct; import org.xmx0632.deliciousfruit.erp.bo.ErpPromotion; import com.google.common.collect.Lists; @Component public class ErpApiService { private static final String QUERY_KEY_ERP_ORDER = "erpOrder"; private static final String QUERY_KEY_ID = "id"; private static Logger log = LoggerFactory.getLogger(ErpApiService.class); private String url = ""; private String username = ""; private String password = ""; private ErpMessageSender erpMessageSender; private ErpMessageParser erpMessageParser; @Autowired(required = true) public void setErpMessageParser(ErpMessageParser erpMessageParser) { this.erpMessageParser = erpMessageParser; } @Autowired(required = true) public void setErpMessageSender(ErpMessageSender erpMessageSender) { this.erpMessageSender = erpMessageSender; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setUrl(String url) { this.url = url; } // TODO--read----------------------------------------------------------------------- public ErpCustomer getCustomerBy(String id) { String resp = sendGetRequest(id, ErpApiType.Customer); return erpMessageParser.parseResponse(resp, new ErpCustomer()); } public ErpPromotion getPromotionBy(String id) { String resp = sendGetRequest(id, ErpApiType.Promotion); return erpMessageParser.parseResponse(resp, new ErpPromotion()); } public ErpAddress getAddress() { ErpAddress c = new ErpAddress(); return c; } public ErpCard getCardBy(String id) { String resp = sendGetRequest(id, ErpApiType.Card); return erpMessageParser.parseResponse(resp, new ErpCard()); } public ErpCash getCashBy(String id) { String resp = sendGetRequest(id, ErpApiType.Cash); return erpMessageParser.parseResponse(resp, new ErpCash()); } public ErpProduct getProductBy(String id) { String resp = sendGetRequest(id, ErpApiType.Product); return erpMessageParser.parseResponse(resp, new ErpProduct()); } public ErpOrder getOrderBy(String id) { String resp = sendGetRequest(id, ErpApiType.Order); return erpMessageParser.parseResponse(resp, new ErpOrder()); } private String sendGetRequest(String id, ErpApiType erpApiType) { return sendGetRequest(id, QUERY_KEY_ID, erpApiType); } public ErpOrderCard getOrderCardBy(String id) { String resp = sendGetRequest(id, QUERY_KEY_ERP_ORDER, ErpApiType.OrderCard); return erpMessageParser.parseResponse(resp, new ErpOrderCard()); } private String sendGetRequest(String id, String key, ErpApiType erpApiType) { ErpApiReadRequest erpApiReadRequest = new ErpApiReadRequest(erpApiType, username, password); Map<String, String> map = new HashMap<String, String>(); map.put(key, id); erpApiReadRequest.setData(map); String json = erpMessageParser.toJson(erpApiReadRequest); String resp = erpMessageSender.sendPostMsg(json, url); log.info("[{}]\nreq:{}\nresp:{}", erpApiType, json, resp); return resp; } // TODO--input----------------------------------------------------------------------- public boolean saveOrUpdateCustomer(ErpCustomer customer) { return sendSetMessage(customer, ErpApiType.Customer); } public boolean changeCard(ErpChangeCard changeCard) { return sendSetMessage(changeCard, ErpApiType.ChangeCard); } public boolean changeCash(ErpChangeCash changeCash) { return sendSetMessage(changeCash, ErpApiType.ChangeCash); } public boolean changeCoin(ErpChangeCoin changeCoin) { return sendSetMessage(changeCoin, ErpApiType.ChangeCoin); } public boolean changePoint(ErpChangePoint changePoint) { return sendSetMessage(changePoint, ErpApiType.ChangePoint); } public boolean orderCard(ErpOrderCard orderCard) { return sendSetMessage(orderCard, ErpApiType.OrderCard); } public boolean orderCash(ErpOrderCash orderCash) { return sendSetMessage(orderCash, ErpApiType.OrderCash); } public boolean orderProduct(ErpOrderProduct orderProduct) { return sendSetMessage(orderProduct, ErpApiType.OrderProduct); } public boolean order(ErpOrder order) { return sendSetMessage(order, ErpApiType.Order); } private <T> boolean sendSetMessage(T customer, ErpApiType type) { ErpApiInputRequest<T> inputRequest1 = new ErpApiInputRequest<T>(type, username, password); @SuppressWarnings("unchecked") ArrayList<T> list = Lists.newArrayList(customer); inputRequest1.setData(list); ErpApiInputRequest<T> inputRequest = inputRequest1; String json = erpMessageParser.toJson(inputRequest); String resp1 = erpMessageSender.sendPostMsg(json, url); log.info(" \nreq:{}\nresp:{}", json, resp1); String resp = resp1; log.info("resp:{}", resp); return resp.contains("\"result\":0"); } }