Ver código fonte

【大华SMES附件对接】

wuyx 1 ano atrás
pai
commit
6666e8a021

+ 23 - 0
src/main/java/com/uas/eis/controller/ERPToDHController.java

@@ -0,0 +1,23 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.service.DHService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/doc")
+public class ERPToDHController {
+    @Autowired
+    DHService dhService;
+    @RequestMapping("/DHMES/pushAttachToDH")
+    public Map<String, Object> pushAttachToDH(String master, Integer id){
+        return dhService.pushAttachToDH(master,id);
+    }
+    @RequestMapping("/DHMES/deleteAttachToDH")
+    public Map<String, Object> deleteAttachToDH(String master, Integer id){
+        return dhService.deleteAttachToDH(master,id);
+    }
+}

+ 10 - 0
src/main/java/com/uas/eis/service/DHService.java

@@ -0,0 +1,10 @@
+package com.uas.eis.service;
+
+
+import java.util.Map;
+
+public interface DHService {
+
+    Map<String, Object> pushAttachToDH(String master, Integer id);
+    Map<String, Object> deleteAttachToDH(String master, Integer id);
+}

+ 282 - 0
src/main/java/com/uas/eis/service/Impl/DHServiceImpl.java

@@ -0,0 +1,282 @@
+package com.uas.eis.service.Impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.ErrorMessage;
+import com.uas.eis.service.DHService;
+import com.uas.eis.utils.Constant;
+import com.uas.eis.utils.DateUtil;
+import com.uas.eis.utils.PSHttpUtils;
+import com.uas.eis.utils.StringUtil;
+import net.sf.json.JSONArray;
+import okhttp3.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author WUYX
+ * @date 2024-07-29 18:27
+ */
+@Service
+public class DHServiceImpl implements DHService {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    @Autowired
+    private BaseDao baseDao;
+    private static Map<String,Object> DOCM = new HashMap<>();
+    @Override
+    public Map<String, Object> pushAttachToDH(String master, Integer id) {
+        String bCode = "pushAttachToDH";
+        Map<String, Object> map = new HashMap<String, Object>();
+        logger.info("{} begin: master {} ,id {} ",bCode, master, id);
+        SpObserver.putSp(master);
+        map = getDocMsg(bCode,master,id);
+        if(map!=null&&!(boolean)map.get("success")){
+            return map;
+        }
+        map = getToken(master,id);
+        if(!(boolean)map.get("success")){
+            return map;
+        }
+        String token = map.get("token").toString();
+        SqlRowList rs_main = baseDao.queryForRowSet("select * from CUSTOMTABLE where ct_id=" + id);
+        if (rs_main.next()) {
+            String dataType = rs_main.getGeneralString("ct_varchar50_1");
+            String attachIds = rs_main.getGeneralString("ct_attach");
+            if(!StringUtil.hasText(dataType)){
+                return logErr(bCode,"单据类型未选择",master,id);
+            }
+            if(!StringUtil.hasText(attachIds)){
+                return logErr(bCode,"未上传附件",master,id);
+            }
+            attachIds = attachIds.replaceAll(";",",");
+            if(attachIds.endsWith(",")){
+                attachIds=attachIds.substring(0,attachIds.length()-1);
+            }
+            SqlRowList fileRs = baseDao.queryForRowSet("SELECT * FROM FilePath WHERE fp_id in (" + attachIds+") order by fp_id");
+            if(!fileRs.hasNext()){
+                return logErr(bCode,"附件不存在",master,id);
+            }
+            SqlRowList rs_detail = baseDao.queryForRowSet("select * from CUSTOMTABLEDETAIL where cd_ctid=" + id+" order by cd_detno");
+            if (rs_detail.next()) {
+                try {
+                    Map<String,Object> paramMap = new HashMap<>();
+                    paramMap.put("dataType",dataType);
+                    List<String> businessCode = new ArrayList<>();
+                    for (Map<String,Object> det: rs_detail.getResultList()) {
+                        businessCode.add(String.valueOf(det.get("cd_varchar50_2")));
+                    }
+                    paramMap.put("businessCode",businessCode);
+                    //对接-上传附件
+                    OkHttpClient client = new OkHttpClient();
+                    MultipartBody.Builder builder = new MultipartBody.Builder()
+                            .setType(MultipartBody.FORM)
+                            .addFormDataPart("param", JSON.toJSONString(paramMap)); // 添加表单字段
+                    for (Map<String,Object> fM : fileRs.getResultList()) {
+                        String fpName = fM.get("fp_name").toString();
+                        /*if(fpName.contains(".")){
+                            fpName=fpName.substring(0,fpName.indexOf("."));
+                        }*/
+                        File f = new File(fM.get("fp_path").toString());
+                        builder.addFormDataPart("file",fpName
+                                ,RequestBody.create(MediaType.parse("application/octet-stream"), f));
+                    }
+                    // 构建RequestBody
+                    RequestBody requestBody = builder.build();
+                    // 构建Request
+                    Request request = new Request.Builder()
+                            .url(DOCM.get("url")+"/ediApi/accessory/insert")
+                            .addHeader("Content-Type", "multipart/form-data")
+                            .addHeader("Authorization", token)
+                            .post(requestBody)
+                            .build();
+                    // 发送请求
+                    Response response = client.newCall(request).execute();
+                    String res = response.body().string();
+                    JSONObject jsonObject = JSON.parseObject(res);
+                    String code = jsonObject.getString("code");
+                    if ("200".equals(code)) {
+                        logger.info("pushAttachToDH success master {} , id {}", master, id);
+                        baseDao.execute("update CUSTOMTABLE set ct_varchar50_8='上传成功',ct_varchar50_9='' where ct_id = "+id);
+                        map.put("success", true);
+                        map.put("message", "上传成功");
+                        return map;
+                    } else {
+                        return logErr(bCode,code+":"+StringUtil.nvl(jsonObject.getString("message"),jsonObject.getString("error")),master,id);
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                    String errorMsg = null;
+                    if(e.getCause() != null){
+                        errorMsg = e.getCause().getMessage();
+                    }
+                    if(errorMsg == null){
+                        errorMsg = (StringUtil.hasText(e.getMessage())) ? e.getMessage() : ErrorMessage.BUSINESS_ILLEGAL.getMessage();
+                    }
+                    return logErr(bCode,errorMsg,master,id);
+                }
+            }else {
+                return logErr(bCode,"单据没有明细",master,id);
+            }
+        }else {
+            return logErr(bCode,"单据不存在",master,id);
+        }
+    }
+
+    @Override
+    public Map<String, Object> deleteAttachToDH(String master, Integer id) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        String bCode = "deleteAttachToDH";
+        logger.info("{} begin: master {} ,id {} ",bCode, master, id);
+        SpObserver.putSp(master);
+        map = getDocMsg(bCode,master,id);
+        if(map!=null&&!(boolean)map.get("success")){
+            return map;
+        }
+        map = getToken(master,id);
+        if(!(boolean)map.get("success")){
+            return map;
+        }
+        String token = map.get("token").toString();
+        SqlRowList rs_main = baseDao.queryForRowSet("select * from CUSTOMTABLE where ct_id=" + id);
+        if (rs_main.next()) {
+            String dataType = rs_main.getGeneralString("ct_varchar50_1");
+            String attachIds = rs_main.getGeneralString("ct_attach");
+            if(!StringUtil.hasText(dataType)){
+                return logErr(bCode,"单据类型未选择",master,id);
+            }
+            if(!StringUtil.hasText(attachIds)){
+                return logErr("deleteAttachToDH","未上传附件",master,id);
+            }
+            attachIds = attachIds.replaceAll(";",",");
+            if(attachIds.endsWith(",")){
+                attachIds=attachIds.substring(0,attachIds.length()-1);
+            }
+            SqlRowList fileRs = baseDao.queryForRowSet("SELECT * FROM FilePath WHERE fp_id in (" + attachIds+") order by fp_id");
+            if(!fileRs.next()){
+                return logErr(bCode,"附件不存在",master,id);
+            }
+            SqlRowList rs_detail = baseDao.queryForRowSet("select cd_detno,cd_varchar50_2 from CUSTOMTABLEDETAIL where cd_ctid=" + id+" order by cd_detno");
+            if (rs_detail.hasNext()) {
+                try {
+                    Map<String,Object> paramMap = new HashMap<>();
+                    paramMap.put("dataType",dataType);
+                    List<String> businessCode = new ArrayList<>();
+                    for (Map<String,Object> det: rs_detail.getResultList()) {
+                        businessCode.add(String.valueOf(det.get("cd_varchar50_2")));
+                    }
+                    paramMap.put("businessCode",businessCode);
+                    paramMap.put("fileName",fileRs.getGeneralString("fp_name"));
+                    OkHttpClient client = new OkHttpClient().newBuilder()
+                            .build();
+                    MediaType mediaType = MediaType.parse("application/json");
+                    RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(paramMap));
+                    Request request = new Request.Builder()
+                            .url(DOCM.get("url")+"/ediApi/accessory/delete")
+                            .method("DELETE", body)
+                            .addHeader("Content-Type", "application/json")
+                            .addHeader("Authorization", token)
+                            .build();
+                    Response response = client.newCall(request).execute();
+                    String res = response.body().string();
+                    JSONObject jsonObject = JSON.parseObject(res);
+                    String code = jsonObject.getString("code");
+                    if ("200".equals(code)) {
+                        logger.info("{} success master {} , id {}", bCode,master, id);
+                        baseDao.execute("update CUSTOMTABLE set ct_varchar50_8='删除成功',ct_varchar50_9='' where ct_id = "+id);
+                        map.put("success", true);
+                        map.put("message", "删除成功");
+                        return map;
+                    } else {
+                        return logErr(bCode,jsonObject.getString("message"),master,id);
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                    String errorMsg = null;
+                    if(e.getCause() != null){
+                        errorMsg = e.getCause().getMessage();
+                    }
+                    if(errorMsg == null){
+                        errorMsg = (StringUtil.hasText(e.getMessage())) ? e.getMessage() : ErrorMessage.BUSINESS_ILLEGAL.getMessage();
+                    }
+                    return logErr(bCode,errorMsg,master,id);
+                }
+            }else {
+                return logErr(bCode,"单据没有明细",master,id);
+            }
+        }else {
+            return logErr(bCode,"单据不存在",master,id);
+        }
+    }
+
+    private Map<String, Object> getToken(String master,Integer id){
+        Map<String,Object> docMap = new HashMap<>();
+        docMap.put("userName",DOCM.get("userName"));
+        docMap.put("password",DOCM.get("pwd"));
+        docMap.put("dateTime", DateUtil.currentDateString(Constant.YMD_HMS));
+        String params = JSON.toJSONString(docMap);
+        String post = PSHttpUtils.sendPost(DOCM.get("url") + "/ediApi/edi/token", params);
+        JSONObject jsonObject = JSON.parseObject(post);
+        String code = jsonObject.getString("code");
+        String message = jsonObject.getString("message");
+        String data = jsonObject.getString("data");
+        Map<String, Object> map = new HashMap<String, Object>();
+        if(StringUtil.hasText(data)){
+            JSONObject tokenJ =JSON.parseObject(data);
+            logger.info("getToken tokenRes-S master {} , id {} code {} message {} expires{} token {}",master,id,code,message,tokenJ.get("expires"),tokenJ.get("token"));
+            map.put("success", true);
+            map.put("token", tokenJ.get("token"));
+        }else {
+            logger.info("getToken tokenRes-F master {} , id {} code {} err {} data {}",master, id,code,message,data);
+            map.put("success", false);
+            map.put("message", message);
+        }
+        return map;
+    }
+
+    private Map<String, Object> getDocMsg(String bCode,String master, Integer id){
+        SpObserver.putSp(master);
+        String pageCaller="DH_ATTACH";
+        String ev = "DEV";
+        if(baseDao.isDBSetting(pageCaller,"enableProd")){
+            ev = "PROD";
+        }
+        String url = baseDao.getDBSetting(pageCaller,"dockingURL_"+ev);
+        String userName = baseDao.getDBSetting(pageCaller,"dockingUserName_"+ev);
+        String pwd = baseDao.getDBSetting(pageCaller,"dockingPWD_"+ev);
+        if(!StringUtil.hasText(url)){
+            return logErr(bCode,"域名未设置",master,id);
+        }
+        if(!StringUtil.hasText(userName)){
+            return logErr(bCode,"对接账号未设置",master,id);
+        }
+        if(!StringUtil.hasText(pwd)){
+            return logErr(bCode,"对接密码未设置",master,id);
+        }
+        DOCM.put("ev",ev);
+        DOCM.put("url",url);
+        DOCM.put("userName",userName);
+        DOCM.put("pwd",pwd);
+        return null;
+    }
+    private Map<String, Object> logErr(String bCode,String errMsg,String master,Integer id){
+        Map<String, Object> map = new HashMap<String, Object>();
+        logger.info("{} err {} ,master {} , id {}",bCode, errMsg,master, id);
+        baseDao.execute("update CUSTOMTABLE set ct_varchar50_8='上传失败',ct_varchar50_9='"+errMsg.replaceAll("'","''")+"' where ct_id = "+id);
+        map.put("success", false);
+        map.put("message", errMsg);
+        return map;
+    }
+}
+

