This commit is contained in:
张光起 2025-05-26 18:12:45 +08:00
parent 426a2ccb3e
commit 9c8b1aa500
2 changed files with 117 additions and 6 deletions

View File

@ -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<String, Object> 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<String, Object> paramMap2 = new HashMap<String, Object>();
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"));

View File

@ -389,5 +389,77 @@ public class CrmRequestUtil {
}
//上传询价单附件
public MultiValueMap<String, Object> attachmentuploadFile(List<?> fileList, Long erpId) {
MultiValueMap<String, Object> 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<String, Object> 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<Map<String, Object>> fileReqEntity = new HttpEntity<>(fileReq, headers);
try {
ResponseEntity<byte[]> 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<ByteArrayResource> fileEntity = new HttpEntity<>(byteArrayResource, fileHeaders);
body.add("file", fileEntity);
} else {
log.error("文件下载失败mediaId: {}", fileData.getString("path"));
}
} catch (Exception e) {
log.error("下载文件出错", e);
}
}
return body;
}
}