DINGYL 2 недель назад
Родитель
Сommit
8043496135

+ 1 - 0
src/main/java/com/uas/eis/config/SynaConfig.java

@@ -13,6 +13,7 @@ public class SynaConfig {
     private String url_850;
     private String url_860;
     private String url_867;
+    private String url_846;
     private String bill_to_address;
     private String BTEDILocationCode;
     private boolean isProd;

+ 6 - 0
src/main/java/com/uas/eis/controller/ERPController.java

@@ -35,6 +35,12 @@ public class ERPController {
         return synaService.sendPosToSyna(master,id);
     }
 
+    @RequestMapping(value="/erp/sendINV")
+    @ResponseBody
+    public Map<String, Object> sendINV(String master,Integer id) throws EDISchemaException, EDIStreamException, IOException {
+        return synaService.sendInvToSyna(master,id);
+    }
+
     @RequestMapping(value="/erp/testEIS")
     @ResponseBody
     public Map<String, Object> testEIS(String master,Integer id) throws EDISchemaException, EDIStreamException, IOException {

+ 159 - 0
src/main/java/com/uas/eis/core/X12Converter.java

@@ -29,6 +29,7 @@ public class X12Converter {
         writer.setControlSchema(controlSchema);
         return  writer;
     }
+
     private void startSegment(EDIStreamWriter writer,String ediId,SynaConfig synaConfig) throws EDIStreamException {
         writer.writeStartSegment("ISA")
                 .writeElement("00")
@@ -52,6 +53,31 @@ public class X12Converter {
         }
         writer.writeElement("^").writeEndSegment();
     }
+
+    private void startSegment_R(EDIStreamWriter writer,String ediId,SynaConfig synaConfig) throws EDIStreamException {
+        writer.writeStartSegment("ISA")
+                .writeElement("00")
+                .writeElement("          ")
+                .writeElement("00")
+                .writeElement("          ")
+                .writeElement("ZZ")
+                .writeElement("SYNAPTICST     ")
+                .writeElement("ZZ")
+                .writeElement("WORLDSHINE     ")
+                .writeElement(new SimpleDateFormat("yyMMdd").format(new Date())) // GS04 (日期)
+                .writeElement(new SimpleDateFormat("HHmm").format(new Date()))   // GS05 (时间)
+                .writeElement("U")
+                .writeElement(X12_VERSION)
+                .writeElement(ediId)
+                .writeElement("0");
+        if(synaConfig.isProd()){
+            writer .writeElement("P");//T,表示测试数据;P,表示生产数据,这里是T
+        }else{
+            writer .writeElement("T");//T,表示测试数据;P,表示生产数据,这里是T
+        }
+        writer.writeElement("^").writeEndSegment();
+    }
+
     private void addGS(EDIStreamWriter writer,String type,String id,String rule) throws EDIStreamException {
         writer.writeStartSegment("GS").writeElement(type)
                 .writeElement("WORLDSHINE") // GS02
@@ -63,6 +89,19 @@ public class X12Converter {
                 .writeElement("004010")//X12版本
                 .writeEndSegment();  // GS08
     }
+
+    private void addGS_R(EDIStreamWriter writer,String type,String id,String rule) throws EDIStreamException {
+        writer.writeStartSegment("GS").writeElement(type)
+                .writeElement("SYNAPTICSD") // GS02
+                .writeElement("WORLDSHINE") // GS03
+                .writeElement(new SimpleDateFormat("yyyyMMdd").format(new Date())) // GS04 (日期)
+                .writeElement(new SimpleDateFormat("HHmm").format(new Date()))     // GS05 (时间)
+                .writeElement(id)        // GS06
+                .writeElement(rule)        // T-运输数据协调委员会(TDCC),X-公认标准委员会
+                .writeElement("004010")//X12版本
+                .writeEndSegment();  // GS08
+    }
+
     public String convertToX12(Purchase po,String ediId,SynaConfig synaConfig) throws EDISchemaException, EDIStreamException {
         OutputStream stream=new ByteArrayOutputStream();
         EDIStreamWriter writer = newEDIWriter(stream);
@@ -456,4 +495,124 @@ public class X12Converter {
         writer.close();
         return stream.toString();
     }
+    public String convertToX12(INV inv, String ediId, SynaConfig synaConfig) throws EDISchemaException, EDIStreamException {
+        OutputStream stream=new ByteArrayOutputStream();
+        EDIStreamWriter writer = newEDIWriter(stream);
+        writer.startInterchange();
+        //开始
+        startSegment_R(writer,ediId,synaConfig);
+        addGS_R(writer,"IB",String.valueOf(inv.getIs_id()),"X");
+
+        int txCount = 1;
+        writer.writeStartSegment("ST").writeElement("846").writeElement("4567").writeEndSegment(); // 事务集控制编号
+        txCount++;
+        writer.writeStartSegment("BIA")
+                .writeElement("00")
+                .writeElement("DM")
+                .writeElement("KEY_OF_REPORT")
+                .writeElement(new SimpleDateFormat("yyyyMMdd").format(inv.getIs_date())).writeEndSegment();
+        txCount++;
+
+        writer.writeStartSegment("CUR")
+                .writeElement("BY")
+                .writeElement(inv.getIs_currency())
+                .writeEndSegment();
+        txCount++;
+        writer.writeStartSegment("DTM")
+                .writeElement("600")
+                .writeElement(new SimpleDateFormat("yyyyMMdd").format(inv.getIs_date()))
+                .writeEndSegment();
+        txCount++;
+        writer.writeStartSegment("N1")
+                .writeElement("DB")
+                .writeElement("WORLDSHINE TECHNOLOGY LIMITED")
+                .writeElement("91")
+                .writeElement("2973")
+                .writeEndSegment();
+        txCount++;
+        writer.writeStartSegment("N3")
+                .writeElement("HK")
+                .writeEndSegment();
+        txCount++;
+        for(INVDetail id:inv.getItems()){
+            writer.writeStartSegment("LIN")
+                    .writeElement(String.valueOf(id.getId_detno()))
+                    .writeElement("VP")
+                    .writeElement(id.getId_orispeccode())
+                    .writeElement("CP")
+                    .writeElement( (id.getId_custprodcode()==null?"":id.getId_custprodcode()) ) .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("REF")
+                    .writeElement("PR")
+                    .writeElement(id.getId_quote()).writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("REF")
+                    .writeElement("ZZ")
+                    .writeElement(String.valueOf(id.getId_amount())).writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("QTY")
+                    .writeElement("17")
+                    .writeElement(String.valueOf(id.getId_qty()))
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("UIT")
+                    .writeElement("EA")
+                    .writeElement(String.valueOf(id.getId_price()))
+                    .writeElement("CA")
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N1")
+                    .writeElement("MA")
+                    .writeElement( (id.getId_odm()==null?"":id.getId_odm()) )
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N1")
+                    .writeElement("BY")
+                    .writeElement( (id.getId_oem()==null?"":id.getId_oem()) )
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N1")
+                    .writeElement("DB")
+                    .writeElement("WORLDSHINE TECHNOLOGY LIMITED")
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N4")
+                    .writeElement("")
+                    .writeElement("")
+                    .writeElement("")
+                    .writeElement(id.getId_distiregion())
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N1")
+                    .writeElement("WH")
+                    .writeElement("NA")
+                    .writeEndSegment();
+            txCount++;
+            writer.writeStartSegment("N4")
+                    .writeElement( (id.getId_stockcity()==null?"":id.getId_stockcity()) )
+                    .writeElement("")
+                    .writeElement("")
+                    .writeElement(id.getId_stockcountry())
+                    .writeEndSegment();
+            txCount++;
+        }
+        //结束
+        // 订单小计 (CTT)
+        writer.writeStartSegment("CTT")
+                .writeElement(String.valueOf(inv.getItems().size())).writeEndSegment();// 明细行数
+        txCount++;
+        writer.writeStartSegment("SE")
+                .writeElement(String.valueOf(txCount)) // 段数量 (ST到SE之间的段数,包括ST和SE)
+                .writeElement("4567").writeEndSegment(); // 事务集控制编号 (与ST中的一致)
+
+        writer.writeStartSegment("GE")
+                .writeElement("1")
+                .writeElement(String.valueOf(inv.getIs_id())) .writeEndSegment();
+        writer.writeStartSegment("IEA")
+                .writeElement("1")
+                .writeElement(ediId) .writeEndSegment();
+        writer.endInterchange();
+        writer.close();
+        return stream.toString();
+    }
 }

+ 14 - 0
src/main/java/com/uas/eis/entity/INV.java

@@ -0,0 +1,14 @@
+package com.uas.eis.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Data
+public class INV {
+    private int is_id;
+    private String is_code;
+    private String is_currency;
+    private Date is_date;
+    private List<INVDetail> items;
+}

+ 19 - 0
src/main/java/com/uas/eis/entity/INVDetail.java

@@ -0,0 +1,19 @@
+package com.uas.eis.entity;
+
+import lombok.Data;
+
+@Data
+public class INVDetail {
+    private  int id_detno;
+    private String id_orispeccode;
+    private String id_custprodcode;
+    private String id_quote;
+    private double id_price;
+    private int id_qty;
+    private double id_amount;
+    private String id_odm;
+    private String id_oem;
+    private String id_distiregion;
+    private String id_stockcity;
+    private String id_stockcountry;
+}

+ 30 - 1
src/main/java/com/uas/eis/service/Impl/SynaServiceImpl.java

@@ -96,11 +96,40 @@ public class SynaServiceImpl implements SynaService {
             modelMap=toSynaptics(url,data,"867",id);
             return modelMap;
         }else{
-            logger.info("sendPurchaseChangeToSyna:POS单据不存在:id={}",id);
+            logger.info("sendINVToSyna:POS单据不存在:id={}",id);
         }
         return Collections.emptyMap();
     }
 
+    @Override
+    public Map<String, Object> sendInvToSyna(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException {
+        SpObserver.putSp(master);
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        logger.info("sendINVToSyna-beg:{}:{}",master,id);
+        INV inv=getINV(id);
+        if(inv!=null){
+            String ediId = getEDIId(master);
+            System.out.println(ediId);
+            X12Converter converter=new X12Converter();
+            String data=converter.convertToX12(inv,ediId,synaConfig);
+            System.out.println("X12:");
+            System.out.println( data);
+            String url= synaConfig.getUrl_846();
+            logger.info("sendPOSToSyna:inv:{} X12-data:{}",inv.getIs_code(),data);
+            modelMap=toSynaptics(url,data,"846",id);
+            return modelMap;
+        }else{
+            logger.info("sendINVToSyna:INV单据不存在:id={}",id);
+        }
+        return Collections.emptyMap();
+    }
+    private INV getINV(Integer id){
+        INV inv=baseDao.getJdbcTemplate().queryForObject("select * from INVRPT_SYNA where IS_ID=?", new BeanPropertyRowMapper<INV>(INV.class), id);
+        List<INVDetail> detail = baseDao.getJdbcTemplate().query("select * FROM INVRPT_SYNA_det WHERE ID_ISID=? ORDER BY ID_DETNO",
+                new BeanPropertyRowMapper<INVDetail>(INVDetail.class),  id);
+        inv.setItems(detail);
+        return inv;
+    }
     private POS getPOS(Integer id){
         POS pos =baseDao.getJdbcTemplate().queryForObject("select * from POSREPORT_SYNA where ps_id=?", new BeanPropertyRowMapper<POS>(POS.class), id);
        List<POSDetail> detail = baseDao.getJdbcTemplate().query("select * FROM posreport_syna_det WHERE PD_PsID=? ORDER BY PD_DETNO",

+ 1 - 1
src/main/java/com/uas/eis/service/SynaService.java

@@ -11,5 +11,5 @@ public interface SynaService {
     Map<String, Object> sendPurchaseToSyna(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException;
     Map<String, Object> sendPurchaseChangeToSyna(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException;
     Map<String, Object> sendPosToSyna(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException;
-
+    Map<String, Object> sendInvToSyna(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException;
 }

+ 1 - 0
src/main/resources/application-dev.yml

@@ -34,6 +34,7 @@ synaptics:
     url_850 : https://syn-oic-poc-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE850E8HUE_REST_RECEIVE/1.0
     url_860 : https://syn-oic-poc-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE860EJ364H_REST_RECEIVE/1.0
     url_867 : https://syn-oic-poc-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE867JOA3HJ_REST_RECEIVE/1.0
+    url_846 : https://syn-oic-poc-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE_846_0819_REST_RECEIVE/1.0
     bill_to_address : ROOM 2708, 27/F, APEC PLAZA, 49 HOI YUEN ROAD KWUN TONG, KOWLOON
     BTEDILocationCode : WTECH-3925
     isProd: false

+ 1 - 0
src/main/resources/application-prod.yml

@@ -35,6 +35,7 @@ synaptics:
     url_850 : https://syn-oic-prod-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE850SH2NU1_REST_RECEIVE/1.0
     url_860 : https://syn-oic-prod-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE860DVJ3P_REST_RECEIVE/1.0
     url_867 : https://syn-oic-prod-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE867NEHUI0_REST_RECEIVE/1.0
+    url_846 : https://syn-oic-poc-axpwqir9ej7o-px.integration.us-phoenix-1.ocp.oraclecloud.com/ic/api/integration/v1/flows/rest/WORLDSHINE_846_0819_REST_RECEIVE/1.0
     bill_to_address : ROOM 2708, 27/F, APEC PLAZA, 49 HOI YUEN ROAD KWUN TONG, KOWLOON
     BTEDILocationCode : WTECH-3925
     isProd: true

+ 6 - 1
src/test/java/com/uas/eis/SynaTests.java

@@ -19,7 +19,7 @@ public class SynaTests {
 	@Autowired
 	private SynaConfig synaConfig;
 
-	@Test
+	/*@Test
 	public void TestPo() throws Exception {
 		synaService.sendPurchaseToSyna("N_HUASL_T",50848164);
 	}
@@ -39,6 +39,11 @@ public class SynaTests {
 		String  t=synaConfig.getBill_to_address();
 		System.out.println(t);
 		System.out.println(synaConfig.getUsername());
+	}*/
+
+	@Test
+	public void TestINV() throws Exception {
+		synaService.sendInvToSyna("N_HUASL_T",3100);
 	}
 
 }