Commit 3905d588 by jiang'yun

修改

parent c08a7e1d
...@@ -524,6 +524,157 @@ public class DjdcController { ...@@ -524,6 +524,157 @@ public class DjdcController {
return AjaxResult.success(textPresentation); return AjaxResult.success(textPresentation);
} }
/**
* 钻头单支长城大模型调用
* @param
* @return
*/
@PostMapping(value = "/ztdzccdy")
public AjaxResult ztdzccdy(@RequestBody Djjc ljSzfxjg,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", false);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
// String s =JSON.toJSONString (ljSzfxjg.getList());
// map2.put("value",s);
List<Map> listMap =new ArrayList<>();
listMap.add(map2);
map.put("content",listMap);
String url = "https://agent.ai.sinopec.com/aicoapi/gateway/v2/workflow/api_run/6d7d9423836f46f0862c62eb17bf56e2";
String key="c8hXPRzzhakAyTW8brMGkH4DPpUqw0zk";
// dymxcom(map,url,key,response);
// Gson gson = new GsonBuilder().setPrettyPrinting().create();
// String json = gson.toJson(map);
// String result2 = HttpRequest.post(url).header("Authorization","Bearer "+key).body(json).execute().body();
// System.out.println(result2);
//// // 解析API响应
//// String textPresentation ="由于您没有提供具体的各开次时效最大的前5口钻具组合分析统计结果数据,我无法进行实际的数据分析和推荐。不过,我可以为您提供一个通用的分析框架和示例输出,您可以根据实际数据填充具体内容。\\n\\n通用分析框架:\\n\\n1. 数据分析:\\n- 对于每个开次(如一开、二开、三开等),查看时效最高的5个钻具组合\\n- 比较它们的机械钻速、钻头寿命、稳定性等关键指标\\n- 分析地层特点与钻具组合的匹配程度\\n\\n2. 选择最优钻具组合:\\n- 优先选择时效最高的组合\\n- 在时效相近时,选择稳定性更好的组合\\n- 考虑钻头寿命与更换频率的平衡\\n\\n3. 理由阐明:\\n- 该组合在类似地层中表现最佳\\n- 机械钻速与钻压、转速等参数匹配最优\\n- 振动控制良好,减少非生产时间\\n\\n示例输出(请用实际数据替换):\\n\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"Φ444.5mm PDC钻头 + Φ203.2mm钻铤×6根 + Φ177.8mm钻铤×9根 + 随钻震击器\\\",\\n \\\"rationale\\\": \\\"该组合在一开表层钻井中平均机械钻速达到35m/h,比第二名的28m/h高出25%,且振动幅度控制在安全范围内,起下钻次数最少。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"Φ311.2mm 混合钻头 + Φ228.6mm钻铤×9根 + Φ203.2mm钻铤×6根 + 螺杆钻具\\\",\\n \\\"rationale\\\": \\\"在二开井段硬夹层地层中,该组合时效达到22m/h,钻头寿命达180小时,无需中途更换,综合时效比使用牙轮钻头提高40%。\\\"\\n },\\n \\\"section_3\\\": {\\n \\\"recommended_bit\\\": \\\"Φ215.9mm 5刀翼PDC钻头 + Φ165.1mm钻铤×12根 + 随钻测斜仪 + 涡轮增压器\\\",\\n \\\"rationale\\\": \\\"针对三开深部复杂地层,该组合在保持18m/h钻速的同时,有效控制井斜在1°以内,减少纠斜时间,综合时效最优。\\\"\\n }\\n }\\n}\\n```\\n\\n请提供具体的各开次前5名钻具组合的详细统计数据(包括但不限于:钻头类型、钻具组合、机械钻速、钻头寿命、振动数据等),我可以为您做出更精确的分析和推荐。";
// String textPresentation ="";
//// try {
//// // 创建ObjectMapper实例
//// ObjectMapper objectMapper = new ObjectMapper();
//// // 全局忽略未知字段
//// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//// // 解析JSON为ApiResponse对象
//// ApiResponse res = objectMapper.readValue(json, ApiResponse.class);
//// // 提取"文本呈现"的内容
//// textPresentation = res.getData().getInnerData().getTextPresentation();
//// // 打印结果
//// System.out.println("文本呈现内容:\n" + textPresentation);
//// } catch (Exception e) {
//// e.printStackTrace();
//// }
// // 解析为顶层JsonObject
// JsonObject root = gson.fromJson(result2, JsonObject.class);
//
// // 逐层获取"文本呈现"内容
// // 1. 获取外层data节点
// JsonObject outerData = root.getAsJsonObject("data");
// // 2. 获取内层data节点
// JsonObject innerData = outerData.getAsJsonObject("data");
// // 3. 获取"文本呈现"字段的值
// textPresentation = innerData.get("文本呈现").getAsString();
//
// // 打印结果
// System.out.println("文本呈现内容:\n" + textPresentation);
// 进阶:提取"文本呈现"中嵌套的JSON示例(如bit_recommendations)
// 1. 从文本中截取JSON部分(通过```json标记分割)
// String[] textParts = textPresentation.split("```json");
// if (textParts.length > 1) {
// String jsonPart = textParts[1].split("```")[0].trim();
// // 2. 解析截取的JSON字符串
// JsonObject recommendations = gson.fromJson(jsonPart, JsonObject.class);
// // 3. 获取一开推荐的钻头
// String section1Bit = recommendations
// .getAsJsonObject("bit_recommendations")
// .getAsJsonObject("section_1")
// .get("recommended_bit")
// .getAsString();
//
// System.out.println("\n一开推荐钻头:" + section1Bit); // 输出 P5354
// }
return AjaxResult.success("sssssssssssssssssssssssssssss");
}
/**
* 钻头区块长城大模型调用
* @param
* @return
*/
@PostMapping(value = "/ztqkccdy")
public AjaxResult ztqkccdy(@RequestBody DjZtfx ljSzfxjg,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", false);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
// String s =JSON.toJSONString (ljSzfxjg.getList());
// map2.put("value",s);
List<Map> listMap =new ArrayList<>();
listMap.add(map2);
map.put("content",listMap);
// String url = "https://agent.ai.sinopec.com/aicoapi/gateway/v2/workflow/api_run/6d7d9423836f46f0862c62eb17bf56e2";
// String key="c8hXPRzzhakAyTW8brMGkH4DPpUqw0zk";
//// dymxcom(map,url,key,response);
// Gson gson = new GsonBuilder().setPrettyPrinting().create();
// String json = gson.toJson(map);
// String result2 = HttpRequest.post(url).header("Authorization","Bearer "+key).body(json).execute().body();
// System.out.println(result2);
//// // 解析API响应
//// String textPresentation ="由于您没有提供具体的各开次时效最大的前5口钻具组合分析统计结果数据,我无法进行实际的数据分析和推荐。不过,我可以为您提供一个通用的分析框架和示例输出,您可以根据实际数据填充具体内容。\\n\\n通用分析框架:\\n\\n1. 数据分析:\\n- 对于每个开次(如一开、二开、三开等),查看时效最高的5个钻具组合\\n- 比较它们的机械钻速、钻头寿命、稳定性等关键指标\\n- 分析地层特点与钻具组合的匹配程度\\n\\n2. 选择最优钻具组合:\\n- 优先选择时效最高的组合\\n- 在时效相近时,选择稳定性更好的组合\\n- 考虑钻头寿命与更换频率的平衡\\n\\n3. 理由阐明:\\n- 该组合在类似地层中表现最佳\\n- 机械钻速与钻压、转速等参数匹配最优\\n- 振动控制良好,减少非生产时间\\n\\n示例输出(请用实际数据替换):\\n\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"Φ444.5mm PDC钻头 + Φ203.2mm钻铤×6根 + Φ177.8mm钻铤×9根 + 随钻震击器\\\",\\n \\\"rationale\\\": \\\"该组合在一开表层钻井中平均机械钻速达到35m/h,比第二名的28m/h高出25%,且振动幅度控制在安全范围内,起下钻次数最少。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"Φ311.2mm 混合钻头 + Φ228.6mm钻铤×9根 + Φ203.2mm钻铤×6根 + 螺杆钻具\\\",\\n \\\"rationale\\\": \\\"在二开井段硬夹层地层中,该组合时效达到22m/h,钻头寿命达180小时,无需中途更换,综合时效比使用牙轮钻头提高40%。\\\"\\n },\\n \\\"section_3\\\": {\\n \\\"recommended_bit\\\": \\\"Φ215.9mm 5刀翼PDC钻头 + Φ165.1mm钻铤×12根 + 随钻测斜仪 + 涡轮增压器\\\",\\n \\\"rationale\\\": \\\"针对三开深部复杂地层,该组合在保持18m/h钻速的同时,有效控制井斜在1°以内,减少纠斜时间,综合时效最优。\\\"\\n }\\n }\\n}\\n```\\n\\n请提供具体的各开次前5名钻具组合的详细统计数据(包括但不限于:钻头类型、钻具组合、机械钻速、钻头寿命、振动数据等),我可以为您做出更精确的分析和推荐。";
// String textPresentation ="";
//// try {
//// // 创建ObjectMapper实例
//// ObjectMapper objectMapper = new ObjectMapper();
//// // 全局忽略未知字段
//// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//// // 解析JSON为ApiResponse对象
//// ApiResponse res = objectMapper.readValue(json, ApiResponse.class);
//// // 提取"文本呈现"的内容
//// textPresentation = res.getData().getInnerData().getTextPresentation();
//// // 打印结果
//// System.out.println("文本呈现内容:\n" + textPresentation);
//// } catch (Exception e) {
//// e.printStackTrace();
//// }
// // 解析为顶层JsonObject
// JsonObject root = gson.fromJson(result2, JsonObject.class);
//
// // 逐层获取"文本呈现"内容
// // 1. 获取外层data节点
// JsonObject outerData = root.getAsJsonObject("data");
// // 2. 获取内层data节点
// JsonObject innerData = outerData.getAsJsonObject("data");
// // 3. 获取"文本呈现"字段的值
// textPresentation = innerData.get("文本呈现").getAsString();
//
// // 打印结果
// System.out.println("文本呈现内容:\n" + textPresentation);
// 进阶:提取"文本呈现"中嵌套的JSON示例(如bit_recommendations)
// 1. 从文本中截取JSON部分(通过```json标记分割)
// String[] textParts = textPresentation.split("```json");
// if (textParts.length > 1) {
// String jsonPart = textParts[1].split("```")[0].trim();
// // 2. 解析截取的JSON字符串
// JsonObject recommendations = gson.fromJson(jsonPart, JsonObject.class);
// // 3. 获取一开推荐的钻头
// String section1Bit = recommendations
// .getAsJsonObject("bit_recommendations")
// .getAsJsonObject("section_1")
// .get("recommended_bit")
// .getAsString();
//
// System.out.println("\n一开推荐钻头:" + section1Bit); // 输出 P5354
// }
return AjaxResult.success("事实上事实上少时诵诗书是撒是撒是撒是撒是撒是撒是撒是撒是撒是撒是撒是撒");
}
public static void main(String[] args) { public static void main(String[] args) {
String json="{\"code\":200,\"msg\":\"成功\",\"data\":{\"event\":\"workflow_finished\",\"session_id\":\"1ef1627eedc6498bbd197a1697a0c7fb\",\"step_id\":\"\",\"created\":1763347609215,\"data\":{\"usage\":{\"completion_tokens\":881,\"max_token\":\"8k\",\"prompt_tokens\":886,\"total_tokens\":1767},\"文本呈现\":\"### 数据分析\\n\\n首先,我们需要对输入的数据进行详细分析,以便为每个开次选择最优的钻具组合。输入数据包含了多个开次(如一开、二开)的钻头使用情况,主要关注以下几个方面:\\n1. **钻头进尺最高**:反映了钻头在单次使用中的钻进能力。\\n2. **钻头机速最快**:反映了钻头的机械钻速,即单位时间内的钻进速度。\\n3. **钻头数量使用最多**:反映了该钻头的使用频率和可靠性。\\n4. **一趟钻率**:反映了钻头在一次下井中完成钻进任务的能力,高一趟钻率通常意味着更高的效率和更少的起下钻时间。\\n\\n#### 一开(1开)数据分析:\\n- **P5354钻头**:\\n - 进尺最高:359.0米(5只钻头,一趟钻率100%)。\\n - 机速最快:机械转速126.88(5只钻头,一趟钻率100%)。\\n - 数量使用最多:5只钻头,一趟钻率100%。\\n - 其他:在所有指标中表现最优,且一趟钻率高达100%,说明其效率和可靠性非常高。\\n\\n#### 二开(2开)数据分析:\\n- **HT2565钻头**:\\n - 进尺最高:2758.3米(4只钻头,一趟钻率25%)。\\n - 机速最快:机械转速40.465(4只钻头,一趟钻率25%)。\\n - 数量使用最多:4只钻头(与HT2555并列),一趟钻率25%。\\n- **HT2555钻头**:\\n - 进尺最高:422.0米(4只钻头,一趟钻率25%)。\\n - 机速最快:机械转速26.925(4只钻头,一趟钻率25%)。\\n - 数量使用最多:4只钻头(与HT2565并列),一趟钻率25%。\\n- 对比:\\n - HT2565在进尺和机速上显著优于HT2555(进尺2758.3 vs 422.0,机速40.465 vs 26.925)。\\n - 一趟钻率两者相同(25%),但HT2565的绝对进尺和机速更高,说明其时效更高。\\n\\n### 选择最优钻头\\n#### 一开(1开):\\n- **最优钻头**:P5354。\\n - 理由:\\n - 在所有指标(进尺、机速、数量)中表现最优。\\n - 一趟钻率100%,说明其高效且可靠,能够一次性完成钻进任务,减少起下钻时间。\\n - 机械转速高达126.88,远高于其他钻头(二开的HT2565仅为40.465),说明其钻进速度极快。\\n\\n#### 二开(2开):\\n- **最优钻头**:HT2565。\\n - 理由:\\n - 进尺最高(2758.3米),远高于HT2555的422.0米,说明其单次钻进能力更强。\\n - 机速最快(40.465),高于HT2555的26.925,说明其钻进速度更快。\\n - 虽然一趟钻率较低(25%),但其绝对进尺和机速的优势足以弥补这一点,综合时效更高。\\n\\n### 输出结果\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"P5354\\\",\\n \\\"reason\\\": \\\"P5354在一开中表现最优,进尺最高(359.0米)、机速最快(126.88)、数量使用最多(5只),且一趟钻率100%,综合时效最高。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"HT2565\\\",\\n \\\"reason\\\": \\\"HT2565在二开中进尺最高(2758.3米)、机速最快(40.465),虽然一趟钻率为25%,但其绝对进尺和机速的优势使其综合时效最高。\\\"\\n }\\n }\\n}\\n```\"},\"url_list\":[],\"search_results\":[],\"usage\":{\"total_tokens\":1767,\"prompt_tokens\":886,\"completion_tokens\":881,\"max_token\":\"8k\"}}}"; String json="{\"code\":200,\"msg\":\"成功\",\"data\":{\"event\":\"workflow_finished\",\"session_id\":\"1ef1627eedc6498bbd197a1697a0c7fb\",\"step_id\":\"\",\"created\":1763347609215,\"data\":{\"usage\":{\"completion_tokens\":881,\"max_token\":\"8k\",\"prompt_tokens\":886,\"total_tokens\":1767},\"文本呈现\":\"### 数据分析\\n\\n首先,我们需要对输入的数据进行详细分析,以便为每个开次选择最优的钻具组合。输入数据包含了多个开次(如一开、二开)的钻头使用情况,主要关注以下几个方面:\\n1. **钻头进尺最高**:反映了钻头在单次使用中的钻进能力。\\n2. **钻头机速最快**:反映了钻头的机械钻速,即单位时间内的钻进速度。\\n3. **钻头数量使用最多**:反映了该钻头的使用频率和可靠性。\\n4. **一趟钻率**:反映了钻头在一次下井中完成钻进任务的能力,高一趟钻率通常意味着更高的效率和更少的起下钻时间。\\n\\n#### 一开(1开)数据分析:\\n- **P5354钻头**:\\n - 进尺最高:359.0米(5只钻头,一趟钻率100%)。\\n - 机速最快:机械转速126.88(5只钻头,一趟钻率100%)。\\n - 数量使用最多:5只钻头,一趟钻率100%。\\n - 其他:在所有指标中表现最优,且一趟钻率高达100%,说明其效率和可靠性非常高。\\n\\n#### 二开(2开)数据分析:\\n- **HT2565钻头**:\\n - 进尺最高:2758.3米(4只钻头,一趟钻率25%)。\\n - 机速最快:机械转速40.465(4只钻头,一趟钻率25%)。\\n - 数量使用最多:4只钻头(与HT2555并列),一趟钻率25%。\\n- **HT2555钻头**:\\n - 进尺最高:422.0米(4只钻头,一趟钻率25%)。\\n - 机速最快:机械转速26.925(4只钻头,一趟钻率25%)。\\n - 数量使用最多:4只钻头(与HT2565并列),一趟钻率25%。\\n- 对比:\\n - HT2565在进尺和机速上显著优于HT2555(进尺2758.3 vs 422.0,机速40.465 vs 26.925)。\\n - 一趟钻率两者相同(25%),但HT2565的绝对进尺和机速更高,说明其时效更高。\\n\\n### 选择最优钻头\\n#### 一开(1开):\\n- **最优钻头**:P5354。\\n - 理由:\\n - 在所有指标(进尺、机速、数量)中表现最优。\\n - 一趟钻率100%,说明其高效且可靠,能够一次性完成钻进任务,减少起下钻时间。\\n - 机械转速高达126.88,远高于其他钻头(二开的HT2565仅为40.465),说明其钻进速度极快。\\n\\n#### 二开(2开):\\n- **最优钻头**:HT2565。\\n - 理由:\\n - 进尺最高(2758.3米),远高于HT2555的422.0米,说明其单次钻进能力更强。\\n - 机速最快(40.465),高于HT2555的26.925,说明其钻进速度更快。\\n - 虽然一趟钻率较低(25%),但其绝对进尺和机速的优势足以弥补这一点,综合时效更高。\\n\\n### 输出结果\\n```json\\n{\\n \\\"bit_recommendations\\\": {\\n \\\"section_1\\\": {\\n \\\"recommended_bit\\\": \\\"P5354\\\",\\n \\\"reason\\\": \\\"P5354在一开中表现最优,进尺最高(359.0米)、机速最快(126.88)、数量使用最多(5只),且一趟钻率100%,综合时效最高。\\\"\\n },\\n \\\"section_2\\\": {\\n \\\"recommended_bit\\\": \\\"HT2565\\\",\\n \\\"reason\\\": \\\"HT2565在二开中进尺最高(2758.3米)、机速最快(40.465),虽然一趟钻率为25%,但其绝对进尺和机速的优势使其综合时效最高。\\\"\\n }\\n }\\n}\\n```\"},\"url_list\":[],\"search_results\":[],\"usage\":{\"total_tokens\":1767,\"prompt_tokens\":886,\"completion_tokens\":881,\"max_token\":\"8k\"}}}";
Gson gson = new Gson(); Gson gson = new Gson();
...@@ -1027,7 +1178,7 @@ public class DjdcController { ...@@ -1027,7 +1178,7 @@ public class DjdcController {
List< Map<String,Object> > mapList =new ArrayList<>(); List< Map<String,Object> > mapList =new ArrayList<>();
for (String key:result.keySet()) { for (String key:result.keySet()) {
List<Jskd> jskdList = result.get(key); List<Jskd> jskdList = result.get(key);
List<Jskd> collect = jskdList.stream().filter(it -> StringUtils.isNotEmpty(it.getZrzjx()) && it.getLjczjs()>1500 && StringUtils.isNotEmpty(it.getGldc())).collect(Collectors.toList()); List<Jskd> collect = jskdList.stream().filter(it -> StringUtils.isNotEmpty(it.getZrzjx()) &&it.getLjczjs()!=null && StringUtils.isNotEmpty(it.getGldc())).collect(Collectors.toList()).stream().filter(item-> item.getLjczjs()>1500 ).collect(Collectors.toList());
Map<String, List<Jskd>> resultcw = collect.stream() Map<String, List<Jskd>> resultcw = collect.stream()
.collect(Collectors.groupingBy(Jskd::getGldc)); .collect(Collectors.groupingBy(Jskd::getGldc));
for (String keycw:resultcw.keySet()) { for (String keycw:resultcw.keySet()) {
......
...@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain; ...@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel; import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class DjZtfx { public class DjZtfx {
...@@ -47,5 +49,6 @@ public class DjZtfx { ...@@ -47,5 +49,6 @@ public class DjZtfx {
@Excel(name = "起出井深中位数") @Excel(name = "起出井深中位数")
private Double qsjsZw; private Double qsjsZw;
private List<DjZtfx> list;
} }
...@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain; ...@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel; import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* 井基础信息 * 井基础信息
*/ */
...@@ -110,6 +112,8 @@ public class Djjc { ...@@ -110,6 +112,8 @@ public class Djjc {
private String ycmsqk; private String ycmsqk;
private String zcmsqk; private String zcmsqk;
private List<Djjc> list;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment