Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

周壕 1 tahun lalu
induk
melakukan
c50defec04

+ 9 - 0
_windows/maven.wrapper.mapping.xml

@@ -0,0 +1,9 @@
+<application>
+  <component name="MavenWrapperMapping">
+    <option name="mapping">
+      <map>
+        <entry key="https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip" value="C:\Users\qiao\.m2\wrapper\dists\apache-maven-3.8.6-bin\1ks0nkde5v1pk9vtc31i9d0lcd\apache-maven-3.8.6" />
+      </map>
+    </option>
+  </component>
+</application>

TEMPAT SAMPAH
lib/postgresql-42.3.4.jar


+ 57 - 0
src/main/java/com/bowintek/practice/controller/WellInfoController.java

@@ -0,0 +1,57 @@
+package com.bowintek.practice.controller;
+
+import com.bowintek.practice.filter.exception.BaseResponse;
+import com.bowintek.practice.filter.exception.RespGenerstor;
+import com.bowintek.practice.model.WellBasicInformation;
+import com.bowintek.practice.services.service.OrganizationService;
+import com.bowintek.practice.services.service.WellInfoService;
+import com.bowintek.practice.vo.cd.CdOrganizationTreeVo;
+import com.bowintek.practice.vo.query.WellInfoParams;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@RestController
+@RequestMapping(value = "/api/wellInfo")
+public class WellInfoController {
+
+    @Autowired
+    private WellInfoService wellInfoService;
+    @Autowired
+    private OrganizationService organizationService;
+
+    @ResponseBody
+    @GetMapping("/getList")
+    public BaseResponse<PageInfo<HashMap<String, Object>>> getList(@RequestParam("page") int page, @RequestParam("rows") int rows,
+                                                                         WellInfoParams params) throws Exception {
+
+        PageInfo<HashMap<String, Object>> result = wellInfoService.getList(page, rows, params);
+
+        return RespGenerstor.success(result);
+    }
+
+    @GetMapping("/getOrganizationTree")
+    public BaseResponse getDictionaryList() {
+        List<CdOrganizationTreeVo> treeVoList = organizationService.getListTree();
+        return RespGenerstor.success(organizationService.getListTree());
+    }
+
+    @GetMapping("/getWellInfo")
+    public BaseResponse getWellInfo(String well_id) {
+        HashMap<String,Object> wellInfo = wellInfoService.getWellInfo(well_id);
+        List<HashMap<String,Object>>  boreholeInterList =wellInfoService.selectBoreholeInterList(well_id);
+        List<HashMap<String,Object>>  testHistoryList =wellInfoService.selectTestHistoryList(well_id);
+        List<HashMap<String,Object>>  analyticalAssaysList =wellInfoService.selectAnalyticalAssaysList(well_id);
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("dataModel",wellInfo);
+        result.put("boreholeInterList",boreholeInterList);
+        result.put("testHistoryList",testHistoryList);
+        result.put("analyticalAssaysList",analyticalAssaysList);
+        return RespGenerstor.success(result);
+    }
+}

+ 30 - 0
src/main/java/com/bowintek/practice/mapper/WellBasicInformationMapper.java

@@ -0,0 +1,30 @@
+package com.bowintek.practice.mapper;
+
+import com.bowintek.practice.model.WellBasicInformation;
+import com.bowintek.practice.model.WellBasicInformationExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface WellBasicInformationMapper {
+    long countByExample(WellBasicInformationExample example);
+
+    int deleteByExample(WellBasicInformationExample example);
+
+    int deleteByPrimaryKey(String well_id);
+
+    int insert(WellBasicInformation row);
+
+    int insertSelective(WellBasicInformation row);
+
+    List<WellBasicInformation> selectByExample(WellBasicInformationExample example);
+
+    WellBasicInformation selectByPrimaryKey(String well_id);
+
+    int updateByExampleSelective(@Param("row") WellBasicInformation row, @Param("example") WellBasicInformationExample example);
+
+    int updateByExample(@Param("row") WellBasicInformation row, @Param("example") WellBasicInformationExample example);
+
+    int updateByPrimaryKeySelective(WellBasicInformation row);
+
+    int updateByPrimaryKey(WellBasicInformation row);
+}

+ 45 - 0
src/main/java/com/bowintek/practice/mapper/cquery/WellInfoCQuery.java

@@ -0,0 +1,45 @@
+package com.bowintek.practice.mapper.cquery;
+
+import com.bowintek.practice.vo.SubjectVo;
+import com.bowintek.practice.vo.query.WellInfoParams;
+
+import java.util.HashMap;
+import java.util.List;
+
+public interface WellInfoCQuery {
+
+    /**
+     * 查询井信息列表
+     * @param params
+     * @return
+     */
+    List<HashMap<String,Object>> getWellInfoList(WellInfoParams params);
+
+    /**
+     * 获取井信息
+     * @param well_id
+     * @return
+     */
+    HashMap<String,Object> getWellInfo(String well_id);
+
+    /**
+     * 查询裸眼井综合解释列表
+     * @param well_id
+     * @return
+     */
+    List<HashMap<String,Object>> selectBoreholeInterList(String well_id);
+
+    /**
+     * 查询测试历史列表
+     * @param well_id
+     * @return
+     */
+    List<HashMap<String,Object>> selectTestHistoryList(String well_id);
+
+    /**
+     * 查询分析化验列表
+     * @param well_id
+     * @return
+     */
+    List<HashMap<String,Object>> selectAnalyticalAssaysList(String well_id);
+}

+ 396 - 0
src/main/java/com/bowintek/practice/model/WellBasicInformation.java

@@ -0,0 +1,396 @@
+package com.bowintek.practice.model;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class WellBasicInformation {
+    private String well_id;
+
+    private String well_common_name;
+
+    private String well_purpose;
+
+    private String well_type;
+
+    private Date spud_date;
+
+    private Date end_drilling_date;
+
+    private BigDecimal budgeted_md;
+
+    private String completion_formation;
+
+    private String completion_method;
+
+    private String org_name_a1;
+
+    private String org_name_a2;
+
+    private String well_legal_name;
+
+    private String geo_description;
+
+    private String structure_pos;
+
+    private Date create_date;
+
+    private Date completion_date;
+
+    private Date update_date;
+
+    private Date check_date;
+
+    private String phase;
+
+    private String wellbore_common_name;
+
+    private String target_formation;
+
+    private BigDecimal authorized_md;
+
+    private BigDecimal authorized_tvd;
+
+    private BigDecimal bh_md;
+
+    private BigDecimal bh_tvd;
+
+    private String geo_description_bh;
+
+    private BigDecimal ko_md;
+
+    private BigDecimal ko_tvd;
+
+    private String project_name;
+
+    private String project_type;
+
+    private String project_level;
+
+    private String remarks;
+
+    private String bz_basin;
+
+    private String bz_depression;
+
+    private String bz_depressed;
+
+    private String bz_structural_belt;
+
+    private String bz_qkdy;
+
+    private String bz_org_name;
+
+    private String bz_dwmc;
+
+    public String getWell_id() {
+        return well_id;
+    }
+
+    public void setWell_id(String well_id) {
+        this.well_id = well_id == null ? null : well_id.trim();
+    }
+
+    public String getWell_common_name() {
+        return well_common_name;
+    }
+
+    public void setWell_common_name(String well_common_name) {
+        this.well_common_name = well_common_name == null ? null : well_common_name.trim();
+    }
+
+    public String getWell_purpose() {
+        return well_purpose;
+    }
+
+    public void setWell_purpose(String well_purpose) {
+        this.well_purpose = well_purpose == null ? null : well_purpose.trim();
+    }
+
+    public String getWell_type() {
+        return well_type;
+    }
+
+    public void setWell_type(String well_type) {
+        this.well_type = well_type == null ? null : well_type.trim();
+    }
+
+    public Date getSpud_date() {
+        return spud_date;
+    }
+
+    public void setSpud_date(Date spud_date) {
+        this.spud_date = spud_date;
+    }
+
+    public Date getEnd_drilling_date() {
+        return end_drilling_date;
+    }
+
+    public void setEnd_drilling_date(Date end_drilling_date) {
+        this.end_drilling_date = end_drilling_date;
+    }
+
+    public BigDecimal getBudgeted_md() {
+        return budgeted_md;
+    }
+
+    public void setBudgeted_md(BigDecimal budgeted_md) {
+        this.budgeted_md = budgeted_md;
+    }
+
+    public String getCompletion_formation() {
+        return completion_formation;
+    }
+
+    public void setCompletion_formation(String completion_formation) {
+        this.completion_formation = completion_formation == null ? null : completion_formation.trim();
+    }
+
+    public String getCompletion_method() {
+        return completion_method;
+    }
+
+    public void setCompletion_method(String completion_method) {
+        this.completion_method = completion_method == null ? null : completion_method.trim();
+    }
+
+    public String getOrg_name_a1() {
+        return org_name_a1;
+    }
+
+    public void setOrg_name_a1(String org_name_a1) {
+        this.org_name_a1 = org_name_a1 == null ? null : org_name_a1.trim();
+    }
+
+    public String getOrg_name_a2() {
+        return org_name_a2;
+    }
+
+    public void setOrg_name_a2(String org_name_a2) {
+        this.org_name_a2 = org_name_a2 == null ? null : org_name_a2.trim();
+    }
+
+    public String getWell_legal_name() {
+        return well_legal_name;
+    }
+
+    public void setWell_legal_name(String well_legal_name) {
+        this.well_legal_name = well_legal_name == null ? null : well_legal_name.trim();
+    }
+
+    public String getGeo_description() {
+        return geo_description;
+    }
+
+    public void setGeo_description(String geo_description) {
+        this.geo_description = geo_description == null ? null : geo_description.trim();
+    }
+
+    public String getStructure_pos() {
+        return structure_pos;
+    }
+
+    public void setStructure_pos(String structure_pos) {
+        this.structure_pos = structure_pos == null ? null : structure_pos.trim();
+    }
+
+    public Date getCreate_date() {
+        return create_date;
+    }
+
+    public void setCreate_date(Date create_date) {
+        this.create_date = create_date;
+    }
+
+    public Date getCompletion_date() {
+        return completion_date;
+    }
+
+    public void setCompletion_date(Date completion_date) {
+        this.completion_date = completion_date;
+    }
+
+    public Date getUpdate_date() {
+        return update_date;
+    }
+
+    public void setUpdate_date(Date update_date) {
+        this.update_date = update_date;
+    }
+
+    public Date getCheck_date() {
+        return check_date;
+    }
+
+    public void setCheck_date(Date check_date) {
+        this.check_date = check_date;
+    }
+
+    public String getPhase() {
+        return phase;
+    }
+
+    public void setPhase(String phase) {
+        this.phase = phase == null ? null : phase.trim();
+    }
+
+    public String getWellbore_common_name() {
+        return wellbore_common_name;
+    }
+
+    public void setWellbore_common_name(String wellbore_common_name) {
+        this.wellbore_common_name = wellbore_common_name == null ? null : wellbore_common_name.trim();
+    }
+
+    public String getTarget_formation() {
+        return target_formation;
+    }
+
+    public void setTarget_formation(String target_formation) {
+        this.target_formation = target_formation == null ? null : target_formation.trim();
+    }
+
+    public BigDecimal getAuthorized_md() {
+        return authorized_md;
+    }
+
+    public void setAuthorized_md(BigDecimal authorized_md) {
+        this.authorized_md = authorized_md;
+    }
+
+    public BigDecimal getAuthorized_tvd() {
+        return authorized_tvd;
+    }
+
+    public void setAuthorized_tvd(BigDecimal authorized_tvd) {
+        this.authorized_tvd = authorized_tvd;
+    }
+
+    public BigDecimal getBh_md() {
+        return bh_md;
+    }
+
+    public void setBh_md(BigDecimal bh_md) {
+        this.bh_md = bh_md;
+    }
+
+    public BigDecimal getBh_tvd() {
+        return bh_tvd;
+    }
+
+    public void setBh_tvd(BigDecimal bh_tvd) {
+        this.bh_tvd = bh_tvd;
+    }
+
+    public String getGeo_description_bh() {
+        return geo_description_bh;
+    }
+
+    public void setGeo_description_bh(String geo_description_bh) {
+        this.geo_description_bh = geo_description_bh == null ? null : geo_description_bh.trim();
+    }
+
+    public BigDecimal getKo_md() {
+        return ko_md;
+    }
+
+    public void setKo_md(BigDecimal ko_md) {
+        this.ko_md = ko_md;
+    }
+
+    public BigDecimal getKo_tvd() {
+        return ko_tvd;
+    }
+
+    public void setKo_tvd(BigDecimal ko_tvd) {
+        this.ko_tvd = ko_tvd;
+    }
+
+    public String getProject_name() {
+        return project_name;
+    }
+
+    public void setProject_name(String project_name) {
+        this.project_name = project_name == null ? null : project_name.trim();
+    }
+
+    public String getProject_type() {
+        return project_type;
+    }
+
+    public void setProject_type(String project_type) {
+        this.project_type = project_type == null ? null : project_type.trim();
+    }
+
+    public String getProject_level() {
+        return project_level;
+    }
+
+    public void setProject_level(String project_level) {
+        this.project_level = project_level == null ? null : project_level.trim();
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks == null ? null : remarks.trim();
+    }
+
+    public String getBz_basin() {
+        return bz_basin;
+    }
+
+    public void setBz_basin(String bz_basin) {
+        this.bz_basin = bz_basin == null ? null : bz_basin.trim();
+    }
+
+    public String getBz_depression() {
+        return bz_depression;
+    }
+
+    public void setBz_depression(String bz_depression) {
+        this.bz_depression = bz_depression == null ? null : bz_depression.trim();
+    }
+
+    public String getBz_depressed() {
+        return bz_depressed;
+    }
+
+    public void setBz_depressed(String bz_depressed) {
+        this.bz_depressed = bz_depressed == null ? null : bz_depressed.trim();
+    }
+
+    public String getBz_structural_belt() {
+        return bz_structural_belt;
+    }
+
+    public void setBz_structural_belt(String bz_structural_belt) {
+        this.bz_structural_belt = bz_structural_belt == null ? null : bz_structural_belt.trim();
+    }
+
+    public String getBz_qkdy() {
+        return bz_qkdy;
+    }
+
+    public void setBz_qkdy(String bz_qkdy) {
+        this.bz_qkdy = bz_qkdy == null ? null : bz_qkdy.trim();
+    }
+
+    public String getBz_org_name() {
+        return bz_org_name;
+    }
+
+    public void setBz_org_name(String bz_org_name) {
+        this.bz_org_name = bz_org_name == null ? null : bz_org_name.trim();
+    }
+
+    public String getBz_dwmc() {
+        return bz_dwmc;
+    }
+
+    public void setBz_dwmc(String bz_dwmc) {
+        this.bz_dwmc = bz_dwmc == null ? null : bz_dwmc.trim();
+    }
+}

