zhaoyun 4 月之前
父节点
当前提交
6704bb9504
共有 16 个文件被更改,包括 1569 次插入0 次删除
  1. 6 0
      ruoyi-powerdistribution/pom.xml
  2. 140 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/controller/PdmConstructTeamController.java
  3. 104 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/controller/PdmConstructorController.java
  4. 180 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/PdmConstructTeam.java
  5. 98 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/PdmConstructor.java
  6. 52 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/excel/ConstructTeam.java
  7. 12 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/vo/PdmConstructTeamVo.java
  8. 61 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/mapper/PdmConstructTeamMapper.java
  9. 73 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/mapper/PdmConstructorMapper.java
  10. 69 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/IPdmConstructTeamService.java
  11. 61 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/IPdmConstructorService.java
  12. 153 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/impl/PdmConstructTeamServiceImpl.java
  13. 96 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/impl/PdmConstructorServiceImpl.java
  14. 215 0
      ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/util/DynamicEasyExcelConstructTeamListener.java
  15. 142 0
      ruoyi-powerdistribution/src/main/resources/mapper/powerdistribution/PdmConstructTeamMapper.xml
  16. 107 0
      ruoyi-powerdistribution/src/main/resources/mapper/powerdistribution/PdmConstructorMapper.xml

+ 6 - 0
ruoyi-powerdistribution/pom.xml

@@ -54,6 +54,12 @@
             <artifactId>freemarker</artifactId>
             <version>2.3.28</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.3.4</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 140 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/controller/PdmConstructTeamController.java

