|
|
@@ -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;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|