diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/priceapprovaController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/priceapprovaController.java index e6d9413..94a9d01 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/priceapprovaController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/priceapprovaController.java @@ -6,12 +6,19 @@ import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.context.XxlJobHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; import org.ssssssss.magicboot.fxapi.HttpClientResult; import org.ssssssss.magicboot.fxapi.HttpClientUtils; import org.ssssssss.magicboot.fxapi.XKTokenAccess; import org.ssssssss.magicboot.fxapi.model.CrmFXApiParam; +import org.ssssssss.magicboot.utils.CrmRequestUtil; import org.ssssssss.magicboot.zdyutils.FXHTTP; import org.ssssssss.magicboot.zdyutils.GcjJson; import org.ssssssss.magicboot.zdyutils.MagicApi; @@ -26,6 +33,7 @@ import java.util.Map; @RequestMapping("/priceapprova") public class priceapprovaController { static Logger log = LoggerFactory.getLogger("priceapprova"); + private RestTemplate restTemplate = new RestTemplate(); public static void main(String[] args) throws Exception { new priceapprovaController().getSynDataAdd(); @@ -129,6 +137,8 @@ public class priceapprovaController { String platform_manufacturer_text__c = GcjJson.getNodeValue(str, "JSON.platform_manufacturer_text__c") != null ? GcjJson.getNodeValue(str, "JSON.platform_manufacturer_text__c").toString() : ""; String quote_requirements__c = GcjJson.getNodeValue(str, "JSON.quote_requirements__c") != null ? GcjJson.getNodeValue(str, "JSON.quote_requirements__c").toString() : ""; + JSONArray specificationfile = (JSONArray) GcjJson.getNodeValue(str, "JSON.technical_specification__c"); + String cemployeeid = ""; @@ -185,16 +195,16 @@ public class priceapprovaController { datajson.put("f9w5_platform",platform_manufacturer_text__c); String implementation_needed__c = GcjJson.getNodeValue(str, "JSON.implementation_needed__c") != null ? GcjJson.getNodeValue(str, "JSON.implementation_needed__c").toString() : ""; if("yes".equals(implementation_needed__c)){ - datajson.put("f9w5_implementation","0"); - } else if ("no".equals(implementation_needed__c)) { datajson.put("f9w5_implementation","1"); + } else if ("no".equals(implementation_needed__c)) { + datajson.put("f9w5_implementation","0"); } //是否送检 String is_inspected__c = GcjJson.getNodeValue(str, "JSON.is_inspected__c") != null ? GcjJson.getNodeValue(str, "JSON.is_inspected__c").toString() : ""; if("yes".equals(is_inspected__c)){ - datajson.put("f9w5_isinspected","0"); - } else if ("no".equals(is_inspected__c)) { datajson.put("f9w5_isinspected","1"); + } else if ("no".equals(is_inspected__c)) { + datajson.put("f9w5_isinspected","0"); } JSONArray groupstandardarr = new JSONArray(); @@ -239,7 +249,7 @@ public class priceapprovaController { stringBuffer.append("参数解析错误,请联系开发人员"); e.printStackTrace(); } - getSynDataSave(stringBuffer,sendFlag,fxapi,dataId,nameData,strJson,getData); + getSynDataSave(stringBuffer,sendFlag,fxapi,dataId,nameData,strJson,getData,specificationfile); } } @@ -247,7 +257,7 @@ public class priceapprovaController { /** * 写数据 */ - public void getSynDataSave(StringBuffer stringBuffer,Boolean sendFlag,FXHTTP fxapi,String dataId,String nameData,String obj,JSONObject str) { + public void getSynDataSave(StringBuffer stringBuffer,Boolean sendFlag,FXHTTP fxapi,String dataId,String nameData,String obj,JSONObject str,JSONArray specificationfile) { String syn_type = "0";//同步类型 0新增 1修改 2删除 String res_url = "http://192.168.31.233:8022/ierp/kapi/v2/f9w5/pmp/f9w5_pmp_priceapproval/priceapprovalSave"; String res_param = obj; @@ -275,6 +285,35 @@ public class priceapprovaController { paramMap.put("sync_info__c", resjs.getString("message")); //回写json fxapi.upSynZDYFieldParam("", "project_quote_quotation__c", dataId, paramMap); + + if(!specificationfile.isEmpty()){ + CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); + List attachmentList = specificationfile; + MultiValueMap body = crmRequestUtil.attachmentuploadFile(attachmentList, Long.parseLong(erpid)); + //开始封装请求实体 + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); + httpHeaders.set("accessToken", accessToken); + HttpEntity entity = new HttpEntity(body, httpHeaders); + //开始发起传输 + JSONObject fileRes = new JSONObject(); + try { + fileRes = restTemplate.postForObject("http://192.168.31.233:8022/ierp/kapi/v2/frame/attachment/uploadFile", entity, JSONObject.class); + Map paramMap2 = new HashMap(); + + String message = fileRes.getString("message"); + if("".equals(message) || message == null){ + message = "上传成功"; + } + paramMap.put("technical_upload_message__c", message);//数据ID + fxapi.upSynZDYFieldParam("", "project_quote_quotation__c", dataId, paramMap2); + + } catch (RestClientException e) { + e.printStackTrace(); + } + + } + }else{ sendFlag=true; stringBuffer.append("项目报价询价申请创建接口调用失败:"+resjs.getString("message")); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java index 7eb05ef..bffddce 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java @@ -389,5 +389,77 @@ public class CrmRequestUtil { } + //上传询价单附件 + public MultiValueMap attachmentuploadFile(List fileList, Long erpId) { + MultiValueMap body = new LinkedMultiValueMap<>(); + + JSONObject args = new JSONObject(); + args.put("entityNumber","f9w5_pmp_priceapproval"); + args.put("billPkId",erpId); + args.put("controlKey","f9w5_technicalstd"); + + body.add("attachmentUploadFileArgs", args); + + if (fileList == null || fileList.isEmpty()) { + log.info("文件列表为空"); + return body; // 返回空map而不是null + } + + for (Object fileObj : fileList) { + JSONObject fileData = JSON.parseObject(JSON.toJSONString(fileObj)); + + Map fileReq = new HashMap<>(); + fileReq.put("corpAccessToken", getCRMToken()); + fileReq.put("corpId", CertificateConstant.CORP_ID); + fileReq.put("mediaTypeDesc", "DOCUMENT"); + fileReq.put("mediaId", fileData.getString("path")); + fileReq.put("igonreMediaIdConvert", false); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity> fileReqEntity = new HttpEntity<>(fileReq, headers); + + try { + ResponseEntity fileResp = restTemplate.exchange( + "https://open.fxiaoke.com/media/download", + HttpMethod.POST, + fileReqEntity, + byte[].class); + + if (fileResp.getStatusCode() == HttpStatus.OK && fileResp.getBody() != null) { + byte[] fileBytes = fileResp.getBody(); + String fileName = fileData.getString("filename"); + String contentType = fileData.getString("ext"); + + ByteArrayResource byteArrayResource = new ByteArrayResource(fileBytes) { + @Override + public String getFilename() { + return fileName != null ? fileName : UUID.randomUUID() + ".dat"; + } + }; + + HttpHeaders fileHeaders = new HttpHeaders(); + fileHeaders.setContentDispositionFormData("file", byteArrayResource.getFilename()); + + try { + fileHeaders.setContentType(MediaType.parseMediaType( + contentType != null ? contentType : MediaType.APPLICATION_OCTET_STREAM_VALUE)); + } catch (Exception e) { + fileHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); + } + + HttpEntity fileEntity = new HttpEntity<>(byteArrayResource, fileHeaders); + body.add("file", fileEntity); + } else { + log.error("文件下载失败,mediaId: {}", fileData.getString("path")); + } + } catch (Exception e) { + log.error("下载文件出错", e); + } + } + + return body; + } + }