@@ -0,0 +1,140 @@
+package com.ruoyi.powerdistribution.controller;
+
+import java.io.InputStream;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.enums.CellExtraTypeEnum;
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.powerdistribution.domain.excel.ConstructTeam;
+import com.ruoyi.powerdistribution.domain.vo.PdmConstructTeamVo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.powerdistribution.domain.PdmConstructTeam;
+import com.ruoyi.powerdistribution.service.IPdmConstructTeamService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.powerdistribution.util.DynamicEasyExcelConstructTeamListener;
+
+/**
+ * 配网工程队伍施工小组信息Controller
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+@RestController
+@RequestMapping("/powerdistribution/constructTeam")
+public class PdmConstructTeamController extends BaseController
+{
+    @Autowired
+    private IPdmConstructTeamService pdmConstructTeamService;
+
+    /**
+     * 查询配网工程队伍施工小组信息列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(PdmConstructTeam pdmConstructTeam)
+    {
+        startPage();
+        List<PdmConstructTeam> list = pdmConstructTeamService.selectPdmConstructTeamList(pdmConstructTeam);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出配网工程队伍施工小组信息列表
+     */
+
+    @Log(title = "配网工程队伍施工小组信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PdmConstructTeam pdmConstructTeam)
+    {
+        List<PdmConstructTeam> list = pdmConstructTeamService.selectPdmConstructTeamList(pdmConstructTeam);
+        ExcelUtil<PdmConstructTeam> util = new ExcelUtil<PdmConstructTeam>(PdmConstructTeam.class);
+        util.exportExcel(response, list, "配网工程队伍施工小组信息数据");
+    }
+
+    /**
+     * 获取配网工程队伍施工小组信息详细信息
+     */
+
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(pdmConstructTeamService.selectPdmConstructTeamById(id));
+    }
+
+    /**
+     * 新增配网工程队伍施工小组信息
+     */
+
+    @Log(title = "配网工程队伍施工小组信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PdmConstructTeamVo pdmConstructTeam)
+    {
+        return toAjax(pdmConstructTeamService.insertPdmConstructTeam(pdmConstructTeam));
+    }
+
+    /**
+     * 修改配网工程队伍施工小组信息
+     */
+
+    @Log(title = "配网工程队伍施工小组信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody PdmConstructTeamVo pdmConstructTeam)
+    {
+        return toAjax(pdmConstructTeamService.updatePdmConstructTeam(pdmConstructTeam));
+    }
+
+    /**
+     * 删除配网工程队伍施工小组信息
+     */
+
+    @Log(title = "配网工程队伍施工小组信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(pdmConstructTeamService.deletePdmConstructTeamByIds(ids));
+    }
+    @PostMapping("/import")
+    public void importExcel(HttpServletRequest request, MultipartFile file) {
+        try {
+            InputStream inputStream = file.getInputStream();
+            /**
+             *DynamicEasyExcelConstructTeamListener:导入监听类
+             * 1:是正文起始行,用于处理合并单元格
+             **/
+            DynamicEasyExcelConstructTeamListener listener = new DynamicEasyExcelConstructTeamListener(request,1);
+
+            //读取全部sheet使用extraRead(CellExtraTypeEnum.MERGE).doReadAll()
+            /**
+             * headRowNumber(1):1是正文起始行
+             * CellExtraTypeEnum.MERGE:读取合并单元格
+             * CellExtraTypeEnum.COMMENT:读取批注
+             * CellExtraTypeEnum.HYPERLINK:读取超链接
+             * extraRead(CellExtraTypeEnum.MERGE).doReadAll():如果多sheet,直接使用这个方法
+             **/
+            EasyExcel.read(inputStream, ConstructTeam.class,listener).headRowNumber(1).extraRead(CellExtraTypeEnum.MERGE).sheet(0).doRead();
+            inputStream.close();
+            pdmConstructTeamService.importExcel(listener.getDataList());
+            //System.out.println(JSON.toJSON(listener.getDataList()));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}

+ 104 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/controller/PdmConstructorController.java

@@ -0,0 +1,104 @@
+package com.ruoyi.powerdistribution.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+import com.ruoyi.powerdistribution.service.IPdmConstructorService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 配网工程队伍施工人员信息Controller
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+@RestController
+@RequestMapping("/powerdistribution/constructor")
+public class PdmConstructorController extends BaseController
+{
+    @Autowired
+    private IPdmConstructorService pdmConstructorService;
+
+    /**
+     * 查询配网工程队伍施工人员信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(PdmConstructor pdmConstructor)
+    {
+        startPage();
+        List<PdmConstructor> list = pdmConstructorService.selectPdmConstructorList(pdmConstructor);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出配网工程队伍施工人员信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:export')")
+    @Log(title = "配网工程队伍施工人员信息", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, PdmConstructor pdmConstructor)
+    {
+        List<PdmConstructor> list = pdmConstructorService.selectPdmConstructorList(pdmConstructor);
+        ExcelUtil<PdmConstructor> util = new ExcelUtil<PdmConstructor>(PdmConstructor.class);
+        util.exportExcel(response, list, "配网工程队伍施工人员信息数据");
+    }
+
+    /**
+     * 获取配网工程队伍施工人员信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(pdmConstructorService.selectPdmConstructorById(id));
+    }
+
+    /**
+     * 新增配网工程队伍施工人员信息
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:add')")
+    @Log(title = "配网工程队伍施工人员信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody PdmConstructor pdmConstructor)
+    {
+        return toAjax(pdmConstructorService.insertPdmConstructor(pdmConstructor));
+    }
+
+    /**
+     * 修改配网工程队伍施工人员信息
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:edit')")
+    @Log(title = "配网工程队伍施工人员信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody PdmConstructor pdmConstructor)
+    {
+        return toAjax(pdmConstructorService.updatePdmConstructor(pdmConstructor));
+    }
+
+    /**
+     * 删除配网工程队伍施工人员信息
+     */
+    @PreAuthorize("@ss.hasPermi('powerdistribution:constructor:remove')")
+    @Log(title = "配网工程队伍施工人员信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(pdmConstructorService.deletePdmConstructorByIds(ids));
+    }
+}

+ 180 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/PdmConstructTeam.java

@@ -0,0 +1,180 @@
+package com.ruoyi.powerdistribution.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.List;
+
+/**
+ * 配网工程队伍施工小组信息对象 pdm_construct_team
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public class PdmConstructTeam extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    private String countyOrgNm;
+
+    /** 施工队伍编号 */
+    @Excel(name = "施工队伍编号")
+    private String teamNo;
+
+    /** 队伍名称 */
+    @Excel(name = "队伍名称")
+    private String teamNm;
+
+    /** 法人 */
+    @Excel(name = "法人")
+    private String legalPerson;
+
+    /** 法人联系电话号码 */
+    @Excel(name = "法人联系电话号码")
+    private String legalContactPhone;
+
+    /** 施工小组序号 */
+    @Excel(name = "施工小组序号")
+    private String teamSerialNo;
+
+    /** 施工小组负责人 */
+    @Excel(name = "施工小组负责人")
+    private String teamLeader;
+
+    /** 施工小组负责人电话号码 */
+    @Excel(name = "施工小组负责人电话号码")
+    private String teamLeaderPhone;
+
+    /** 施工小组作业车牌号 */
+
+    private List<String> construcCarNumber;
+
+    /** 驻点位置 */
+    @Excel(name = "驻点位置")
+    private String arrestPoint;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTeamNo(String teamNo) 
+    {
+        this.teamNo = teamNo;
+    }
+
+    public String getTeamNo() 
+    {
+        return teamNo;
+    }
+    public void setTeamNm(String teamNm) 
+    {
+        this.teamNm = teamNm;
+    }
+
+    public String getTeamNm() 
+    {
+        return teamNm;
+    }
+    public void setLegalPerson(String legalPerson) 
+    {
+        this.legalPerson = legalPerson;
+    }
+
+    public String getLegalPerson() 
+    {
+        return legalPerson;
+    }
+    public void setLegalContactPhone(String legalContactPhone) 
+    {
+        this.legalContactPhone = legalContactPhone;
+    }
+
+    public String getLegalContactPhone() 
+    {
+        return legalContactPhone;
+    }
+    public void setTeamSerialNo(String teamSerialNo)
+    {
+        this.teamSerialNo = teamSerialNo;
+    }
+
+    public String getTeamSerialNo()
+    {
+        return teamSerialNo;
+    }
+    public void setTeamLeader(String teamLeader) 
+    {
+        this.teamLeader = teamLeader;
+    }
+
+    public String getTeamLeader() 
+    {
+        return teamLeader;
+    }
+    public void setTeamLeaderPhone(String teamLeaderPhone) 
+    {
+        this.teamLeaderPhone = teamLeaderPhone;
+    }
+
+    public String getTeamLeaderPhone() 
+    {
+        return teamLeaderPhone;
+    }
+    public void setConstrucCarNumber(List<String> construcCarNumber)
+    {
+        this.construcCarNumber = construcCarNumber;
+    }
+
+    public List<String> getConstrucCarNumber()
+    {
+        return construcCarNumber;
+    }
+    public void setArrestPoint(String arrestPoint) 
+    {
+        this.arrestPoint = arrestPoint;
+    }
+
+    public String getArrestPoint() 
+    {
+        return arrestPoint;
+    }
+
+    public String getCountyOrgNm() {
+        return countyOrgNm;
+    }
+
+    public void setCountyOrgNm(String countyOrgNm) {
+        this.countyOrgNm = countyOrgNm;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("teamNo", getTeamNo())
+            .append("teamNm", getTeamNm())
+            .append("legalPerson", getLegalPerson())
+            .append("legalContactPhone", getLegalContactPhone())
+            .append("teamSerialNo", getTeamSerialNo())
+            .append("teamLeader", getTeamLeader())
+            .append("teamLeaderPhone", getTeamLeaderPhone())
+            .append("construcCarNumber", getConstrucCarNumber())
+            .append("arrestPoint", getArrestPoint())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 98 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/PdmConstructor.java

@@ -0,0 +1,98 @@
+package com.ruoyi.powerdistribution.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 配网工程队伍施工人员信息对象 pdm_constructor
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public class PdmConstructor extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 施工队伍编号 */
+    @Excel(name = "施工队伍编号")
+    private String teamNo;
+
+    /** 施工小组人员类型(1-工作负责人,2-技工,3-其他) */
+    @Excel(name = "施工小组人员类型", readConverterExp = "1=-工作负责人,2-技工,3-其他")
+    private String constructPersonType;
+
+    /** 施工人员姓名 */
+    @Excel(name = "施工人员姓名")
+    private String constructPersonnelName;
+
+    /** 施工人员联系电话号码 */
+    @Excel(name = "施工人员联系电话号码")
+    private String constructPersonnelPhone;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTeamNo(String teamNo) 
+    {
+        this.teamNo = teamNo;
+    }
+
+    public String getTeamNo() 
+    {
+        return teamNo;
+    }
+    public void setConstructPersonType(String constructPersonType) 
+    {
+        this.constructPersonType = constructPersonType;
+    }
+
+    public String getConstructPersonType() 
+    {
+        return constructPersonType;
+    }
+    public void setConstructPersonnelName(String constructPersonnelName) 
+    {
+        this.constructPersonnelName = constructPersonnelName;
+    }
+
+    public String getConstructPersonnelName() 
+    {
+        return constructPersonnelName;
+    }
+    public void setConstructPersonnelPhone(String constructPersonnelPhone) 
+    {
+        this.constructPersonnelPhone = constructPersonnelPhone;
+    }
+
+    public String getConstructPersonnelPhone() 
+    {
+        return constructPersonnelPhone;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("teamNo", getTeamNo())
+            .append("constructPersonType", getConstructPersonType())
+            .append("constructPersonnelName", getConstructPersonnelName())
+            .append("constructPersonnelPhone", getConstructPersonnelPhone())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 52 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/excel/ConstructTeam.java

@@ -0,0 +1,52 @@
+package com.ruoyi.powerdistribution.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ConstructTeam {
+    @ExcelProperty(index =0)
+    private String countyOrgNm;
+    @ExcelProperty(index =1)
+    private String teamNm;
+    @ExcelProperty(index =2)
+    private String legalPerson;
+    /** 法人联系电话号码 */
+    @ExcelProperty(index =3)
+    private String legalContactPhone;
+
+    /** 施工小组序号 */
+    @ExcelProperty(index =4)
+    private String teamSerialNo;
+
+    /** 施工小组负责人 */
+    @ExcelProperty(index =5)
+    private String teamLeader;
+
+    /** 施工小组负责人电话号码 */
+    @ExcelProperty(index =6)
+    private String teamLeaderPhone;
+
+    //施工小组人员类型
+    @ExcelProperty(index =7)
+    private String constructPersonType;
+
+    /** 施工人员姓名 */
+    @ExcelProperty(index =8)
+    private String constructPersonnelName;
+
+    /** 施工人员联系电话号码 */
+    @ExcelProperty(index =9)
+    private String constructPersonnelPhone;
+
+    /** 施工小组作业车牌号 */
+    @ExcelProperty(index =10)
+    private String construcCarNumber;
+
+    /** 驻点位置 */
+    @ExcelProperty(index =11)
+    private String arrestPoint;
+}

+ 12 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/domain/vo/PdmConstructTeamVo.java

@@ -0,0 +1,12 @@
+package com.ruoyi.powerdistribution.domain.vo;
+
+import com.ruoyi.powerdistribution.domain.PdmConstructTeam;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PdmConstructTeamVo extends PdmConstructTeam {
+    private List<PdmConstructor> constructorList;
+}

+ 61 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/mapper/PdmConstructTeamMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.powerdistribution.mapper;
+
+import java.util.List;
+import com.ruoyi.powerdistribution.domain.PdmConstructTeam;
+
+/**
+ * 配网工程队伍施工小组信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public interface PdmConstructTeamMapper 
+{
+    /**
+     * 查询配网工程队伍施工小组信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 配网工程队伍施工小组信息
+     */
+    public PdmConstructTeam selectPdmConstructTeamById(Long id);
+
+    /**
+     * 查询配网工程队伍施工小组信息列表
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 配网工程队伍施工小组信息集合
+     */
+    public List<PdmConstructTeam> selectPdmConstructTeamList(PdmConstructTeam pdmConstructTeam);
+
+    /**
+     * 新增配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    public int insertPdmConstructTeam(PdmConstructTeam pdmConstructTeam);
+
+    /**
+     * 修改配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    public int updatePdmConstructTeam(PdmConstructTeam pdmConstructTeam);
+
+    /**
+     * 删除配网工程队伍施工小组信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 结果
+     */
+    public int deletePdmConstructTeamById(Long id);
+
+    /**
+     * 批量删除配网工程队伍施工小组信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePdmConstructTeamByIds(Long[] ids);
+}

+ 73 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/mapper/PdmConstructorMapper.java

@@ -0,0 +1,73 @@
+package com.ruoyi.powerdistribution.mapper;
+
+import java.util.List;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 配网工程队伍施工人员信息Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public interface PdmConstructorMapper 
+{
+    /**
+     * 查询配网工程队伍施工人员信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 配网工程队伍施工人员信息
+     */
+    public PdmConstructor selectPdmConstructorById(Long id);
+
+    /**
+     * 查询配网工程队伍施工人员信息列表
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 配网工程队伍施工人员信息集合
+     */
+    public List<PdmConstructor> selectPdmConstructorList(PdmConstructor pdmConstructor);
+
+    /**
+     * 新增配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    public int insertPdmConstructor(PdmConstructor pdmConstructor);
+
+    /**
+     * 修改配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    public int updatePdmConstructor(PdmConstructor pdmConstructor);
+
+    /**
+     * 删除配网工程队伍施工人员信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 结果
+     */
+    public int deletePdmConstructorById(Long id);
+
+    /**
+     * 批量删除配网工程队伍施工人员信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePdmConstructorByIds(Long[] ids);
+
+    /**
+     *
+     * @param teamId
+     * @return
+     */
+    public int deletePdmConstructorByTeamId(@Param("teamId")Long teamId);
+
+    public  int deletePdmConstructorByTeamIds(Long[] ids);
+
+    public List<PdmConstructor> selectPdmConstructorByTeamNo(@Param("teamNo")String teamNo);
+}

+ 69 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/IPdmConstructTeamService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.powerdistribution.service;
+
+import java.util.List;
+import com.ruoyi.powerdistribution.domain.PdmConstructTeam;
+import com.ruoyi.powerdistribution.domain.excel.ConstructTeam;
+import com.ruoyi.powerdistribution.domain.vo.PdmConstructTeamVo;
+
+/**
+ * 配网工程队伍施工小组信息Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public interface IPdmConstructTeamService 
+{
+    /**
+     * 查询配网工程队伍施工小组信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 配网工程队伍施工小组信息
+     */
+    public PdmConstructTeam selectPdmConstructTeamById(Long id);
+
+    /**
+     * 查询配网工程队伍施工小组信息列表
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 配网工程队伍施工小组信息集合
+     */
+    public List<PdmConstructTeam> selectPdmConstructTeamList(PdmConstructTeam pdmConstructTeam);
+
+    /**
+     * 新增配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    public int insertPdmConstructTeam(PdmConstructTeamVo pdmConstructTeam);
+
+    /**
+     * 修改配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    public int updatePdmConstructTeam(PdmConstructTeamVo pdmConstructTeam);
+
+    /**
+     * 批量删除配网工程队伍施工小组信息
+     * 
+     * @param ids 需要删除的配网工程队伍施工小组信息主键集合
+     * @return 结果
+     */
+    public int deletePdmConstructTeamByIds(Long[] ids);
+
+    /**
+     * 删除配网工程队伍施工小组信息信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 结果
+     */
+    public int deletePdmConstructTeamById(Long id);
+
+    /**
+     * 文件导入
+     * @param constructTeamList
+     */
+    public void importExcel(List<ConstructTeam> constructTeamList);
+}

+ 61 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/IPdmConstructorService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.powerdistribution.service;
+
+import java.util.List;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+
+/**
+ * 配网工程队伍施工人员信息Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+public interface IPdmConstructorService 
+{
+    /**
+     * 查询配网工程队伍施工人员信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 配网工程队伍施工人员信息
+     */
+    public PdmConstructor selectPdmConstructorById(Long id);
+
+    /**
+     * 查询配网工程队伍施工人员信息列表
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 配网工程队伍施工人员信息集合
+     */
+    public List<PdmConstructor> selectPdmConstructorList(PdmConstructor pdmConstructor);
+
+    /**
+     * 新增配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    public int insertPdmConstructor(PdmConstructor pdmConstructor);
+
+    /**
+     * 修改配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    public int updatePdmConstructor(PdmConstructor pdmConstructor);
+
+    /**
+     * 批量删除配网工程队伍施工人员信息
+     * 
+     * @param ids 需要删除的配网工程队伍施工人员信息主键集合
+     * @return 结果
+     */
+    public int deletePdmConstructorByIds(Long[] ids);
+
+    /**
+     * 删除配网工程队伍施工人员信息信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 结果
+     */
+    public int deletePdmConstructorById(Long id);
+}

+ 153 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/impl/PdmConstructTeamServiceImpl.java

@@ -0,0 +1,153 @@
+package com.ruoyi.powerdistribution.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+import com.ruoyi.powerdistribution.domain.excel.ConstructTeam;
+import com.ruoyi.powerdistribution.domain.vo.PdmConstructTeamVo;
+import com.ruoyi.powerdistribution.mapper.PdmConstructorMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.powerdistribution.mapper.PdmConstructTeamMapper;
+import com.ruoyi.powerdistribution.domain.PdmConstructTeam;
+import com.ruoyi.powerdistribution.service.IPdmConstructTeamService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 配网工程队伍施工小组信息Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+@Service
+public class PdmConstructTeamServiceImpl implements IPdmConstructTeamService 
+{
+    @Autowired
+    private PdmConstructTeamMapper pdmConstructTeamMapper;
+
+    @Autowired
+    private PdmConstructorMapper pdmConstructorMapper;
+
+    /**
+     * 查询配网工程队伍施工小组信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 配网工程队伍施工小组信息
+     */
+    @Override
+    public PdmConstructTeam selectPdmConstructTeamById(Long id)
+    {
+        return pdmConstructTeamMapper.selectPdmConstructTeamById(id);
+    }
+
+    /**
+     * 查询配网工程队伍施工小组信息列表
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 配网工程队伍施工小组信息
+     */
+    @Override
+    public List<PdmConstructTeam> selectPdmConstructTeamList(PdmConstructTeam pdmConstructTeam)
+    {
+        return pdmConstructTeamMapper.selectPdmConstructTeamList(pdmConstructTeam);
+    }
+
+    /**
+     * 新增配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int insertPdmConstructTeam(PdmConstructTeamVo pdmConstructTeam)
+    {
+        String teamNo= IdUtils.fastSimpleUUID();
+        pdmConstructTeam.setCreateTime(DateUtils.getNowDate());
+        pdmConstructTeam.setCreateBy(SecurityUtils.getUsername());
+        pdmConstructTeam.setTeamNo(teamNo);
+        pdmConstructTeam.getConstructorList().forEach(constructor->{
+            constructor.setTeamNo(teamNo);
+            pdmConstructorMapper.insertPdmConstructor(constructor);
+        });
+        return pdmConstructTeamMapper.insertPdmConstructTeam(pdmConstructTeam);
+    }
+
+    /**
+     * 修改配网工程队伍施工小组信息
+     * 
+     * @param pdmConstructTeam 配网工程队伍施工小组信息
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updatePdmConstructTeam(PdmConstructTeamVo pdmConstructTeam)
+    {
+        pdmConstructTeam.setUpdateTime(DateUtils.getNowDate());
+        pdmConstructTeam.setUpdateBy(SecurityUtils.getUsername());
+        pdmConstructTeam.getConstructorList().forEach(constructor->{
+           if(pdmConstructorMapper.updatePdmConstructor(constructor)<1){
+               constructor.setTeamNo(pdmConstructTeam.getTeamNo());
+               pdmConstructorMapper.insertPdmConstructor(constructor);
+           };
+        });
+        return pdmConstructTeamMapper.updatePdmConstructTeam(pdmConstructTeam);
+    }
+
+    /**
+     * 批量删除配网工程队伍施工小组信息
+     * 
+     * @param ids 需要删除的配网工程队伍施工小组信息主键
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int deletePdmConstructTeamByIds(Long[] ids)
+    {
+        pdmConstructorMapper.deletePdmConstructorByTeamIds(ids);
+        return pdmConstructTeamMapper.deletePdmConstructTeamByIds(ids);
+    }
+
+    /**
+     * 删除配网工程队伍施工小组信息信息
+     * 
+     * @param id 配网工程队伍施工小组信息主键
+     * @return 结果
+     */
+    @Override
+    public int deletePdmConstructTeamById(Long id)
+    {
+        pdmConstructorMapper.deletePdmConstructorByTeamId(id);
+        return pdmConstructTeamMapper.deletePdmConstructTeamById(id);
+    }
+
+    @Override
+    public void importExcel(List<ConstructTeam> constructTeamList) {
+        Map<String,PdmConstructTeamVo> data=new HashMap<>();
+        for (ConstructTeam constructTeam : constructTeamList) {
+            String key=constructTeam.getTeamNm()+","+constructTeam.getLegalPerson()+","+constructTeam.getLegalContactPhone()
+                    +","+constructTeam.getTeamLeader()+","+constructTeam.getTeamLeaderPhone();
+            if(data.containsKey(key)){
+                PdmConstructor constructor=new PdmConstructor();
+                BeanUtils.copyProperties(constructTeam,constructor);
+                PdmConstructTeamVo constructTeamVo=data.get(key);
+                constructTeamVo.getConstructorList().add(constructor);
+            }else{
+                PdmConstructTeamVo constructTeamVo=new PdmConstructTeamVo();
+                BeanUtils.copyProperties(constructTeam,constructTeamVo);
+                constructTeamVo.setConstructorList(new ArrayList<>());
+                data.put(key,constructTeamVo);
+            }
+        }
+        data.values().forEach(dmConstructTeamVo->{
+            insertPdmConstructTeam(dmConstructTeamVo);
+        });
+    }
+}

+ 96 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/service/impl/PdmConstructorServiceImpl.java

@@ -0,0 +1,96 @@
+package com.ruoyi.powerdistribution.service.impl;
+
+import java.util.List;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.powerdistribution.mapper.PdmConstructorMapper;
+import com.ruoyi.powerdistribution.domain.PdmConstructor;
+import com.ruoyi.powerdistribution.service.IPdmConstructorService;
+
+/**
+ * 配网工程队伍施工人员信息Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-01-20
+ */
+@Service
+public class PdmConstructorServiceImpl implements IPdmConstructorService 
+{
+    @Autowired
+    private PdmConstructorMapper pdmConstructorMapper;
+
+    /**
+     * 查询配网工程队伍施工人员信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 配网工程队伍施工人员信息
+     */
+    @Override
+    public PdmConstructor selectPdmConstructorById(Long id)
+    {
+        return pdmConstructorMapper.selectPdmConstructorById(id);
+    }
+
+    /**
+     * 查询配网工程队伍施工人员信息列表
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 配网工程队伍施工人员信息
+     */
+    @Override
+    public List<PdmConstructor> selectPdmConstructorList(PdmConstructor pdmConstructor)
+    {
+        return pdmConstructorMapper.selectPdmConstructorList(pdmConstructor);
+    }
+
+    /**
+     * 新增配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    @Override
+    public int insertPdmConstructor(PdmConstructor pdmConstructor)
+    {
+        pdmConstructor.setCreateTime(DateUtils.getNowDate());
+        return pdmConstructorMapper.insertPdmConstructor(pdmConstructor);
+    }
+
+    /**
+     * 修改配网工程队伍施工人员信息
+     * 
+     * @param pdmConstructor 配网工程队伍施工人员信息
+     * @return 结果
+     */
+    @Override
+    public int updatePdmConstructor(PdmConstructor pdmConstructor)
+    {
+        pdmConstructor.setUpdateTime(DateUtils.getNowDate());
+        return pdmConstructorMapper.updatePdmConstructor(pdmConstructor);
+    }
+
+    /**
+     * 批量删除配网工程队伍施工人员信息
+     * 
+     * @param ids 需要删除的配网工程队伍施工人员信息主键
+     * @return 结果
+     */
+    @Override
+    public int deletePdmConstructorByIds(Long[] ids)
+    {
+        return pdmConstructorMapper.deletePdmConstructorByIds(ids);
+    }
+
+    /**
+     * 删除配网工程队伍施工人员信息信息
+     * 
+     * @param id 配网工程队伍施工人员信息主键
+     * @return 结果
+     */
+    @Override
+    public int deletePdmConstructorById(Long id)
+    {
+        return pdmConstructorMapper.deletePdmConstructorById(id);
+    }
+}

+ 215 - 0
ruoyi-powerdistribution/src/main/java/com/ruoyi/powerdistribution/util/DynamicEasyExcelConstructTeamListener.java

@@ -0,0 +1,215 @@
+package com.ruoyi.powerdistribution.util;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.metadata.CellExtra;
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.powerdistribution.domain.excel.ConstructTeam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
+import java.util.*;
+
+/**
+ * 创建一个监听器
+ */
+public class DynamicEasyExcelConstructTeamListener extends AnalysisEventListener<ConstructTeam> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DynamicEasyExcelConstructTeamListener.class);
+
+    private HttpServletRequest request;
+
+    /**
+     * 表头数据(存储所有的表头数据)
+     */
+    private List<Map<Integer, String>> headList = new ArrayList<>();
+
+    /**
+     * 数据体
+     */
+    private List<Map<Integer, String>> dataList = new ArrayList<>();
+
+
+    public DynamicEasyExcelConstructTeamListener(HttpServletRequest request, Integer headRowNumber) {
+        this.request = request;
+        this.headRowNumber = headRowNumber;
+    }
+    public DynamicEasyExcelConstructTeamListener() {
+    }
+    /**
+     * 最终返回的解析数据list
+     */
+    private final List<ConstructTeam> data = new ArrayList<>();
+    /**
+     * 解析数据
+     * key是sheetName,value是相应sheet的解析数据
+     */
+    private final Map<String, List<ConstructTeam>> dataMap = new HashMap<>();
+    /**
+     * 合并单元格
+     * key键是sheetName,value是相应sheet的合并单元格数据
+     */
+    private final Map<String, List<CellExtra>> mergeMap = new HashMap<>();
+
+    /**
+     * 正文起始行
+     */
+    private Integer headRowNumber;
+
+    /**
+     * 这里会一行行的返回头信息,不包含数据
+     */
+    @Override
+    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
+        LOGGER.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
+        //存储全部表头数据
+    }
+
+    /**
+     * 这个每一条数据解析都会来调用
+     */
+    @Override
+    public void invoke(ConstructTeam excelData1, AnalysisContext context) {
+        LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
+        String teamNm = excelData1.getTeamNm();
+        String sheetName = context.readSheetHolder().getSheetName();
+        dataMap.computeIfAbsent(sheetName, k -> new ArrayList<>());
+        dataMap.get(sheetName).add(excelData1);//将所有的数据放入dataMap中
+//        data.add(excelData1);
+    }
+
+    //上面写入的CellExtraTypeEnum.MERGE就会来调用这个方法
+    @Override
+    public void extra(CellExtra extra, AnalysisContext context) {
+        String sheetName = context.readSheetHolder().getSheetName();//获取sheet名称
+        switch (extra.getType()) {
+            case MERGE: // 额外信息是合并单元格
+                if (extra.getRowIndex() >= headRowNumber) {
+                    mergeMap.computeIfAbsent(sheetName, k -> new ArrayList<>());
+                    mergeMap.get(sheetName).add(extra);//key是sheet名称,value是合并单元格信息
+                }
+                break;
+            case COMMENT:
+            case HYPERLINK:
+            default:
+        }
+    }
+
+    /**
+     * 将具有多个sheet数据的dataMap转变成一个data
+     */
+    private void convertDataMapToData() {
+        Iterator<Map.Entry<String, List<ConstructTeam>>> iterator = dataMap.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<String, List<ConstructTeam>> next = iterator.next();
+            String sheetName = next.getKey();//sheet的名称
+            List<ConstructTeam> list = next.getValue();//sheet中的集合数据
+            List<CellExtra> mergeList = mergeMap.get(sheetName);//合并单元格信息
+            if (!CollectionUtils.isEmpty(mergeList)) {
+                list = explainMergeData(list, mergeList);
+            }
+            data.addAll(list);
+        }
+    }
+
+    /**
+     * 处理有合并单元格的数据
+     * @param list      解析的sheet数据
+     * @param mergeList 合并单元格信息
+     * @return 填充好的解析数据
+     */
+    private List<ConstructTeam> explainMergeData(List<ConstructTeam> list, List<CellExtra> mergeList) {
+        // 循环所有合并单元格信息
+        for (CellExtra item : mergeList) {
+            Integer firstRowIndex = item.getFirstRowIndex() - headRowNumber;//起始行
+            Integer lastRowIndex = item.getLastRowIndex() - headRowNumber;//结束行
+            Integer firstColumnIndex = item.getFirstColumnIndex();//起始列
+            Integer lastColumnIndex = item.getLastColumnIndex();//结束列
+            // 获取初始值,即合并单元的的值
+            Object initValue = getInitValueFromList(firstRowIndex, firstColumnIndex, list);
+            // 设置值
+            for (int i = firstRowIndex; i <= lastRowIndex; i++) {
+                for (int j = firstColumnIndex; j <= lastColumnIndex; j++) {
+                    setInitValueToList(initValue, i, j, list);
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取合并单元格的初始值
+     * rowIndex对应list的索引
+     * columnIndex对应实体内的字段
+     *
+     * @param firstRowIndex    起始行
+     * @param firstColumnIndex 起始列
+     * @param list             列数据
+     * @return 初始值
+     */
+    private Object getInitValueFromList(Integer firstRowIndex, Integer firstColumnIndex, List<ConstructTeam> list) {
+        Object filedValue = null;
+        ConstructTeam object = list.get(firstRowIndex);
+        for (Field field : object.getClass().getDeclaredFields()) {
+            field.setAccessible(true);
+            ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
+            if (annotation != null) {
+                if (annotation.index() == firstColumnIndex) {
+                    try {
+                        filedValue = field.get(object);
+                        break;
+                    } catch (IllegalAccessException e) {
+                        LOGGER.error("获取合并单元格的初始值异常:" + e.getMessage());
+                    }
+                }
+            }
+        }
+        return filedValue;
+    }
+
+    /**
+     * 设置合并单元格的值
+     *
+     * @param filedValue  值
+     * @param rowIndex    行
+     * @param columnIndex 列
+     * @param list        解析数据
+     */
+    public void setInitValueToList(Object filedValue, Integer rowIndex, Integer columnIndex, List<ConstructTeam> list) {
+        ConstructTeam object = list.get(rowIndex);//
+        for (Field field : object.getClass().getDeclaredFields()) {
+            field.setAccessible(true);//提升反射性能,关闭安全检查
+            ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
+            if (annotation != null) {
+                if (annotation.index() == columnIndex) {
+                    try {
+                        field.set(object, filedValue);
+                        break;
+                    } catch (IllegalAccessException e) {
+                        LOGGER.error("设置合并单元格的值异常:" + e.getMessage());
+                    }
+                }
+            }
+        }
+    }
+    /**
+     * 所有数据解析完成了 都会来调用
+     *每个sheet调取一次
+     * @param context
+     */
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        //LOGGER.info("所有数据解析完成!"+data);
+        //在invok解析完数据以后,才去处理合并单元格数据,最后得到合并完以后的数据
+        convertDataMapToData();
+        //LOGGER.info("所有数据解析完成!"+data);
+    }
+    public List<ConstructTeam> getDataList() {
+        return data;
+    }
+}

+ 142 - 0
ruoyi-powerdistribution/src/main/resources/mapper/powerdistribution/PdmConstructTeamMapper.xml

@@ -0,0 +1,142 @@
+<?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.ruoyi.powerdistribution.mapper.PdmConstructTeamMapper">
+    
+    <resultMap type="PdmConstructTeam" id="PdmConstructTeamResult">
+        <result property="id"    column="id"    />
+        <result property="teamNo"    column="team_no"    />
+        <result property="countyOrgNm"    column="county_org_nm"    />
+        <result property="teamNm"    column="team_nm"    />
+        <result property="legalPerson"    column="legal_person"    />
+        <result property="legalContactPhone"    column="legal_contact_phone"    />
+        <result property="teamSerialNo"    column="team_serial_no"    />
+        <result property="teamLeader"    column="team_leader"    />
+        <result property="teamLeaderPhone"    column="team_leader_phone"    />
+        <result property="construcCarNumber"    column="construc_car_number"    typeHandler="com.ruoyi.common.handler.ConvertCommaSeparatedStrToListTypeHandler" javaType="java.util.List" />
+        <result property="arrestPoint"    column="arrest_point"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+    <resultMap type="com.ruoyi.powerdistribution.domain.vo.PdmConstructTeamVo" id="PdmConstructTeamResult2">
+        <result property="id"    column="id"    />
+        <result property="countyOrgNm"    column="county_org_nm"    />
+        <result property="teamNo"    column="team_no"    />
+        <result property="teamNm"    column="team_nm"    />
+        <result property="legalPerson"    column="legal_person"    />
+        <result property="legalContactPhone"    column="legal_contact_phone"    />
+        <result property="teamSerialNo"    column="team_serial_no"    />
+        <result property="teamLeader"    column="team_leader"    />
+        <result property="teamLeaderPhone"    column="team_leader_phone"    />
+        <result property="construcCarNumber"    column="construc_car_number"  typeHandler="com.ruoyi.common.handler.ConvertCommaSeparatedStrToListTypeHandler" javaType="java.util.List"/>
+        <result property="arrestPoint"    column="arrest_point"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+        <collection property="constructorList" column="{teamNo=team_no}" select="com.ruoyi.powerdistribution.mapper.PdmConstructorMapper.selectPdmConstructorByTeamNo"></collection>
+    </resultMap>
+
+    <sql id="selectPdmConstructTeamVo">
+        select id, county_org_nm,team_no, team_nm, legal_person, legal_contact_phone, team_serial_no, team_leader, team_leader_phone, construc_car_number, arrest_point, create_by, create_time, update_by, update_time, remark from pdm_construct_team
+    </sql>
+
+    <select id="selectPdmConstructTeamList" parameterType="PdmConstructTeam" resultMap="PdmConstructTeamResult2">
+        <include refid="selectPdmConstructTeamVo"/>
+        <where>
+            <if test="countyOrgNm != null  and countyOrgNm != ''"> and county_org_nm = #{countyOrgNm}</if>
+            <if test="teamNo != null  and teamNo != ''"> and team_no = #{teamNo}</if>
+            <if test="teamNm != null  and teamNm != ''"> and team_nm = #{teamNm}</if>
+            <if test="legalPerson != null  and legalPerson != ''"> and legal_person = #{legalPerson}</if>
+            <if test="legalContactPhone != null  and legalContactPhone != ''"> and legal_contact_phone = #{legalContactPhone}</if>
+            <if test="teamSerialNo != null "> and team_serial_no = #{teamSerialNo}</if>
+            <if test="teamLeader != null  and teamLeader != ''"> and team_leader = #{teamLeader}</if>
+            <if test="teamLeaderPhone != null  and teamLeaderPhone != ''"> and team_leader_phone = #{teamLeaderPhone}</if>
+            <if test="construcCarNumber != null  and construcCarNumber != ''"> and construc_car_number = #{construcCarNumber}</if>
+            <if test="arrestPoint != null  and arrestPoint != ''"> and arrest_point = #{arrestPoint}</if>
+        </where>
+    </select>
+    
+    <select id="selectPdmConstructTeamById" parameterType="Long" resultMap="PdmConstructTeamResult">
+        <include refid="selectPdmConstructTeamVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertPdmConstructTeam" parameterType="PdmConstructTeam">
+        insert into pdm_construct_team
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="countyOrgNm != null">county_org_nm,</if>
+            <if test="teamNo != null and teamNo != ''">team_no,</if>
+            <if test="teamNm != null">team_nm,</if>
+            <if test="legalPerson != null">legal_person,</if>
+            <if test="legalContactPhone != null">legal_contact_phone,</if>
+            <if test="teamSerialNo != null">team_serial_no,</if>
+            <if test="teamLeader != null">team_leader,</if>
+            <if test="teamLeaderPhone != null">team_leader_phone,</if>
+            <if test="construcCarNumber != null">construc_car_number,</if>
+            <if test="arrestPoint != null">arrest_point,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="countyOrgNm != null and countyOrgNm!=''">#{countyOrgNm},</if>
+            <if test="teamNo != null and teamNo != ''">#{teamNo},</if>
+            <if test="teamNm != null">#{teamNm},</if>
+            <if test="legalPerson != null">#{legalPerson},</if>
+            <if test="legalContactPhone != null">#{legalContactPhone},</if>
+            <if test="teamSerialNo != null">#{teamSerialNo},</if>
+            <if test="teamLeader != null">#{teamLeader},</if>
+            <if test="teamLeaderPhone != null">#{teamLeaderPhone},</if>
+            <if test="construcCarNumber != null">#{construcCarNumber},</if>
+            <if test="arrestPoint != null">#{arrestPoint},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updatePdmConstructTeam" parameterType="PdmConstructTeam">
+        update pdm_construct_team
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="countyOrgNm != null and countyOrgNm!=''">county_org_nm=#{countyOrgNm},</if>
+            <if test="teamNo != null and teamNo != ''">team_no = #{teamNo},</if>
+            <if test="teamNm != null">team_nm = #{teamNm},</if>
+            <if test="legalPerson != null">legal_person = #{legalPerson},</if>
+            <if test="legalContactPhone != null">legal_contact_phone = #{legalContactPhone},</if>
+            <if test="teamSerialNo != null">team_serial_no = #{teamSerialNo},</if>
+            <if test="teamLeader != null">team_leader = #{teamLeader},</if>
+            <if test="teamLeaderPhone != null">team_leader_phone = #{teamLeaderPhone},</if>
+            <if test="construcCarNumber != null">construc_car_number = #{construcCarNumber},</if>
+            <if test="arrestPoint != null">arrest_point = #{arrestPoint},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deletePdmConstructTeamById" parameterType="Long">
+        delete from pdm_construct_team where id = #{id}
+    </delete>
+
+    <delete id="deletePdmConstructTeamByIds" parameterType="String">
+        delete from pdm_construct_team where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 107 - 0
ruoyi-powerdistribution/src/main/resources/mapper/powerdistribution/PdmConstructorMapper.xml

@@ -0,0 +1,107 @@
+<?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.ruoyi.powerdistribution.mapper.PdmConstructorMapper">
+    
+    <resultMap type="PdmConstructor" id="PdmConstructorResult">
+        <result property="id"    column="id"    />
+        <result property="teamNo"    column="team_no"    />
+        <result property="constructPersonType"    column="construct_person_type"    />
+        <result property="constructPersonnelName"    column="construct_personnel_name"    />
+        <result property="constructPersonnelPhone"    column="construct_personnel_phone"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectPdmConstructorVo">
+        select id, team_no, construct_person_type, construct_personnel_name, construct_personnel_phone, create_by, create_time, update_by, update_time, remark from pdm_constructor
+    </sql>
+
+    <select id="selectPdmConstructorList" parameterType="PdmConstructor" resultMap="PdmConstructorResult">
+        <include refid="selectPdmConstructorVo"/>
+        <where>  
+            <if test="teamNo != null  and teamNo != ''"> and team_no = #{teamNo}</if>
+            <if test="constructPersonType != null  and constructPersonType != ''"> and construct_person_type = #{constructPersonType}</if>
+            <if test="constructPersonnelName != null  and constructPersonnelName != ''"> and construct_personnel_name like concat('%', #{constructPersonnelName}, '%')</if>
+            <if test="constructPersonnelPhone != null  and constructPersonnelPhone != ''"> and construct_personnel_phone = #{constructPersonnelPhone}</if>
+        </where>
+    </select>
+    
+    <select id="selectPdmConstructorById" parameterType="Long" resultMap="PdmConstructorResult">
+        <include refid="selectPdmConstructorVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertPdmConstructor" parameterType="PdmConstructor">
+        insert into pdm_constructor
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="teamNo != null and teamNo != ''">team_no,</if>
+            <if test="constructPersonType != null">construct_person_type,</if>
+            <if test="constructPersonnelName != null">construct_personnel_name,</if>
+            <if test="constructPersonnelPhone != null">construct_personnel_phone,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="teamNo != null and teamNo != ''">#{teamNo},</if>
+            <if test="constructPersonType != null">#{constructPersonType},</if>
+            <if test="constructPersonnelName != null">#{constructPersonnelName},</if>
+            <if test="constructPersonnelPhone != null">#{constructPersonnelPhone},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updatePdmConstructor" parameterType="PdmConstructor">
+        update pdm_constructor
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="teamNo != null and teamNo != ''">team_no = #{teamNo},</if>
+            <if test="constructPersonType != null">construct_person_type = #{constructPersonType},</if>
+            <if test="constructPersonnelName != null">construct_personnel_name = #{constructPersonnelName},</if>
+            <if test="constructPersonnelPhone != null">construct_personnel_phone = #{constructPersonnelPhone},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deletePdmConstructorById" parameterType="Long">
+        delete from pdm_constructor where id = #{id}
+    </delete>
+
+    <delete id="deletePdmConstructorByIds" parameterType="String">
+        delete from pdm_constructor where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <delete id="deletePdmConstructorByTeamId" parameterType="Long">
+        delete from pdm_constructor where team_no =(select team_no from pdm_construct_team t where t.id=#{teamId} )
+    </delete>
+
+    <delete id="deletePdmConstructorByTeamIds" parameterType="String">
+        delete from pdm_constructor where team_no in( select team_no from pdm_construct_team t  where t.id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        )
+    </delete>
+    <select id="selectPdmConstructorByTeamNo" resultMap="PdmConstructorResult">
+        select * from pdm_constructor where team_no=#{teamNo}
+    </select>
+</mapper>