+ 56 - 6
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,23 +1,73 @@
 package com.uas.eis;
 
-import com.uas.eis.beans.result.CrmQueryResult;
-import com.uas.eis.listener.UasProdInOutListener;
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.service.DHService;
+import okhttp3.*;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
+import java.io.*;
+import java.util.Map;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {UasEisApplication.class})
 public class UasEisApplicationTests {
 	@Autowired
-	private UasProdInOutListener uasProdInOutListener;
-
+	private DHService dHService;
 
 	@Test
-	public void Test() {
-
+	public void TestGetToken() throws IOException {
+		OkHttpClient client = new OkHttpClient().newBuilder()
+				.build();
+		MediaType mediaType = MediaType.parse("application/json");
+		RequestBody body = RequestBody.create(mediaType, "{\"userName\":\"116430\",\"password\":\"123456\",\"dateTime\":\"2024-07-30 09:03:50\"}");
+		Request request = new Request.Builder()
+				.url("https://sdctestapi.dah-demo.com/ediApi/edi/token")
+				.method("POST", body)
+				.addHeader("Content-Type", "application/json")
+				.build();
+		Response response = client.newCall(request).execute();
+		System.out.println(response.body().string());
+//		SpObserver.putSp("ZN_P_T1");
+//		Map<String,Object> m = dHService.getToken("ZN_P_T1",1035467);
+//		System.out.println(m.get("code")+"=====message:"+m.get("message")+"======token:"+m.get("token"));
+	}
 
+	@Test
+	public void TestpushAttachToDH() {
+//		SpObserver.putSp("ZN_P_T1");
+		Map<String,Object> m = dHService.pushAttachToDH("ZN_P_T1",1035467);
+		System.out.println(m.get("code")+"=====message:"+m.get("message"));
+	}
+	@Test
+	public void TestdeleteAttachToDH(){
+		Map<String,Object> m = dHService.deleteAttachToDH("ZN_P_T1",1035467);
+		System.out.println(m.get("code")+"=====message:"+m.get("message"));
+	}
+	@Test
+	public void upLoadByOkHttp() throws IOException{
+		OkHttpClient client = new OkHttpClient().newBuilder()
+				.build();
+		MediaType mediaType = MediaType.parse("multipart/form-data");
+		RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
+				.addFormDataPart("file","附件1.xlsx",
+						RequestBody.create(MediaType.parse("application/octet-stream"),
+								new File("/erpfile/postattach/postattach/WUYX/25b99fc57a4347ff884a67b549e92292.xlsx")))
+				.addFormDataPart("file","附件2.docx",
+						RequestBody.create(MediaType.parse("multipart/form-data"),
+								new File("/erpfile/postattach/postattach/WUYX/a395910c159244168c45062bcd5b5705.docx")))
+				.addFormDataPart("param","{ \"dataType\": \"ORT\",\"businessCode\": [\"1\",\"2\"]}")
+				.build();
+		Request request = new Request.Builder()
+				.url("https://sdctestapi.dah-demo.com/ediApi/accessory/insert")
+				.method("POST", body)
+				.addHeader("Content-Type", "multipart/form-data")
+				.addHeader("Authorization", "token")
+				.build();
+		Response response = client.newCall(request).execute();
+		System.out.println(response.body().string());
 	}
 
 }