0% found this document useful (0 votes)
12 views43 pages

测井数据WIS分析提取软件V1.0源代码

Uploaded by

oldkingnearby
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views43 pages

测井数据WIS分析提取软件V1.0源代码

Uploaded by

oldkingnearby
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 43

1 测井数据 WIS 分析提取软件 V1.

0 源代码

1 import React, { useEffect, useState,useMemo } from 'react';


2 import {Toast,Button, Space, Tag,Upload, List} from '@douyinfe/semi-ui'
3 import {Input, Select} from 'antd'
4 import { GetProgress, ProgressWindow, SetProgress } from '../components/ProgressWindow';
5 import { BinaryToBase64, ColumnDatas2Json, ExportJsonToCsv, GetFileNameWithoutExtension,
6 Json2ColumnDatas, ReadExcelFile2Json, ReadFile2Base64 } from '../odklib/excelutils';
7 import { IconUpload,IconList,IconRefresh2,IconFilledArrowDown} from '@douyinfe/semi-icons';
8 import { AgGridReact } from "ag-grid-react";
9 import "ag-grid-community/styles/ag-grid.css";
10 import "ag-grid-community/styles/ag-theme-alpine.css";
11 import { PeColumndata2las, PeColumndata2txt, PeColumndata2wis, PeGetOdkWisData,
12 PeGetTxtData, PeGetWisData, PeWis2Txt } from '../odklib/odkpeconv';
13 import { DownloadBase64 } from '@oldkingdclub/utils';
14 import axios from 'axios';
15
16 // WIs 转 TXT 页面
17 export const Wis2TxtPage = ()=>{
18 const [excels,setExcels] = useState([])
19 const [excelData,setExcelData] = useState([])
20 const [excelColumns,setExcelColumns]= useState([])
21 const [loading,setLoading] = useState(false)
22 const [fileList,setFileList] = useState([])
23 const [options,setOptions] = useState([])
24 const [exportColumns,setExportColumns] = useState([])
25 const [selectFile,setSelectFile] = useState({name:""})
26 const defaultColDef = useMemo(() => {
27 return {
28 width: 180,
29 //可调宽度
30 resizable: true,
31 };
32 }, []);
33 const [progress,setProgress] = useState({percent:0,content:"进度内容",visible:false})
34
35 const exportWis2Txt = (fileInfo,columns)=>{
36 return new Promise((resolve,reject)=>{
37 ReadFile2Base64(fileInfo.fileInstance).then(wisbase64=>{
38 PeGetWisData({wisbase64,columns}).then(result=>{
39 if (result.code!==200){
40 Toast.error(result.error)
41 return reject(result.error)
42 }
43 const columnData = result.data
44 PeColumndata2txt({columnData}).then(txtresult=>{
45 if (txtresult.code!==200){
46 Toast.error(txtresult.error)
47 return reject(txtresult.error)
48 }
49 DownloadBase64(txtresult.data,fileInfo.name.replaceAll(".wis",".txt"))
50 Toast.success(`【${fileInfo.name.replaceAll(".wis",".txt")}】文件保存到【下载】文件夹`)

2
3 测井数据 WIS 分析提取软件 V1.0 源代码

51 return resolve(true)
52 }).catch(err=>{
53 Toast.error("导出数据文件失败")
54 return reject(err)
55 })
56 }).catch(err=>{
57 Toast.error("解析 Wis 文件失败")
58 return reject(err)
59 })
60 }).catch(err=>{
61 Toast.error("读取文件失败")
62 return reject(err)
63 })
64 })
65 }
66 const exportWis2Las = (fileInfo,columns)=>{
67 return new Promise((resolve,reject)=>{
68 ReadFile2Base64(fileInfo.fileInstance).then(wisbase64=>{
69 PeGetWisData({wisbase64,columns}).then(result=>{
70 if (result.code!==200){
71 Toast.error(result.error)
72 return reject(result.error)
73 }
74 const columnData = result.data
75 const wellname = fileInfo.name.replaceAll(".wis","")
76 PeColumndata2las({columnData,wellname}).then(txtresult=>{
77 if (txtresult.code!==200){
78 Toast.error(txtresult.error)
79 return reject(txtresult.error)
80 }
81 DownloadBase64(txtresult.data,fileInfo.name.replaceAll(".wis",".las"))
82 Toast.success(`【${fileInfo.name.replaceAll(".wis",".las")}】文件保存到【下载】文件夹`)
83 return resolve(true)
84 }).catch(err=>{
85 Toast.error("导出数据文件失败")
86 return reject(err)
87 })
88 }).catch(err=>{
89 Toast.error("解析 Wis 文件失败")
90 return reject(err)
91 })
92 }).catch(err=>{
93 Toast.error("读取文件失败")
94 return reject(err)
95 })
96 })
97 }
98
99 const batchOutputWis2Txt = async(fileList)=>{
100 SetProgress({percent:0,content:`开始筛选`,visible:true})

4
5 测井数据 WIS 分析提取软件 V1.0 源代码

101 setProgress({percent:0,content:`开始筛选`,visible:true})
102 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
103 for (let i =0;i<fileList.length;i++){
104 try{
105 setProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
106 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
107 SetProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
108 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
109 const result = await exportWis2Txt(fileList[i],columns)
110 if (result){
111 fileList[i].color = "green"
112 }
113 const progress = GetProgress()
114 if (!progress.visible){
115 console.log(i,i,progress)
116 Toast.error("中断操作!")
117 return
118 }
119 }catch(err){
120 console.log(err)
121 fileList[i].color = "red"
122 }
123 }
124 SetProgress({percent:100,content:`任务完成!`,visible:true})
125 setProgress({percent:100,content:`任务完成!`,visible:true})
126 }
127
128 const batchOutputWis2Las = async(fileList)=>{
129 SetProgress({percent:0,content:`开始筛选`,visible:true})
130 setProgress({percent:0,content:`开始筛选`,visible:true})
131 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
132 for (let i =0;i<fileList.length;i++){
133 try{
134 setProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
135 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
136 SetProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
137 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
138 const result = await exportWis2Las(fileList[i],columns)
139 if (result){
140 fileList[i].color = "green"
141 }
142 const progress = GetProgress()
143 if (!progress.visible){
144 console.log(i,i,progress)
145 Toast.error("中断操作!")
146 return
147 }
148 }catch(err){
149 console.log(err)
150 fileList[i].color = "red"

6
7 测井数据 WIS 分析提取软件 V1.0 源代码

151 }
152 }
153 SetProgress({percent:100,content:`任务完成!`,visible:true})
154 setProgress({percent:100,content:`任务完成!`,visible:true})
155 }
156
157 useEffect(()=>{
158
159 },[])
160
161 return(<>
162 <div>
163 <div
164 style={{
165 position: 'sticky',
166 top: 0,
167 height: 48,
168 border: '1px solid #ccc',
169 zIndex: 30,
170 background: '#F5F5F5',
171 display: 'flex',
172 alignItems: 'center',
173 }}
174 >
175 <div>
176 <Space>
177 <Upload uploadTrigger="custom"
178 action=""
179 accept='.wis'
180 showUploadList={false}
181 onChange={(props)=>{
182 setFileList(props.fileList)
183 }} multiple>
184 <Button loading={loading} icon={<IconUpload /> } theme="light">
185 选择文件
186 </Button>
187 </Upload>
188 <Button loading={loading} disabled={!selectFile.fileInstance} icon={<IconRefresh2 />}
189 onClick={()=>{
190 if (selectFile.fileInstance){
191 setLoading(true)
192 ReadFile2Base64(selectFile.fileInstance).then(wisbase64=>{
193 PeGetWisData({wisbase64}).then(result=>{
194 setLoading(false)
195 if (result.code===200){
196 const {columns,data} = result
197 setExcelData(ColumnDatas2Json(columns,data))
198 setExcelColumns(columns.map(item=>({field:item,headerName:item,width:
199 150,resizable: true})))
200 const tempOptions = columns.map(item=>({value:item,label:item}))

8
9 测井数据 WIS 分析提取软件 V1.0 源代码

201 tempOptions.shift()
202 setOptions(tempOptions)
203 }else{
204 Toast.error(result.error)
205 setExcelData([])
206 }
207 }).catch(err=>{
208 Toast.error("解析 Wis 文件失败")
209 setExcelData([])
210 })
211 }).catch(err=>{
212 setLoading(false)
213 Toast.error("读取文件失败")
214 setExcelData([])
215 })
216 }else{
217 Toast.error("请选择文件")
218 }
219
220 }}>读取</Button>
221
222 <Button loading={loading} disabled={!selectFile.fileInstance}
223 icon={<IconFilledArrowDown />} onClick={()=>{
224 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
225 exportWis2Txt(selectFile,columns)
226 }}>导出 TXT</Button>
227
228 <Button loading={loading} disabled={!selectFile.fileInstance}
229 icon={<IconFilledArrowDown />} onClick={()=>{
230 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
231 exportWis2Las(selectFile,columns)
232 }}>导出 LAS</Button>
233
234 <Button loading={loading} disabled={fileList.length<1} icon={<IconList />} onClick={()=>{
235 if (fileList){
236 console.log(fileList)
237 batchOutputWis2Txt(fileList)
238 }else{
239 Toast.error("请添加文件")
240 }
241
242 }}>批量导 TXT</Button>
243 <Button loading={loading} disabled={fileList.length<1} icon={<IconList />} onClick={()=>{
244 if (fileList){
245 console.log(fileList)
246 batchOutputWis2Las(fileList)
247 }else{
248 Toast.error("请添加文件")
249 }
250

10
11 测井数据 WIS 分析提取软件 V1.0 源代码

251 }}>批量导 LAS</Button>


252
253 <Tag>共:{fileList.length}个文件</Tag>
254 <h4>{selectFile.name}</h4>
255 <Tag>{excelData.length}条</Tag>
256 </Space>
257 </div>
258 </div>
259 <div
260 style={{
261 position: 'sticky',
262 top: 50,
263 height: 48,
264 border: '1px solid #ccc',
265 zIndex: 30,
266 background: '#F5F5F5',
267 display: 'flex',
268 alignItems: 'center',
269 }}
270 >
271 <Select
272 mode="tags"
273 size='middle'
274 placeholder="导出表头默认为导出全部"
275 onChange={(v)=>{setExportColumns(v)}}
276 style={{ width: '100%' }}
277 options={options}
278 />
279 </div>
280 <div>
281 <div style={{float:'left',width:300}}>
282 <p>文件列表</p>
283 <div style={{height:window.innerHeight-170,overflow:'auto'}}>
284 <List
285 size="small"
286 bordered
287 dataSource={fileList}
288 renderItem={item => <List.Item
289 style={item.name===selectFile.name?{ backgroundColor: 'var(--semi-color-secondary-
290 light-active)'}:{}}
291 onClick={()=>{
292 setSelectFile(item)
293 }}>{item.name}{item.color&&<Tag color={item.color}>{item.color==="green"?" 成 功 ":" 失
294 败"}</Tag>}</List.Item>}
295 />
296 </div>
297 </div>
298 <div className="ag-theme-alpine" style={{ height: window.innerHeight-130 }}>
299 <AgGridReact
300 enableRangeSelection={true}

12
13 测井数据 WIS 分析提取软件 V1.0 源代码

301 suppressMultiRangeSelection={true}
302 defaultColDef={defaultColDef}
303 rowData={excelData}
304 columnDefs={excelColumns}></AgGridReact>
305 </div>
306 </div>
307 </div>
308 <ProgressWindow percent={progress.percent} content={progress.content}
309 visible={progress.visible} onCancel={()=>{
310 SetProgress({...progress,visible:false})
311 setProgress({...progress,visible:false})
312 }}/>
313 </>)
314 }
315
316 // TXT 转 TXT 页面
317 export const Txt2WisPage = ()=>{
318 const [excelData,setExcelData] = useState([])
319 const [excelColumns,setExcelColumns]= useState([])
320 const [loading,setLoading] = useState(false)
321 const [fileList,setFileList] = useState([])
322 const [options,setOptions] = useState([])
323 const [exportColumns,setExportColumns] = useState([])
324 const [selectFile,setSelectFile] = useState({name:""})
325 const defaultColDef = useMemo(() => {
326 return {
327 width: 180,
328 //可调宽度
329 resizable: true,
330 };
331 }, []);
332 const [progress,setProgress] = useState({percent:0,content:"进度内容",visible:false})
333
334 const exportTxt2Wis = (fileInfo,columns)=>{
335 return new Promise((resolve,reject)=>{
336 ReadFile2Base64(fileInfo.fileInstance).then(txtbase64=>{
337 PeGetTxtData({txtbase64,columns}).then(result=>{
338 if (result.code!==200){
339 Toast.error(result.error)
340 return reject(result.error)
341 }
342 const columnData = result.data
343 const wellname = GetFileNameWithoutExtension(fileInfo.name)
344 PeColumndata2wis({columnData}).then(txtresult=>{
345 if (txtresult.code!==200){
346 Toast.error(txtresult.error)
347 return reject(txtresult.error)
348 }
349 DownloadBase64(txtresult.data,`${wellname}.wis`)
350 Toast.success(`【${wellname}.wis】文件保存到【下载】文件夹`)

14
15 测井数据 WIS 分析提取软件 V1.0 源代码

351 return resolve(true)


352 }).catch(err=>{
353 Toast.error("导出数据文件失败")
354 return reject(err)
355 })
356 }).catch(err=>{
357 Toast.error("解析 Wis 文件失败")
358 return reject(err)
359 })
360 }).catch(err=>{
361 Toast.error("读取文件失败")
362 return reject(err)
363 })
364 })
365 }
366 const exportTxt2Las = (fileInfo,columns)=>{
367 return new Promise((resolve,reject)=>{
368 ReadFile2Base64(fileInfo.fileInstance).then(txtbase64=>{
369 PeGetTxtData({txtbase64,columns}).then(result=>{
370 if (result.code!==200){
371 Toast.error(result.error)
372 return reject(result.error)
373 }
374 const columnData = result.data
375 const wellname = GetFileNameWithoutExtension(fileInfo.name)
376 PeColumndata2las({columnData,wellname}).then(txtresult=>{
377 if (txtresult.code!==200){
378 Toast.error(txtresult.error)
379 return reject(txtresult.error)
380 }
381 DownloadBase64(txtresult.data,`${wellname}.las`)
382 Toast.success(`【${wellname}.las】文件保存到【下载】文件夹`)
383 return resolve(true)
384 }).catch(err=>{
385 Toast.error("导出数据文件失败")
386 return reject(err)
387 })
388 }).catch(err=>{
389 Toast.error("解析 Wis 文件失败")
390 return reject(err)
391 })
392 }).catch(err=>{
393 Toast.error("读取文件失败")
394 return reject(err)
395 })
396 })
397 }
398
399 const batchOutputTxt2Wis = async(fileList)=>{
400 SetProgress({percent:0,content:`开始筛选`,visible:true})

16
17 测井数据 WIS 分析提取软件 V1.0 源代码

401 setProgress({percent:0,content:`开始筛选`,visible:true})
402 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
403 for (let i =0;i<fileList.length;i++){
404 try{
405 setProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
406 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
407 SetProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
408 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
409 const result = await exportTxt2Wis(fileList[i],columns)
410 if (result){
411 fileList[i].color = "green"
412 }
413 const progress = GetProgress()
414 if (!progress.visible){
415 console.log(i,i,progress)
416 Toast.error("中断操作!")
417 return
418 }
419 }catch(err){
420 console.log(err)
421 fileList[i].color = "red"
422 }
423 }
424 SetProgress({percent:100,content:`任务完成!`,visible:true})
425 setProgress({percent:100,content:`任务完成!`,visible:true})
426 }
427
428 const batchOutputTxt2Las = async(fileList)=>{
429 SetProgress({percent:0,content:`开始筛选`,visible:true})
430 setProgress({percent:0,content:`开始筛选`,visible:true})
431 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
432 for (let i =0;i<fileList.length;i++){
433 try{
434 setProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
435 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
436 SetProgress({percent:((i+1)*100.0/(fileList.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
437 {fileList.length}个文件,当前文件[${fileList[i].name}]`,visible:true})
438 const result = await exportTxt2Las(fileList[i],columns)
439 if (result){
440 fileList[i].color = "green"
441 }
442 const progress = GetProgress()
443 if (!progress.visible){
444 console.log(i,i,progress)
445 Toast.error("中断操作!")
446 return
447 }
448 }catch(err){
449 console.log(err)
450 fileList[i].color = "red"

18
19 测井数据 WIS 分析提取软件 V1.0 源代码

451 }
452 }
453 SetProgress({percent:100,content:`任务完成!`,visible:true})
454 setProgress({percent:100,content:`任务完成!`,visible:true})
455 }
456
457 useEffect(()=>{
458
459 },[])
460
461 return(<>
462 <div>
463 <div
464 style={{
465 position: 'sticky',
466 top: 0,
467 height: 48,
468 border: '1px solid #ccc',
469 zIndex: 30,
470 background: '#F5F5F5',
471 display: 'flex',
472 alignItems: 'center',
473 }}
474 >
475 <div>
476 <Space>
477 <Upload uploadTrigger="custom"
478 action=""
479 accept='.txt,.csv'
480 showUploadList={false}
481 onChange={(props)=>{
482 setFileList(props.fileList)
483 }} multiple>
484 <Button loading={loading} icon={<IconUpload /> } theme="light">
485 选择文件
486 </Button>
487 </Upload>
488 <Button loading={loading} disabled={!selectFile.fileInstance} icon={<IconRefresh2 />}
489 onClick={()=>{
490 if (selectFile.fileInstance){
491 setLoading(true)
492 ReadFile2Base64(selectFile.fileInstance).then(txtbase64=>{
493 PeGetTxtData({txtbase64}).then(result=>{
494 setLoading(false)
495 if (result.code===200){
496 const {columns,data} = result
497 setExcelData(ColumnDatas2Json(columns,data))
498 setExcelColumns(columns.map(item=>({field:item,headerName:item,width:
499 150,resizable: true})))
500 const tempOptions = columns.map(item=>({value:item,label:item}))

20
21 测井数据 WIS 分析提取软件 V1.0 源代码

501 tempOptions.shift()
502 setOptions(tempOptions)
503 }else{
504 Toast.error(result.error)
505 setExcelData([])
506 }
507 }).catch(err=>{
508 Toast.error("解析 Txt 文件失败")
509 setExcelData([])
510 })
511 }).catch(err=>{
512 setLoading(false)
513 Toast.error("读取文件失败")
514 setExcelData([])
515 })
516 }else{
517 Toast.error("请选择文件")
518 }
519
520 }}>读取</Button>
521
522 <Button loading={loading} disabled={!selectFile.fileInstance}
523 icon={<IconFilledArrowDown />} onClick={()=>{
524 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
525 exportTxt2Wis(selectFile,columns)
526 }}>导出 WIS</Button>
527
528 <Button loading={loading} disabled={!selectFile.fileInstance}
529 icon={<IconFilledArrowDown />} onClick={()=>{
530 const columns = exportColumns.length>0?["DEPTH",...exportColumns]:[]
531 exportTxt2Las(selectFile,columns)
532 }}>导出 LAS</Button>
533
534 <Button loading={loading} disabled={fileList.length<1} icon={<IconList />} onClick={()=>{
535 if (fileList){
536 console.log(fileList)
537 batchOutputTxt2Wis(fileList)
538 }else{
539 Toast.error("请添加文件")
540 }
541
542 }}>批量导 WIS</Button>
543 <Button loading={loading} disabled={fileList.length<1} icon={<IconList />} onClick={()=>{
544 if (fileList){
545 console.log(fileList)
546 batchOutputTxt2Las(fileList)
547 }else{
548 Toast.error("请添加文件")
549 }
550

22
23 测井数据 WIS 分析提取软件 V1.0 源代码

551 }}>批量导 LAS</Button>


552
553 <Tag>共:{fileList.length}个文件</Tag>
554 <h4>{selectFile.name}</h4>
555 <Tag>{excelData.length}条</Tag>
556 </Space>
557 </div>
558 </div>
559 <div
560 style={{
561 position: 'sticky',
562 top: 50,
563 height: 48,
564 border: '1px solid #ccc',
565 zIndex: 30,
566 background: '#F5F5F5',
567 display: 'flex',
568 alignItems: 'center',
569 }}
570 >
571 <Select
572 mode="tags"
573 size='middle'
574 placeholder="导出表头默认为导出全部"
575 onChange={(v)=>{setExportColumns(v)}}
576 style={{ width: '100%' }}
577 options={options}
578 />
579 </div>
580 <div>
581 <div style={{float:'left',width:300}}>
582 <p>文件列表</p>
583 <div style={{height:window.innerHeight-170,overflow:'auto'}}>
584 <List
585 size="small"
586 bordered
587 dataSource={fileList}
588 renderItem={item => <List.Item
589 style={item.name===selectFile.name?{ backgroundColor: 'var(--semi-color-secondary-
590 light-active)'}:{}}
591 onClick={()=>{
592 setSelectFile(item)
593 }}>{item.name}{item.color&&<Tag color={item.color}>{item.color==="green"?" 成 功 ":" 失
594 败"}</Tag>}</List.Item>}
595 />
596 </div>
597 </div>
598 <div className="ag-theme-alpine" style={{ height: window.innerHeight-130 }}>
599 <AgGridReact
600 enableRangeSelection={true}

24
25 测井数据 WIS 分析提取软件 V1.0 源代码

601 suppressMultiRangeSelection={true}
602 defaultColDef={defaultColDef}
603 rowData={excelData}
604 columnDefs={excelColumns}></AgGridReact>
605 </div>
606 </div>
607 </div>
608 <ProgressWindow percent={progress.percent} content={progress.content}
609 visible={progress.visible} onCancel={()=>{
610 SetProgress({...progress,visible:false})
611 setProgress({...progress,visible:false})
612 }}/>
613 </>)
614 }
615
616 // WIS 提取特定段的测井数据
617 export const WisExtractDataPage = ()=>{
618 const [excels,setExcels] = useState([])
619 const [excelData,setExcelData] = useState([])
620 const [wellData,setWellData] = useState([])
621 const [excelColumns,setExcelColumns]= useState([])
622 const [loading,setLoading] = useState(false)
623 const [fileList,setFileList] = useState([])
624 const [options,setOptions] = useState([])
625 const [logOptions,setLogOptions] = useState([])
626 const [wellnameField,setWellnameField] = useState("井号")
627 const [logTopField,setLogTopField] = useState("测井顶")
628 const [logBottomField,setLogBottomField] = useState("测井底")
629 const [staticColumns,setStaticColumns] = useState([])
630 const [logColumns,setLogColumns] = useState(["DEPTH"])
631 const [exportColumns,setExportColumns] = useState([])
632 const [staticHost,setStaticHost] = useState("http://127.0.0.1:9090")
633 const [selectFile,setSelectFile] = useState({name:""})
634 const defaultColDef = useMemo(() => {
635 return {
636 width: 180,
637 //可调宽度
638 resizable: true,
639 };
640 }, []);
641 const [progress,setProgress] = useState({percent:0,content:"进度内容",visible:false})
642
643
644 const DownloadAndExtractWis = (downloadurl)=>{
645 return new Promise((resolve,reject)=>{
646 axios.get(downloadurl,{responseType:"blob"}).then(result=>{
647 if (result.data){
648 BinaryToBase64(result.data).then(wisbase64=>{
649 PeGetWisData({wisbase64}).then(res=>{
650 return resolve(res)

26
27 测井数据 WIS 分析提取软件 V1.0 源代码

651 }).catch(err=>{
652 return reject(err)
653 })
654 }).catch(err=>{
655 return reject(err)
656 })
657 }else{
658 return reject("获取数据失败!")
659 }
660 }).catch(err=>{
661 return reject(err)
662 })
663 })
664 }
665
666 const getWisData = (downloadurl,columns)=>{
667 return new Promise((resolve,reject)=>{
668 axios.get(downloadurl,{responseType:"blob"}).then(result=>{
669 if (result.data){
670 BinaryToBase64(result.data).then(wisbase64=>{
671 PeGetWisData({wisbase64,columns}).then(res=>{
672 return resolve(res)
673 }).catch(err=>{
674 return reject(err)
675 })
676 }).catch(err=>{
677 return reject(err)
678 })
679 }else{
680 return reject("获取数据失败!")
681 }
682 }).catch(err=>{
683 return reject(err)
684 })
685 })
686 }
687
688 const exportTargetLogData =
689 (inputItem,wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)=>{
690 return new Promise((resolve,reject)=>{
691 console.log(wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)
692 const logTop = inputItem[logTopField]
693 const logBottom = inputItem[logBottomField]
694 const staticParams = {}
695 staticColumns.forEach(item=>{
696 staticParams[item]=inputItem[item]
697 })
698 getWisData(wellurl,logColumns).then(result=>{
699 if (result.code===200){
700 const {columns,data}= result

28
29 测井数据 WIS 分析提取软件 V1.0 源代码

701 if (columns.length!==logColumns.length){
702 Toast.error("测井缺少表头")
703 console.log(inputItem,columns,logColumns)
704 return reject(false)
705 }
706 const DEPTH = data["DEPTH"]
707 const targetData = []
708 for (let i =0 ;i<DEPTH.length;i++){
709 if (DEPTH[i]>=logTop && DEPTH[i]<=logBottom){
710 const logParams = {}
711 logColumns.forEach(item=>{
712 if (data[item]){
713 logParams[item]=data[item][i]
714 }else{
715 logParams[item] = 0
716 }
717 })
718 targetData.push({...staticParams,...logParams})
719 }
720 }
721 if (targetData.length>0){
722 ExportJsonToCsv(targetData,`${inputItem[wellnameField]}_${inputItem[logTopField]}-$
723 {inputItem[logBottomField]}.csv`,[...logColumns,...staticColumns])
724 }
725 return resolve(targetData)
726 }else{
727 return reject(result.error)
728 }
729 }).catch(err=>{
730 return reject(err)
731 })
732 })
733 }
734
735 const batchOutputTargetLogData =
736 async(wellData,wellnameField,logTopField,logBottomField,logColumns,staticColumns)=>{
737 SetProgress({percent:0,content:`开始筛选`,visible:true})
738 setProgress({percent:0,content:`开始筛选`,visible:true})
739 for (let i =0;i<wellData.length;i++){
740 try{
741 setProgress({percent:((i+1)*100.0/(wellData.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
742 {wellData.length}个文件,当前文件[${wellData[i][wellnameField]}]`,visible:true})
743 SetProgress({percent:((i+1)*100.0/(wellData.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
744 {wellData.length}个文件,当前文件[${wellData[i][wellnameField]}]`,visible:true})
745 const wellurl = `${staticHost}/${wellData[i][wellnameField]}.wis`
746 const result = await
747 exportTargetLogData(wellData[i],wellurl,wellnameField,logTopField,logBottomField,logColumns,staticCol
748 umns)
749 if (result){
750 wellData[i].color = "green"

30
31 测井数据 WIS 分析提取软件 V1.0 源代码

751 }
752 console.log(result)
753 const progress = GetProgress()
754 if (!progress.visible){
755 console.log(i,i,progress)
756 Toast.error("中断操作!")
757 return
758 }
759 }catch(err){
760 console.log(err)
761 wellData[i].color = "red"
762 }
763 }
764 setWellData(wellData)
765 SetProgress({percent:100,content:`任务完成!`,visible:true})
766 setProgress({percent:100,content:`任务完成!`,visible:true})
767 }

771 useEffect(()=>{
772
773 },[])
774
775 return(<>
776 <div>
777 <div
778 style={{
779 position: 'sticky',
780 top: 0,
781 height: 48,
782 border: '1px solid #ccc',
783 zIndex: 30,
784 background: '#F5F5F5',
785 display: 'flex',
786 alignItems: 'center',
787 }}
788 >
789 <div>
790 <Space>
791 <Upload uploadTrigger="custom"
792 action=""
793 accept='.xls,.xlsx'
794 showUploadList={false}
795 onChange={(props)=>{
796 const fileInstance = props.fileList[0].fileInstance
797 ReadExcelFile2Json(fileInstance).then(result=>{
798 console.log(result)
799 setExcelData(result)
800 setWellData(result)

32
33 测井数据 WIS 分析提取软件 V1.0 源代码

801 if (result.length>0){
802
803 setExcelColumns(Object.keys(result[0]).map(field=>({field:field,headerName:field,width: 150,resizable:
804 true})))
805 setOptions(Object.keys(result[0]).map(field=>({value:field,label:field})))
806 }
807 })
808 }}>
809 <Button loading={loading} icon={<IconUpload /> } theme="light">
810 选择文件
811 </Button>
812 </Upload>
813 <Button loading={loading} disabled={!selectFile[wellnameField]} icon={<IconRefresh2 />}
814 onClick={()=>{
815 if (selectFile){
816 // setLoading(true)
817 const wellurl = `${staticHost}/${selectFile[wellnameField]}.wis`
818 DownloadAndExtractWis(wellurl).then(result=>{
819 if (result.code===200){
820 const {columns,data}=result
821 setExcelColumns(result.columns.map(field=>({field:field,headerName:field,width:
822 150,resizable: true})))
823 setExcelData(ColumnDatas2Json(columns,data))
824 setLogOptions(columns.map(field=>({value:field,label:field})))
825 }else{
826 Toast.error(result.error)
827 }
828 }).catch(err=>{
829 console.log(err)
830 Toast.error(err)
831 })
832
833 }else{
834 Toast.error("请选择文件")
835 }
836
837 }}>读取 WIS</Button>
838
839 <Button loading={loading} disabled={!selectFile[wellnameField]}
840 icon={<IconFilledArrowDown />} onClick={()=>{
841 const wellurl = `${staticHost}/${selectFile[wellnameField]}.wis`
842
843
844 console.log(wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)
845 const logTop = selectFile[logTopField]
846 const logBottom = selectFile[logBottomField]
847 const staticParams = {}
848 staticColumns.forEach(item=>{
849 staticParams[item]=selectFile[item]
850 })

34
35 测井数据 WIS 分析提取软件 V1.0 源代码

851 getWisData(wellurl,logColumns).then(result=>{
852 if (result.code===200){
853 const {columns,data}= result
854 if (columns.length!==logColumns.length){
855 Toast.error("测井缺少表头")
856 console.log(columns,logColumns)
857 return
858 }
859 console.log(data)
860 const DEPTH = data["DEPTH"]
861 const targetData = []
862 for (let i =0 ;i<DEPTH.length;i++){
863 if (DEPTH[i]>=logTop && DEPTH[i]<=logBottom){
864 const logParams = {}
865 logColumns.forEach(item=>{
866 if (data[item]){
867 logParams[item]=data[item][i]
868 }else{
869 logParams[item] = 0
870 }
871 if (logParams[item]<-9998){
872 logParams[item]=0
873 }
874
875 })
876 targetData.push({...staticParams,...logParams})
877 }
878 }
879 console.log(targetData)
880 setExcelData(targetData)
881
882 setExcelColumns([...logColumns,...staticColumns].map(field=>({field:field,headerName:field,width:
883 150,resizable: true})))
884 ExportJsonToCsv(targetData,`${selectFile[wellnameField]}_$
885 {selectFile[logTopField]}-${selectFile[logBottomField]}.csv`,[...logColumns,...staticColumns])
886 Toast.success("导出成功!")
887 }
888 })
889
890 }}>获取目标段数据</Button>
891
892 <Button loading={loading} disabled={!selectFile[wellnameField]}
893 icon={<IconFilledArrowDown />} onClick={()=>{
894
895 batchOutputTargetLogData(wellData,wellnameField,logTopField,logBottomField,logColumns,staticColu
896 mns)
897 }}>批量导出目标段数据</Button>
898
899 <Tag>共:{fileList.length}个文件</Tag>
900 <h4>{selectFile.name}</h4>

36
37 测井数据 WIS 分析提取软件 V1.0 源代码

901 <Tag>{excelData.length}条</Tag>
902 </Space>
903 </div>
904 </div>
905 <div
906 style={{
907 position: 'sticky',
908 top: 50,
909 height: 48,
910 border: '1px solid #ccc',
911 zIndex: 30,
912 background: '#F5F5F5',
913 display: 'flex',
914 alignItems: 'center',
915 }}
916 >
917 <Space>
918 <Select
919 size='middle'
920 placeholder="井号"
921 onChange={(v)=>{setWellnameField(v)}}
922 style={{ width: 200 }}
923 options={options}
924 />
925 <Select
926 size='middle'
927 placeholder="测井顶"
928 onChange={(v)=>{setLogTopField(v)}}
929 style={{ width: 200 }}
930 options={options}
931 />
932 <Select
933 size='middle'
934 placeholder="测井底"
935 onChange={(v)=>{setLogBottomField(v)}}
936 style={{ width: 200 }}
937 options={options}
938 />
939 <Select
940 mode='tags'
941 size='middle'
942 placeholder="静态参数"
943 onChange={(v)=>{setStaticColumns(v)}}
944 style={{ width: window.innerWidth-700 }}
945 options={options}
946 />
947
948 </Space>
949
950 </div>

38
39 测井数据 WIS 分析提取软件 V1.0 源代码

951 <div
952 style={{
953 position: 'sticky',
954 top: 100,
955 height: 48,
956 border: '1px solid #ccc',
957 zIndex: 30,
958 background: '#F5F5F5',
959 display: 'flex',
960 alignItems: 'center',
961 }}
962 >
963 <Space>
964 <Input style={{width:617}} prefix="WIS 静 态 服 务 地 址 :" value={staticHost}
965 onChange={(v)=>{setStaticHost(v.target.value)}}></Input>
966 <Select
967 mode='tags'
968 size='middle'
969 placeholder="测井参数"
970 onChange={(v)=>{setLogColumns(v)}}
971 style={{ width: window.innerWidth-700 }}
972 options={logOptions}
973 />
974
975 </Space>
976
977 </div>
978 <div>
979 <div style={{float:'left',width:300}}>
980 <p>文件列表</p>
981 <div style={{height:window.innerHeight-220,overflow:'auto'}}>
982 <List
983 size="small"
984 bordered
985 dataSource={wellData}
986 renderItem={item => <List.Item
987
988 style={(item[wellnameField]===selectFile[wellnameField]&&item[logTopField]===selectFile[logTopField])
989 ?{ backgroundColor: 'var(--semi-color-secondary-light-active)'}:{}}
990 onClick={()=>{
991 setSelectFile(item)
992 }}>{item[wellnameField]}_{item[logTopField]}-{item[logBottomField]}{item.color&&<Tag
993 color={item.color}>{item.color==="green"?"成功":"失败"}</Tag>}</List.Item>}
994 />
995 </div>
996 </div>
997 <div className="ag-theme-alpine" style={{ height: window.innerHeight-180 }}>
998 <AgGridReact
999 enableRangeSelection={true}
1000 suppressMultiRangeSelection={true}

40
41 测井数据 WIS 分析提取软件 V1.0 源代码

1001 defaultColDef={defaultColDef}
1002 rowData={excelData}
1003 columnDefs={excelColumns}></AgGridReact>
1004 </div>
1005 </div>
1006 </div>
1007 <ProgressWindow percent={progress.percent} content={progress.content}
1008 visible={progress.visible} onCancel={()=>{
1009 SetProgress({...progress,visible:false})
1010 setProgress({...progress,visible:false})
1011 }}/>
1012 </>)
1013 }
1014 // WIS 提取特定段的测井数据
1015 export const OdkWisExtractDataPage = ()=>{
1016 const [excels,setExcels] = useState([])
1017 const [excelData,setExcelData] = useState([])
1018 const [wellData,setWellData] = useState([])
1019 const [excelColumns,setExcelColumns]= useState([])
1020 const [loading,setLoading] = useState(false)
1021 const [fileList,setFileList] = useState([])
1022 const [options,setOptions] = useState([])
1023 const [logOptions,setLogOptions] = useState([])
1024 const [wellnameField,setWellnameField] = useState("井号")
1025 const [logTopField,setLogTopField] = useState("测井顶")
1026 const [logBottomField,setLogBottomField] = useState("测井底")
1027 const [staticColumns,setStaticColumns] = useState([])
1028 const [logColumns,setLogColumns] = useState(["DEPTH"])
1029 const [exportColumns,setExportColumns] = useState([])
1030 const [staticHost,setStaticHost] = useState("http://127.0.0.1:9090")
1031 const [selectFile,setSelectFile] = useState({name:""})
1032 const defaultColDef = useMemo(() => {
1033 return {
1034 width: 180,
1035 //可调宽度
1036 resizable: true,
1037 };
1038 }, []);
1039 const [progress,setProgress] = useState({percent:0,content:"进度内容",visible:false})
1040
1041
1042 const DownloadAndExtractWis = (downloadurl)=>{
1043 return new Promise((resolve,reject)=>{
1044 axios.get(downloadurl,{responseType:"blob"}).then(result=>{
1045 if (result.data){
1046 BinaryToBase64(result.data).then(odkwisbase64=>{
1047 PeGetOdkWisData({odkwisbase64}).then(res=>{
1048 return resolve(res)
1049 }).catch(err=>{
1050 return reject(err)

42
43 测井数据 WIS 分析提取软件 V1.0 源代码

1051 })
1052 }).catch(err=>{
1053 return reject(err)
1054 })
1055 }else{
1056 return reject("获取数据失败!")
1057 }
1058 }).catch(err=>{
1059 return reject(err)
1060 })
1061 })
1062 }
1063
1064 const getWisData = (downloadurl,columns)=>{
1065 return new Promise((resolve,reject)=>{
1066 axios.get(downloadurl,{responseType:"blob"}).then(result=>{
1067 if (result.data){
1068 BinaryToBase64(result.data).then(odkwisbase64=>{
1069 PeGetOdkWisData({odkwisbase64,columns}).then(res=>{
1070 return resolve(res)
1071 }).catch(err=>{
1072 return reject(err)
1073 })
1074 }).catch(err=>{
1075 return reject(err)
1076 })
1077 }else{
1078 return reject("获取数据失败!")
1079 }
1080 }).catch(err=>{
1081 return reject(err)
1082 })
1083 })
1084 }
1085
1086 const exportTargetLogData =
1087 (inputItem,wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)=>{
1088 return new Promise((resolve,reject)=>{
1089 console.log(wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)
1090 const logTop = inputItem[logTopField]
1091 const logBottom = inputItem[logBottomField]
1092 const staticParams = {}
1093 staticColumns.forEach(item=>{
1094 staticParams[item]=inputItem[item]
1095 })
1096 getWisData(wellurl,logColumns).then(result=>{
1097 if (result.code===200){
1098 const {columns,data}= result
1099 if (columns.length!==logColumns.length){
1100 Toast.error("测井缺少表头")

44
45 测井数据 WIS 分析提取软件 V1.0 源代码

1101 console.log(inputItem,columns,logColumns)
1102 return reject(false)
1103 }
1104 const DEPTH = data["DEPTH"]
1105 const targetData = []
1106 for (let i =0 ;i<DEPTH.length;i++){
1107 if (DEPTH[i]>=logTop && DEPTH[i]<=logBottom){
1108 const logParams = {}
1109 logColumns.forEach(item=>{
1110 if (data[item]){
1111 logParams[item]=data[item][i]
1112 }else{
1113 logParams[item] = 0
1114 }
1115 })
1116 targetData.push({...staticParams,...logParams})
1117 }
1118 }
1119 if (targetData.length>0){
1120 ExportJsonToCsv(targetData,`${inputItem[wellnameField]}_${inputItem[logTopField]}-$
1121 {inputItem[logBottomField]}.csv`,[...logColumns,...staticColumns])
1122 }
1123 return resolve(targetData)
1124 }else{
1125 return reject(result.error)
1126 }
1127 }).catch(err=>{
1128 return reject(err)
1129 })
1130 })
1131 }
1132
1133 const batchOutputTargetLogData =
1134 async(wellData,wellnameField,logTopField,logBottomField,logColumns,staticColumns)=>{
1135 SetProgress({percent:0,content:`开始筛选`,visible:true})
1136 setProgress({percent:0,content:`开始筛选`,visible:true})
1137 for (let i =0;i<wellData.length;i++){
1138 try{
1139 setProgress({percent:((i+1)*100.0/(wellData.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
1140 {wellData.length}个文件,当前文件[${wellData[i][wellnameField]}]`,visible:true})
1141 SetProgress({percent:((i+1)*100.0/(wellData.length*1.0)).toFixed(1),content:` 进 度 :${i+1}/$
1142 {wellData.length}个文件,当前文件[${wellData[i][wellnameField]}]`,visible:true})
1143 const wellurl = `${staticHost}/${wellData[i][wellnameField]}.odkwis`
1144 const result = await
1145 exportTargetLogData(wellData[i],wellurl,wellnameField,logTopField,logBottomField,logColumns,staticCol
1146 umns)
1147 if (result){
1148 wellData[i].color = "green"
1149 }
1150 console.log(result)

46
47 测井数据 WIS 分析提取软件 V1.0 源代码

1151 const progress = GetProgress()


1152 if (!progress.visible){
1153 console.log(i,i,progress)
1154 Toast.error("中断操作!")
1155 return
1156 }
1157 }catch(err){
1158 console.log(err)
1159 wellData[i].color = "red"
1160 }
1161 }
1162 setWellData(wellData)
1163 SetProgress({percent:100,content:`任务完成!`,visible:true})
1164 setProgress({percent:100,content:`任务完成!`,visible:true})
1165 }

1169 useEffect(()=>{
1170
1171 },[])
1172
1173 return(<>
1174 <div>
1175 <div
1176 style={{
1177 position: 'sticky',
1178 top: 0,
1179 height: 48,
1180 border: '1px solid #ccc',
1181 zIndex: 30,
1182 background: '#F5F5F5',
1183 display: 'flex',
1184 alignItems: 'center',
1185 }}
1186 >
1187 <div>
1188 <Space>
1189 <Upload uploadTrigger="custom"
1190 action=""
1191 accept='.xls,.xlsx'
1192 showUploadList={false}
1193 onChange={(props)=>{
1194 const fileInstance = props.fileList[0].fileInstance
1195 ReadExcelFile2Json(fileInstance).then(result=>{
1196 console.log(result)
1197 setExcelData(result)
1198 setWellData(result)
1199 if (result.length>0){
1200

48
49 测井数据 WIS 分析提取软件 V1.0 源代码

1201 setExcelColumns(Object.keys(result[0]).map(field=>({field:field,headerName:field,width: 150,resizable:


1202 true})))
1203 setOptions(Object.keys(result[0]).map(field=>({value:field,label:field})))
1204 }
1205 })
1206 }}>
1207 <Button loading={loading} icon={<IconUpload /> } theme="light">
1208 选择文件
1209 </Button>
1210 </Upload>
1211 <Button loading={loading} disabled={!selectFile[wellnameField]} icon={<IconRefresh2 />}
1212 onClick={()=>{
1213 if (selectFile){
1214 // setLoading(true)
1215 const wellurl = `${staticHost}/${selectFile[wellnameField]}.odkwis`
1216 DownloadAndExtractWis(wellurl).then(result=>{
1217 if (result.code===200){
1218 const {columns,data}=result
1219 setExcelColumns(result.columns.map(field=>({field:field,headerName:field,width:
1220 150,resizable: true})))
1221 setExcelData(ColumnDatas2Json(columns,data))
1222 setLogOptions(columns.map(field=>({value:field,label:field})))
1223 }else{
1224 Toast.error(result.error)
1225 }
1226 }).catch(err=>{
1227 console.log(err)
1228 Toast.error(err)
1229 })
1230
1231 }else{
1232 Toast.error("请选择文件")
1233 }
1234
1235 }}>读取 ODKWIS</Button>
1236
1237 <Button loading={loading} disabled={!selectFile[wellnameField]}
1238 icon={<IconFilledArrowDown />} onClick={()=>{
1239 const wellurl = `${staticHost}/${selectFile[wellnameField]}.odkwis`
1240
1241
1242 console.log(wellurl,wellnameField,logTopField,logBottomField,logColumns,staticColumns)
1243 const logTop = selectFile[logTopField]
1244 const logBottom = selectFile[logBottomField]
1245 const staticParams = {}
1246 staticColumns.forEach(item=>{
1247 staticParams[item]=selectFile[item]
1248 })
1249 getWisData(wellurl,logColumns).then(result=>{
1250 if (result.code===200){

50
51 测井数据 WIS 分析提取软件 V1.0 源代码

1251 const {columns,data}= result


1252 if (columns.length!==logColumns.length){
1253 Toast.error("测井缺少表头")
1254 console.log(columns,logColumns)
1255 return
1256 }
1257 console.log(data)
1258 const DEPTH = data["DEPTH"]
1259 const targetData = []
1260 for (let i =0 ;i<DEPTH.length;i++){
1261 if (DEPTH[i]>=logTop && DEPTH[i]<=logBottom){
1262 const logParams = {}
1263 logColumns.forEach(item=>{
1264 if (data[item]){
1265 logParams[item]=data[item][i]
1266 }else{
1267 logParams[item] = 0
1268 }
1269 if (logParams[item]<-9998){
1270 logParams[item]=0
1271 }
1272
1273 })
1274 targetData.push({...staticParams,...logParams})
1275 }
1276 }
1277 console.log(targetData)
1278 setExcelData(targetData)
1279
1280 setExcelColumns([...logColumns,...staticColumns].map(field=>({field:field,headerName:field,width:
1281 150,resizable: true})))
1282 ExportJsonToCsv(targetData,`${selectFile[wellnameField]}_$
1283 {selectFile[logTopField]}-${selectFile[logBottomField]}.csv`,[...logColumns,...staticColumns])
1284 Toast.success("导出成功!")
1285 }
1286 })
1287
1288 }}>获取目标段数据</Button>
1289
1290 <Button loading={loading} disabled={!selectFile[wellnameField]}
1291 icon={<IconFilledArrowDown />} onClick={()=>{
1292
1293 batchOutputTargetLogData(wellData,wellnameField,logTopField,logBottomField,logColumns,staticColu
1294 mns)
1295 }}>批量导出目标段数据</Button>
1296
1297 <Tag>共:{fileList.length}个文件</Tag>
1298 <h4>{selectFile.name}</h4>
1299 <Tag>{excelData.length}条</Tag>
1300 </Space>

52
53 测井数据 WIS 分析提取软件 V1.0 源代码

1301 </div>
1302 </div>
1303 <div
1304 style={{
1305 position: 'sticky',
1306 top: 50,
1307 height: 48,
1308 border: '1px solid #ccc',
1309 zIndex: 30,
1310 background: '#F5F5F5',
1311 display: 'flex',
1312 alignItems: 'center',
1313 }}
1314 >
1315 <Space>
1316 <Select
1317 size='middle'
1318 placeholder="井号"
1319 onChange={(v)=>{setWellnameField(v)}}
1320 style={{ width: 200 }}
1321 options={options}
1322 />
1323 <Select
1324 size='middle'
1325 placeholder="测井顶"
1326 onChange={(v)=>{setLogTopField(v)}}
1327 style={{ width: 200 }}
1328 options={options}
1329 />
1330 <Select
1331 size='middle'
1332 placeholder="测井底"
1333 onChange={(v)=>{setLogBottomField(v)}}
1334 style={{ width: 200 }}
1335 options={options}
1336 />
1337 <Select
1338 mode='tags'
1339 size='middle'
1340 placeholder="静态参数"
1341 onChange={(v)=>{setStaticColumns(v)}}
1342 style={{ width: window.innerWidth-700 }}
1343 options={options}
1344 />
1345
1346 </Space>
1347
1348 </div>
1349 <div
1350 style={{

54
55 测井数据 WIS 分析提取软件 V1.0 源代码

1351 position: 'sticky',


1352 top: 100,
1353 height: 48,
1354 border: '1px solid #ccc',
1355 zIndex: 30,
1356 background: '#F5F5F5',
1357 display: 'flex',
1358 alignItems: 'center',
1359 }}
1360 >
1361 <Space>
1362 <Input style={{width:617}} prefix="ODKWIS 静 态 服 务 地 址 :" value={staticHost}
1363 onChange={(v)=>{setStaticHost(v.target.value)}}></Input>
1364 <Select
1365 mode='tags'
1366 size='middle'
1367 placeholder="测井参数"
1368 onChange={(v)=>{setLogColumns(v)}}
1369 style={{ width: window.innerWidth-700 }}
1370 options={logOptions}
1371 />
1372
1373 </Space>
1374
1375 </div>
1376 <div>
1377 <div style={{float:'left',width:300}}>
1378 <p>文件列表</p>
1379 <div style={{height:window.innerHeight-220,overflow:'auto'}}>
1380 <List
1381 size="small"
1382 bordered
1383 dataSource={wellData}
1384 renderItem={item => <List.Item
1385
1386 style={(item[wellnameField]===selectFile[wellnameField]&&item[logTopField]===selectFile[logTopField])
1387 ?{ backgroundColor: 'var(--semi-color-secondary-light-active)'}:{}}
1388 onClick={()=>{
1389 setSelectFile(item)
1390 }}>{item[wellnameField]}_{item[logTopField]}-{item[logBottomField]}{item.color&&<Tag
1391 color={item.color}>{item.color==="green"?"成功":"失败"}</Tag>}</List.Item>}
1392 />
1393 </div>
1394 </div>
1395 <div className="ag-theme-alpine" style={{ height: window.innerHeight-180 }}>
1396 <AgGridReact
1397 enableRangeSelection={true}
1398 suppressMultiRangeSelection={true}
1399 defaultColDef={defaultColDef}
1400 rowData={excelData}

56
57 测井数据 WIS 分析提取软件 V1.0 源代码

1401 columnDefs={excelColumns}></AgGridReact>
1402 </div>
1403 </div>
1404 </div>
1405 <ProgressWindow percent={progress.percent} content={progress.content}
1406 visible={progress.visible} onCancel={()=>{
1407 SetProgress({...progress,visible:false})
1408 setProgress({...progress,visible:false})
1409 }}/>
1410 </>)
1411 }
1412
1413
1414 import * as XLSX from 'xlsx';
1415 import cptable from 'codepage'
1416 import Papa from 'papaparse';
1417 import { DownloadRawData,String2Base64} from '@oldkingdclub/utils';
1418 import { OdkDownloadBase64 } from './odkcmd';
1419
1420 function isUTF8(bytes) {
1421 var i = 0;
1422 while (i < bytes.length) {
1423 if ((// ASCII
1424 bytes[i] === 0x09 ||
1425 bytes[i] === 0x0A ||
1426 bytes[i] === 0x0D ||
1427 (0x20 <= bytes[i] && bytes[i] <= 0x7E)
1428 )
1429 ){
1430 i += 1;
1431 continue;
1432 }
1433
1434 if ((// non-overlong 2-byte
1435 (0xC2 <= bytes[i] && bytes[i] <= 0xDF) &&
1436 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF)
1437 )
1438 ){
1439 i += 2;
1440 continue;
1441 }
1442
1443 if ((// excluding overlongs
1444 bytes[i] === 0xE0 &&
1445 (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
1446 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
1447 ) ||
1448 (// straight 3-byte
1449 ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) ||
1450 bytes[i] === 0xEE ||

58
59 测井数据 WIS 分析提取软件 V1.0 源代码

1451 bytes[i] === 0xEF) &&


1452 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
1453 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
1454 ) ||
1455 (// excluding surrogates
1456 bytes[i] === 0xED &&
1457 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x9F) &&
1458 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
1459 )
1460 ){
1461 i += 3;
1462 continue;
1463 }
1464
1465 if ((// planes 1-3
1466 bytes[i] === 0xF0 &&
1467 (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
1468 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
1469 (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
1470 ) ||
1471 (// planes 4-15
1472 (0xF1 <= bytes[i] && bytes[i] <= 0xF3) &&
1473 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
1474 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
1475 (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
1476 ) ||
1477 (// plane 16
1478 bytes[i] === 0xF4 &&
1479 (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) &&
1480 (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
1481 (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
1482 )
1483 ){
1484 i += 4;
1485 continue;
1486 }
1487 return false;
1488 }
1489 return true;
1490 }
1491 function isExcel(file){
1492 let isExcel = file.name.split(".").reverse()[0].includes("xls");//判断是否是 Excel
1493 return isExcel
1494 }
1495 export function ReadJsonFile(file) {
1496 return new Promise((resolve,reject)=>{
1497 const reader = new FileReader();
1498 reader.onload = (event) => {
1499 const data = event.target.result;
1500 return resolve(JSON.parse(data))

60
61 测井数据 WIS 分析提取软件 V1.0 源代码

1501 };
1502 reader.readAsBinaryString(file);
1503 })
1504 }
1505 export function ReadExcelFile2Json(file) {
1506 return new Promise((resolve,reject)=>{
1507 const reader = new FileReader();
1508 reader.onload = (event) => {
1509 const data = event.target.result;
1510 let workbook
1511 if (isExcel(file)){
1512 workbook = XLSX.read(data, { type: 'binary' });
1513 }else{
1514 if (isUTF8(data)){
1515 workbook = XLSX.read(data, { type: 'string' });
1516 }else{
1517 var str = cptable.utils.decode(936, data);
1518 workbook = XLSX.read(str, { type: 'string' });
1519 }
1520 }
1521 const sheetName = workbook.SheetNames[0];
1522 const worksheet = workbook.Sheets[sheetName];
1523 const excelData = XLSX.utils.sheet_to_json(worksheet);
1524 return resolve(excelData)
1525 };
1526 reader.readAsBinaryString(file);
1527 })
1528 }
1529 export function ReadTxtExcelFile2Json(file) {
1530 return new Promise((resolve,reject)=>{
1531 const reader = new FileReader();
1532 reader.onload = (event) => {
1533 const data = event.target.result;
1534 let workbook
1535 if (isExcel(file)){
1536 workbook = XLSX.read(data, { type: 'binary' });
1537 }else{
1538 if (isUTF8(data)){
1539 let newData = data.replace(/[ \t]+/g, ',');
1540 workbook = XLSX.read(newData, { type: 'string' });
1541 }else{
1542 var str = cptable.utils.decode(936, data);
1543 let newData = str.replace(/[ \t]+/g, ',');
1544 workbook = XLSX.read(newData, { type: 'string' });
1545 }
1546 }
1547 const sheetName = workbook.SheetNames[0];
1548 const worksheet = workbook.Sheets[sheetName];
1549 const excelData = XLSX.utils.sheet_to_json(worksheet);
1550 return resolve(excelData)

62
63 测井数据 WIS 分析提取软件 V1.0 源代码

1551 };
1552 reader.readAsBinaryString(file);
1553 })
1554 }
1555
1556 export function ReadCsvBase64Data2Json(base64Data) {
1557 return new Promise(async (resolve, reject) => {
1558 try {
1559 // 将 Base64 数据解码为二进制字符串
1560 const binaryString = atob(base64Data);
1561 const excelData = await parseLargeCSV(binaryString)
1562 resolve(excelData);
1563 } catch (error) {
1564 // 如果出错,调用 reject 并返回错误信息
1565 reject(error);
1566 }
1567 });
1568 }
1569 export function getBaseName(filepath) {
1570 return filepath.split('\\').pop(); // 根据 / 分割后获取最后一项
1571 }
1572 // 读取大型 CSV 文件并分块处理
1573 export function parseLargeCSV(file) {
1574 return new Promise((resolve, reject) => {
1575 let results = [];
1576 Papa.parse(file, {
1577 // 每读取一行就会调用这个函数
1578 step: function (row) {
1579 // console.log('Row:', row.data); // 处理每一行的数据
1580 results.push(row.data); // 你可以选择保存处理后的数据
1581 },
1582 complete: function () {
1583 console.log('CSV 文件处理完成');
1584 resolve(results); // 处理完成后,返回完整的数据
1585 },
1586 error: function (error) {
1587 console.error('解析 CSV 文件时出错:', error);
1588 reject(error);
1589 },
1590 header: true, // 如果 CSV 文件有表头,设置为 true
1591 skipEmptyLines: true, // 跳过空行
1592 worker: true, // 开启 Web Worker 以避免阻塞主线程
1593 chunkSize: 1024 * 1024 // 每次读取的块大小(单位:字节)
1594 });
1595 });
1596 }
1597
1598 export const ExportJsonToExcel = (jsonData,filename,db2showfieldmap={}) => {
1599 if (jsonData.length<1){
1600 return

64
65 测井数据 WIS 分析提取软件 V1.0 源代码

1601 }
1602
1603 const ws = XLSX.utils.json_to_sheet(jsonData);
1604 const wb = XLSX.utils.book_new();
1605 // 获取表头
1606 const header = [];
1607 const range = XLSX.utils.decode_range(ws['!ref']);
1608 for (let C = range.s.c; C <= range.e.c; ++C) {
1609 const cell = ws[XLSX.utils.encode_cell({r: range.s.r, c: C})];
1610 header.push(cell.v);
1611 }
1612 // 将修改后的表头写回到 Excel 文件中
1613 header.forEach((value, index) => {
1614 const cell = ws[XLSX.utils.encode_cell({r: range.s.r, c: index})];
1615 if (db2showfieldmap[value]){
1616 cell.v = db2showfieldmap[value];
1617 }else{
1618 cell.v = value;
1619 }
1620 });
1621
1622 XLSX.utils.book_append_sheet(wb, ws, 'Data');
1623 // XLSX.writeFile(wb, filename);
1624 const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
1625 BinaryToBase64(wbout).then(base64=>{
1626 OdkDownloadBase64(base64,filename)
1627 })
1628 };
1629
1630 function StringToBase64(str) {
1631 const encoder = new TextEncoder();
1632 const bytes = encoder.encode(str);
1633 return btoa(String.fromCharCode(...bytes));
1634 }
1635
1636 export const ExportJsonToCsv = (jsonData,filename,columns)=>{
1637 const rows = [columns.join(",")]
1638 for (let i =0;i<jsonData.length;i++){
1639 const row = jsonData[i]
1640 rows.push(columns.map(item=>(row[item])).join(","))
1641 }
1642 const content = rows.join("\n")
1643 const bom = '\uFEFF'; // BOM 是 UTF-8 的标识符
1644 OdkDownloadBase64(StringToBase64(bom+content),filename)
1645 // DownloadRawData(filename,bom+content)
1646 return
1647 }
1648
1649 export const ColumnCalculate=(srcData,formValues)=>{
1650 return new Promise((resolve,reject)=>{

66
67 测井数据 WIS 分析提取软件 V1.0 源代码

1651 let data = {...srcData}


1652
1653 if (formValues.fieldnumcalculator){
1654 formValues.fieldnumcalculator.forEach(item=>{
1655 data[item.dstfield]=0
1656 if (item.srcfield in data){
1657 switch (item.method){
1658 case "+":
1659 data[item.dstfield]=data[item.srcfield]+item.number
1660 break
1661 case "-":
1662 data[item.dstfield]=data[item.srcfield]-item.number
1663 break
1664 case "×":
1665 data[item.dstfield]=data[item.srcfield]*item.number
1666 break
1667 case "÷":
1668 data[item.dstfield]=data[item.srcfield]/item.number
1669 break
1670 default:
1671 break
1672 }
1673 }
1674 })
1675 }
1676
1677 // dstfield:"",method:"+",srcfield:"",number:""
1678 if (formValues.numfieldcalculator){
1679 formValues.numfieldcalculator.forEach(item=>{
1680 data[item.dstfield]=0
1681 if (item.srcfield in data ){
1682 switch (item.method){
1683 case "+":
1684 data[item.dstfield]=data[item.srcfield]+item.number
1685 break
1686 case "-":
1687 data[item.dstfield]=item.number-data[item.srcfield]
1688 break
1689 case "×":
1690 data[item.dstfield]=data[item.srcfield]*item.number
1691 break
1692 case "÷":
1693 data[item.dstfield]=data[item.srcfield]!==0?item.number/data[item.srcfield]:0
1694 break
1695 default:
1696 break
1697 }
1698 }
1699 })
1700 }

68
69 测井数据 WIS 分析提取软件 V1.0 源代码

1701
1702 // dstfield:"",method:"+",srcfield1:"",srcfield2:""
1703 if (formValues.fieldfieldcalculator){
1704 formValues.fieldfieldcalculator.forEach(item=>{
1705 data[item.dstfield]=0
1706 if (item.srcfield1 in data && item.srcfield2 in data){
1707 switch (item.method){
1708 case "+":
1709 data[item.dstfield]=data[item.srcfield1]+data[item.srcfield2]
1710 break
1711 case "-":
1712 data[item.dstfield]=data[item.srcfield1]-data[item.srcfield2]
1713 break
1714 case "×":
1715 data[item.dstfield]=data[item.srcfield1]*data[item.srcfield2]
1716 break
1717 case "÷":
1718 data[item.dstfield]=data[item.srcfield2]!==0?data[item.srcfield1]/
1719 data[item.srcfield2]:0
1720 break
1721 default:
1722 break
1723 }
1724 }
1725 })
1726 }
1727 return resolve(data)
1728 })
1729
1730 }
1731 export const getFilenameFieldValue = (filename,prefix,suffix)=>{
1732
1733 // 查找最后一个'.'的位置
1734 const lastDotIndex = filename.lastIndexOf('.');
1735 let resultFilename = filename
1736
1737 // 如果没有找到'.',或者'.'是文件名的第一个字符,则返回原文件名
1738 if (lastDotIndex === -1 || lastDotIndex === 0) {
1739 resultFilename = filename
1740 }else{
1741 resultFilename = filename.substring(0, lastDotIndex);
1742 }
1743 if (prefix){
1744 resultFilename = `${prefix}${resultFilename}`
1745 }
1746 if (suffix){
1747 resultFilename=`${resultFilename}${suffix}`
1748 }
1749 return resultFilename
1750 }

70
71 测井数据 WIS 分析提取软件 V1.0 源代码

1751 export const FilterExcelFile=(selectField,fieldMap,excelFile,formValues)=>{


1752 return new Promise((resolve,reject)=>{
1753 let filterRes =[]
1754
1755 ReadExcelFile2Json(excelFile.fileInstance).then(result=>{
1756 result.forEach(item=>{
1757 if (formValues.addfilename && formValues.filenamefield){
1758 item[formValues.filenamefield] =
1759 getFilenameFieldValue(excelFile.name,formValues.filenameprefix,formValues.filenamesuffix)
1760 }
1761
1762 if (selectField==="ALL"){
1763 filterRes.push(item)
1764 }else if (fieldMap[item[selectField].trim()]){
1765 filterRes.push(item)
1766 }
1767 })
1768 return resolve(filterRes)
1769 }).catch(err=>{
1770 return resolve([])
1771 })
1772 })
1773
1774 }
1775 export const FilterTxtExcelFile=(selectField,fieldMap,excelFile,formValues)=>{
1776 return new Promise((resolve,reject)=>{
1777 let filterRes =[]
1778
1779 ReadTxtExcelFile2Json(excelFile.fileInstance).then(result=>{
1780 result.forEach(item=>{
1781 if (formValues.addfilename && formValues.filenamefield){
1782 item[formValues.filenamefield] =
1783 getFilenameFieldValue(excelFile.name,formValues.filenameprefix,formValues.filenamesuffix)
1784 }
1785
1786 if (selectField==="ALL"){
1787 filterRes.push(item)
1788 }else if (fieldMap[item[selectField].trim()]){
1789 filterRes.push(item)
1790 }
1791 })
1792 return resolve(filterRes)
1793 }).catch(err=>{
1794 return resolve([])
1795 })
1796 })
1797
1798 }
1799 export const ConvertDataField = (jsonData,columns,fieldMap)=>{
1800 let result = []

72
73 测井数据 WIS 分析提取软件 V1.0 源代码

1801 jsonData.forEach(item=>{
1802 let newitem = {}
1803 columns.forEach(field=>{
1804 let newfield = fieldMap[field.field]?fieldMap[field.field]:field.field
1805 newitem[newfield]=item[field.field]
1806 })
1807 result.push(newitem)
1808 })
1809 return result
1810 }
1811
1812 export function formatDateStr(dataStr) {
1813 let dateString = String(dataStr)
1814 let date="";
1815 if (dateString.includes('/')) {
1816 date = new Date(dateString);
1817 } else if (dateString.includes('-')) {
1818 const parts = dateString.split('-');
1819 date = new Date(parts[0], parts[1] - 1, parts[2]);
1820 } else if (dateString.length===8){
1821 const year = dateString.slice(0, 4);
1822 const month = dateString.slice(4, 6) - 1;
1823 const day = dateString.slice(6, 8);
1824 date = new Date(year, month, day);
1825 }if (dateString.length===6){
1826 const year = dateString.slice(0, 4);
1827 const month = dateString.slice(4, 6) - 1;
1828 const day = 1;
1829 date = new Date(year, month, day);
1830 }else if (dataStr>25569 && dataStr<90000){
1831 date = new Date((dateString - 25569) * 86400 * 1000);
1832 }
1833 if (date){
1834 const year = date.getFullYear();
1835 const month = date.getMonth() + 1;
1836 const day = date.getDate();
1837 return `${year}-${String(month).padStart(2,0)}-${String(day).padStart(2,0)}`
1838 }
1839 return date;
1840 }
1841
1842 export function ReadFile2Base64 (file){
1843 return new Promise((resolve,reject)=>{
1844 if (file) {
1845 // 创建 FileReader 实例
1846 const reader = new FileReader();
1847 // 设置加载完成的回调函数
1848 reader.onload = () => {
1849 const base64String = reader.result.split(",")[1];
1850 // console.log(base64String); // 控制台打印 Base64 数据

74
75 测井数据 WIS 分析提取软件 V1.0 源代码

1851 return resolve(base64String)


1852 };
1853
1854 reader.onerror=(err)=>{
1855 return reject(err)
1856 }
1857 // 读取文件为 Base64
1858 reader.readAsDataURL(file);
1859 }else{
1860 return reject("false")
1861 }
1862 })
1863
1864 }
1865
1866 // 传入参数 colmuns:表头 data:数据列 例:["a","b"],{"a":[1,2,3],"b":[4,5,6]}
1867 export function ColumnDatas2Json(columns,data){
1868 const result = []
1869 if (columns.length<1){
1870 return result
1871 }
1872 const columnData = data[columns[0]]
1873 for (let i =0;i<columnData.length;i++){
1874 const item = {}
1875 columns.forEach(column=>{
1876 item[column]=data[column][i]
1877 })
1878 result.push(item)
1879 }
1880 return result
1881 }
1882
1883 // 传入参数 colmuns:表头 data:数据列 例:["a","b"],[[1,2,3],[4,5,6]]
1884 export function Json2ColumnDatas(jsonList){
1885 if (jsonList.length<1){
1886 return {}
1887 }
1888 const columns = Object.keys(jsonList[0])
1889 const datas =[]
1890 columns.forEach((element,idx) => {
1891 datas.push([])
1892 });
1893 for (let i =0;i<jsonList.length;i++){
1894 const item = jsonList[i]
1895 for (let j=0;j<columns.length;j++){
1896 const field = columns[j]
1897 datas[j].push(item[field]?item[field]:-9999)
1898 }
1899 }
1900 return {columns,datas}

76
77 测井数据 WIS 分析提取软件 V1.0 源代码

1901 }
1902
1903 export function GetFileNameWithoutExtension(filename) {
1904 return filename.substring(0, filename.lastIndexOf('.')) || filename;
1905 }
1906
1907 export function BinaryToBase64(binaryData) {
1908 return new Promise((resolve, reject) => {
1909 let reader = new FileReader();
1910 // 当文件读取完成后,返回 Base64 编码
1911 reader.onloadend = () => {
1912 const base64Data = reader.result.split(',')[1]; // 去除前缀
1913 resolve(base64Data);
1914 };
1915
1916 // 捕获错误
1917 reader.onerror = reject;
1918
1919 // 将二进制数据(例如 Blob 或 ArrayBuffer)读取为 Data URL(Base64 编码)
1920 reader.readAsDataURL(new Blob([binaryData]));
1921 });
1922 }
1923
1924 import axios from "axios"
1925 const PECONV_ENDPOINT = "http://127.0.0.1:15751/peconv"
1926
1927 const client = axios.create({
1928 baseURL:PECONV_ENDPOINT,
1929 // withCredentials:true,
1930 timeout:6000000,
1931 })
1932
1933 export async function PeConvExtractWisLog(file){
1934 return new Promise((resolve,reject)=>{
1935 const form = new FormData();
1936 form.append('file', file)
1937 client.request({
1938 data: form,
1939 method: 'POST',
1940 url: `/extractwislog2csv`
1941 }).then(res=>{
1942 return resolve(res.data)
1943 }).catch(err=>{
1944 return reject(err)
1945 })
1946
1947 })
1948 }
1949
1950 export async function PeWis2OdkWis(wisbase64){

78
79 测井数据 WIS 分析提取软件 V1.0 源代码

1951 return new Promise((resolve,reject)=>{


1952 client.request({
1953 data: {wisbase64},
1954 method: 'POST',
1955 url: `/wis2odkwis`
1956 }).then(res=>{
1957 return resolve(res.data)
1958 }).catch(err=>{
1959 return reject(err)
1960 })
1961 })
1962 }
1963
1964 export async function PeOdkWis2Txt(odkwisbase64){
1965 return new Promise((resolve,reject)=>{
1966 client.request({
1967 data: {odkwisbase64},
1968 method: 'POST',
1969 url: `/odkwis2txt`
1970 }).then(res=>{
1971 return resolve(res.data)
1972 }).catch(err=>{
1973 return reject(err)
1974 })
1975 })
1976 }
1977 export async function PeWis2Txt(wisbase64){
1978 return new Promise((resolve,reject)=>{
1979 client.request({
1980 data: {wisbase64},
1981 method: 'POST',
1982 url: `/wis2txt`
1983 }).then(res=>{
1984 return resolve(res.data)
1985 }).catch(err=>{
1986 return reject(err)
1987 })
1988 })
1989 }
1990
1991 export async function PeOdkWis2Wis(odkwisbase64){
1992 return new Promise((resolve,reject)=>{
1993 client.request({
1994 data: {odkwisbase64},
1995 method: 'POST',
1996 url: `/odkwis2wis`
1997 }).then(res=>{
1998 return resolve(res.data)
1999 }).catch(err=>{
2000 return reject(err)

80
81 测井数据 WIS 分析提取软件 V1.0 源代码

2001 })
2002 })
2003 }
2004
2005 export async function PeConvAttachOdkWis2Wis(params){
2006 return new Promise((resolve,reject)=>{
2007 client.request({
2008 data: params,
2009 method: 'POST',
2010 url: `/mergeodkwis2wis`
2011 }).then(res=>{
2012 return resolve(res.data)
2013 }).catch(err=>{
2014 return reject(err)
2015 })
2016
2017 })
2018 }
2019
2020 export async function PeGetOdkWisData(params){
2021 return new Promise((resolve,reject)=>{
2022 client.request({
2023 data: params,
2024 method: 'POST',
2025 url: `/getodkwisdata`
2026 }).then(res=>{
2027 return resolve(res.data)
2028 }).catch(err=>{
2029 return reject(err)
2030 })
2031
2032 })
2033 }
2034 export async function PeGetWisData(params){
2035 return new Promise((resolve,reject)=>{
2036 client.request({
2037 data: params,
2038 method: 'POST',
2039 url: `/getwisdata`
2040 }).then(res=>{
2041 return resolve(res.data)
2042 }).catch(err=>{
2043 return reject(err)
2044 })
2045
2046 })
2047 }
2048
2049 export async function PeColumndata2las(params){
2050 return new Promise((resolve,reject)=>{

82
83 测井数据 WIS 分析提取软件 V1.0 源代码

2051 client.request({
2052 data: params,
2053 method: 'POST',
2054 url: `/columndata2las`
2055 }).then(res=>{
2056 return resolve(res.data)
2057 }).catch(err=>{
2058 return reject(err)
2059 })
2060
2061 })
2062 }
2063
2064 export async function PeColumndata2txt(params){
2065 return new Promise((resolve,reject)=>{
2066 client.request({
2067 data: params,
2068 method: 'POST',
2069 url: `/columndata2txt`
2070 }).then(res=>{
2071 return resolve(res.data)
2072 }).catch(err=>{
2073 return reject(err)
2074 })
2075
2076 })
2077 }
2078 export async function PeColumndata2wis(params){
2079 return new Promise((resolve,reject)=>{
2080 client.request({
2081 data: params,
2082 method: 'POST',
2083 url: `/columndata2wis`
2084 }).then(res=>{
2085 return resolve(res.data)
2086 }).catch(err=>{
2087 return reject(err)
2088 })
2089
2090 })
2091 }
2092 export async function PeColumndata2csv(params){
2093 return new Promise((resolve,reject)=>{
2094 client.request({
2095 data: params,
2096 method: 'POST',
2097 url: `/columndata2csv`
2098 }).then(res=>{
2099 return resolve(res.data)
2100 }).catch(err=>{

84
85 测井数据 WIS 分析提取软件 V1.0 源代码

2101 return reject(err)


2102 })
2103
2104 })
2105 }
2106
2107 export async function PeGetTxtData(params){
2108 return new Promise((resolve,reject)=>{
2109 client.request({
2110 data: params,
2111 method: 'POST',
2112 url: `/gettxtdata`
2113 }).then(res=>{
2114 return resolve(res.data)
2115 }).catch(err=>{
2116 return reject(err)
2117 })
2118
2119 })
2120 }
2121
2122 export async function PeYcGasGetFracreportparams(params){
2123 return new Promise((resolve,reject)=>{
2124 client.request({
2125 data: params,
2126 method: 'POST',
2127 url: `/ycgasgetfracreportparams`
2128 }).then(res=>{
2129 return resolve(res.data)
2130 }).catch(err=>{
2131 return reject(err)
2132 })
2133
2134 })
2135 }
2136

86

You might also like