package com.ruoyi.webApi; import com.ruoyi.bill.domain.PoundBill; import com.ruoyi.bill.domain.Poundappli; import com.ruoyi.bill.service.IPoundBillService; import com.ruoyi.bill.service.IPoundappliService; import com.ruoyi.system.service.ISysConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 各个单据回传星空接口(单据更新,单据下推) * @author 16358 * @date 2025/6/16 */ @Component("apiPostBack") public class ApiPostBack { @Autowired private ISysConfigService sysConfigService; private ApiTask apiTask; private IPoundBillService poundBillService; /** * 磅单信息对象更新回星空 * @return 回传成功报文/错误日志信息 */ public String makePoundBillFormData(String id){ PoundBill poundBill = poundBillService.selectPoundBillById(id); if(poundBill == null) throw new RuntimeException("磅单不存在!"); // 目标URL String url = sysConfigService.selectConfigByKey("OA_Url")+"/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.save.common.kdsvc"; String jsonInputString = ""; String oabilltype = poundBill.getSrcblltype(); if("SAL_DELIVERYNOTICE".equals(oabilltype)){ //发货通知单 jsonInputString = "{\n" + " \"Formid\": \"SAL_DELIVERYNOTICE\",\n" + " \"data\": {\n" + " \"NeedUpDateFields\": [],\n" + " \"NeedReturnFields\": [],\n" + " \"IsDeleteEntry\": \"true\",\n" + " \"IsAutoAdjustField\": \"true\",\n" + " \"Model\": {\n" + " \"FID\": \""+poundBill.getFid()+"\",\n" + " \"F_GMSHDW\": \""+poundBill.getRecunitid()+"\",\n" + " \"F_CYDW\": \""+poundBill.getTrnunitid()+"\",\n" + " \"F_BDMC\":\""+poundBill.getPoundname()+" \",\n" + " \"FEntity\": [\n" + " {\n" + " \"FEntryID\": "+poundBill.getFentity_fentryid()+",\n" + " \"F_JLHCSL\": \""+poundBill.getNetmqty()+"\",\n" + " \"F_YMZ\": \""+poundBill.getSrcwghmqty()+"\",\n" + " \"F_YPZ\": \""+poundBill.getSrcempmqty()+"\",\n" + " \"F_JS\": \""+poundBill.getNetmqty()+"\"\n" + " }\n" + " ]\n" + " }\n" + " }\n" + "}"; }else if("PUR_ReceiveBill".equals(oabilltype)){ //收料通知单 jsonInputString = "{\n" + " \"Formid\": \"PUR_ReceiveBill\",\n" + " \"data\": {\n" + " \"NeedUpDateFields\": [],\n" + " \"NeedReturnFields\": [],\n" + " \"IsDeleteEntry\": \"true\",\n" + " \"IsAutoAdjustField\": \"true\",\n" + " \"Model\": {\n" + " \"FID\": \""+poundBill.getFid()+"\",\n" + " \"F_GMSHDW\": \""+poundBill.getRecunitid()+"\",\n" + " \"F_CYDW\": \""+poundBill.getTrnunitid()+"\",\n" + " \"F_BDMC\":\""+poundBill.getPoundname()+" \",\n" + " \"FDetailEntity\": [\n" + " {\n" + " \"FEntryID\": "+poundBill.getFentity_fentryid()+",\n" + " \"F_JLHCSL\": \""+poundBill.getNetmqty()+"\",\n" + " \"F_YMZ\": \""+poundBill.getSrcwghmqty()+"\",\n" + " \"F_YPZ\": \""+poundBill.getSrcempmqty()+"\",\n" + " \"F_JS\": \""+poundBill.getNetmqty()+"\"\n" + " }\n" + " ]\n" + " }\n" + " }\n" + "}"; }else if("STK_TRANSFERAPPLY".equals(oabilltype)){ //调拨申请单 jsonInputString = "{\n" + " \"Formid\": \"STK_TRANSFERAPPLY\",\n" + " \"data\": {\n" + " \"NeedUpDateFields\": [],\n" + " \"NeedReturnFields\": [],\n" + " \"IsDeleteEntry\": \"true\",\n" + " \"IsAutoAdjustField\": \"true\",\n" + " \"Model\": {\n" + " \"FID\": \""+poundBill.getFid()+"\",\n" + " \"F_DYCS\": "+poundBill.getPrintcount()+", \n" + " \"F_CYDW\": \""+poundBill.getTrnunitid()+"\", \n" + " \"F_FHDW\": \""+poundBill.getSendunitid()+"\", \n" + " \"F_SHDW\": \""+poundBill.getRecunitid()+"\", \n" + " \"F_ZGS\": "+poundBill.getZgsId()+", \n" + " \"FEntity\": [\n" + " {\n" + " \"FEntryID\": "+poundBill.getFentity_fentryid()+",\n" + " \"F_JLHCSL\": \""+poundBill.getNetmqty()+"\" \n" + " }\n" + " ]\n" + " }\n" + " }\n" + "}"; }else if("SP_InStock".equals(oabilltype)){ //简单生产入库单 jsonInputString = "{\n" + " \"Formid\": \"SP_InStock\",\n" + " \"data\": {\n" + " \"NeedUpDateFields\": [],\n" + " \"NeedReturnFields\": [],\n" + " \"IsDeleteEntry\": \"true\",\n" + " \"IsAutoAdjustField\": \"true\",\n" + " \"Model\": {\n" + " \"FID\": \""+poundBill.getFid()+"\",\n" + " \"F_YWBD\": \""+poundBill.getPoundid()+"\",\n" + " \"F_SJYWBD\": \""+poundBill.getPoundid()+"\",\n" + " \"F_ZGS\": "+poundBill.getZgsId()+", \n" + " \"F_FHDW\": \""+poundBill.getSendunitid()+"\", \n" + " \"F_SHDW\": \""+poundBill.getRecunitid()+"\", \n" + " \"FEntity\": [\n" + " {\n" + " \"FEntryID\": "+poundBill.getFentity_fentryid()+",\n" + " \"FMaterialId\": {\n" + " \"FNumber\": \"\"\n" + " },\n" + " \"FInStockType\": \"1\",\n" + " \"FMustQty\": "+poundBill.getNetmqty()+",\n" + " \"FRealQty\": "+poundBill.getNetmqty()+",\n" + " \"FStockId\": {\n" + " \"FNumber\": \"\"\n" + " },\n" + " \"FWorkShopId1\": {\n" + " \"FNumber\": \"\"\n" + " },\n" + " \"FShiftGroupId\": {\n" + " \"FNumber\": \"\"\n" + " },\n" + " \"F_CZ\": 0,\n" + " \"FMemo\": \""+poundBill.getRemark()+"\",\n" + " \"F_LC\": \""+poundBill.getBoilerno()+"\",\n" + " \"F_GH\": 0,\n" + " \"F_GANGH\": \""+poundBill.getSteeno()+"\",\n" + " \"F_ZKS\": 0,\n" + " \"F_KH\": 0,\n" + " \"F_PJZL\": 0,\n" + " \"F_XCLX\": \""+poundBill.getLinetype()+"\",\n" + " \"F_PH\": \""+poundBill.getBatno()+"\"\n" + " }\n" + " ]\n" + " }\n" + " }\n" + "}"; }else { throw new RuntimeException("单据类型错误!"); } //记录错误日志 StringBuilder errorLog = new StringBuilder(); try { // 创建URL对象 URL apiUrl = new URL(url); // 打开连接 HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection(); // 设置请求方法为POST connection.setRequestMethod("POST"); // 设置请求头 // Content-Type 指定发送的数据格式是JSON,并且字符集为UTF-8 connection.setRequestProperty("Content-Type", "application/json; utf-8"); // Accept 指定期望接收的数据格式是JSON connection.setRequestProperty("Accept", "application/json"); // 设置请求头,包含token String token = apiTask.getToken(); if (token != null && !token.isEmpty()) { connection.setRequestProperty("kdservice-sessionid", token); } else { throw new RuntimeException("获取到的Token为空,无法设置请求头。"); } // 允许写入请求体 connection.setDoOutput(true); // 获取输出流,发送请求体数据 try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } // 获取响应码 int responseCode = connection.getResponseCode(); // 读取响应内容 StringBuilder response = new StringBuilder(); try (BufferedReader br = new BufferedReader( new InputStreamReader(connection.getInputStream(), "utf-8"))) { String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } return response.toString(); }catch (Exception e) { // throw new RuntimeException("因未知原因导致获取数据失败!"); errorLog.append("因未知原因导致数据回传星空失败!\n"); } } catch (IOException e) { // throw new RuntimeException(e); errorLog.append("回传数据失败!: " + e.getMessage()+ "\n"); } return errorLog.toString(); } }