File diff ditekan karena terlalu besar
+ 2828 - 0
src/main/java/com/bowintek/practice/model/WellBasicInformationExample.java


+ 79 - 0
src/main/java/com/bowintek/practice/services/impl/WellInfoServiceImpl.java

@@ -0,0 +1,79 @@
+package com.bowintek.practice.services.impl;
+
+import com.bowintek.practice.mapper.SrSubjectMapper;
+import com.bowintek.practice.mapper.WellBasicInformationMapper;
+import com.bowintek.practice.mapper.cquery.WellInfoCQuery;
+import com.bowintek.practice.model.WellBasicInformation;
+import com.bowintek.practice.model.WellBasicInformationExample;
+import com.bowintek.practice.services.service.WellInfoService;
+import com.bowintek.practice.util.multipdb.DBTypeEnum;
+import com.bowintek.practice.util.multipdb.SwitchDataSource;
+import com.bowintek.practice.vo.SubjectVo;
+import com.bowintek.practice.vo.query.WellInfoParams;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+
+import static com.bowintek.practice.util.Constant.BOREHOLE_INTER_TYPE;
+import static com.bowintek.practice.util.Constant.FACT_CURRENT_STATE;
+
+@Component
+public class WellInfoServiceImpl implements WellInfoService {
+
+    @Autowired
+    private WellBasicInformationMapper wellBasicInformationMapper;
+    @Autowired
+    private WellInfoCQuery wellInfoCQuery;
+
+    @Override
+    @SwitchDataSource(DBTypeEnum.POSTGRE)
+    public PageInfo<HashMap<String, Object>> getList(Integer page, Integer rows, WellInfoParams params) {
+        PageHelper.startPage(page, rows);
+
+        List<HashMap<String,Object>> dataList = wellInfoCQuery.getWellInfoList(params);
+
+        PageInfo< HashMap<String, Object>> result = new PageInfo(dataList);
+
+        result.getList().forEach(it->{
+            if(FACT_CURRENT_STATE.keySet().contains(it.get("current_state"))){
+                it.put("current_state_name",FACT_CURRENT_STATE.get(it.get("current_state")));
+            }
+        });
+        return result;
+    }
+
+    @Override
+    @SwitchDataSource(DBTypeEnum.POSTGRE)
+    public HashMap<String,Object> getWellInfo(String well_id){
+        return wellInfoCQuery.getWellInfo(well_id);
+    }
+
+    @Override
+    @SwitchDataSource(DBTypeEnum.POSTGRE)
+    public List<HashMap<String,Object>> selectBoreholeInterList(String well_id){
+        List<HashMap<String,Object>> dataList = wellInfoCQuery.selectBoreholeInterList(well_id);
+
+        dataList.forEach(it->{
+            if(BOREHOLE_INTER_TYPE.keySet().contains(it.get("borehole_inter_type"))){
+                it.put("borehole_inter_type_name",BOREHOLE_INTER_TYPE.get(it.get("borehole_inter_type")));
+            }
+        });
+        return dataList;
+    }
+
+    @Override
+    @SwitchDataSource(DBTypeEnum.POSTGRE)
+    public List<HashMap<String,Object>> selectTestHistoryList(String well_id){
+        return wellInfoCQuery.selectTestHistoryList(well_id);
+    }
+
+    @Override
+    @SwitchDataSource(DBTypeEnum.POSTGRE)
+    public List<HashMap<String,Object>> selectAnalyticalAssaysList(String well_id){
+        return wellInfoCQuery.selectAnalyticalAssaysList(well_id);
+    }
+}

+ 17 - 0
src/main/java/com/bowintek/practice/services/service/WellInfoService.java

@@ -0,0 +1,17 @@
+package com.bowintek.practice.services.service;
+
+import com.bowintek.practice.model.WellBasicInformation;
+import com.bowintek.practice.vo.query.WellInfoParams;
+import com.github.pagehelper.PageInfo;
+
+import java.util.HashMap;
+import java.util.List;
+
+public interface WellInfoService {
+
+    HashMap<String,Object> getWellInfo(String well_id);
+    PageInfo< HashMap<String, Object>> getList(Integer page, Integer rows, WellInfoParams params);
+    List<HashMap<String,Object>> selectBoreholeInterList(String well_id);
+    List<HashMap<String,Object>> selectTestHistoryList(String well_id);
+    List<HashMap<String,Object>> selectAnalyticalAssaysList(String well_id);
+}

+ 29 - 0
src/main/java/com/bowintek/practice/util/Constant.java

@@ -1,6 +1,35 @@
 package com.bowintek.practice.util;
 
+import java.util.HashMap;
+
 public class Constant {
     public static final String YES = "是";
     public static final String No = "否";
+
+    /**
+     * 井生产状态
+     */
+    public static final HashMap<String,String>  FACT_CURRENT_STATE=new HashMap<>(){
+        {
+            this.put("00","停用不启用流程");
+            this.put("01","停用但启用流程");
+            this.put("02","启用但不启用流");
+            this.put("11","启用并启用流程");
+        }
+    };
+    /**
+     * 裸眼井解释成果类型
+     */
+    public static final HashMap<String,String>  BOREHOLE_INTER_TYPE=new HashMap<>(){
+        {
+            this.put("00","裸眼井基本解释成果");
+            this.put("01","岩石力学参数");
+            this.put("02","储层孔隙结构评价");
+            this.put("04","裂缝型地层测井解释成果");
+            this.put("05","烃源岩解释成果");
+            this.put("06","致密油气储层解释成果");
+            this.put("07","煤层气测井解释成果");
+            this.put("08","页岩气测井解释成果");
+        }
+    };
 }

+ 18 - 0
src/main/java/com/bowintek/practice/vo/query/WellInfoParams.java

@@ -0,0 +1,18 @@
+package com.bowintek.practice.vo.query;
+
+import lombok.Data;
+
+@Data
+public class WellInfoParams {
+    private String well_common_name;
+    private String well_id;
+    private String well_type;
+    private String spud_date_begin;
+    private String spud_date_end;
+    private String completion_date_begin;
+    private String completion_date_end;
+    private String oil_prod_begin_date_begin;
+    private String oil_prod_begin_date_end;
+    private String oil_prod_recent_date_begin;
+    private String oil_prod_recent_date_end;
+}

+ 0 - 1
src/main/resources/application.yml

@@ -105,7 +105,6 @@ mybatis:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 pagehelper:
-  helperDialect: mysql
   reasonable: true
   supportMethodsArguments: true
   params: count=countSql

+ 7 - 4
src/main/resources/generatorConfig.xml

@@ -4,7 +4,7 @@
 
 <generatorConfiguration>
     <!--mysql 连接数据库jar 这里选择自己本地位置-->
-    <classPathEntry location="./lib/mysql-connector-java-5.1.46.jar"/>
+    <classPathEntry location="./lib/postgresql-42.3.4.jar"/>
     <context id="testTables" targetRuntime="MyBatis3">
         <!-- 运行环境配置 -->
         <!--<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>-->
@@ -23,10 +23,13 @@
                         password="bowin123">
         </jdbcConnection>
         -->
-        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+  <!--      <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                         connectionURL="jdbc:mysql://office.bowintek.com:3306/smartSearchDB?useSSL=false" userId="root"
+                        password="bowin123">-->
+        <jdbcConnection driverClass="org.postgresql.Driver"
+                        connectionURL="jdbc:postgresql://office.bowintek.com:5432/postgres"
+                        userId="postgres"
                         password="bowin123">
-
         </jdbcConnection>
 
         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
@@ -120,6 +123,6 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_tag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="well_basic_information"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 751 - 0
src/main/resources/mapping/WellBasicInformationMapper.xml

