Commit b21cf117 by jiang'yun

修改

parent dedd89d6
......@@ -1869,6 +1869,16 @@ public class SjDjjcController extends BaseController
}
/**
* 计算邻井井组
* @param sjDjjc
* @return
*/
@GetMapping("/jsljjz")
public AjaxResult jsljjz(SjDjjc sjDjjc) throws Exception {
return sjDjjcService.jsljjz(sjDjjc);
}
private static List<SjFdsgcsDcyx> processAndDisplay(List<SjDcfxDzfc> stratumList,double kscs, double targetCs,String jh,String kc) {
......
package com.zjsgfa.project.zjsgfa.domain;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import com.zjsgfa.framework.web.domain.BaseEntity;
......@@ -65,6 +67,8 @@ public class ClYxsj extends BaseEntity
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createdTime;
private List<ClYxsj> list;
public void setId(Long id)
{
this.id = id;
......
package com.zjsgfa.project.zjsgfa.service;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.zjsgfa.framework.web.domain.AjaxResult;
......@@ -69,4 +70,5 @@ public interface ISjDjjcService
AjaxResult saveZjzh(CommonParam param);
AjaxResult jsljjz(SjDjjc sjDjjc) throws Exception;
}
......@@ -991,5 +991,60 @@ public class SjDjjcServiceImpl implements ISjDjjcService
return AjaxResult.success("计算成功");
}
@Override
public AjaxResult jsljjz(SjDjjc sjDjjc)throws Exception {
//查询附近邻井
String jh = sjDjjc.getJh();
SjDjjc sjDjjc1 = sjDjjcMapper.selectSjDjjcByJh(jh);
if(sjDjjc1!=null){
if(sjDjjc1.getJdhzb()!=null && sjDjjc1.getJdzzb()!=null){
CommonParam param =new CommonParam();
param.setJkhzb(sjDjjc1.getJkhzb());
param.setJkzzb(sjDjjc1.getJkzzb());
param.setJl(3000.0);
param.setWjsjks("2020");
param.setWjsjjs("2025");
List<Ljjw> ljjwList=djdcService.getLjjwList2(param);
List<String> collect = ljjwList.stream().limit(20).map(Ljjw::getJh).collect(Collectors.toList());
if(collect.size()>0){
CommonParam param2=new CommonParam();
String jhs = String.join(",", collect);
param2.setJh(jhs);
List<DjZqsjfx> zqshfxList = djdcService.getZqshfxList(param2);
Map<String, List<DjZqsjfx>> result = zqshfxList.stream()
.collect(Collectors.groupingBy(DjZqsjfx::getKc)) // 按开次(kc)分组
.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // 保持开次作为key
entry -> entry.getValue().stream()
.sorted(Comparator.comparingDouble(DjZqsjfx::getZb).reversed())
.limit(5)
.collect(Collectors.toList())
));
List<String> list2 = new ArrayList<>();
for (Map.Entry<String, List<DjZqsjfx>> entry : result.entrySet()) {
List<DjZqsjfx> value = entry.getValue();
list2.addAll(value.stream().map(DjZqsjfx::getJh).collect(Collectors.toList()));
}
Map<String,Object> map =new HashMap<>();
map.put("gzbjhList",list2.stream().distinct().limit(5).collect(Collectors.toList()));
//查询复杂井
List<Jsqa> jsqaList = djdcService.getJsqaList(param2);
List<String> collect1 = jsqaList.stream().map(Jsqa::getJh).collect(Collectors.toList());
map.put("fzsgjhList",collect1.stream().distinct().limit(5).collect(Collectors.toList()));
return AjaxResult.success(map);
}else {
return AjaxResult.error("未匹配到邻井");
}
}else {
return AjaxResult.error("未找到该井井底坐标");
}
}else {
return AjaxResult.error("未找到该井");
}
}
}
......@@ -40,6 +40,18 @@ public class SjFdsgcsZjyFdxnbServiceImpl implements ISjFdsgcsZjyFdxnbService
return sjFdsgcsZjyFdxnbMapper.selectSjFdsgcsZjyFdxnbById(id);
}
// 提取字符串中~前面的数字
private static int extractStartNumber(String jd) {
if (jd == null || !jd.contains("~")) {
return 0; // 处理异常情况
}
String numberPart = jd.split("~")[0];
try {
return Integer.parseInt(numberPart.trim());
} catch (NumberFormatException e) {
return 0; // 处理转换失败情况
}
}
/**
* 查询设计信息-分段施工措施-分段钻井液性能设计列表
*
......@@ -68,7 +80,12 @@ public class SjFdsgcsZjyFdxnbServiceImpl implements ISjFdsgcsZjyFdxnbService
// 提取井段(去重,按顺序排列)
List<String> wellSegments = list.stream()
.map(SjFdsgcsZjyFdxnb::getJd)
.distinct()
.distinct().sorted((s1, s2) -> {
// 提取第一个数值
int num1 = extractStartNumber(s1);
int num2 = extractStartNumber(s2);
return Integer.compare(num1, num2);
})
.collect(Collectors.toList());
// 表格数据:每行对应一个固定项目,每列对应一个井段
......
package com.zjsgfa.project.zt.controller;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.google.gson.*;
import com.zjsgfa.common.utils.StringUtils;
import com.zjsgfa.common.utils.poi.ExcelUtil;
import com.zjsgfa.framework.web.domain.AjaxResult;
import com.zjsgfa.project.zjsgfa.domain.ClYxsj;
import com.zjsgfa.project.zt.domain.*;
import com.zjsgfa.project.zt.domain.vo.JsgaVo;
import com.zjsgfa.project.zt.domain.vo.JswaVo;
import com.zjsgfa.project.zt.service.DjdcService;
import com.zjsgfa.project.zt.util.SSLUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/djdc")
......@@ -205,6 +215,13 @@ public class DjdcController {
case "calZtzhdf":
//计算钻头综合得分和实钻分析结果
return AjaxResult.success( djdcService.calZtzhdf(param));
case "getSzfxjgListDmxdy":
//查询实钻分析结果 大模型调用
Map<String, Object> map1 = djdcService.calZtzhdf(param);
Object data1 = map1.get("szfxjg");
List<LjSzfxjg> list1 = (List<LjSzfxjg>) data1;
return AjaxResult.success( djdcService.calZtzhdf(param));
case "getzhzhdfList":
//获取钻头综合得分
map.put("kc","开次");
......@@ -389,6 +406,601 @@ public class DjdcController {
/**
* 实钻分析结果长城大模型调用
* @param
* @return
*/
@PostMapping(value = "/szfxjgccdy")
public void ccdmxdy(@RequestBody LjSzfxjg ljSzfxjg,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
String s =JSON.toJSONString (ljSzfxjg.getList());
// String s =JSON.toJSONString (ljSzfxjgs);
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);
}
// 保留原有其他方法(如export、dymxcom、listToMarkdownTable等)...
/**
* 周期分析长城大模型调用
* @param
* @return
*/
@PostMapping("/zqfxccdy")
public void zqfxccdy(@RequestBody DjZqsjfx djZqsjfx,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name", "data");
map2.put("type", "input");
List<DjZqsjfx> list = djZqsjfx.getList();
for (DjZqsjfx item : list) {
double zjzq = item.getZjzq() != null ? item.getZjzq() : 0;
double zwzq = item.getZwzq() != null ? item.getZwzq() : 0;
item.setHj(zjzq + zwzq);
}
//按开次分组,取出各开次钻进实际周期+中完实际周期和值最小的5口井
Map<String, List<DjZqsjfx>> result = list.stream()
.collect(Collectors.groupingBy(DjZqsjfx::getKc)) // 按开次(kc)分组
.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // 保持开次作为key
entry -> entry.getValue().stream()
.sorted(Comparator.comparingDouble(item ->
(item.getZjzq() != null ? item.getZjzq() : 0) +
(item.getZwzq() != null ? item.getZwzq() : 0)))
.limit(5)
.collect(Collectors.toList())
));
List<DjZqsjfx> list1 = new ArrayList<>();
for (Map.Entry<String, List<DjZqsjfx>> entry : result.entrySet()) {
List<DjZqsjfx> value = entry.getValue();
value.forEach(item -> {
double a = (item.getZjzq() != null ? item.getZjzq() : 0) +
(item.getZwzq() != null ? item.getZwzq() : 0);
item.setZjzqsj(a);
item.setWjycms(null);
item.setZjycms(null);
});
list1.addAll(value);
}
String list1Str = JSON.toJSONString(list1);
System.out.println(list1Str);
Map<String, Object> map3 = new HashMap<>();
map3.put("list1", list1Str);
Map<String, Object> statistics = new HashMap<>();
// 3. 提取所有hj值并排序(用于计算中位数、快速定位最值)
List<Double> sortedHjList = list.stream()
.map(DjZqsjfx::getHj) // 提取hj字段
.sorted() // 自然排序(升序)
.collect(Collectors.toList()); // 收集到列表,便于后续索引访问
// 4. 计算最大值及对应数据
// 4.1 用DoubleStream的max()获取最大值(Optional<Double>,避免空值)
OptionalDouble maxHjOpt = list.stream()
.mapToDouble(DjZqsjfx::getHj) // 转为DoubleStream(支持数值统计)
.max();
// 4.2 提取最大值(因列表非空,用orElseThrow避免空指针)
double maxHj = maxHjOpt.orElseThrow(() -> new RuntimeException("无最大值数据"));
// 4.3 筛选出hj=maxHj的所有对象
List<DjZqsjfx> maxDataList = list.stream()
.filter(item -> Math.abs(item.getHj() - maxHj) < 1e-6) // 浮点数精度对比(1e-6=0.000001)
.collect(Collectors.toList());
// 5. 计算最小值及对应数据(逻辑与最大值一致)
OptionalDouble minHjOpt = list.stream()
.mapToDouble(DjZqsjfx::getHj)
.min();
double minHj = minHjOpt.orElseThrow(() -> new RuntimeException("无最小值数据"));
List<DjZqsjfx> minDataList = list.stream()
.filter(item -> Math.abs(item.getHj() - minHj) < 1e-6)
.collect(Collectors.toList());
// 6. 计算平均值
OptionalDouble avgHjOpt = list.stream()
.mapToDouble(DjZqsjfx::getHj)
.average(); // DoubleStream的average()返回OptionalDouble
double avgHj = avgHjOpt.orElseThrow(() -> new RuntimeException("无平均值数据"));
// 7. 计算中位数及对应数据
double medianHj;
int dataSize = sortedHjList.size();
if (dataSize % 2 == 1) {
// 奇数个数据:取中间索引的元素(索引=size/2,如5个元素取第2个,0开始)
medianHj = sortedHjList.get(dataSize / 2);
} else {
// 偶数个数据:取中间两个元素的平均值(如6个元素取第2、3个的平均)
double midLeft = sortedHjList.get(dataSize / 2 - 1);
double midRight = sortedHjList.get(dataSize / 2);
medianHj = (midLeft + midRight) / 2;
}
// 筛选中位数对应的所有数据(注意:若中位数是平均值,可能无完全匹配数据)
List<DjZqsjfx> medianDataList = list.stream()
.filter(item -> Math.abs(item.getHj() - medianHj) < 1e-6)
.collect(Collectors.toList());
// 8. 打印结果
System.out.println("=== hj字段统计结果 ===");
System.out.println("1. 最大值:" + maxHj + ",对应数据:" + maxDataList);
System.out.println("2. 最小值:" + minHj + ",对应数据:" + minDataList);
System.out.println("3. 平均值:" + String.format("%.2f", avgHj) + "(保留2位小数)");
System.out.println("4. 中位数:" + medianHj + ",对应数据:" +
(medianDataList.isEmpty() ? "无完全匹配数据" : medianDataList));
statistics.put("min", minHj);
statistics.put("max", maxHj);
statistics.put("avg", avgHj);
statistics.put("median", medianHj);
statistics.put("maxDataList", maxDataList);
statistics.put("minDataList", minDataList);
statistics.put("medianDataList", medianDataList);
map3.put("list2", statistics);
System.out.println(statistics);
//查询jsqa复杂事故
CommonParam param = new CommonParam();
String join = String.join(",", list.stream().map(DjZqsjfx::getJh).distinct().collect(Collectors.toList()));
param.setJh(join);
List<Jsqa> jsqas = djdcService.getJsqaList(param);
List<Jsqa> jsqaList = new ArrayList<>();
for (Jsqa jsqa : jsqas) {
Jsqa jsqa1 = new Jsqa();
jsqa1.setJh(jsqa.getJh());
jsqa1.setFsjgjyy(jsqa.getFsjgjyy());
jsqaList.add(jsqa1);
}
map3.put("list3", jsqaList);
JswaVo jswaVo = djdcService.getJswaSum(param);
map3.put("list4", jswaVo);
Map<String, String> map4 = new HashMap<>();
map4.put("jh", "井号");
map4.put("kc", "开次");
map4.put("ksjs", "开始井深");
map4.put("js", "结束井深");
map4.put("jc", "进尺");
map4.put("cw", "到达层位");
map4.put("zjzq", "钻进实际周期");
map4.put("zjycsl", "钻进异常周期");
map4.put("zjsczq", "钻进生产周期");
map4.put("zjsl", "钻进速率");
map4.put("zwzq", "中完实际周期");
map4.put("wjsczq", "完井(中完)生产周期");
map4.put("wjycsl", "完井异常周期");
map4.put("zjycms", "钻井异常描述");
map4.put("wjycms", "中完(完井异常描述)");
map4.put("zjzqsj", "和值");
map4.put("zb", "指标");
map4.put("fsjgjyy", "异常描述");
map4.put("sg", "事故次数");
map4.put("xl", "修理次数");
map4.put("zztg", "组织停工次数");
map4.put("zrtg", "自然停工次数");
map4.put("fzqk", "复杂情况次数");
map4.put("sgsum", "事故时间合计");
map4.put("xlsum", "修理时间合计");
map4.put("zztgsum", "组织停工时间合计");
map4.put("zrtgsum", "自然停工时间合计");
map4.put("fzqksum", "复杂情况时间合计");
map4.put("zhj", "总时间合计");
map3.put("ZDSM", map4);
System.out.println(map3);
List<Map> mapList=new ArrayList<>();
mapList.add(map3);
String list1Map2 = JSON.toJSONString(mapList);
map2.put("value", list1Map2);
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/0093ad2f62d34b7e9510a860b78508ab";
String key = "lpzt1Oxvja1zWOEnzdD5WK4iVBXbgcYg";
dymxcom(map, url, key, response);
}
/**
*钻具组合长城大模型调用
* @param
* @return
*/
@PostMapping("/zjzhccdy")
public void zjzhccdy(@RequestBody DjZjzhfx djZjzhfx,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<DjZjzhfx> list = djZjzhfx.getList();
// 按照开次(kc)分组,并取每组中zb最高的前5条记录
Map<String, List<DjZjzhfx>> result = list.stream()
.collect(Collectors.groupingBy(DjZjzhfx::getKc)) // 按kc分组
.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // 保留key(即kc)
entry -> entry.getValue().stream() // 对每组内的元素
.sorted(Comparator.comparing(DjZjzhfx::getZb).reversed()) // 按zb降序排序
.limit(5) // 取前5个
.collect(Collectors.toList())
));
List<DjZjzhfx> list2 = new ArrayList<>();
for (Map.Entry<String, List<DjZjzhfx>> entry : result.entrySet()) {
list2.addAll(entry.getValue());
}
Map<String,Object> map3=new HashMap<>();
String list1Str = JSON.toJSONString(list2);
map3.put("list1",list1Str);
Map<String, String> map4 = new HashMap<>();
map4.put("jh", "井号");
map4.put("kc", "开次");
map4.put("ksjs", "开始井深");
map4.put("js", "结束井深");
map4.put("jd", "井段");
map4.put("zjzhmx", "钻具组合模型");
map4.put("tsgj", "特殊工具");
map4.put("zjzh", "钻具组合明细");
map4.put("zb", "时效");
map4.put("zhj", "总时间合计");
map3.put("ZDSM", map4);
System.out.println(map3);
List<Map> mapList=new ArrayList<>();
mapList.add(map3);
String list1Map2 = JSON.toJSONString(mapList);
map2.put("value",list1Map2);
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/41204ba1e1544e639ac842bc432651fb";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 分段参数长城大模型调用
* @param
* @return
*/
@PostMapping("/fdcsccdy")
public void fdcsccdy(@RequestBody Jsha jsha,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<Jsha> list = jsha.getList();
Map<String, List<Jsha>> result = list.stream()
.collect(Collectors.groupingBy(Jsha::getKc));
List<Map> list1 =new ArrayList<>();
for(String kc : result.keySet()){
List<Jsha> jshas = result.get(kc);
//排序
List<Jsha> collect = jshas.stream().filter(it->it.getJxzs()!=null).sorted(Comparator.comparing(Jsha::getJxzs).reversed()).limit(5).collect(Collectors.toList());
Map<String,Object> map1=new HashMap<>();
map1.put("开次",kc);
map1.put("平均值",collect.stream().mapToDouble(Jsha::getJxzs).average().getAsDouble());
map1.put("机速最高",JSON.toJSONString (collect));
List<Jsha> collect2 = collect.stream().sorted(Comparator.comparing(Jsha::getJxzs)).limit(5).collect(Collectors.toList());
map1.put("机速最低",JSON.toJSONString (collect2));
list1.add(map1);
}
List<Map> list2 =new ArrayList<>();
for(String kc : result.keySet()){
List<Jsha> jshas = result.get(kc);
//排序
List<Jsha> collect = jshas.stream().sorted(Comparator.comparing(Jsha::getGllyl).reversed()).limit(5).collect(Collectors.toList());
Map<String,Object> map1=new HashMap<>();
map1.put("开次",kc);
map1.put("平均值",jshas.stream().mapToDouble(Jsha::getGllyl).average().getAsDouble());
map1.put("机速最高",JSON.toJSONString (collect));
List<Jsha> collect2 = jshas.stream().sorted(Comparator.comparing(Jsha::getGllyl)).limit(5).collect(Collectors.toList());
map1.put("机速最低",JSON.toJSONString (collect2));
list2.add(map1);
}
Map<String,Object> map3 =new HashMap<>();
map3.put("list1",JSON.toJSONString (list1));
map3.put("list2",JSON.toJSONString (list2));
Map<String,Object> map4 =new HashMap<>();
map4.put("jh", "井号");
map4.put("kc", "开次");
map4.put("jc", "进尺");
map4.put("jxzs", "机械转速");
map4.put("zy", "钻压");
map4.put("zs", "转速");
map4.put("gj", "缸径");
map4.put("bs", "泵速");
map4.put("pl", "排量");
map4.put("lgby", "立管泵压");
map4.put("ztyj", "钻头压降");
map4.put("hkyh", "环空压耗");
map4.put("cjl", "冲击力");
map4.put("pssd", "喷射速度");
map4.put("ztsgl", "钻头水功率");
map4.put("bsgl", "比水功");
map4.put("sfsdzg", "上返速度钻杆");
map4.put("sfsdzt", "上返速度钻铤");
map4.put("gllyl", "功率利用率");
map3.put("ZDSM", map4);
List<Map> listMap2 =new ArrayList<>();
listMap2.add(map3);
String s =JSON.toJSONString (listMap2);
System.out.println(s);
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/e08c44442d9f48c58bf01ed893c65e12";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 高指标井长城大模型调用
* @param
* @return
*/
@PostMapping("/gzbjccdy")
public void gzbjccdy(@RequestBody LjGzbj ljGzbj,HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<LjGzbj> list = ljGzbj.getList();
String s =JSON.toJSONString (list);
System.out.println(s);
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/0985ddac64974702829c1d37b4acac05";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 典型地质岩性长城大模型调用
* @param
* @return
*/
@PostMapping("/dxyxcsccdy")
public void dxyxcsccdy(@RequestBody ClYxsj clYxsj, HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<ClYxsj> list = clYxsj.getList();
String s =JSON.toJSONString (list);
System.out.println(s);
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/56b56b6f0e224f8184b18309dab9c58c";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 钻井液指标分析长城大模型调用
* @param
* @return
*/
@PostMapping("/zjyzbccdy")
public void zjyzbccdy(@RequestBody JsgaVo jsgaVo, HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<JsgaVo> list = jsgaVo.getList();
Map<String, List<JsgaVo>> result = list.stream().filter(it->StringUtils.isNotEmpty(it.getDccw()))
.collect(Collectors.groupingBy(JsgaVo::getDccw));
List< Map<String,Object> > mapList =new ArrayList<>();
for (String key:result.keySet()) {
List<JsgaVo> jskdList = result.get(key);
List<JsgaVo> collect = jskdList.stream().filter(it -> StringUtils.isNotEmpty(it.getFzqk())).collect(Collectors.toList());
if(collect.size()>0){
List<JsgaVo> collect1 = collect.stream().sorted(Comparator.comparing(JsgaVo::getJd).reversed()).collect(Collectors.toList());
Map<String,Object> map1=new HashMap<>();
JsgaVo jsgaVo1 = collect1.get(0);
map1.put("层位",key);
map1.put("取样井深",jsgaVo1.getJd());
map1.put("钻井液密度",jsgaVo1.getMd());
map1.put("复杂情况",jsgaVo1.getFzqk());
map1.put("发生经过",jsgaVo1.getFsjgjyy());
map1.put("起始井深",jsgaVo1.getQsjs());
map1.put("钻至井深",jsgaVo1.getZzjs());
map1.put("进尺",jsgaVo1.getJc());
map1.put("机械转速",jsgaVo1.getJxzs());
map1.put("处理概括",jsgaVo1.getClgk());
mapList.add(map1);
}
}
String s =JSON.toJSONString (mapList);
System.out.println(s);
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/d309947b9bee461692b286a4f898e4a6";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 钻井液指标分析长城大模型调用
* @param
* @return
*/
@PostMapping("/cxsjccdy")
public void cxsjccdy(@RequestBody Jskd jskd, HttpServletResponse response) throws IOException {
Map<String, Object> map = new HashMap<>();
map.put("stream", true);
Map<String, Object> map2 = new HashMap<>();
map2.put("field_name","data");
map2.put("type","input");
List<Jskd> list = jskd.getList();
Map<String, List<Jskd>> result = list.stream()
.collect(Collectors.groupingBy(Jskd::getJh));
List< Map<String,Object> > mapList =new ArrayList<>();
for (String key:result.keySet()) {
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());
Map<String, List<Jskd>> resultcw = collect.stream()
.collect(Collectors.groupingBy(Jskd::getGldc));
for (String keycw:resultcw.keySet()) {
List<Jskd> jskdListcw = resultcw.get(keycw);
Map<String,Object> cwMap=new HashMap<>();
cwMap.put("井号",key);
cwMap.put("层位",keycw);
if(jskdListcw.size()>0){
}
Map<String, List<Jskd>> resultzjx = jskdListcw.stream()
.collect(Collectors.groupingBy(Jskd::getZrzjx));
for (String keyzjx:resultzjx.keySet()){
List<Jskd> jskdList1 = resultzjx.get(keyzjx);
cwMap.put(keyzjx,jskdList1.size());
}
mapList.add(cwMap);
}
}
String s =JSON.toJSONString (mapList);
System.out.println(s);
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/c49e9b4c7f5a4b55863841dedf0be739";
String key="g7qoMEhICC8F3uKkLum0J5kJcrmYnp8O";
dymxcom(map,url,key,response);
}
/**
* 处理单个分组,排序并获取前5条数据
*/
private List<DjZqsjfx> processGroup(List<DjZqsjfx> group) {
return group.stream()
// 按异常周期总和降序排序
.sorted(Comparator.comparingDouble(this::calculateTotalExceptionPeriod).reversed())
// 取前5条
.limit(5)
// 收集为列表
.collect(Collectors.toList());
}
/**
* 计算钻进异常周期与中完异常周期的总和
* 处理null值,null时按0计算
*/
private double calculateTotalExceptionPeriod(DjZqsjfx item) {
double zjycsl = item.getZjycsl() != null ? item.getZjycsl() : 0;
double wjycsl = item.getWjycsl() != null ? item.getWjycsl() : 0;
return zjycsl + wjycsl;
}
public void dymxcom( Map<String, Object> map,String url,String key,HttpServletResponse response) throws IOException {
// 设置响应头,支持SSE
response.setContentType(MediaType.TEXT_EVENT_STREAM_VALUE);
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
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);
// 2. 解析json.txt内容:按行拆分(处理换行符,兼容Windows(\r\n)和Linux(\n))
List<String> lines = Arrays.asList(result2.split("\\r?\\n"));
PrintWriter writer = response.getWriter();
try {
// 3. 封装SSE事件块:每2行(event:ADD + data:{...})组成一个完整SSE事件
for (int i = 0; i < lines.size(); i += 2) {
if (i + 1 >= lines.size()) break; // 避免数组越界
String eventLine = lines.get(i); // 对应 "event:ADD"
String dataLine = lines.get(i + 1); // 对应 "data:{...}"
// 4. 拼接SSE事件(每个事件以2个换行符结束)
String sseEvent = eventLine + "\n" + dataLine + "\n\n";
writer.write(sseEvent);
writer.flush(); // 立即推送,避免缓冲区滞留
// 可选:模拟实时推送延迟(实际场景可根据外部接口数据生成节奏调整)
// Thread.sleep(500);
}
// 5. 推送结束事件(可选,告知前端流已结束)
writer.write("event:close\ndata:{\"status\":\"finished\"}\n\n");
writer.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
writer.close();
}
}
public void exportZqshfx(HttpServletResponse response,List<DjZqsjfx> list)throws IOException {
Workbook exl = null;
OutputStream out = null;
......
......@@ -26,6 +26,7 @@ public class CommonParam {
private List<String> jbs;
//井深
private Double js;
//区块名称
private String qk;
......
......@@ -2,6 +2,8 @@ package com.zjsgfa.project.zt.domain;
import lombok.Data;
import java.util.List;
/**
* 钻具组合分析
*/
......@@ -30,6 +32,8 @@ public class DjZjzhfx {
//时效
private Double zb;
private List<DjZjzhfx> list;
}
......@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
import java.util.List;
/**
* 邻井周期分析
*/
......@@ -55,4 +57,13 @@ public class DjZqsjfx {
//中完(完井异常描述)
private String wjycms;
private Double zb;
private List<DjZqsjfx> list;
private Double zjzqsj;
private Double hj;
}
......@@ -3,6 +3,7 @@ package com.zjsgfa.project.zt.domain;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class Jsha {
......@@ -70,4 +71,6 @@ public class Jsha {
private Date zzzrq;
private String pzlx;
private Double ztjg;
private List<Jsha> list;
}
......@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
import java.util.List;
@Data
public class Jskd {
@Excel(name = "井号")
......@@ -45,4 +47,6 @@ public class Jskd {
private String gldc;
@Excel(name = "关联造斜点")
private String glzxd;
private List<Jskd> list;
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.zjsgfa.project.zt.domain;
import lombok.Data;
import java.util.List;
/**
* 高指标井
*/
......@@ -27,4 +29,6 @@ public class LjGzbj {
private Double zs;
private Double zb;
private List<LjGzbj> list;
}
package com.zjsgfa.project.zt.domain;
import java.util.Date;
import java.util.List;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
......@@ -13,6 +15,7 @@ import com.zjsgfa.framework.web.domain.BaseEntity;
* @author
* @date 2025-06-29
*/
@Data
public class LjSzfxjg extends BaseEntity
{
private static final long serialVersionUID = 1L;
......@@ -73,6 +76,8 @@ public class LjSzfxjg extends BaseEntity
// @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createdTime;
private List<LjSzfxjg> list;
public void setId(Long id)
{
this.id = id;
......
......@@ -3,6 +3,8 @@ package com.zjsgfa.project.zt.domain.vo;
import com.zjsgfa.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
import java.util.List;
@Data
public class JsgaVo {
......@@ -51,4 +53,6 @@ public class JsgaVo {
private String clgk;
private List<JsgaVo> list;
}
package com.zjsgfa.project.zt.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* 钻井日志
*/
@Data
public class JswaVo {
private Double sg;
//@Column(name = "XL", precision = 6, scale = 2)
private Double xl;
//@Column(name = "ZZTG", precision = 6, scale = 2)
private Double zztg;
//@Column(name = "ZRTG", precision = 6, scale = 2)
private Double zrtg;
//@Column(name = "FZQK", precision = 6, scale = 2)
private Double fzqk;
private Double sgsum;
//@Column(name = "XL", precision = 6, scale = 2)
private Double xlsum;
//@Column(name = "ZZTG", precision = 6, scale = 2)
private Double zztgsum;
//@Column(name = "ZRTG", precision = 6, scale = 2)
private Double zrtgsum;
//@Column(name = "FZQK", precision = 6, scale = 2)
private Double fzqksum;
private double zhj;
}
......@@ -4,6 +4,7 @@ import com.zjsgfa.framework.aspectj.lang.annotation.DataSource;
import com.zjsgfa.framework.aspectj.lang.enums.DataSourceType;
import com.zjsgfa.project.zt.domain.*;
import com.zjsgfa.project.zt.domain.vo.JsgaVo;
import com.zjsgfa.project.zt.domain.vo.JswaVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......@@ -65,4 +66,9 @@ public interface DjdcInfoMapper {
Double jsgtzjds(CommonParam param);
List<Ljjw> getLjjwList2(CommonParam param);
JswaVo getJswaSum(CommonParam param);
}
......@@ -5,6 +5,7 @@ import com.zjsgfa.framework.web.domain.AjaxResult;
import com.zjsgfa.project.zjsgfa.domain.SjDcfxDzfc;
import com.zjsgfa.project.zt.domain.*;
import com.zjsgfa.project.zt.domain.vo.JsgaVo;
import com.zjsgfa.project.zt.domain.vo.JswaVo;
import java.util.List;
import java.util.Map;
......@@ -73,4 +74,11 @@ public interface DjdcService {
String jsgtzjds(CommonParam param);
List<LjSzfxjg> getszfxjgList2();
List<Ljjw> getLjjwList2(CommonParam param);
JswaVo getJswaSum(CommonParam param);
}
......@@ -14,6 +14,7 @@ import com.zjsgfa.project.zjsgfa.domain.*;
import com.zjsgfa.project.zjsgfa.mapper.*;
import com.zjsgfa.project.zt.domain.*;
import com.zjsgfa.project.zt.domain.vo.JsgaVo;
import com.zjsgfa.project.zt.domain.vo.JswaVo;
import com.zjsgfa.project.zt.domain.vo.SjInfo;
import com.zjsgfa.project.zt.mapper.*;
import com.zjsgfa.project.zt.service.DjdcService;
......@@ -1925,7 +1926,9 @@ public class DjdcServiceImpl implements DjdcService {
String[] jhs = param.getJh().split(",");
param.setJhs(jhs);
}
return djdcInfoMapper.getGzbjList(param);
List<LjGzbj> gzbjList = djdcInfoMapper.getGzbjList(param);
List<LjGzbj> collect = gzbjList.stream().filter(it -> it.getZb() != null).collect(Collectors.toList());
return collect;
}
@Override
......@@ -1996,6 +1999,26 @@ public class DjdcServiceImpl implements DjdcService {
return s+"";
}
@Override
public List<LjSzfxjg> getszfxjgList2() {
return ljSzfxjgMapper.selectLjSzfxjgList(new LjSzfxjg());
}
@Override
public List<Ljjw> getLjjwList2(CommonParam param) {
return djdcInfoMapper.getLjjwList2(param);
}
@Override
public JswaVo getJswaSum(CommonParam param) {
if(StringUtils.isNotEmpty(param.getJh())){
String[] jhs = param.getJh().split(",");
param.setJhs(jhs);
}
return djdcInfoMapper.getJswaSum(param);
}
/**
* 计算斜深
* @param a 层位垂深
......
package com.zjsgfa.project.zt.util;
import javax.net.ssl.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class SSLUtils {
// 忽略SSL证书验证
public static void disableSSLCertificateChecking() {
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {}
}
};
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
......@@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="dql != null and dql != ''"> and dql = #{dql}</if>
<if test="sxnd != null and sxnd != ''"> and sxnd = #{sxnd}</if>
</where>
order by kc,jd
order by kc, CAST(SUBSTRING_INDEX(jd, '~', 1) AS UNSIGNED)
</select>
<select id="selectSjFdsgcsZjyFdxnbById" parameterType="Long" resultMap="SjFdsgcsZjyFdxnbResult">
......
......@@ -225,7 +225,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getZqshfxList" resultType="com.zjsgfa.project.zt.domain.DjZqsjfx">
select a.jh,c.kc,ksjs,c.js,to_char((case when kc ='1' then b.KZRQ1 when kc ='2' then b.KZRQ2 when kc ='3' then b.KZRQ3 when kc ='4' then b.KZRQ4 when kc ='5' then b.KZRQ5 else null end ),'YYYY-MM-DD') || ' ' ||
select a.jh,c.kc,ksjs,c.js,d.zb,to_char((case when kc ='1' then b.KZRQ1 when kc ='2' then b.KZRQ2 when kc ='3' then b.KZRQ3 when kc ='4' then b.KZRQ4 when kc ='5' then b.KZRQ5 else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when kc ='1' then b.KZSJ1 when kc ='2' then b.KZSJ2 when kc ='3' then b.KZSJ3 when kc ='4' then b.KZSJ4 when kc ='5' then b.KZSJ5 else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS kssj
,to_char((case when kc ='1' then b.KZRQ2 when kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJRQ else KZRQ3 end ) when kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJRQ else KZRQ4 end ) when kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJRQ else KZRQ5 end ) when kc ='5' then b.WJRQ else null end ),'YYYY-MM-DD') || ' ' ||
TO_CHAR(TO_DATE((case when kc ='1' then b.KZSJ2 when kc ='2' then (case when KZRQ3 is null or KZRQ3 ='' then WJSJ else KZSJ3 end ) when kc ='3' then (case when KZRQ4 is null or KZRQ4 ='' then WJSJ else KZSJ4 end ) when kc ='4' then (case when KZRQ5 is null or KZRQ5 ='' then WJSJ else KZSJ5 end ) when kc ='5' then b.WJSJ else null end ), 'HH24MI'), 'HH24:MI') || ':00' AS JSSJ
......@@ -239,7 +239,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM JSDB jsdb
where jsdb.tgcc not like '%导管%'
order by jh) c on a.jh=c.jh
left join (select jh,
ZZJS,
ROUND(SUM(jc) / case when SUM(JCSJHJ) / 24 = 0 then 1 else SUM(JCSJHJ) / 24 end, 2) zb
from JSHA
group by jh, ZZJS -- 按 jh 和 ZZJS 分组,确保对应关系
order by ZZJS) d on a.JH = d.jh and d.zzjs > c.ksjs and d.zzjs &lt;= c.js
where 1=1
<if test="jdhzb!=null">
and ABS(#{jdhzb} - a.jdhzb) &lt; #{jl}
......@@ -400,6 +405,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="js!=null">
and b.wjjs &lt;= #{js}
</if>
<if test="ksjs!=null">
and b.wjjs >= #{ksjs}
</if>
<if test="jxs != null and jxs.size() > 0">
AND a.jx IN
<foreach item="item" collection="jxs" open="(" separator="," close=")">
......@@ -567,7 +575,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
)jsha
on jsha.jh=ss.jh and jsha.zzjs between ss.lag_js and ss.js
)ss
)ss where kc is not null and ztxh is not null
group by ss.kc,ss.ztxh,ss.cc,ss.cj
</select>
<select id="getFdcsList" resultType="com.zjsgfa.project.zt.domain.Jsha">
......@@ -745,11 +753,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from JSTA
where NVL(JD1, 0) != NVL(JD2,0)) c on a.JH = c.JH and t.js = c.JD2
left join (
select jh,ZZJS,
ROUND(jc / case when (JCSJHJ / 24) =0 then 1 else (JCSJHJ / 24) end , 2) zb
select jh,
ZZJS,
ROUND(SUM(jc) / case when SUM(JCSJHJ) / 24 = 0 then 1 else SUM(JCSJHJ) / 24 end, 2) zb
from JSHA
order by xh
group by jh, ZZJS -- 按 jh 和 ZZJS 分组,确保对应关系
order by ZZJS
) d on a.JH=d.jh and d.zzjs>ksjs and d.zzjs &lt;=js
where
1=1
......@@ -890,4 +899,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT max_value - guantao_value AS result
FROM max_value_cte, guantao_value_cte
</select>
<select id="getLjjwList2" resultType="com.zjsgfa.project.zt.domain.Ljjw">
SELECT a.*, round(power(power(a.jkhzb - ${jkhzb}
, 2) + power(a.jkzzb - ${jkzzb}, 2), 0.5), 2) as jkjl
FROM JSBA a
left join jsaa b on a.jh=b.jh
WHERE 1 = 1
and a.jh not like '%侧%'
and a.jkhzb - #{jkhzb} &lt; #{jl}
AND a.jkzzb - #{jkzzb} &lt; #{jl}
and TO_CHAR(b.wjrq, 'YYYY') between #{wjsjks} and #{wjsjjs}
order by jkjl asc
</select>
<select id="getJswaSum" resultType="com.zjsgfa.project.zt.domain.vo.JswaVo">
select a.*,(sgsum+zztgsum+zrtgsum+xlsum+fzqksum) zhj from (SELECT SUM(CASE WHEN sg > 0 THEN 1 ELSE 0 END) AS sg,
SUM(CASE WHEN ZZTG > 0 THEN 1 ELSE 0 END) AS ZZTG,
SUM(CASE WHEN ZRTG > 0 THEN 1 ELSE 0 END) AS ZRTG,
SUM(CASE WHEN xl > 0 THEN 1 ELSE 0 END) AS xl,
SUM(CASE WHEN FZQK > 0 THEN 1 ELSE 0 END) AS FZQK,
sum(sg) sgsum,
sum(ZZTG) zztgsum,
sum(ZRTG) zrtgsum,
sum(xl) xlsum,
sum(FZQK) fzqksum
FROM jswa a
WHERE 1=1
<if test="jhs!=null">
and a.jh in
<foreach item="jh" collection="jhs"
open="(" separator="," close=")">
#{jh}
</foreach>
</if>
) a
</select>
</mapper>
\ No newline at end of file
......@@ -17,7 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{jh}
</foreach>
</if>
order by jh
order by fsrq desc,jh
</select>
<select id="getJsqaByjhAndJs" resultType="com.zjsgfa.project.zt.domain.Jsqa">
......
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