测井数据WIS分析提取软件V1.0源代码
测井数据WIS分析提取软件V1.0源代码
0 源代码
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 源代码
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 源代码
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 源代码
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 源代码
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 源代码
50
51 测井数据 WIS 分析提取软件 V1.0 源代码
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 源代码
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 源代码
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 源代码
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 源代码
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 源代码
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 源代码
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 源代码
86