@@ -0,0 +1,751 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.bowintek.practice.mapper.WellBasicInformationMapper">
+  <resultMap id="BaseResultMap" type="com.bowintek.practice.model.WellBasicInformation">
+    <id column="well_id" jdbcType="VARCHAR" property="well_id" />
+    <result column="well_common_name" jdbcType="VARCHAR" property="well_common_name" />
+    <result column="well_purpose" jdbcType="VARCHAR" property="well_purpose" />
+    <result column="well_type" jdbcType="VARCHAR" property="well_type" />
+    <result column="spud_date" jdbcType="DATE" property="spud_date" />
+    <result column="end_drilling_date" jdbcType="DATE" property="end_drilling_date" />
+    <result column="budgeted_md" jdbcType="NUMERIC" property="budgeted_md" />
+    <result column="completion_formation" jdbcType="VARCHAR" property="completion_formation" />
+    <result column="completion_method" jdbcType="VARCHAR" property="completion_method" />
+    <result column="org_name_a1" jdbcType="VARCHAR" property="org_name_a1" />
+    <result column="org_name_a2" jdbcType="VARCHAR" property="org_name_a2" />
+    <result column="well_legal_name" jdbcType="VARCHAR" property="well_legal_name" />
+    <result column="geo_description" jdbcType="VARCHAR" property="geo_description" />
+    <result column="structure_pos" jdbcType="VARCHAR" property="structure_pos" />
+    <result column="create_date" jdbcType="DATE" property="create_date" />
+    <result column="completion_date" jdbcType="DATE" property="completion_date" />
+    <result column="update_date" jdbcType="DATE" property="update_date" />
+    <result column="check_date" jdbcType="DATE" property="check_date" />
+    <result column="phase" jdbcType="VARCHAR" property="phase" />
+    <result column="wellbore_common_name" jdbcType="VARCHAR" property="wellbore_common_name" />
+    <result column="target_formation" jdbcType="VARCHAR" property="target_formation" />
+    <result column="authorized_md" jdbcType="NUMERIC" property="authorized_md" />
+    <result column="authorized_tvd" jdbcType="NUMERIC" property="authorized_tvd" />
+    <result column="bh_md" jdbcType="NUMERIC" property="bh_md" />
+    <result column="bh_tvd" jdbcType="NUMERIC" property="bh_tvd" />
+    <result column="geo_description_bh" jdbcType="VARCHAR" property="geo_description_bh" />
+    <result column="ko_md" jdbcType="NUMERIC" property="ko_md" />
+    <result column="ko_tvd" jdbcType="NUMERIC" property="ko_tvd" />
+    <result column="project_name" jdbcType="VARCHAR" property="project_name" />
+    <result column="project_type" jdbcType="VARCHAR" property="project_type" />
+    <result column="project_level" jdbcType="VARCHAR" property="project_level" />
+    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
+    <result column="bz_basin" jdbcType="VARCHAR" property="bz_basin" />
+    <result column="bz_depression" jdbcType="VARCHAR" property="bz_depression" />
+    <result column="bz_depressed" jdbcType="VARCHAR" property="bz_depressed" />
+    <result column="bz_structural_belt" jdbcType="VARCHAR" property="bz_structural_belt" />
+    <result column="bz_qkdy" jdbcType="VARCHAR" property="bz_qkdy" />
+    <result column="bz_org_name" jdbcType="VARCHAR" property="bz_org_name" />
+    <result column="bz_dwmc" jdbcType="VARCHAR" property="bz_dwmc" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    well_id, well_common_name, well_purpose, well_type, spud_date, end_drilling_date, 
+    budgeted_md, completion_formation, completion_method, org_name_a1, org_name_a2, well_legal_name, 
+    geo_description, structure_pos, create_date, completion_date, update_date, check_date, 
+    phase, wellbore_common_name, target_formation, authorized_md, authorized_tvd, bh_md, 
+    bh_tvd, geo_description_bh, ko_md, ko_tvd, project_name, project_type, project_level, 
+    remarks, bz_basin, bz_depression, bz_depressed, bz_structural_belt, bz_qkdy, bz_org_name, 
+    bz_dwmc
+  </sql>
+  <select id="selectByExample" parameterType="com.bowintek.practice.model.WellBasicInformationExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from well_basic_information
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from well_basic_information
+    where well_id = #{well_id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from well_basic_information
+    where well_id = #{well_id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.bowintek.practice.model.WellBasicInformationExample">
+    delete from well_basic_information
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.bowintek.practice.model.WellBasicInformation">
+    insert into well_basic_information (well_id, well_common_name, well_purpose, 
+      well_type, spud_date, end_drilling_date, 
+      budgeted_md, completion_formation, completion_method, 
+      org_name_a1, org_name_a2, well_legal_name, 
+      geo_description, structure_pos, create_date, 
+      completion_date, update_date, check_date, 
+      phase, wellbore_common_name, target_formation, 
+      authorized_md, authorized_tvd, bh_md, 
+      bh_tvd, geo_description_bh, ko_md, 
+      ko_tvd, project_name, project_type, 
+      project_level, remarks, bz_basin, 
+      bz_depression, bz_depressed, bz_structural_belt, 
+      bz_qkdy, bz_org_name, bz_dwmc
+      )
+    values (#{well_id,jdbcType=VARCHAR}, #{well_common_name,jdbcType=VARCHAR}, #{well_purpose,jdbcType=VARCHAR}, 
+      #{well_type,jdbcType=VARCHAR}, #{spud_date,jdbcType=DATE}, #{end_drilling_date,jdbcType=DATE}, 
+      #{budgeted_md,jdbcType=NUMERIC}, #{completion_formation,jdbcType=VARCHAR}, #{completion_method,jdbcType=VARCHAR}, 
+      #{org_name_a1,jdbcType=VARCHAR}, #{org_name_a2,jdbcType=VARCHAR}, #{well_legal_name,jdbcType=VARCHAR}, 
+      #{geo_description,jdbcType=VARCHAR}, #{structure_pos,jdbcType=VARCHAR}, #{create_date,jdbcType=DATE}, 
+      #{completion_date,jdbcType=DATE}, #{update_date,jdbcType=DATE}, #{check_date,jdbcType=DATE}, 
+      #{phase,jdbcType=VARCHAR}, #{wellbore_common_name,jdbcType=VARCHAR}, #{target_formation,jdbcType=VARCHAR}, 
+      #{authorized_md,jdbcType=NUMERIC}, #{authorized_tvd,jdbcType=NUMERIC}, #{bh_md,jdbcType=NUMERIC}, 
+      #{bh_tvd,jdbcType=NUMERIC}, #{geo_description_bh,jdbcType=VARCHAR}, #{ko_md,jdbcType=NUMERIC}, 
+      #{ko_tvd,jdbcType=NUMERIC}, #{project_name,jdbcType=VARCHAR}, #{project_type,jdbcType=VARCHAR}, 
+      #{project_level,jdbcType=VARCHAR}, #{remarks,jdbcType=VARCHAR}, #{bz_basin,jdbcType=VARCHAR}, 
+      #{bz_depression,jdbcType=VARCHAR}, #{bz_depressed,jdbcType=VARCHAR}, #{bz_structural_belt,jdbcType=VARCHAR}, 
+      #{bz_qkdy,jdbcType=VARCHAR}, #{bz_org_name,jdbcType=VARCHAR}, #{bz_dwmc,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.bowintek.practice.model.WellBasicInformation">
+    insert into well_basic_information
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="well_id != null">
+        well_id,
+      </if>
+      <if test="well_common_name != null">
+        well_common_name,
+      </if>
+      <if test="well_purpose != null">
+        well_purpose,
+      </if>
+      <if test="well_type != null">
+        well_type,
+      </if>
+      <if test="spud_date != null">
+        spud_date,
+      </if>
+      <if test="end_drilling_date != null">
+        end_drilling_date,
+      </if>
+      <if test="budgeted_md != null">
+        budgeted_md,
+      </if>
+      <if test="completion_formation != null">
+        completion_formation,
+      </if>
+      <if test="completion_method != null">
+        completion_method,
+      </if>
+      <if test="org_name_a1 != null">
+        org_name_a1,
+      </if>
+      <if test="org_name_a2 != null">
+        org_name_a2,
+      </if>
+      <if test="well_legal_name != null">
+        well_legal_name,
+      </if>
+      <if test="geo_description != null">
+        geo_description,
+      </if>
+      <if test="structure_pos != null">
+        structure_pos,
+      </if>
+      <if test="create_date != null">
+        create_date,
+      </if>
+      <if test="completion_date != null">
+        completion_date,
+      </if>
+      <if test="update_date != null">
+        update_date,
+      </if>
+      <if test="check_date != null">
+        check_date,
+      </if>
+      <if test="phase != null">
+        phase,
+      </if>
+      <if test="wellbore_common_name != null">
+        wellbore_common_name,
+      </if>
+      <if test="target_formation != null">
+        target_formation,
+      </if>
+      <if test="authorized_md != null">
+        authorized_md,
+      </if>
+      <if test="authorized_tvd != null">
+        authorized_tvd,
+      </if>
+      <if test="bh_md != null">
+        bh_md,
+      </if>
+      <if test="bh_tvd != null">
+        bh_tvd,
+      </if>
+      <if test="geo_description_bh != null">
+        geo_description_bh,
+      </if>
+      <if test="ko_md != null">
+        ko_md,
+      </if>
+      <if test="ko_tvd != null">
+        ko_tvd,
+      </if>
+      <if test="project_name != null">
+        project_name,
+      </if>
+      <if test="project_type != null">
+        project_type,
+      </if>
+      <if test="project_level != null">
+        project_level,
+      </if>
+      <if test="remarks != null">
+        remarks,
+      </if>
+      <if test="bz_basin != null">
+        bz_basin,
+      </if>
+      <if test="bz_depression != null">
+        bz_depression,
+      </if>
+      <if test="bz_depressed != null">
+        bz_depressed,
+      </if>
+      <if test="bz_structural_belt != null">
+        bz_structural_belt,
+      </if>
+      <if test="bz_qkdy != null">
+        bz_qkdy,
+      </if>
+      <if test="bz_org_name != null">
+        bz_org_name,
+      </if>
+      <if test="bz_dwmc != null">
+        bz_dwmc,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="well_id != null">
+        #{well_id,jdbcType=VARCHAR},
+      </if>
+      <if test="well_common_name != null">
+        #{well_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="well_purpose != null">
+        #{well_purpose,jdbcType=VARCHAR},
+      </if>
+      <if test="well_type != null">
+        #{well_type,jdbcType=VARCHAR},
+      </if>
+      <if test="spud_date != null">
+        #{spud_date,jdbcType=DATE},
+      </if>
+      <if test="end_drilling_date != null">
+        #{end_drilling_date,jdbcType=DATE},
+      </if>
+      <if test="budgeted_md != null">
+        #{budgeted_md,jdbcType=NUMERIC},
+      </if>
+      <if test="completion_formation != null">
+        #{completion_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="completion_method != null">
+        #{completion_method,jdbcType=VARCHAR},
+      </if>
+      <if test="org_name_a1 != null">
+        #{org_name_a1,jdbcType=VARCHAR},
+      </if>
+      <if test="org_name_a2 != null">
+        #{org_name_a2,jdbcType=VARCHAR},
+      </if>
+      <if test="well_legal_name != null">
+        #{well_legal_name,jdbcType=VARCHAR},
+      </if>
+      <if test="geo_description != null">
+        #{geo_description,jdbcType=VARCHAR},
+      </if>
+      <if test="structure_pos != null">
+        #{structure_pos,jdbcType=VARCHAR},
+      </if>
+      <if test="create_date != null">
+        #{create_date,jdbcType=DATE},
+      </if>
+      <if test="completion_date != null">
+        #{completion_date,jdbcType=DATE},
+      </if>
+      <if test="update_date != null">
+        #{update_date,jdbcType=DATE},
+      </if>
+      <if test="check_date != null">
+        #{check_date,jdbcType=DATE},
+      </if>
+      <if test="phase != null">
+        #{phase,jdbcType=VARCHAR},
+      </if>
+      <if test="wellbore_common_name != null">
+        #{wellbore_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="target_formation != null">
+        #{target_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="authorized_md != null">
+        #{authorized_md,jdbcType=NUMERIC},
+      </if>
+      <if test="authorized_tvd != null">
+        #{authorized_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="bh_md != null">
+        #{bh_md,jdbcType=NUMERIC},
+      </if>
+      <if test="bh_tvd != null">
+        #{bh_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="geo_description_bh != null">
+        #{geo_description_bh,jdbcType=VARCHAR},
+      </if>
+      <if test="ko_md != null">
+        #{ko_md,jdbcType=NUMERIC},
+      </if>
+      <if test="ko_tvd != null">
+        #{ko_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="project_name != null">
+        #{project_name,jdbcType=VARCHAR},
+      </if>
+      <if test="project_type != null">
+        #{project_type,jdbcType=VARCHAR},
+      </if>
+      <if test="project_level != null">
+        #{project_level,jdbcType=VARCHAR},
+      </if>
+      <if test="remarks != null">
+        #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_basin != null">
+        #{bz_basin,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_depression != null">
+        #{bz_depression,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_depressed != null">
+        #{bz_depressed,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_structural_belt != null">
+        #{bz_structural_belt,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_qkdy != null">
+        #{bz_qkdy,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_org_name != null">
+        #{bz_org_name,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_dwmc != null">
+        #{bz_dwmc,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.bowintek.practice.model.WellBasicInformationExample" resultType="java.lang.Long">
+    select count(*) from well_basic_information
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update well_basic_information
+    <set>
+      <if test="row.well_id != null">
+        well_id = #{row.well_id,jdbcType=VARCHAR},
+      </if>
+      <if test="row.well_common_name != null">
+        well_common_name = #{row.well_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="row.well_purpose != null">
+        well_purpose = #{row.well_purpose,jdbcType=VARCHAR},
+      </if>
+      <if test="row.well_type != null">
+        well_type = #{row.well_type,jdbcType=VARCHAR},
+      </if>
+      <if test="row.spud_date != null">
+        spud_date = #{row.spud_date,jdbcType=DATE},
+      </if>
+      <if test="row.end_drilling_date != null">
+        end_drilling_date = #{row.end_drilling_date,jdbcType=DATE},
+      </if>
+      <if test="row.budgeted_md != null">
+        budgeted_md = #{row.budgeted_md,jdbcType=NUMERIC},
+      </if>
+      <if test="row.completion_formation != null">
+        completion_formation = #{row.completion_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="row.completion_method != null">
+        completion_method = #{row.completion_method,jdbcType=VARCHAR},
+      </if>
+      <if test="row.org_name_a1 != null">
+        org_name_a1 = #{row.org_name_a1,jdbcType=VARCHAR},
+      </if>
+      <if test="row.org_name_a2 != null">
+        org_name_a2 = #{row.org_name_a2,jdbcType=VARCHAR},
+      </if>
+      <if test="row.well_legal_name != null">
+        well_legal_name = #{row.well_legal_name,jdbcType=VARCHAR},
+      </if>
+      <if test="row.geo_description != null">
+        geo_description = #{row.geo_description,jdbcType=VARCHAR},
+      </if>
+      <if test="row.structure_pos != null">
+        structure_pos = #{row.structure_pos,jdbcType=VARCHAR},
+      </if>
+      <if test="row.create_date != null">
+        create_date = #{row.create_date,jdbcType=DATE},
+      </if>
+      <if test="row.completion_date != null">
+        completion_date = #{row.completion_date,jdbcType=DATE},
+      </if>
+      <if test="row.update_date != null">
+        update_date = #{row.update_date,jdbcType=DATE},
+      </if>
+      <if test="row.check_date != null">
+        check_date = #{row.check_date,jdbcType=DATE},
+      </if>
+      <if test="row.phase != null">
+        phase = #{row.phase,jdbcType=VARCHAR},
+      </if>
+      <if test="row.wellbore_common_name != null">
+        wellbore_common_name = #{row.wellbore_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="row.target_formation != null">
+        target_formation = #{row.target_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="row.authorized_md != null">
+        authorized_md = #{row.authorized_md,jdbcType=NUMERIC},
+      </if>
+      <if test="row.authorized_tvd != null">
+        authorized_tvd = #{row.authorized_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="row.bh_md != null">
+        bh_md = #{row.bh_md,jdbcType=NUMERIC},
+      </if>
+      <if test="row.bh_tvd != null">
+        bh_tvd = #{row.bh_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="row.geo_description_bh != null">
+        geo_description_bh = #{row.geo_description_bh,jdbcType=VARCHAR},
+      </if>
+      <if test="row.ko_md != null">
+        ko_md = #{row.ko_md,jdbcType=NUMERIC},
+      </if>
+      <if test="row.ko_tvd != null">
+        ko_tvd = #{row.ko_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="row.project_name != null">
+        project_name = #{row.project_name,jdbcType=VARCHAR},
+      </if>
+      <if test="row.project_type != null">
+        project_type = #{row.project_type,jdbcType=VARCHAR},
+      </if>
+      <if test="row.project_level != null">
+        project_level = #{row.project_level,jdbcType=VARCHAR},
+      </if>
+      <if test="row.remarks != null">
+        remarks = #{row.remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_basin != null">
+        bz_basin = #{row.bz_basin,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_depression != null">
+        bz_depression = #{row.bz_depression,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_depressed != null">
+        bz_depressed = #{row.bz_depressed,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_structural_belt != null">
+        bz_structural_belt = #{row.bz_structural_belt,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_qkdy != null">
+        bz_qkdy = #{row.bz_qkdy,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_org_name != null">
+        bz_org_name = #{row.bz_org_name,jdbcType=VARCHAR},
+      </if>
+      <if test="row.bz_dwmc != null">
+        bz_dwmc = #{row.bz_dwmc,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update well_basic_information
+    set well_id = #{row.well_id,jdbcType=VARCHAR},
+      well_common_name = #{row.well_common_name,jdbcType=VARCHAR},
+      well_purpose = #{row.well_purpose,jdbcType=VARCHAR},
+      well_type = #{row.well_type,jdbcType=VARCHAR},
+      spud_date = #{row.spud_date,jdbcType=DATE},
+      end_drilling_date = #{row.end_drilling_date,jdbcType=DATE},
+      budgeted_md = #{row.budgeted_md,jdbcType=NUMERIC},
+      completion_formation = #{row.completion_formation,jdbcType=VARCHAR},
+      completion_method = #{row.completion_method,jdbcType=VARCHAR},
+      org_name_a1 = #{row.org_name_a1,jdbcType=VARCHAR},
+      org_name_a2 = #{row.org_name_a2,jdbcType=VARCHAR},
+      well_legal_name = #{row.well_legal_name,jdbcType=VARCHAR},
+      geo_description = #{row.geo_description,jdbcType=VARCHAR},
+      structure_pos = #{row.structure_pos,jdbcType=VARCHAR},
+      create_date = #{row.create_date,jdbcType=DATE},
+      completion_date = #{row.completion_date,jdbcType=DATE},
+      update_date = #{row.update_date,jdbcType=DATE},
+      check_date = #{row.check_date,jdbcType=DATE},
+      phase = #{row.phase,jdbcType=VARCHAR},
+      wellbore_common_name = #{row.wellbore_common_name,jdbcType=VARCHAR},
+      target_formation = #{row.target_formation,jdbcType=VARCHAR},
+      authorized_md = #{row.authorized_md,jdbcType=NUMERIC},
+      authorized_tvd = #{row.authorized_tvd,jdbcType=NUMERIC},
+      bh_md = #{row.bh_md,jdbcType=NUMERIC},
+      bh_tvd = #{row.bh_tvd,jdbcType=NUMERIC},
+      geo_description_bh = #{row.geo_description_bh,jdbcType=VARCHAR},
+      ko_md = #{row.ko_md,jdbcType=NUMERIC},
+      ko_tvd = #{row.ko_tvd,jdbcType=NUMERIC},
+      project_name = #{row.project_name,jdbcType=VARCHAR},
+      project_type = #{row.project_type,jdbcType=VARCHAR},
+      project_level = #{row.project_level,jdbcType=VARCHAR},
+      remarks = #{row.remarks,jdbcType=VARCHAR},
+      bz_basin = #{row.bz_basin,jdbcType=VARCHAR},
+      bz_depression = #{row.bz_depression,jdbcType=VARCHAR},
+      bz_depressed = #{row.bz_depressed,jdbcType=VARCHAR},
+      bz_structural_belt = #{row.bz_structural_belt,jdbcType=VARCHAR},
+      bz_qkdy = #{row.bz_qkdy,jdbcType=VARCHAR},
+      bz_org_name = #{row.bz_org_name,jdbcType=VARCHAR},
+      bz_dwmc = #{row.bz_dwmc,jdbcType=VARCHAR}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.bowintek.practice.model.WellBasicInformation">
+    update well_basic_information
+    <set>
+      <if test="well_common_name != null">
+        well_common_name = #{well_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="well_purpose != null">
+        well_purpose = #{well_purpose,jdbcType=VARCHAR},
+      </if>
+      <if test="well_type != null">
+        well_type = #{well_type,jdbcType=VARCHAR},
+      </if>
+      <if test="spud_date != null">
+        spud_date = #{spud_date,jdbcType=DATE},
+      </if>
+      <if test="end_drilling_date != null">
+        end_drilling_date = #{end_drilling_date,jdbcType=DATE},
+      </if>
+      <if test="budgeted_md != null">
+        budgeted_md = #{budgeted_md,jdbcType=NUMERIC},
+      </if>
+      <if test="completion_formation != null">
+        completion_formation = #{completion_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="completion_method != null">
+        completion_method = #{completion_method,jdbcType=VARCHAR},
+      </if>
+      <if test="org_name_a1 != null">
+        org_name_a1 = #{org_name_a1,jdbcType=VARCHAR},
+      </if>
+      <if test="org_name_a2 != null">
+        org_name_a2 = #{org_name_a2,jdbcType=VARCHAR},
+      </if>
+      <if test="well_legal_name != null">
+        well_legal_name = #{well_legal_name,jdbcType=VARCHAR},
+      </if>
+      <if test="geo_description != null">
+        geo_description = #{geo_description,jdbcType=VARCHAR},
+      </if>
+      <if test="structure_pos != null">
+        structure_pos = #{structure_pos,jdbcType=VARCHAR},
+      </if>
+      <if test="create_date != null">
+        create_date = #{create_date,jdbcType=DATE},
+      </if>
+      <if test="completion_date != null">
+        completion_date = #{completion_date,jdbcType=DATE},
+      </if>
+      <if test="update_date != null">
+        update_date = #{update_date,jdbcType=DATE},
+      </if>
+      <if test="check_date != null">
+        check_date = #{check_date,jdbcType=DATE},
+      </if>
+      <if test="phase != null">
+        phase = #{phase,jdbcType=VARCHAR},
+      </if>
+      <if test="wellbore_common_name != null">
+        wellbore_common_name = #{wellbore_common_name,jdbcType=VARCHAR},
+      </if>
+      <if test="target_formation != null">
+        target_formation = #{target_formation,jdbcType=VARCHAR},
+      </if>
+      <if test="authorized_md != null">
+        authorized_md = #{authorized_md,jdbcType=NUMERIC},
+      </if>
+      <if test="authorized_tvd != null">
+        authorized_tvd = #{authorized_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="bh_md != null">
+        bh_md = #{bh_md,jdbcType=NUMERIC},
+      </if>
+      <if test="bh_tvd != null">
+        bh_tvd = #{bh_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="geo_description_bh != null">
+        geo_description_bh = #{geo_description_bh,jdbcType=VARCHAR},
+      </if>
+      <if test="ko_md != null">
+        ko_md = #{ko_md,jdbcType=NUMERIC},
+      </if>
+      <if test="ko_tvd != null">
+        ko_tvd = #{ko_tvd,jdbcType=NUMERIC},
+      </if>
+      <if test="project_name != null">
+        project_name = #{project_name,jdbcType=VARCHAR},
+      </if>
+      <if test="project_type != null">
+        project_type = #{project_type,jdbcType=VARCHAR},
+      </if>
+      <if test="project_level != null">
+        project_level = #{project_level,jdbcType=VARCHAR},
+      </if>
+      <if test="remarks != null">
+        remarks = #{remarks,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_basin != null">
+        bz_basin = #{bz_basin,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_depression != null">
+        bz_depression = #{bz_depression,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_depressed != null">
+        bz_depressed = #{bz_depressed,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_structural_belt != null">
+        bz_structural_belt = #{bz_structural_belt,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_qkdy != null">
+        bz_qkdy = #{bz_qkdy,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_org_name != null">
+        bz_org_name = #{bz_org_name,jdbcType=VARCHAR},
+      </if>
+      <if test="bz_dwmc != null">
+        bz_dwmc = #{bz_dwmc,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where well_id = #{well_id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.bowintek.practice.model.WellBasicInformation">
+    update well_basic_information
+    set well_common_name = #{well_common_name,jdbcType=VARCHAR},
+      well_purpose = #{well_purpose,jdbcType=VARCHAR},
+      well_type = #{well_type,jdbcType=VARCHAR},
+      spud_date = #{spud_date,jdbcType=DATE},
+      end_drilling_date = #{end_drilling_date,jdbcType=DATE},
+      budgeted_md = #{budgeted_md,jdbcType=NUMERIC},
+      completion_formation = #{completion_formation,jdbcType=VARCHAR},
+      completion_method = #{completion_method,jdbcType=VARCHAR},
+      org_name_a1 = #{org_name_a1,jdbcType=VARCHAR},
+      org_name_a2 = #{org_name_a2,jdbcType=VARCHAR},
+      well_legal_name = #{well_legal_name,jdbcType=VARCHAR},
+      geo_description = #{geo_description,jdbcType=VARCHAR},
+      structure_pos = #{structure_pos,jdbcType=VARCHAR},
+      create_date = #{create_date,jdbcType=DATE},
+      completion_date = #{completion_date,jdbcType=DATE},
+      update_date = #{update_date,jdbcType=DATE},
+      check_date = #{check_date,jdbcType=DATE},
+      phase = #{phase,jdbcType=VARCHAR},
+      wellbore_common_name = #{wellbore_common_name,jdbcType=VARCHAR},
+      target_formation = #{target_formation,jdbcType=VARCHAR},
+      authorized_md = #{authorized_md,jdbcType=NUMERIC},
+      authorized_tvd = #{authorized_tvd,jdbcType=NUMERIC},
+      bh_md = #{bh_md,jdbcType=NUMERIC},
+      bh_tvd = #{bh_tvd,jdbcType=NUMERIC},
+      geo_description_bh = #{geo_description_bh,jdbcType=VARCHAR},
+      ko_md = #{ko_md,jdbcType=NUMERIC},
+      ko_tvd = #{ko_tvd,jdbcType=NUMERIC},
+      project_name = #{project_name,jdbcType=VARCHAR},
+      project_type = #{project_type,jdbcType=VARCHAR},
+      project_level = #{project_level,jdbcType=VARCHAR},
+      remarks = #{remarks,jdbcType=VARCHAR},
+      bz_basin = #{bz_basin,jdbcType=VARCHAR},
+      bz_depression = #{bz_depression,jdbcType=VARCHAR},
+      bz_depressed = #{bz_depressed,jdbcType=VARCHAR},
+      bz_structural_belt = #{bz_structural_belt,jdbcType=VARCHAR},
+      bz_qkdy = #{bz_qkdy,jdbcType=VARCHAR},
+      bz_org_name = #{bz_org_name,jdbcType=VARCHAR},
+      bz_dwmc = #{bz_dwmc,jdbcType=VARCHAR}
+    where well_id = #{well_id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 80 - 0
src/main/resources/mapping/cquery/WellInfoCQuery.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.bowintek.practice.mapper.cquery.WellInfoCQuery">
+
+    <select id="getWellInfo" resultType="java.util.HashMap">
+        select *
+        from well_basic_information well
+        where well.well_id = #{well_id}
+    </select>
+    <select id="getWellInfoList" parameterType="com.bowintek.practice.vo.query.WellInfoParams"
+            resultType="java.util.HashMap">
+        select
+        well.*,fact_daily.oil_prod_begin_date,fact_daily.oil_prod_recent_date,fact_daily.current_state,fact_daily.water_cut,
+        fact_mon.oil_prod_mon,fact_mon.gas_prod_mon,fact_mon.gas_prod_year,fact_mon.oil_prod_year
+        from well_basic_information well
+        left join (
+        select daily.* from FACT_DWR_PC_PRO_WELL_VOL_DAILY daily
+        inner join(
+        select well_id, max(prod_time) prod_time from FACT_DWR_PC_PRO_WELL_VOL_DAILY group by well_id
+        ) maxdaily on daily.well_id=maxdaily.well_id and daily.prod_time=maxdaily.prod_time
+        )fact_daily on well.well_id= fact_daily.well_id
+        left join (
+        select mon.* from fact_dwr_pc_pro_well_vol_monthly mon
+        inner join(
+        select well_id, max(prod_time) prod_time from fact_dwr_pc_pro_well_vol_monthly group by well_id
+        ) maxmon on mon.well_id=maxmon.well_id and mon.prod_time=maxmon.prod_time
+        )fact_mon on well.well_id= fact_mon.well_id
+        where 1=1
+        <if test="well_common_name!='' and well_common_name!=null">
+            and well.well_common_name like Concat('%',#{well_common_name},'%')
+        </if>
+        <if test="well_id!='' and well_id!=null">
+            and well.well_id like Concat('%',#{well_id},'%')
+        </if>
+        <if test="well_type!='' and well_type!=null">
+            and well.well_type like Concat('%',#{well_type},'%')
+        </if>
+        <if test="spud_date_begin!='' and spud_date_begin!=null">
+            and well.spud_date <![CDATA[ >= ]]> CAST(#{spud_date_begin} AS DATE)
+        </if>
+        <if test="spud_date_end!='' and spud_date_end!=null">
+            and well.spud_date  <![CDATA[ < ]]> (CAST(#{spud_date_end} AS DATE) + INTERVAL '1 day')
+        </if>
+        <if test="completion_date_begin!='' and completion_date_begin!=null">
+            and well.completion_date <![CDATA[ >= ]]> CAST(#{completion_date_begin} AS DATE)
+        </if>
+        <if test="completion_date_end!='' and completion_date_end!=null">
+            and well.completion_date  <![CDATA[ < ]]> (CAST(#{completion_date_end} AS DATE) + INTERVAL '1 day')
+        </if>
+        <if test="oil_prod_begin_date_begin!='' and oil_prod_begin_date_begin!=null">
+            and fact_daily.oil_prod_begin_date <![CDATA[ >= ]]> CAST(#{oil_prod_begin_date_begin} AS DATE)
+        </if>
+        <if test="oil_prod_begin_date_end!='' and oil_prod_begin_date_end!=null">
+            and fact_daily.oil_prod_begin_date  <![CDATA[ < ]]> (CAST(#{oil_prod_begin_date_end} AS DATE) + INTERVAL '1
+            day')
+        </if>
+        <if test="oil_prod_recent_date_begin!='' and oil_prod_recent_date_begin!=null">
+            and fact_daily.oil_prod_recent_date <![CDATA[ >= ]]> CAST(#{oil_prod_recent_date_begin} AS DATE)
+        </if>
+        <if test="oil_prod_recent_date_end!='' and oil_prod_recent_date_end!=null">
+            and fact_daily.oil_prod_recent_date  <![CDATA[ < ]]> (CAST(#{oil_prod_recent_date_end} AS DATE) + INTERVAL
+            '1 day')
+        </if>
+    </select>
+    <select id="selectBoreholeInterList" resultType="java.util.HashMap">
+        select *
+        from fact_dwr_wl_ach_borehole_inter bi
+        where bi.well_id = #{well_id}
+    </select>
+    <select id="selectTestHistoryList" resultType="java.util.HashMap">
+        select *
+        from dws_dm_test_history th
+        where th.well_id = #{well_id}
+    </select>
+    <select id="selectAnalyticalAssaysList" resultType="java.util.HashMap">
+        select *
+        from dws_dm_analytical_assays aa
+        where aa.well_id = #{well_id}
+    </select>
+</mapper>

+ 0 - 1
target/classes/application.yml

@@ -105,7 +105,6 @@ mybatis:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 pagehelper:
-  helperDialect: mysql
   reasonable: true
   supportMethodsArguments: true
   params: count=countSql

+ 7 - 4
target/classes/generatorConfig.xml

@@ -4,7 +4,7 @@
 
 <generatorConfiguration>
     <!--mysql 连接数据库jar 这里选择自己本地位置-->
-    <classPathEntry location="./lib/mysql-connector-java-5.1.46.jar"/>
+    <classPathEntry location="./lib/postgresql-42.3.4.jar"/>
     <context id="testTables" targetRuntime="MyBatis3">
         <!-- 运行环境配置 -->
         <!--<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>-->
@@ -23,10 +23,13 @@
                         password="bowin123">
         </jdbcConnection>
         -->
-        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+  <!--      <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                         connectionURL="jdbc:mysql://office.bowintek.com:3306/smartSearchDB?useSSL=false" userId="root"
+                        password="bowin123">-->
+        <jdbcConnection driverClass="org.postgresql.Driver"
+                        connectionURL="jdbc:postgresql://office.bowintek.com:5432/postgres"
+                        userId="postgres"
                         password="bowin123">
-
         </jdbcConnection>
 
         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
@@ -120,6 +123,6 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_tag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="well_basic_information"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 2 - 0
vue/src/router/asyncModules/sale.ts

@@ -7,4 +7,6 @@ export default {
   'views/subjectlist': () => import( '@/views/subject/index.vue'),
   'views/subjectedit': () => import( '@/views/subject/edit.vue'),
   'views/subjectdetail': () => import( '@/views/subject/detail.vue'),
+  'views/wellinfo': () => import( '@/views/wellinfo/index.vue'),
+  'views/wellinfoDetail': () => import( '@/views/wellinfo/detail.vue'),
 }

+ 1 - 0
vue/src/views/query/table.vue

@@ -109,6 +109,7 @@
     <div class="search-result-list" v-else="viewModel=='list'">
       <a-table :columns="columns" :data-source="data" :scroll="{ x:'100%', y: 500 }"
                :loading="loading"
+               :pagination="false"
                :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
                :row-key="record=>record.tempId"
                bordered>

+ 58 - 0
vue/src/views/wellinfo/columns.ts

@@ -0,0 +1,58 @@
+export const boreholeInterColumns=[
+  {title: '井id', dataIndex: 'well_id', key: 'well_id', width: 120},
+  {title: '井筒id', dataIndex: 'wellbore_id', key: 'wellbore_id', width: 120},
+  {title: '层位id', dataIndex: 'zone_id', key: 'zone_id', width: 120},
+  {title: '层号(序号)', dataIndex: 'zone_no', key: 'zone_no', width: 120},
+  {title: '裸眼井解释成果类型', dataIndex: 'borehole_inter_type_name', key: 'borehole_inter_type_name', width: 120},
+  {title: '起始深度', dataIndex: 'start_depth', key: 'start_depth', width: 120},
+  {title: '终止深度', dataIndex: 'end_depth', key: 'end_depth', width: 120},
+  {title: '厚度', dataIndex: 'thickness', key: 'thickness', width: 120},
+  {title: '岩性类型', dataIndex: 'lithology_class', key: 'lithology_class', width: 120},
+  {title: '自然电位', dataIndex: 'spontaneous_potential', key: 'spontaneous_potential', width: 120},
+  {title: '自然伽马', dataIndex: 'sp_gamma_radiant_intensity', key: 'sp_gamma_radiant_intensity', width: 120},
+  {title: '井径', dataIndex: 'well_diameter', key: 'well_diameter', width: 120},
+  {title: '体积密度', dataIndex: 'formation_volume_density', key: 'formation_volume_density', width: 120},
+  {title: '声波时差', dataIndex: 'sonic_differential_time', key: 'sonic_differential_time', width: 120},
+  {title: '中子', dataIndex: 'compensated_neutron', key: 'compensated_neutron', width: 120},
+  {title: '浅电阻率', dataIndex: 'laterolog_shallow', key: 'laterolog_shallow', width: 120},
+  {title: '深电阻率', dataIndex: 'laterolog_deep', key: 'laterolog_deep', width: 120},
+  {title: '冲洗带电阻率', dataIndex: 'laterolog_flushed_zone', key: 'laterolog_flushed_zone', width: 120},
+  {title: '密度孔隙度', dataIndex: 'density_porosity', key: 'density_porosity', width: 120},
+  {title: '声波孔隙度', dataIndex: 'sonic_porosity', key: 'sonic_porosity', width: 120},
+  {title: '中子孔隙度', dataIndex: 'neutron_porosity', key: 'neutron_porosity', width: 120},
+  {title: '有效孔隙度', dataIndex: 'effective_porosity', key: 'effective_porosity', width: 120},
+  {title: '总孔隙度', dataIndex: 'total_porosity', key: 'total_porosity', width: 120},
+  {title: '渗透率', dataIndex: 'permeability', key: 'permeability', width: 120},
+  {title: '含油气饱和度', dataIndex: 'oil_gas_saturation', key: 'oil_gas_saturation', width: 120},
+  {title: '束缚水饱和度', dataIndex: 'irreducible_water_saturation', key: 'irreducible_water_saturation', width: 120},
+  {title: '泥质含量', dataIndex: 'shale_content', key: 'shale_content', width: 120},
+  {title: '砂质含量', dataIndex: 'sandy_content', key: 'sandy_content', width: 120},
+  {title: '灰质含量', dataIndex: 'lime_content', key: 'lime_content', width: 120},
+  {title: '白云质含量', dataIndex: 'dolomitic_content', key: 'dolomitic_content', width: 120},
+  {title: '碳酸盐岩含量', dataIndex: 'carbonate_content', key: 'carbonate_content', width: 120},
+  {title: '指标类型', dataIndex: 'idx_type', key: 'idx_type', width: 120},
+  {title: '解释结论', dataIndex: 'interpretation_result', key: 'interpretation_result', width: 120},
+  {title: '垂深顶深', dataIndex: 'start_tvd', key: 'start_tvd', width: 120},
+  {title: '垂深底深', dataIndex: 'end_tvd', key: 'end_tvd', width: 120},
+  {title: '垂深层厚 ', dataIndex: 'tvd_thickness', key: 'tvd_thickness', width: 120},
+  {title: '备注', dataIndex: 'remarks', key: 'remarks', width: 120},
+  {title: '创建/更新日期', dataIndex: 'update_date', key: 'update_date', width: 120,customRender:({record})=>{
+    return record.update_date == null ? record.create_date : record.update_date;
+    }}
+];
+export const testHistoryColumns=[
+  {title: '井id', dataIndex: 'well_id', key: 'well_id', width: 120},
+  {title: '测试日期', dataIndex: 'testing_date', key: 'testing_date', width: 120},
+  {title: '测试名称', dataIndex: 'testing_name', key: 'testing_name', width: 120},
+  {title: '测试单位', dataIndex: 'anal_coy', key: 'anal_coy', width: 120},
+  {title: '内容描述', dataIndex: 'construction_description', key: 'construction_description', width: 120}
+]
+
+export const analyticalAssaysColumns=[
+  {title: '井id', dataIndex: 'well_id', key: 'well_id', width: 120},
+  {title: '分析类型', dataIndex: 'item_code', key: 'item_code', width: 120},
+  {title: '分析指标', dataIndex: 'item_name', key: 'item_name', width: 120},
+  {title: '指标单位', dataIndex: 'meter_unit', key: 'meter_unit', width: 120},
+  {title: '指标值', dataIndex: 'idx_value', key: 'idx_value', width: 120},
+  {title: '描述', dataIndex: 'description', key: 'description', width: 120}
+]

+ 269 - 0
vue/src/views/wellinfo/detail.vue

@@ -0,0 +1,269 @@
+<template>
+
+ <div>
+   <a-card title="井史简介" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardSummary.expand" @click="cardSettings.cardSummary.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardSummary.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardSummary.expand" class="info-body">
+       <p>井名宁<span>13-23</span>构造位置<span>XXXXXXXX</span>,于<span>2015年02月03日</span>开钻,2015年08月22日完钻,采取<span>先期裸眼完并</span>方式完井。
+       </p>
+
+       <p>投产于<span>2015年09月09日</span>,生产层位<span>XXX</span>层位 <span>2023年10月27日</span>进行最近一次流压测试,油层中部压力<span>33.4</span>MPa,中部温度<span>166.85</span>°C,<span>2023年11月07日</span>,油嘴<span>6.5</span>mm,
+       </p>
+       <p>
+         油压<span>14.66</span>MPa,套压<span>0.4</span>MPa,日产液量<span>38.2</span>t/d,日产油量<span>22.58</span>t/d,含水<span>40.88</span>%,动液面<span>788</span>m,截止目前累产油<span>290594.34</span>吨。
+       </p>
+     </div>
+   </a-card>
+   <a-card title="生产动态" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardChat.expand" @click="cardSettings.cardChat.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardChat.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardChat.expand">
+       <p>Card content</p>
+       <p>Card content</p>
+       <p>Card content</p>
+     </div>
+   </a-card>
+   <a-card title="基本信息" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardBaseInfo.expand" @click="cardSettings.cardBaseInfo.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardBaseInfo.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardBaseInfo.expand">
+       <a-divider type="vertical" class="info-title" style="margin-top: 0px" dashed>井身结构</a-divider>
+       <a-descriptions bordered>
+         <a-descriptions-item label="井id:">{{dataModel.well_id }}</a-descriptions-item>
+         <a-descriptions-item label="井名:">{{dataModel.well_common_name }}</a-descriptions-item>
+         <a-descriptions-item label="井别:">{{dataModel.well_purpose }}</a-descriptions-item>
+         <a-descriptions-item label="井型:">{{dataModel.well_type }}</a-descriptions-item>
+         <a-descriptions-item label="开钻日期:">{{dataModel.spud_date }}</a-descriptions-item>
+         <a-descriptions-item label="完钻日期:">{{dataModel.end_drilling_date }}</a-descriptions-item>
+         <a-descriptions-item label="设计井深:">{{dataModel.budgeted_md }}</a-descriptions-item>
+         <a-descriptions-item label="完钻层位:">{{dataModel.completion_formation }}</a-descriptions-item>
+         <a-descriptions-item label="完井方式:">{{dataModel.completion_method }}</a-descriptions-item>
+       </a-descriptions>
+       <a-divider type="vertical" class="info-title" dashed>井信息</a-divider>
+       <a-descriptions bordered>
+         <a-descriptions-item label="采油厂机构:">{{dataModel.org_name_a1 }}</a-descriptions-item>
+         <a-descriptions-item label="单位名称:">{{dataModel.org_name_a2 }}</a-descriptions-item>
+         <a-descriptions-item label="标准井名:">{{dataModel.well_legal_name }}</a-descriptions-item>
+         <a-descriptions-item label="地理位置描述:" :span="3">{{dataModel.geo_description }}</a-descriptions-item>
+         <a-descriptions-item label="构造位置描述:" :span="3">{{dataModel.structure_pos }}</a-descriptions-item>
+         <a-descriptions-item label="创建/更新日期:">
+           {{dataModel.update_date == null ? dataModel.create_date : dataModel.update_date }}
+         </a-descriptions-item>
+         <a-descriptions-item label="井筒生命阶段:">{{dataModel.phase }}</a-descriptions-item>
+         <a-descriptions-item label="通用井筒名:">{{dataModel.wellbore_common_name }}</a-descriptions-item>
+         <a-descriptions-item label="目的层:">{{dataModel.target_formation }}</a-descriptions-item>
+         <a-descriptions-item label="审定测量深度:">{{dataModel.authorized_md }}</a-descriptions-item>
+         <a-descriptions-item label="审定真垂直深度:">{{dataModel.authorized_tvd }}</a-descriptions-item>
+
+         <a-descriptions-item label="井底测量深度:">{{dataModel.bh_md }}</a-descriptions-item>
+         <a-descriptions-item label="井底位置描述信息:" :span="2">{{dataModel.geo_description_bh }}</a-descriptions-item>
+         <a-descriptions-item label="井底真垂直深度:">{{dataModel.bh_tvd }}</a-descriptions-item>
+         <a-descriptions-item label="相对于参考面的造斜点深度:">{{dataModel.ko_md }}</a-descriptions-item>
+         <a-descriptions-item label="实际造斜点真垂直深度:">{{dataModel.ko_tvd }}</a-descriptions-item>
+         <a-descriptions-item label="地质单元:">{{dataModel.project_name }}</a-descriptions-item>
+         <a-descriptions-item label="单元类型:">{{dataModel.project_type }}</a-descriptions-item>
+         <a-descriptions-item label="单元等级:">{{dataModel.project_level }}</a-descriptions-item>
+         <a-descriptions-item label="备注:" :span="3">{{dataModel.remarks }}</a-descriptions-item>
+       </a-descriptions>
+       <a-divider type="vertical" class="info-title" dashed>井盆地凹陷信息</a-divider>
+       <a-descriptions bordered>
+         <a-descriptions-item label="标准盆地:">{{dataModel.bz_basin }}</a-descriptions-item>
+         <a-descriptions-item label="标准地陷:">{{dataModel.bz_depression }}</a-descriptions-item>
+         <a-descriptions-item label="标准凹陷:">{{dataModel.bz_depressed }}</a-descriptions-item>
+         <a-descriptions-item label="标准构造带:">{{dataModel.bz_structural_belt }}</a-descriptions-item>
+         <a-descriptions-item label="标准区块:">{{dataModel.bz_qkdy }}</a-descriptions-item>
+         <a-descriptions-item label="标准组织机构:">{{dataModel.bz_org_name }}</a-descriptions-item>
+         <a-descriptions-item label="标准作业区名:">{{dataModel.bz_dwmc }}</a-descriptions-item>
+       </a-descriptions>
+     </div>
+   </a-card>
+   <a-card title="业务解释" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardExplain.expand" @click="cardSettings.cardExplain.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardExplain.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardExplain.expand">
+       <a-table :columns="boreholeInterColumns" :data-source="boreholeInterList" :scroll="{ x:'100%', y: 500 }"
+                :pagination="false"
+                bordered>
+       </a-table>
+     </div>
+   </a-card>
+   <a-card title="相关文档" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardFile.expand" @click="cardSettings.cardFile.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardFile.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardFile.expand">
+       <p>Card content</p>
+       <p>Card content</p>
+       <p>Card content</p>
+     </div>
+   </a-card>
+   <a-card title="测试历史" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardTest.expand" @click="cardSettings.cardTest.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardTest.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardTest.expand">
+       <p>本井共实施5次系统试井,4次压恢压降试井,5次工程测井, 11次静压测试, 107次流压测试,
+         2023年10月27日进行最近一次流压测试,油层中部压力33.47MPa,中部温度132.32 ℃<br/>
+       </p>
+       <a-table :columns="testHistoryColumns" :data-source="testHistoryList" :scroll="{ x:'100%', y: 500 }"
+                :pagination="false"
+                bordered>
+       </a-table>
+     </div>
+   </a-card>
+   <a-card title="分析化验" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardAnalysis.expand" @click="cardSettings.cardAnalysis.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardAnalysis.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardAnalysis.expand">
+       <p>
+       本井共实监原油全分析共90组,原油族组份分析12组,天然气全分析47组,B2S含量分析19组,油田水分析2组,PVT分析3组:
+       </p>
+       <br>
+       <a-table :columns="analyticalAssaysColumns" :data-source="analyticalAssaysList" :scroll="{ x:'100%', y: 500 }"
+                :pagination="false"
+                bordered>
+       </a-table>
+     </div>
+   </a-card>
+   <a-card title="作业简史(业务过程)" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardWork.expand" @click="cardSettings.cardWork.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardWork.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardWork.expand">
+       哈23-12井井实施井下作业施工1次,其中油管测试1次;2015年08月23日油管测试,油管测试井段7458m-7613.05m
+       <p>Card content</p>
+       <p>Card content</p>
+       <p>Card content</p>
+     </div>
+   </a-card>
+   <a-card title="GIS地图" :bordered="false" :headStyle="cardSettings.cardHeadStyle" class="card-detail">
+     <template #extra>
+       <UpSquareOutlined v-if="cardSettings.cardGIS.expand" @click="cardSettings.cardGIS.expand=false"
+                         :style="cardSettings.buttonStyle"/>
+       <DownSquareOutlined v-else @click="cardSettings.cardGIS.expand=true"
+                           :style="cardSettings.buttonStyle"/>
+     </template>
+     <div v-if="cardSettings.cardGIS.expand">
+       哈23-12井井实施井下作业施工1次,其中油管测试1次;2015年08月23日油管测试,油管测试井段7458m-7613.05m
+       <p>Card content</p>
+       <p>Card content</p>
+       <p>Card content</p>
+     </div>
+   </a-card>
+ </div>
+</template>
+<script lang="ts">
+import {ref, defineComponent, toRefs, reactive} from 'vue';
+import {get} from "@/api/common";
+import {useTabsViewStore} from "@/store/modules/tabsView";
+import dayjs from "dayjs";
+import {useRoute} from "vue-router";
+import router from "@/router";
+import {boreholeInterColumns,testHistoryColumns,analyticalAssaysColumns} from './columns';
+
+export default defineComponent({
+  name: 'wellinfoDetail',
+  components: {},
+  setup() {
+    const tabsViewStore = useTabsViewStore();
+    const route = useRoute();
+    const cardSettings = ref({
+      cardHeadStyle: {fontWeight: 'bold'},
+      buttonStyle: {fontSize: '20px', cursor: 'pointer'},
+      cardSummary: {expand: true},
+      cardChat: {expand: true},
+      cardBaseInfo: {expand: true},
+      cardExplain: {expand: true},
+      cardFile: {expand: true},
+      cardTest: {expand: true},
+      cardAnalysis: {expand: true},
+      cardWork: {expand: true},
+      cardGIS: {expand: true}
+    })
+    const wellData = reactive({
+      dataModel:{},
+      boreholeInterList:[],
+      testHistoryList:[],
+      analyticalAssaysList:[]
+    });
+
+    const loadData = async (id) => {
+      if (id == undefined) {
+        return;
+      }
+      get('wellInfo/getWellInfo',{well_id: id}).then(data => {
+        wellData.dataModel = data.dataModel;
+        wellData.boreholeInterList =data.boreholeInterList;
+        wellData.testHistoryList=data.testHistoryList;
+        wellData.analyticalAssaysList=data.analyticalAssaysList;
+      })
+    }
+    const onClose = () => {
+      tabsViewStore.closeCurrentTab(route);
+      router.back();
+    };
+
+    return {
+      ...toRefs(wellData),
+      loadData, cardSettings,
+      onClose,boreholeInterColumns,testHistoryColumns,analyticalAssaysColumns,
+      dayjs
+    };
+  },
+  created() {
+    const id = history.state.params?.id;
+    this.loadData(id);
+  }
+});
+</script>
+
+<style lang="less" scoped>
+.card-detail {
+  width: 100%;
+  margin-top: 10px;
+}
+
+.info-body {
+  line-height: 30px;
+
+  span {
+    color: #4E61D0
+  }
+}
+
+.info-title {
+  border-color: #7cb305;
+  margin: 15px;
+  font-weight: bold;
+}
+</style>

+ 567 - 0
vue/src/views/wellinfo/index.vue

@@ -0,0 +1,567 @@
+<template>
+  <div class="query-index">
+    <div class="query-index-tree" v-if="showTree">
+      <div class="query-index-tree-search">
+        <a-tabs v-model:activeKey="activeTab" @change="tabChange" style="width:97%;">
+          <a-tab-pane key="1" tab="组织架构目录">
+          </a-tab-pane>
+          <a-tab-pane key="2" tab="地址单元目录" forceRender="true">
+          </a-tab-pane>
+        </a-tabs>
+        <DoubleLeftOutlined @click="showTree=false"/>
+      </div>
+      <div style="margin-top: -15px">
+        <a-input-search
+          v-model:value="subjectTrees.searchStr"
+          placeholder="查找目录..."
+          @search="searchTree"
+        />
+      </div>
+      <div class="query-index-tree-box">
+        <a-tree
+          :show-line="true"
+          :tree-data="subjectTrees.data"
+          v-model:expandedKeys="subjectTrees.expandedKeys"
+          v-model:selectedKeys="subjectTrees.selectedKeys"
+          :replace-fields="replaceFields"
+          :autoExpandParent="subjectTrees.autoExpandParent"
+          @expand="treeOnExpand">
+          <template #title="{ label,value,children }">
+                    <span v-if="label!=null&&label.indexOf(subjectTrees.searchStr) > -1">
+                      {{ label.substr(0, label.indexOf(subjectTrees.searchStr)) }}
+                      <span style="color: #f50">{{ subjectTrees.searchStr }}</span>
+                      {{ label.substr(label.indexOf(subjectTrees.searchStr) + subjectTrees.searchStr.length) }}
+                    </span>
+            <span v-else>{{ label }}</span>
+          </template>
+        </a-tree>
+      </div>
+    </div>
+    <div class="query-index-close" v-else>
+      <DoubleRightOutlined @click="showTree=true"/>
+    </div>
+    <div class="query-index-content">
+      <div class="query-index-form">
+        <a-form ref="formRef" name="fromQuery"
+                class="ant-advanced-search-form"
+                :label-col="labelCol"
+                :model="formState.temp">
+          <a-row :gutter="24" class="query-index-row">
+            <a-col :span="6">
+              <a-form-item name="tempName" label="井号:">
+                <a-input v-model:value="formState.well_id"/>
+              </a-form-item>
+            </a-col>
+            <a-col :span="6">
+              <a-form-item name="well_common_name" label="井名:">
+                <a-input v-model:value="formState.well_common_name"/>
+              </a-form-item>
+            </a-col>
+            <a-col :span="6">
+              <a-form-item name="tempName" label="井型:">
+                <a-select ref="select" v-model:value="formState.well_type"
+                          :options="wellTypeList" :field-names="{label:'name',value:'value'}" :allow-clear="true">
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :span="6" style="text-align: left">
+              <MenuOutlined @click="showQuery=true" v-if="!showQuery"/>
+              <LineOutlined @click="showQuery=false" v-else/>
+              <a-button type="primary" html-type="submit" @click="onQuery" style="margin-left: 10px;">查询</a-button>
+              <a-button html-type="submit" @click="() => {formRef.resetFields();onQuery()}" style="margin-left: 10px;">
+                重置
+              </a-button>
+            </a-col>
+          </a-row>
+          <a-row :gutter="24" class="query-index-row" v-if="showQuery">
+            <a-col :span="6">
+              <a-form-item name="tempName" label="开钻日期:">
+                <a-range-picker format="YYYY-MM-DD" :placeholder="['开始日期', '结束日期']"
+                                @change="(d)=>{onRangeChange(d,'spud_date_begin','spud_date_end')}"/>
+              </a-form-item>
+            </a-col>
+            <a-col :span="6">
+              <a-form-item name="well_common_name" label="完井日期:">
+                <a-range-picker format="YYYY-MM-DD" :placeholder="['开始日期', '结束日期']"
+                                @change="(d)=>{onRangeChange(d,'completion_date_begin','completion_date_end')}"/>
+              </a-form-item>
+            </a-col>
+            <a-col :span="6">
+              <a-form-item name="tempName" label="开始采油日期:">
+                <a-range-picker format="YYYY-MM-DD" :placeholder="['开始日期', '结束日期']"
+                                @change="(d)=>{onRangeChange(d,'oil_prod_begin_date_begin','oil_prod_begin_date_end')}"/>
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row :gutter="24" class="query-index-row" v-if="showQuery">
+            <a-col :span="6">
+              <a-form-item name="tempName" label="最近采油日期:">
+                <a-range-picker format="YYYY-MM-DD" :placeholder="['开始日期', '结束日期']"
+                                @change="(d)=>{onRangeChange(d,'oil_prod_recent_date_begin','oil_prod_recent_date_end')}"/>
+              </a-form-item>
+            </a-col>
+          </a-row>
+          <a-row class="edit-operation">
+            <a-col :span="24" style="text-align: right">
+              <a-radio-group v-model:value="viewModel" style="text-align: left">
+                <a-radio-button value="list">
+                  <UnorderedListOutlined/>
+                  列表
+                </a-radio-button>
+                <a-radio-button value="card">
+                  <TableOutlined/>
+                  卡片
+                </a-radio-button>
+              </a-radio-group>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <a-spin :spinning="loading">
+        <div class="query-index-table" v-if="viewModel=='list'">
+          <a-table :columns="columns" :data-source="data" :scroll="{ x:'100%', y: 500 }"
+                   :row-key="record=>record.tempId" :pagination="false"
+                   bordered>
+            <template #bodyCell="{ column,record }">
+              <template v-if="column.key === 'well_id'">
+                <a-button type="link" size="small" @click="detail(record.well_id)">{{ record.well_id }}</a-button>
+              </template>
+              <template v-if="column.key === 'operation'">
+                <a-popover trigger="hover" placement="left">
+                  <template #content>
+                    <a-button type="link" size="small">复制模板</a-button>
+                    <br/>
+                    <a-button type="link" size="small">查看详情</a-button>
+                    <br/>
+                    <a-popconfirm placement="leftTop"
+                                  title="是否删除数据?">
+                      <a-button type="link" size="small">删除</a-button>
+                    </a-popconfirm>
+                  </template>
+                  <a-button type="link" size="small">相关文档</a-button>
+                </a-popover>
+              </template>
+            </template>
+          </a-table>
+        </div>
+        <div class="query-index-table" v-else>
+          <a-row :gutter="[24,8]">
+            <a-col :span="8" v-for="item in data">
+              <a-card :title="'井名:'+item.well_common_name" bodyStyle="padding: 10px;">
+                <template #extra>
+                  <a-button type="link">查看详情</a-button>
+                  |
+                  <a-button type="link">相关文档</a-button>
+                </template>
+                <table class="well-card-table">
+                  <tr>
+                    <th>井型:</th>
+                    <td>{{ item.well_type }}</td>
+                    <th>状态:</th>
+                    <td>{{ item.current_state_name }}</td>
+                  </tr>
+                  <tr>
+                    <th>开钻日期:</th>
+                    <td>{{ item.spud_date }}</td>
+                    <th>含水率:</th>
+                    <td :class="getTdColor( item.water_cut)">{{ item.water_cut }}</td>
+                  </tr>
+                  <tr>
+                    <th>开始采油日期:</th>
+                    <td>{{ item.oil_prod_begin_date }}</td>
+                    <th>最近采油日期:</th>
+                    <td>{{ item.oil_prod_recent_date }}</td>
+                  </tr>
+                  <tr>
+                    <th>月产油量(t):</th>
+                    <td>{{ item.oil_prod_mon }}</td>
+                    <td colspan="2" rowspan="2"></td>
+                  </tr>
+                  <tr>
+                    <th>累产油量(t):</th>
+                    <td>{{ item.oil_prod_year }}</td>
+                  </tr>
+                  <tr>
+                    <th>月产气量(m³):</th>
+                    <td>{{ item.gas_prod_mon }}</td>
+                    <td colspan="2" rowspan="2"></td>
+                  </tr>
+                  <tr>
+                    <th>累产气量(m³):</th>
+                    <td>{{ item.gas_prod_year }}</td>
+                  </tr>
+                </table>
+              </a-card>
+            </a-col>
+          </a-row>
+        </div>
+        <a-pagination :page-size-options="['5', '20', '30', '40', '50']" show-size-changer
+                      v-model:current="pagination.current" :total="pagination.total"
+                      style="float: right;margin-top: 10px;"
+                      :pageSize="pagination.pageSize" :show-total="total => `共 ${total} 条`"
+                      @change="(current)=>handleTableChange({ current: current,pageSize: pagination.pageSize })"
+                      @showSizeChange="(current,pageSize)=>handleTableChange({ current: current,pageSize: pageSize })"/>
+      </a-spin>
+    </div>
+  </div>
+</template>
+
+<script lang="ts">
+import {ref, defineComponent, reactive, computed} from 'vue';
+import type {FormInstance} from 'ant-design-vue';
+import {useRoute} from 'vue-router';
+import {get} from "@/api/common";
+import type {TableColumnsType} from "ant-design-vue";
+import dayjs from "dayjs";
+import {getPaginationTotalTitle} from "@/utils/common";
+import type {TableProps} from "ant-design-vue";
+import {useTabsViewStore} from "@/store/modules/tabsView";
+
+export default defineComponent({
+  name: 'wellinfoindex',
+  components: {},
+  setup() {
+    const route = useRoute();
+    const expand = ref(false);
+    const formRef = ref<FormInstance>();
+    const loading = ref(false);
+    const showQuery = ref(false);
+    const selectedRowKeys = ref([]);
+    const activeTab = ref("1");
+    const showTree = ref(true);
+    const data = ref([]);
+    const viewModel = ref("list");
+    const tabsViewStore = useTabsViewStore();
+    const wellTypeList = ref([{label: "直井", value: "直井"}, {label: "定向井", value: "定向井"}, {label: "分支井", value: "分支井"}]);
+    const replaceFields = {
+      children: 'children',
+      title: 'label',
+      key: 'value',
+    };
+
+    const formState = reactive({
+      page: 1,
+      rows: 10,
+      total: 0,
+      well_common_name: '',
+      well_id: '',
+      well_type: '',
+      spud_date_begin: '',
+      spud_date_end: '',
+      completion_date_begin: '',
+      completion_date_end: '',
+      oil_prod_begin_date_begin: '',
+      oil_prod_begin_date_end: '',
+      oil_prod_recent_date_begin: '',
+      oil_prod_recent_date_end: ''
+    });
+    const columns: TableColumnsType = [
+      {
+        title: '序号',
+        width: 60,
+        dataIndex: 'index',
+        key: 'index',
+        align: "center",
+        customRender: item => `${formState.rows * (formState.page - 1) + item.index + 1}`
+      },
+      {title: '井号', dataIndex: 'well_id', key: 'well_id', width: 120},
+      {title: '井名', dataIndex: 'well_common_name', key: 'well_common_name', width: 120},
+      {title: '井型', dataIndex: 'well_type', key: 'well_type', width: 120},
+      {
+        title: '开钻日期', dataIndex: 'spud_date', key: 'spud_date', width: 120, customRender: ({record}) =>
+          record.spud_date == null ? "" : (dayjs(record.spud_date).format('YYYY-MM-DD'))
+      },
+      {
+        title: '完钻日期', dataIndex: 'end_drilling_date', key: 'end_drilling_date', width: 120, customRender: ({record}) =>
+          record.end_drilling_date == null ? "" : (dayjs(record.end_drilling_date).format('YYYY-MM-DD'))
+      },
+      {
+        title: '完井日期', dataIndex: 'completion_date', key: 'completion_date', width: 120, customRender: ({record}) =>
+          record.end_drilling_date == null ? "" : (dayjs(record.completion_date).format('YYYY-MM-DD'))
+      },
+      {
+        title: '开始采油日期',
+        dataIndex: 'oil_prod_begin_date',
+        key: 'oil_prod_begin_date', width: 120,
+        customRender: ({record}) =>
+          record.oil_prod_begin_date == null ? "" : (dayjs(record.oil_prod_begin_date).format('YYYY-MM-DD'))
+      },
+      {
+        title: '最近采油日期',
+        dataIndex: 'oil_prod_recent_date',
+        key: 'oil_prod_recent_date', width: 120,
+        customRender: ({record}) =>
+          record.oil_prod_recent_date == null ? "" : (dayjs(record.oil_prod_recent_date).format('YYYY-MM-DD'))
+      },
+      {title: '状态', dataIndex: 'current_state_name', key: 'current_state', width: 120},
+      {title: '设计井深(m)', dataIndex: 'budgeted_md', key: 'tempNo', width: 120},
+      {
+        title: '含水率', dataIndex: 'water_cut', key: 'water_cut', width: 60, align: 'center', customCell: (record) => {
+          return {class: getTdColor(record.water_cut)};
+        }
+      },
+      {title: '月产油量(t)', dataIndex: 'oil_prod_mon', key: 'oil_prod_mon', width: 120},
+      {title: '累产油量(t)', dataIndex: 'oil_prod_year', key: 'oil_prod_year', width: 120},
+      {title: '累产油量趋势', dataIndex: 'tempNo', key: 'tempNo', width: 150},
+      {title: '月产气量(m³)', dataIndex: 'gas_prod_mon', key: 'gas_prod_mon', width: 120},
+      {title: '累产气量(m³)', dataIndex: 'gas_prod_year', key: 'gas_prod_year', width: 120},
+      {title: '累产油量趋势', dataIndex: 'tempNo', key: 'tempNo', width: 150},
+      {title: '操作列', dataIndex: 'operation', key: 'operation', align: 'center', width: 120}
+    ];
+    const getTdColor = (water_cut) => {
+      if (water_cut == null || water_cut <= 2) {
+        return "";
+      } else if (water_cut > 2 && water_cut <= 40) {
+        return "color_level2";
+      } else if (water_cut > 40 && water_cut <= 8) {
+        return "color_level3";
+      } else {
+        return "color_level4";
+      }
+    }
+    const onSelectChange = (keys: any) => {
+      selectedRowKeys.value = keys;
+    };
+    const pagination = computed(() => ({
+      total: formState.total,
+      current: formState.page,
+      pageSize: formState.rows,
+      showSizeChanger: true,
+      showTotal: total => getPaginationTotalTitle(total)
+    }));
+
+    const loadData = async function () {
+      loading.value = true;
+      const result: any = await get('wellInfo/getList', formState);
+
+      data.value = result.list;
+      formState.total = result.total;
+      loading.value = false;
+    }
+    const handleTableChange: TableProps['onChange'] = (
+      pag: { pageSize: number; current: number },
+    ) => {
+      formState.page = pag.current;
+      formState.rows = pag.pageSize;
+      loadData();
+    };
+    const onRangeChange = (dateString, begin, end) => {
+      formState[begin] = dateString ? dateString[0].format("YYYY-MM-DD") : '';
+      formState[end] = dateString ? dateString[1].format("YYYY-MM-DD") : '';
+    };
+    const tabChange = (key) => {
+      console.log("tabChange", key);
+      if (key == "2") {
+
+      }
+    }
+    const detail = (well_id) => {
+      tabsViewStore.addTabByPath('/wellinfo/detail', {id: well_id});
+    }
+    const onQuery = () => {
+      loadData();
+    }
+    const subjectTrees = ref({
+      data: [],
+      expandedKeys: [''],
+      selectedKeys: [''],
+      autoExpandParent: true,
+      searchStr: ''
+    });
+    const getSubjectTree = async function () {
+      //loading.value = true;
+      subjectTrees.value.data = await get('wellInfo/getOrganizationTree', {tabName: subjectTrees.value.searchStr});
+      //计算第一个展开节点
+      subjectTrees.value.expandedKeys = [];
+      if (subjectTrees.value.data && subjectTrees.value.data.length > 0) {
+        subjectTrees.value.expandedKeys.push((subjectTrees.value.data[0] as any).value + "");
+      }
+      generateList(subjectTrees.value.data);
+    }
+    getSubjectTree();
+    const searchTree = () => {
+      const expanded = dataList
+        .map((item: any) => {
+          if (item.label != null && item.label.indexOf(subjectTrees.value.searchStr) > -1) {
+            return getParentKey(item.value as string, subjectTrees.value.data);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      subjectTrees.value.expandedKeys = expanded as string[];
+      subjectTrees.value.autoExpandParent = true;
+    }
+    const dataList: any[] = [];
+    const generateList = (data: any[]) => {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const label = node.label;
+        dataList.push({value: node.value, label: label as string});
+        if (node.children) {
+          generateList(node.children);
+        }
+      }
+    };
+
+    const getParentKey = (key: string, tree: any[]): string | number | undefined => {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.value === key)) {
+            parentKey = node.value;
+          } else if (getParentKey(key, node.children)) {
+            parentKey = getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    };
+
+    const treeOnExpand = function (keys: string[]) {
+      subjectTrees.value.expandedKeys = keys;
+      subjectTrees.value.autoExpandParent = false;
+    }
+    const treeOnSelect = function (selected, selectedNodes, node) {
+      console.log(selected, selectedNodes, node);
+      if (selected && selectedNodes.node.parent != undefined) {
+      }
+      if (selectedNodes.node.parent == undefined) {
+        subjectTrees.value.expandedKeys = [selectedNodes.node.key];
+      }
+    }
+    const labelCol = {style: {width: '100px'}};
+    return {
+      route, selectedRowKeys, columns, loading, activeTab, showTree, onSelectChange, data,
+      expand, onQuery, loadData, onRangeChange, showQuery, wellTypeList, replaceFields,
+      formRef, viewModel, handleTableChange, detail,
+      formState,
+      labelCol, getTdColor,
+      tabChange,
+      treeOnExpand,
+      subjectTrees,
+      getSubjectTree, searchTree,
+      treeOnSelect, pagination
+    };
+  },
+  created() {
+    this.loadData();
+  },
+  activated() {
+  }
+});
+</script>
+<style lang="less">
+
+.query-index {
+  display: flex;
+  flex-direction: row;
+  min-height: 100%;
+  background-color: white;
+}
+
+.query-index-tree {
+  min-width: 260px;
+  max-width: 360px;
+  border-right: 2px solid #f2f2f2;
+  margin-right: 5px;
+}
+
+.query-index-close {
+  width: 15px;
+  padding-top: 10px;
+  padding-left: 10px;
+}
+
+.query-index-content {
+  flex-grow: 1;
+  display: flex;
+  flex-direction: column;
+  width: 80%;
+}
+
+.query-index-form {
+  padding: 15px 10px 10px 15px;
+}
+
+.query-index-table {
+  flex-grow: 1;
+  display: flex;
+}
+
+.query-index-tabs {
+  margin-left: 10px;
+  margin-right: 10px;
+  height: 100%;
+  flex: 1;
+}
+
+.tabs-view-content {
+  padding: 0px;
+}
+
+.query-index-tree-item {
+  white-space: nowrap; /*强制span不换行*/
+  display: inline-block; /*将span当做块级元素对待*/
+  text-overflow: ellipsis; /*超出部分以点号代替*/
+}
+
+.query-index-tree-search {
+  padding: 5px;
+  border-bottom: 2px solid #f2f2f2;
+  display: flex;
+  align-items: center;
+}
+
+.query-index-tree-box {
+  padding: 5px;
+  padding-top: 10px;
+  overflow-y: scroll;
+  max-height: 600px;
+}
+
+.col-text {
+  padding-right: 0px !important;
+  text-align: right;
+  font-weight: bold;
+}
+
+.col-content {
+  width: 200px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.ant-card-body {
+  padding: 10px;
+}
+
+.well-card-table {
+  th {
+    width: 25%;
+    text-align: right;
+  }
+
+  td {
+    width: 25%;
+    text-align: left;
+  }
+}
+
+.color_level1, .color_level1:hover {
+}
+
+.color_level2, .color_level2:hover {
+  background-color: #EAF4FF !important;
+}
+
+.color_level3, .color_level3:hover {
+  background-color: #D5EAFF;
+}
+
+.color_level4, .color_level4:hover {
+  background-color: #B7DBFF;
+}
+</style>
+