Flexible Reflex E-Commerce
Механизм получения GTIN и формирование заказа из КАИС в КМИС.
Общие сведения о сервисe.
Тип — SOAP. Авторизация — http базовая. Адрес WSDL описания
Структура и формат обмена информацией между КАИС и КМИС.
Конфигурация слушателя в системе REFLEX для получения SKU из КАИС, для получений GTIN.
<bean class="erp.beans.ActiveMq.Listners.MqListenerQueue" init-method="runQueue" destroy-method="destroy"> <property name="brokerURL" ref="failOver"/> <property name="queue" value="REFLEX-KAIS"/> <property name="anchor" value="NKGTIN"/> <property name="AClass" value="erp.orm.mark.Nsi.Soap.SoapNkgtin"/> <property name="router" value="false"/> <property name="saveOrUpdate" value="true"/> <property name="xmlDateFormat" value="yyyy-MM-dd HH:mm:ss"/> <property name="jsonDateFormat" value="yyyy-MM-dd HH:mm:ss"/> <property name="db"> <value type="erp.beans.Db">snqmark</value> </property> </bean>
- Описание свойств:
- brokerURL - брокер
- queue - имя очереди
- anchor - селектор
- AClass - имя класса объекта
- SaveOrUpdate - сохранить обект в БД
- xmlDateFormat - формат даты XML
- jsonDateFormat - формат даты JSON
- db - целевая БД
Конфигурация слушателя в системе REFLEX для формирования заказа в формате XML.
<bean class="erp.beans.ActiveMq.Listners.MqListenerQueue" init-method="runQueue" destroy-method="destroy"> <property name="brokerURL" ref="failOver"/> <property name="queue" value="KMIS-ORDER"/> <property name="anchor" value="ORDER"/> <property name="AClass" value="erp.Common.OrdersProcessing.OrdersContainer"/> <property name="method" value="processing"/> <property name="saveOrUpdate" value="false"/> <property name="router" value="false"/> <property name="xmlDateFormat" value="yyyy-MM-dd HH:mm:ss"/> <property name="jsonDateFormat" value="yyyy-MM-dd'T'HH:mm:ssZ"/> <property name="db"> <value type="erp.beans.Db">snqmark</value> </property> </bean>
CXF web сервисы для работы с Apache ActiveMQ
- Методы:
- ProducerMessage: - Отправить сообщение в очередь
- ConsumerQueue —получить сообщение из очереди
- ConsumerTopic — получить топик из очереди
Формат сообщения - получение черновика GTIN
@Entity @Table(name = "NKGTIN") public class NsiNkgtin { private Long sku; private Date dt = new java.util.Date(); private String gtin; private Date publicationDate; private String goodId; private String goodState; private String mes; }
Формат сообщения - список SKU NKGtinsList
@Data public class NKGtinsList implements Serializable { private Collection<Long> skuList; }
Пример XML сообщения из КАИС в КМИС. Передача SKU для получения GTIN.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.erp/"> <soapenv:Header/> <soapenv:Body> <ws:Producer> <jmsMessagetype>QUEUE</jmsMessagetype> <jms>REFLEX-KAIS</jms> <anchor>NKGTIN</anchor> <jmsType>XML</jmsType> <message><SoapNkgtin><sku>502085003</sku></SoapNkgtin></message> <persistent>true</persistent> </ws:Producer> </soapenv:Body> </soapenv:Envelope>
Сообщение можно передавать с использованием CDATA
<message><![CDATA[<SoapNkgtin><sku>502085003</sku></SoapNkgtin>]]></message>
Пример XML сообщения из КАИС в КМИС. Передача списка SKU для получения GTIN
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.erp/"> <soapenv:Header/> <soapenv:Body> <ws:Producer> <jmsMessagetype>QUEUE</jmsMessagetype> <jms>REFLEX-KAIS</jms> <anchor>NKGTIN-LIST</anchor> <jmsType>XML</jmsType> <message><![CDATA[<NKGtinsList><skuList><sku>Артикул1</sku><sku>Артикул2</sku></skuList></NKGtinsList>]]></message> <persistent>true</persistent> </ws:Producer> </soapenv:Body> </soapenv:Envelope>
- Producer - метод сервиса
- jmsMessagetype - тип очереди QUEUE
- jms - имя очереди
- anchor - селектор сообщения
- jmsType - тип сообщения XML
- message - XML сообщение
- persistent = true
Пример xml текста ответа сервиса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:ProducerResponse xmlns:ns2="http://ws.erp/"> <return>true</return> </ns2:ProducerResponse> </soap:Body> </soap:Envelope>
Формат сообщения - OrdersContainer
@Data public class OrdersContainer implements Serializable { private OrmMarkOrdersHeaders ormMarkOrdersHeaders; }
Формат сообщения - OrmMarkOrdersHeaders - Заказ
@Entity @Table(name = "mark_orders_headers") public class OrmMarkOrdersHeaders { private Long orderHeadId; private Long kaisOrderId; private String comments; private Long orderStateId; private Date dateIns; private String labelTemplate; private Long emissionTypeId; private Long snProdTypeId; private Long kmProdTypeId; private Date contractDate; private String contractPerson; private String contractNumber; private Set<OrmMarkOrdersDetail> markOrdersDetailsByOrderHeadId; private MvcSupp suppByIdsupp; }
Формат сообщения - OrmMarkOrdersDetail - Спецификация заказа
public class OrmMarkOrdersDetail { private Long ordersDetailId; private String tnved; private Long qty; private String crptOrderId; private Long manufactureCode; private OrmMarkOrdersHeaders markOrdersHeadersByOrderHeadId; private MvcMarkOrderStates crptOrderState; }
Пример XML сообщения из КАИС в КМИС. Передача Заказа для получения Кодов маркировки.
<OrdersContainer> <ormMarkOrdersHeaders> <orderHeadId>ID заказа КАИС</orderHeadId> <kaisOrderId>ID заказа КАИС</kaisOrderId> <comments>SS20 ВО Л ж</comments> <markOrdersDetailsByOrderHeadId> <markOrdersDetailsByOrderHeadId> <ordersDetailId>ID строки заказа КАИС</ordersDetailId> <tnved>6202</tnved> <qty>30</qty> <manufactureCode>443455000</manufactureCode> </markOrdersDetailsByOrderHeadId> .... <markOrdersDetailsByOrderHeadId> <ordersDetailId>ID строки заказа КАИС</ordersDetailId> <tnved>6202</tnved> <qty>60</qty> <manufactureCode>443426000</manufactureCode> </markOrdersDetailsByOrderHeadId> </markOrdersDetailsByOrderHeadId> <suppByIdsupp> <idsupp>421001</idsupp> <vsuppcode>435723</vsuppcode> <vsupp>Beijing Shangyitong Enterprise Management Services Limited</vsupp> <vsuppf>Beijing Shangyitong Enterprise Management Services Limited</vsuppf> <inn/> </suppByIdsupp> </ormMarkOrdersHeaders> </OrdersContainer>
Пример XML сообщения из КАИС в КМИС. Передача Заказа для получения Кодов маркировки.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.erp/"> <soapenv:Header/> <soapenv:Body> <ws:Producer> <jmsMessagetype>QUEUE</jmsMessagetype> <jms>KMIS-ORDER</jms> <anchor>ORDER</anchor> <jmsType>XML</jmsType> <message><![CDATA[<OrdersContainer> <ormMarkOrdersHeaders> <orderHeadId>78787878</orderHeadId> <kaisOrderId>78787878</kaisOrderId> <comments>SS20 ВО Л ж</comments> <markOrdersDetailsByOrderHeadId> <markOrdersDetailsByOrderHeadId> <ordersDetailId>1027827000</ordersDetailId> <tnved>6202</tnved> <qty>30</qty> <manufactureCode>443455000</manufactureCode> </markOrdersDetailsByOrderHeadId> ... <markOrdersDetailsByOrderHeadId> <ordersDetailId>1027798000</ordersDetailId> <tnved>6202</tnved> <qty>60</qty> <manufactureCode>443426000</manufactureCode> </markOrdersDetailsByOrderHeadId> </markOrdersDetailsByOrderHeadId> <suppByIdsupp> <idsupp>421001</idsupp> <vsuppcode>435723</vsuppcode> <vsupp>Beijing Shangyitong Enterprise Management Services Limited</vsupp> <vsuppf>Beijing Shangyitong Enterprise Management Services Limited</vsuppf> <inn/> </suppByIdsupp> </ormMarkOrdersHeaders> </OrdersContainer>]]></message> <persistent>true</persistent> </ws:Producer> </soapenv:Body> </soapenv:Envelope>
- Producer - метод сервиса
- jmsMessagetype - тип очереди QUEUE
- jms - имя очереди
- anchor - селектор сообщения
- jmsType - тип сообщения XML
- message - XML сообщение
- persistent = true
Пример xml текста ответа сервиса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:ProducerResponse xmlns:ns2="http://ws.erp/"> <return>true</return> </ns2:ProducerResponse> </soap:Body> </soap:Envelope>
Формат сообщения - Response
@Data static class Response { private Long orderHeadId; private Status status = new Status(); }
Прочитать статус обработки заказа
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.erp/"> <soapenv:Header/> <soapenv:Body> <ws:ConsumerQueue> <Queue>KMIS-ORDER</Queue> <anchor>ORDER-RESPONSE</anchor> <timeout>1000</timeout> </ws:ConsumerQueue> </soapenv:Body> </soapenv:Envelope>
Пример xml текста ответа сервиса - получитьс статус обработки заказа:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:ConsumerQueueResponse xmlns:ns2="http://ws.erp/"> <return> <anchor>ORDER-RESPONSE</anchor> <message><![CDATA[<Response><orderHeadId>78787878</orderHeadId><status><code>1</code><message>Заказ обработан успешно</message></status></Response>]]></message> </return> </ns2:ConsumerQueueResponse> </soap:Body> </soap:Envelope>