From 05600d089901d44e8d5036046025b6a90ceb896a Mon Sep 17 00:00:00 2001
From: heheng <heheng@123456>
Date: 星期二, 03 十二月 2024 16:57:20 +0800
Subject: [PATCH] 修改及增加功能

---
 expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java             |   30 +
 expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml                             |  121 +++++++
 expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java                          |   63 ++-
 expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java       |   74 ++++
 expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java                              |    8 
 expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java         |   15 +
 expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java            |   37 +
 expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java      |   23 +
 expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostVo.java                       |   25 +
 expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportResp.java        |   52 +++
 expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectDetailResp.java              |   38 ++
 expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java     |   39 ++
 expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java         |   64 +++
 expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml                             |    4 
 expert-admin/src/main/resources/application.yml                                                    |    4 
 expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java                 |    9 
 expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java             |   38 ++
 expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java |    9 
 expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostDTO.java                      |   23 +
 expert-system/src/main/java/com/gkhy/system/domain/vo/request/ExpertBatchChangeReq.java            |   32 ++
 expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java                              |  129 +++----
 expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java                        |    8 
 expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java                      |    7 
 expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml                         |   39 +-
 expert-system/src/main/java/com/gkhy/system/service/impl/ProjectFileServiceImpl.java               |    2 
 25 files changed, 730 insertions(+), 163 deletions(-)

diff --git a/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java b/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java
index 3079375..0be9382 100644
--- a/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java
+++ b/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ExpertInfoController.java
@@ -7,7 +7,9 @@
 import com.gkhy.common.core.domain.AjaxResult;
 import com.gkhy.common.core.domain.R;
 import com.gkhy.common.core.page.TableDataInfo;
+import com.gkhy.common.utils.SecurityUtils;
 import com.gkhy.system.domain.SysExpertInfo;
+import com.gkhy.system.domain.vo.request.ExpertBatchChangeReq;
 import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
 import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
 import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
@@ -34,7 +36,7 @@
     private SysExpertInfoService expertInfoService;
 
     // @RequiresPermissions("system:assess:monitor")
-    @ApiOperation(value = "专家列表(分页)")
+    @ApiOperation(value = "专家列表(分页-都可见)")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
             @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
@@ -42,6 +44,23 @@
     @GetMapping("/list")
     public TableDataInfo exportInfoList(SysExpertInfo expertInfo) {
         startPage();
+        List<SysExpertInfo> sysExpertInfos = expertInfoService.exportInfoList(expertInfo);
+        return getDataTable(sysExpertInfos);
+
+    }
+
+
+    @ApiOperation(value = "专家列表(分页-限制处室)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10,最大50")
+    })
+    @GetMapping("/perList")
+    public TableDataInfo exportInfoPerList(SysExpertInfo expertInfo) {
+        startPage();
+        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            expertInfo.setDeptId(SecurityUtils.getDeptId());
+        }
         List<SysExpertInfo> sysExpertInfos = expertInfoService.exportInfoList(expertInfo);
         return getDataTable(sysExpertInfos);
 
@@ -114,4 +133,13 @@
     }
 
 
+    @RepeatSubmit
+    //@RequiresPermissions("system:assess:monitor")
+    @ApiOperation(value = "一键修改证书有效期")
+    @PostMapping("/batchChangeEmploymentDate")
+    public AjaxResult batchChangeEmploymentDate(@RequestBody ExpertBatchChangeReq expertInfo) {
+        expertInfoService.batchChangeEmploymentDate(expertInfo);
+        return AjaxResult.success();
+    }
+
 }
diff --git a/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java b/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java
index b11a769..3428cb3 100644
--- a/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java
+++ b/expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java
@@ -203,6 +203,18 @@
         return R.ok(projectManagementService.selectProjectExpertDetailList(projectExpertId));
     }
 
+    @ApiOperation(value = "专家考评记录——专家考评详情")
+    //@PreAuthorize("@ss.hasPermi('system:management:list')")
+    @GetMapping("/selectProjectExpertDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "projectExpertId", dataType = "long", required = true, value = "项目专家id")
+    })
+    public R<ProjectDetailResp> selectProjectExpertDetail(@RequestParam("projectExpertId") Long projectExpertId)
+    {
+        return R.ok(projectManagementService.selectProjectExpertDetail(projectExpertId));
+    }
+
+
     @GetMapping("/selectProjectFileList")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "query", name = "projectId", dataType = "long", required = true, value = "项目id"),
@@ -219,4 +231,15 @@
         return R.ok(projectManagementService.getProjectNum());
     }
 
+    @ApiOperation(value = "项目管理----导出专家报销")
+    //@PreAuthorize("@ss.hasPermi('system:management:list')")
+    @GetMapping("/projectExpertExportList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "projectId", dataType = "long", required = true, value = "项目id")
+    })
+    public R<List<ProjectExpertExportInfoRes>> projectExpertExportList(@RequestParam("projectId") Long projectId)
+    {
+        return R.ok(projectManagementService.projectExpertExportList(projectId));
+    }
+
 }
diff --git a/expert-admin/src/main/resources/application.yml b/expert-admin/src/main/resources/application.yml
index e262d7a..810a2d4 100644
--- a/expert-admin/src/main/resources/application.yml
+++ b/expert-admin/src/main/resources/application.yml
@@ -48,8 +48,8 @@
     basename: i18n/messages
   profiles:
     # 环境配置,dev开发环境,prod生产环境
-    #active: dev
-    active: prod
+    active: dev
+    #active: prod
   # 文件上传
   servlet:
     multipart:
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java b/expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java
index 5fcb183..f986dd8 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/ProjectExpert.java
@@ -6,10 +6,11 @@
 import com.gkhy.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 
 
 /**
@@ -18,6 +19,8 @@
  * @author expert
  * @date 2024-11-14
  */
+@EqualsAndHashCode(callSuper = true)
+@Data
 @TableName(resultMap = "com.gkhy.system.mapper.ProjectExpertMapper.ProjectExpertResult")
 @ApiModel(value = "项目专家关联对象", description = "项目专家关联对象表")
 public class ProjectExpert extends BaseEntity {
@@ -32,40 +35,40 @@
     /**
      * 项目id
      */
-    @ApiModelProperty(name = "项目名称",required = true)
+    @ApiModelProperty(value = "项目名称",required = true)
     @NotNull(message = "项目不能为空")
     private Long projectId;
 
     /**
      * 专家id
      */
-    @ApiModelProperty(name = "专家id",required = true)
+    @ApiModelProperty(value = "专家id",required = true)
     @NotNull(message = "选择专家")
     private Long expertId;
 
     /**
      * 总分
      */
-    @ApiModelProperty(name = "总分")
+    @ApiModelProperty(value = "总分")
     private Long score;
 
     /**
      * 评估状态0未评估1已评估
      */
-    @ApiModelProperty(name = "评估状态0未评估1已评估")
+    @ApiModelProperty(value = "评估状态0未评估1已评估")
     private Long evaluationState;
 
     /**
      * 选取方式1固定2随机
      */
-    @ApiModelProperty(name = "选取方式1固定2随机",required = true)
+    @ApiModelProperty(value = "选取方式1固定2随机",required = true)
     @NotNull(message = "选取方式不能为空")
     private Long selectionMode;
 
     /**
      * 是否组长0否1是
      */
-    @ApiModelProperty(name = "是否组长0否1是",required = true)
+    @ApiModelProperty(value = "是否组长0否1是",required = true)
     @NotNull(message = "是否组长不能为空")
     private Long teamLeader;
 
@@ -74,85 +77,65 @@
      */
     private Long delFlag;
 
-    public void setId(Long id) {
-        this.id = id;
-    }
 
-    public Long getId() {
-        return id;
-    }
+    @ApiModelProperty(value = "职业道德1优秀2合格3基本合格4不合格")
+    private Long professionalEthics;
 
-    public void setProjectId(Long projectId) {
-        this.projectId = projectId;
-    }
+    /** 公正廉洁1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "公正廉洁1优秀2合格3基本合格4不合格")
+    private Long impartialHonest;
 
-    public Long getProjectId() {
-        return projectId;
-    }
+    /** 综合协调1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "综合协调1优秀2合格3基本合格4不合格")
+    private Long comprehensiveCoordination;
 
-    public void setExpertId(Long expertId) {
-        this.expertId = expertId;
-    }
+    /** 专业能力1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "专业能力1优秀2合格3基本合格4不合格")
+    private Long professionalAbility;
 
-    public Long getExpertId() {
-        return expertId;
-    }
+    /** 意见表达1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "意见表达1优秀2合格3基本合格4不合格")
+    private Long expressingOpinions;
 
-    public void setScore(Long score) {
-        this.score = score;
-    }
+    /** 其他意见 */
+    @ApiModelProperty(value = "其他意见")
+    private String others;
 
-    public Long getScore() {
-        return score;
-    }
+    /** 综合评价1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "综合评价1优秀2合格3基本合格4不合格")
+    private Long comprehensiveEvaluation;
 
-    public void setevaluationState(Long evaluationState) {
-        this.evaluationState = evaluationState;
-    }
+    /** 重大隐患 */
+    @ApiModelProperty(value = "重大隐患")
+    private Long majorDangers;
 
-    public Long getevaluationState() {
-        return evaluationState;
-    }
+    /** 一般隐患 */
+    @ApiModelProperty(value = "一般隐患")
+    private Long generalHazards;
 
-    public void setSelectionMode(Long selectionMode) {
-        this.selectionMode = selectionMode;
-    }
+    /** 内容描述 */
+    @ApiModelProperty(value = "内容描述")
+    private String content;
 
-    public Long getSelectionMode() {
-        return selectionMode;
-    }
+    /** 计费标准 */
+    @ApiModelProperty(value = "计费标准")
+    private String freightBasis;
 
-    public void setTeamLeader(Long teamLeader) {
-        this.teamLeader = teamLeader;
-    }
+    /** 计费时长 */
+    @ApiModelProperty(value = "计费时长")
+    private BigDecimal billingDuration;
 
-    public Long getTeamLeader() {
-        return teamLeader;
-    }
+    /** 税后金额 */
+    @ApiModelProperty(value = "税后金额")
+    private BigDecimal afterTaxAmount;
 
-    public void setDelFlag(Long delFlag) {
-        this.delFlag = delFlag;
-    }
+    /** 开户行 */
+    @ApiModelProperty(value = "开户行")
+    private String openBank;
 
-    public Long getDelFlag() {
-        return delFlag;
-    }
+    /** 卡号 */
+    @ApiModelProperty(value = "卡号")
+    private String bankCard;
 
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-                .append("id", getId())
-                .append("projectId", getProjectId())
-                .append("expertId", getExpertId())
-                .append("score", getScore())
-                .append("evaluationState", getevaluationState())
-                .append("selectionMode", getSelectionMode())
-                .append("teamLeader", getTeamLeader())
-                .append("delFlag", getDelFlag())
-                .append("createBy", getCreateBy())
-                .append("createTime", getCreateTime())
-                .append("updateBy", getUpdateBy())
-                .append("updateTime", getUpdateTime())
-                .toString();
-    }
+
 }
\ No newline at end of file
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java b/expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java
index 473232d..f2ffdc2 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java
@@ -1,10 +1,13 @@
 package com.gkhy.system.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.gkhy.common.core.domain.BaseEntity;
+import com.gkhy.system.domain.vo.ProjectDeptPostDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -21,7 +24,7 @@
  * @author expert
  * @date 2024-11-14
  */
-@TableName(resultMap = "com.gkhy.system.mapper.ProjectManagementMapper.ProjectManagementResult")
+@TableName(autoResultMap = true)
 @ApiModel(value = "项目管理对象", description = "项目管理对象表")
 public class ProjectManagement extends BaseEntity {
     private static final long serialVersionUID = 1L;
@@ -56,8 +59,8 @@
     /**
      * 被检单位
      */
-    @ApiModelProperty(value = "被检单位")
-    private String companyName;
+    @ApiModelProperty(value = "工作类别")
+    private String jobCategory;
 
     /**
      * 项目地址
@@ -66,12 +69,16 @@
     @NotBlank(message = "项目地址不能为空")
     private String projectAddress;
 
-    /**
-     * 部门带队人员
-     */
-    @ApiModelProperty(value = "部门带队人员",required = true)
-    @NotBlank(message = "处室带队人员不能为空")
-    private String deptUserName;
+//    /**
+//     * 部门带队人员
+//     */
+//    @ApiModelProperty(value = "处室人员",required = false,hidden = true)
+//    private String deptUserName;
+
+    @ApiModelProperty(value = "处室人员及职务职务",required = true)
+    @NotNull(message = "处室人员及职务职务不能为空")
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ProjectDeptPostDTO deptPostName;
 
     /**
      * 乐观锁
@@ -176,13 +183,7 @@
         return deptName;
     }
 
-    public void setCompanyName(String companyName) {
-        this.companyName = companyName;
-    }
 
-    public String getCompanyName() {
-        return companyName;
-    }
 
     public void setProjectAddress(String projectAddress) {
         this.projectAddress = projectAddress;
@@ -192,13 +193,13 @@
         return projectAddress;
     }
 
-    public void setDeptUserName(String deptUserName) {
-        this.deptUserName = deptUserName;
-    }
-
-    public String getDeptUserName() {
-        return deptUserName;
-    }
+//    public void setDeptUserName(String deptUserName) {
+//        this.deptUserName = deptUserName;
+//    }
+//
+//    public String getDeptUserName() {
+//        return deptUserName;
+//    }
 
     public void setVersion(Long version) {
         this.version = version;
@@ -263,9 +264,7 @@
                 .append("projectName", getProjectName())
                 .append("deptId", getDeptId())
                 .append("deptName", getDeptName())
-                .append("companyName", getCompanyName())
                 .append("projectAddress", getProjectAddress())
-                .append("deptUserName", getDeptUserName())
                 .append("version", getVersion())
                 .append("state", getState())
                 .append("remark", getRemark())
@@ -338,4 +337,20 @@
     public void setEvaluationState(Long evaluationState) {
         this.evaluationState = evaluationState;
     }
+
+    public String getJobCategory() {
+        return jobCategory;
+    }
+
+    public void setJobCategory(String jobCategory) {
+        this.jobCategory = jobCategory;
+    }
+
+    public ProjectDeptPostDTO getDeptPostName() {
+        return deptPostName;
+    }
+
+    public void setDeptPostName(ProjectDeptPostDTO deptPostName) {
+        this.deptPostName = deptPostName;
+    }
 }
\ No newline at end of file
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java b/expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java
index 7f4790e..ea5686e 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/SysExpertInfo.java
@@ -79,7 +79,7 @@
     @TableField("title")
     private String title;
 
-    @NotBlank(message ="电子照片不能为空" )
+    //@NotBlank(message ="电子照片不能为空" )
     @ApiModelProperty("电子照片")
     @TableField("electronic_photo")
     private String electronicPhoto;
@@ -156,6 +156,7 @@
     private String supportDirectionEmergency;
 
     @ApiModelProperty("简历")
+    @NotBlank(message ="简历不可为空" )
     @TableField("resume_key")
     private String resumeKey;
 
@@ -230,4 +231,9 @@
     @TableField("expert_certificate")
     private String expertCertificate;
 
+    @ApiModelProperty("证明材料")
+    @TableField("evidence")
+    private String evidence;
+
+
 }
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostDTO.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostDTO.java
new file mode 100644
index 0000000..d7607f5
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostDTO.java
@@ -0,0 +1,23 @@
+package com.gkhy.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@ApiModel(value = "项目处室及职务对象", description = "项目处室及职务对象")
+public class ProjectDeptPostDTO implements Serializable {
+
+    /**
+     * 部门带队人员
+     */
+    @ApiModelProperty(value = "处室职务对象",required = true)
+    @NotEmpty(message = "处室职务对象不能为空")
+    private List<ProjectDeptPostVo> postVos;
+
+
+}
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostVo.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostVo.java
new file mode 100644
index 0000000..1c75357
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/ProjectDeptPostVo.java
@@ -0,0 +1,25 @@
+package com.gkhy.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "项目处室及职务", description = "项目处室及职务")
+public class ProjectDeptPostVo implements Serializable {
+
+    /**
+     * 部门带队人员
+     */
+    @ApiModelProperty(value = "处室人员",required = true)
+    @NotBlank(message = "处室人员不能为空")
+    private String deptUserName;
+
+    @ApiModelProperty(value = "职务",required = true)
+    @NotBlank(message = "职务不能为空")
+    private String deptPostName;
+
+}
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ExpertBatchChangeReq.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ExpertBatchChangeReq.java
new file mode 100644
index 0000000..1eefe2d
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ExpertBatchChangeReq.java
@@ -0,0 +1,32 @@
+package com.gkhy.system.domain.vo.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@ApiModel(value = "专家一建修改有效期" , description = "专家一建修改有效期")
+@Data
+public class ExpertBatchChangeReq implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "选中数据",required = true)
+    @NotEmpty
+    private List<Long> id;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @NotNull
+    @ApiModelProperty(value = "聘书有效开始时间",required = true)
+    private Date employmentDateStart;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "聘书有效结束时间",required = true)
+    @NotNull
+    private Date employmentDateEnd;
+}
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java
index 5b8d301..10e1a98 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java
@@ -7,6 +7,7 @@
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 @ApiModel(value = "项目专家人员考评分数" , description = "项目专家人员考评分数")
@@ -28,6 +29,79 @@
     @NotNull(message = "得分不能为空")
     private Long score;
 
+
+    @ApiModelProperty(value = "职业道德1优秀2合格3基本合格4不合格")
+    @NotNull(message = "职业道德不能为空")
+    private Long professionalEthics;
+
+    /** 公正廉洁1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "公正廉洁1优秀2合格3基本合格4不合格")
+    @NotNull(message = "公正廉洁不能为空")
+    private Long impartialHonest;
+
+    /** 综合协调1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "综合协调1优秀2合格3基本合格4不合格")
+    @NotNull(message = "综合协调不能为空")
+    private Long comprehensiveCoordination;
+
+    /** 专业能力1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "专业能力1优秀2合格3基本合格4不合格")
+    @NotNull(message = "专业能力不能为空")
+    private Long professionalAbility;
+
+    /** 意见表达1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "意见表达1优秀2合格3基本合格4不合格")
+    @NotNull(message = "意见表达不能为空")
+    private Long expressingOpinions;
+
+    /** 其他意见 */
+    @ApiModelProperty(value = "其他意见")
+    private String others;
+
+    /** 综合评价1优秀2合格3基本合格4不合格 */
+    @ApiModelProperty(value = "综合评价1优秀2合格3基本合格4不合格")
+    @NotNull(message = "综合评价不能为空")
+    private Long comprehensiveEvaluation;
+
+    /** 重大隐患 */
+    @ApiModelProperty(value = "重大隐患")
+    private Long majorDangers;
+
+    /** 一般隐患 */
+    @ApiModelProperty(value = "一般隐患")
+    private Long generalHazards;
+
+    /** 内容描述 */
+    @ApiModelProperty(value = "内容描述")
+    private String content;
+
+    /** 计费标准 */
+    @ApiModelProperty(value = "计费标准")
+    @NotBlank(message = "计费标准不能为空")
+    private String freightBasis;
+
+    /** 计费时长 */
+    @ApiModelProperty(value = "计费时长")
+    @NotNull(message = "计费时长不能为空")
+    private BigDecimal billingDuration;
+
+    /** 税后金额 */
+    @ApiModelProperty(value = "税后金额")
+    @NotNull(message = "税后金额不能为空")
+    private BigDecimal afterTaxAmount;
+
+    /** 开户行 */
+    @ApiModelProperty(value = "开户行")
+    @NotBlank(message = "开户行不能为空")
+    private String openBank;
+
+    /** 卡号 */
+    @ApiModelProperty(value = "卡号")
+    @NotBlank(message = "卡号不能为空")
+    private String bankCard;
+
+
+
     @Data
     static public class Score {
 
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java
index bc0121d..7479a6f 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectManageSaveReq.java
@@ -1,6 +1,7 @@
 package com.gkhy.system.domain.vo.request;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gkhy.system.domain.vo.ProjectDeptPostDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -24,8 +25,8 @@
     /**
      * 项目名称
      */
-    @ApiModelProperty(value = "项目名称",required = true)
-    @NotBlank(message = "项目名称不能为空")
+    @ApiModelProperty(value = "项目名称(事由)",required = true)
+    @NotBlank(message = "项目名称(事由)不能为空")
     private String projectName;
 
     /**
@@ -45,22 +46,31 @@
     /**
      * 被检单位
      */
-    @ApiModelProperty(value = "被检单位")
-    private String companyName;
+    @ApiModelProperty(value = "工作类别")
+    @NotBlank(message = "工作类别不能为空")
+    private String jobCategory;
 
     /**
      * 项目地址
      */
-    @ApiModelProperty(value = "项目地址",required = true)
-    @NotBlank(message = "项目地址不能为空")
+    @ApiModelProperty(value = "目的地及相关企业名称等",required = true)
+    @NotBlank(message = "目的地及相关企业名称等")
     private String projectAddress;
 
-    /**
-     * 部门带队人员
-     */
-    @ApiModelProperty(value = "部门带队人员",required = true)
-    @NotBlank(message = "处室带队人员不能为空")
-    private String deptUserName;
+//    /**
+//     * 部门带队人员
+//     */
+//    @ApiModelProperty(value = "处室人员",required = true)
+//    @NotBlank(message = "处室人员不能为空")
+//    private String deptUserName;
+//
+//    @ApiModelProperty(value = "职务",required = true)
+//    @NotBlank(message = "职务不能为空")
+//    private String postName;
+
+    @ApiModelProperty(value = "处室人员及职务职务",required = true)
+    @NotNull(message = "处室人员及职务职务不能为空")
+    private ProjectDeptPostDTO deptPostName;
 
     /**
      * 项目预计开始日期
@@ -79,7 +89,6 @@
     private Date projectDateEnd;
 
 
-    @ApiModelProperty(value = "项目概况",required = true)
-    @NotBlank(message = "项目概况不能为空")
+    @ApiModelProperty(value = "项目概况")
     private String remark;
 }
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectDetailResp.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectDetailResp.java
new file mode 100644
index 0000000..873f551
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectDetailResp.java
@@ -0,0 +1,38 @@
+package com.gkhy.system.domain.vo.response;
+
+import com.gkhy.system.domain.ProjectExpert;
+import com.gkhy.system.domain.ProjectExpertDetail;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(value = "项目专家详情", description = "项目专家详情")
+@Data
+public class ProjectDetailResp extends ProjectExpert {
+
+    @ApiModelProperty("记录详情")
+    private List<ProjectExpertDetail> expertDetails;
+
+    /**
+     * 处室
+     */
+    @ApiModelProperty(value = "处室")
+    private Long deptId;
+
+    /**
+     * 部门名称
+     */
+    @ApiModelProperty(value = "处室名称")
+    private String deptName;
+
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "职称")
+    private String title;
+
+    @ApiModelProperty(value = "职务")
+    private String job;
+}
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java
index 857a82f..87d0ca3 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java
@@ -5,6 +5,8 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
+
 @ApiModel(value = "项目专家审批详情", description = "项目专家审批详情")
 @Data
 public class ProjectExpertCheckResp implements Serializable {
@@ -37,4 +39,17 @@
     @ApiModelProperty("专家领域")
     private String domain;
 
+    @ApiModelProperty("公司名称")
+    private String companyName;
+
+    @ApiModelProperty("联系电话")
+    private String phone;
+
+    @ApiModelProperty("实际使用时间")
+    private Date selectionTime;
+
+    @ApiModelProperty("备注")
+    private String expertRemark;
+
+
 }
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java
new file mode 100644
index 0000000..b3787ce
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java
@@ -0,0 +1,39 @@
+package com.gkhy.system.domain.vo.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 项目管理对象 project_management
+ *
+ * @author expert
+ * @date 2024-11-14
+ */
+@ApiModel(value = "项目管理专家详情" , description = "项目管理专家详情")
+@Data
+public class ProjectExpertExportInfoRes implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(name = "项目名称")
+    private String projectName;
+
+
+    /**
+     * 部门名称
+     */
+    @ApiModelProperty(name = "处室名称")
+    private String deptName;
+
+    @ApiModelProperty(name = "专家数据")
+    private List<ProjectExpertExportResp> projectExpertExportResps;
+
+}
\ No newline at end of file
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportResp.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportResp.java
new file mode 100644
index 0000000..8a11937
--- /dev/null
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportResp.java
@@ -0,0 +1,52 @@
+package com.gkhy.system.domain.vo.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@ApiModel(value = "项目专家审批详情", description = "项目专家审批详情")
+@Data
+public class ProjectExpertExportResp implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("专家名称")
+    private String name;
+
+    @ApiModelProperty("身份证号码")
+    private String idCard;
+
+    @ApiModelProperty("职称")
+    private String title;
+
+    @ApiModelProperty("职务")
+    private String job;
+
+    @ApiModelProperty("单位名称")
+    private String companyName;
+
+    /** 计费标准 */
+    @ApiModelProperty(value = "计费标准")
+    private String freightBasis;
+
+    /** 计费时长 */
+    @ApiModelProperty(value = "计费时长")
+    private BigDecimal billingDuration;
+
+    /** 税后金额 */
+    @ApiModelProperty(value = "税后金额")
+    private BigDecimal afterTaxAmount;
+
+    /** 开户行 */
+    @ApiModelProperty(value = "开户行")
+    private String openBank;
+
+    /** 卡号 */
+    @ApiModelProperty(value = "卡号")
+    private String bankCard;
+
+
+
+}
diff --git a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java
index 12eb702..827c487 100644
--- a/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java
+++ b/expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java
@@ -43,8 +43,8 @@
     /**
      * 被检单位
      */
-    @ApiModelProperty(name = "被检单位")
-    private String companyName;
+    @ApiModelProperty(name = "工作类别")
+    private String jobCategory;
 
     /**
      * 项目地址
@@ -61,11 +61,6 @@
 
     @ApiModelProperty(value = "步骤1暂存2专家选取3审批4完结")
     private Long step;
-//    /**
-//     * 部门带队人员
-//     */
-//    @ApiModelProperty(name = "部门带队人员")
-//    private String deptUserName;
 
     /**
      * 项目预计开始日期
diff --git a/expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java b/expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java
index f767c69..bb3edcc 100644
--- a/expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java
+++ b/expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java
@@ -4,6 +4,7 @@
 import com.gkhy.system.domain.ProjectExpert;
 import com.gkhy.system.domain.vo.request.SysProjectExpertReq;
 import com.gkhy.system.domain.vo.response.ProjectExpertEvaluationResp;
+import com.gkhy.system.domain.vo.response.ProjectExpertExportInfoRes;
 import com.gkhy.system.domain.vo.response.ProjectExpertResp;
 
 import java.util.List;
@@ -87,4 +88,11 @@
      * @return
      */
     List<ProjectExpertResp> projectExpertEvaList(SysProjectExpertReq req);
+
+    /**
+     * 导出报销
+     * @param projectId
+     * @return
+     */
+    List<ProjectExpertExportInfoRes> projectExpertExportList(Long projectId);
 }
diff --git a/expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java b/expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java
index f79b35f..ec94097 100644
--- a/expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java
+++ b/expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java
@@ -125,4 +125,13 @@
 
 
     ProjectNumResp getProjectNum();
+
+    ProjectDetailResp selectProjectExpertDetail(Long projectExpertId);
+
+    /**
+     * 导出项目报销
+     * @param projectId
+     * @return
+     */
+    List<ProjectExpertExportInfoRes> projectExpertExportList(Long projectId);
 }
\ No newline at end of file
diff --git a/expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java b/expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java
index 745abb6..bdbff3c 100644
--- a/expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java
+++ b/expert-system/src/main/java/com/gkhy/system/service/SysExpertInfoService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gkhy.system.domain.SysExpertInfo;
+import com.gkhy.system.domain.vo.request.ExpertBatchChangeReq;
 import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
 import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
 import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
@@ -81,4 +82,10 @@
      * @return
      */
     List<ProjectExpertSectionResp> getExpertRound(SysExpertInfoRoundReq req);
+
+    /**
+     *一建修改证书有效期
+     * @param req
+     */
+    void batchChangeEmploymentDate(ExpertBatchChangeReq req);
 }
diff --git a/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectFileServiceImpl.java b/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectFileServiceImpl.java
index 9f7e14b..6e56033 100644
--- a/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectFileServiceImpl.java
+++ b/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectFileServiceImpl.java
@@ -6,6 +6,7 @@
 import com.gkhy.system.service.IProjectFileService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -22,6 +23,7 @@
 
 
     @Override
+    @Transactional
     public Boolean saveBatchProjectFile(List<ProjectFile> projectFile) {
         return saveBatch(projectFile);
     }
diff --git a/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java b/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java
index fb1907f..e5f0a8b 100644
--- a/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java
+++ b/expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java
@@ -8,16 +8,10 @@
 import com.gkhy.common.utils.DateUtils;
 import com.gkhy.common.utils.SecurityUtils;
 import com.gkhy.common.utils.StringUtils;
-import com.gkhy.system.domain.ProjectExpert;
-import com.gkhy.system.domain.ProjectExpertDetail;
-import com.gkhy.system.domain.ProjectFile;
-import com.gkhy.system.domain.ProjectManagement;
+import com.gkhy.system.domain.*;
 import com.gkhy.system.domain.vo.request.*;
 import com.gkhy.system.domain.vo.response.*;
-import com.gkhy.system.mapper.ProjectExpertDetailMapper;
-import com.gkhy.system.mapper.ProjectExpertMapper;
-import com.gkhy.system.mapper.ProjectFileMapper;
-import com.gkhy.system.mapper.ProjectManagementMapper;
+import com.gkhy.system.mapper.*;
 import com.gkhy.system.service.IProjectFileService;
 import com.gkhy.system.service.IProjectManagementService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +43,8 @@
 
     @Autowired
     private IProjectFileService projectFileService;
+    @Autowired
+    private SysExpertInfoMapper sysExpertInfoMapper;
 
     /**
      * 查询项目管理
@@ -94,12 +90,14 @@
 
             projectManagementSave.setUpdateBy(SecurityUtils.getUsername());
             projectManagementSave.setUpdateTime(DateUtils.getNowDate());
-            projectManagementMapper.updateProjectManagement(projectManagementSave);
+           // projectManagementMapper.updateProjectManagement(projectManagementSave);
+            updateById(projectManagementSave);
         }else {
             projectManagementSave.setStep(1L);
             projectManagementSave.setCreateBy(SecurityUtils.getUsername());
             projectManagementSave.setCreateTime(DateUtils.getNowDate());
-            projectManagementMapper.insertProjectManagement(projectManagementSave);
+            save(projectManagementSave);
+          //  projectManagementMapper.insertProjectManagement(projectManagementSave);
         }
 
 
@@ -376,9 +374,10 @@
 
         //更新项目专家表
         ProjectExpert projectExpert = new ProjectExpert();
+        BeanUtil.copyProperties(req, projectExpert);
         projectExpert.setId(req.getProjectExpertId());
         projectExpert.setScore(req.getScore());
-        projectExpert.setevaluationState(1L);
+        projectExpert.setEvaluationState(1L);
         int i = projectExpertMapper.updateProjectExpert(projectExpert);
         if (i < 1){
             throw new ServiceException("保存失败!");
@@ -469,6 +468,49 @@
         return projectNumResp;
     }
 
+    @Override
+    public ProjectDetailResp selectProjectExpertDetail(Long projectExpertId) {
+        ProjectDetailResp projectDetailResp = new ProjectDetailResp();
+        ProjectExpert projectExpert = projectExpertMapper.selectProjectExpertById(projectExpertId);
+        BeanUtil.copyProperties(projectExpert, projectDetailResp);
+        if (projectDetailResp != null){
+            ProjectExpertDetail projectExpertDetail = new ProjectExpertDetail();
+            projectExpertDetail.setProjectExpertId(projectExpertId);
+            List<ProjectExpertDetail> projectExpertDetails = projectExpertDetailMapper.selectProjectExpertDetailList(projectExpertDetail);
+            if (StringUtils.isNotEmpty(projectExpertDetails)){
+                projectDetailResp.setExpertDetails(projectExpertDetails);
+            }
+            Long projectId = projectDetailResp.getProjectId();
+            ProjectManagement projectManagement = projectManagementMapper.selectProjectManagementById(projectId);
+            projectDetailResp.setDeptId(projectManagement.getDeptId());
+            projectDetailResp.setDeptName(projectDetailResp.getDeptName());
+            projectDetailResp.setProjectName(projectManagement.getProjectName());
+            SysExpertInfo sysExpertInfo = sysExpertInfoMapper.selectById(projectDetailResp.getExpertId());
+            if (sysExpertInfo != null){
+                projectDetailResp.setTitle(sysExpertInfo.getTitle());
+                projectDetailResp.setJob(sysExpertInfo.getJob());
+            }
+        }
+        return projectDetailResp;
+    }
+
+    @Override
+    public List<ProjectExpertExportInfoRes> projectExpertExportList(Long projectId) {
+        ProjectManagement projectManagement = checkData(projectId);
+        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId()) && projectManagement.getDeptId().intValue() != SecurityUtils.getDeptId().intValue()){
+            throw new ServiceException("非本部门数据,无权操作!");
+        }
+        if (projectManagement.getState() != 4){
+            throw new ServiceException("项目未完成,无权操作!");
+        }
+        if (projectManagement.getEvaluationState() == 0){
+            throw new ServiceException("有专家未完成评定与报销,请完善后再试");
+        }
+
+        return projectExpertMapper.projectExpertExportList(projectId);
+
+    }
+
     private List<ProjectExpertDetail> dealData(List<ProjectExpertScoreSaveReq.Score> data,Long projectExpertId){
         List<ProjectExpertDetail> dealData = new ArrayList<>();
         data.forEach(dto -> {
diff --git a/expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java b/expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java
index a0a16f8..c9c1f28 100644
--- a/expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java
+++ b/expert-system/src/main/java/com/gkhy/system/service/impl/SysExpertInfoServiceImpl.java
@@ -2,11 +2,14 @@
 
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.common.enums.DeleteFlagEnum;
 import com.gkhy.common.exception.ServiceException;
 import com.gkhy.common.utils.SecurityUtils;
+import com.gkhy.common.utils.StringUtils;
 import com.gkhy.system.domain.SysExpertInfo;
+import com.gkhy.system.domain.vo.request.ExpertBatchChangeReq;
 import com.gkhy.system.domain.vo.request.SysExpertInfoRoundReq;
 import com.gkhy.system.domain.vo.request.SysExpertSearchReqDto;
 import com.gkhy.system.domain.vo.response.ProjectExpertSectionResp;
@@ -30,10 +33,8 @@
 
     @Override
     public List<SysExpertInfo> exportInfoList(SysExpertInfo expertInfo) {
-        //todo 验证是否是管理不是管理只能看本部门
-        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
-            expertInfo.setDeptId(SecurityUtils.getDeptId());
-        }
+        //
+
         return baseMapper.expertInfoList(expertInfo);
     }
 
@@ -41,6 +42,9 @@
     public int addExpertInfo(SysExpertInfo expertInfo) {
         if(!checkIdCardUnique(new SysExpertInfo().setIdCard(expertInfo.getIdCard()))){
             throw new ServiceException("该业务处室申请数据已存在");
+        }
+        if(StringUtils.isEmpty(expertInfo.getPersonalOpinionKey()) && StringUtils.isEmpty(expertInfo.getRecommendUnitOpinionKey())){
+            throw new ServiceException("专家本人意见和推荐单位意见不能同时为空");
         }
         expertInfo.setCreateBy(expertInfo.getName());
         boolean b=save(expertInfo);
@@ -55,6 +59,7 @@
         if(!checkIdCardUnique(expertInfo)){
             throw new ServiceException("该业务处室申请数据已存在");
         }
+        checkHavePer(expertInfo.getId());
         expertInfo.setUpdateBy(SecurityUtils.getUsername());
         boolean b=updateById(expertInfo);
         if(!b){
@@ -65,6 +70,8 @@
 
     @Override
     public int delExpertInfo(Long expertId) {
+        checkHavePer(expertId);
+
         SysExpertInfo expertInfo = new SysExpertInfo();
         expertInfo.setId(expertId);
         expertInfo.setDelFlag(DeleteFlagEnum.DELETED.getCode().intValue());
@@ -86,6 +93,13 @@
         return baseMapper.getExpertInfoById(expertId);
     }
 
+   private void checkHavePer(Long expertId){
+       SysExpertInfo sysExpertInfo = checkExpertInfoDataScope(expertId);
+       if (!SecurityUtils.isAdmin(SecurityUtils.getUserId()) && !sysExpertInfo.getDeptId().toString().equals(SecurityUtils.getDeptId().toString()))
+       {
+           throw new ServiceException("没有权限操作该专家信息!");
+       }
+   }
 
 
     public SysExpertInfo checkExpertInfoDataScope(Long expertId) {
@@ -120,10 +134,24 @@
 
     @Override
     public List<ProjectExpertSectionResp> getExpertRound(SysExpertInfoRoundReq req) {
-        req.setDeptId(SecurityUtils.getDeptId());
+       // req.setDeptId(SecurityUtils.getDeptId());
         return baseMapper.getExpertRound(req);
     }
 
+    @Override
+    public void batchChangeEmploymentDate(ExpertBatchChangeReq req) {
+        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
+            throw new ServiceException("无权操作!");
+        }
+
+        baseMapper.update(null, Wrappers.<SysExpertInfo>lambdaUpdate()
+                .set(SysExpertInfo::getUpdateBy,SecurityUtils.getUsername())
+                .set(SysExpertInfo::getEmploymentDateStart,req.getEmploymentDateStart())
+                .set(SysExpertInfo::getEmploymentDateEnd,req.getEmploymentDateEnd())
+                .in(SysExpertInfo::getId,req.getId()));
+
+    }
+
     public boolean checkIdCardUnique(SysExpertInfo expertInfo){
         Long expertId = expertInfo.getId()==null? -1L : expertInfo.getId();
         SysExpertInfo info = baseMapper.checkIdcardUnique(expertInfo.getIdCard(),expertInfo.getDeptId());
diff --git a/expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml b/expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml
index 153b0f2..5fa846f 100644
--- a/expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml
+++ b/expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml
@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gkhy.system.mapper.ProjectExpertMapper">
-    
+
     <resultMap type="ProjectExpert" id="ProjectExpertResult">
         <result property="id"    column="id"    />
         <result property="projectId"    column="project_id"    />
@@ -17,12 +17,47 @@
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
+        <result property="professionalEthics"    column="professional_ethics"    />
+        <result property="impartialHonest"    column="impartial_honest"    />
+        <result property="comprehensiveCoordination"    column="comprehensive_coordination"    />
+        <result property="professionalAbility"    column="professional_ability"    />
+        <result property="expressingOpinions"    column="expressing_opinions"    />
+        <result property="others"    column="others"    />
+        <result property="comprehensiveEvaluation"    column="comprehensive_evaluation"    />
+        <result property="majorDangers"    column="major_dangers"    />
+        <result property="generalHazards"    column="general_hazards"    />
+        <result property="content"    column="content"    />
+        <result property="freightBasis"    column="freight_basis"    />
+        <result property="billingDuration"    column="billing_duration"    />
+        <result property="afterTaxAmount"    column="after_tax_amount"    />
+        <result property="openBank"    column="open_bank"    />
+        <result property="bankCard"    column="bank_card"    />
     </resultMap>
 
-    <sql id="selectProjectExpertVo">
-        select id, project_id, expert_id, score, evaluation_state, selection_mode, team_leader, del_flag, create_by, create_time, update_by, update_time from project_expert
-    </sql>
+    <resultMap type="com.gkhy.system.domain.vo.response.ProjectExpertExportInfoRes" id="ProjectExpertExportInfoResult">
+        <result property="projectName"    column="project_name"    />
+        <result property="deptName"    column="dept_name"    />
+        <collection  property="projectExpertExportResps"   javaType="java.util.List"  resultMap="ExpertExport" />
+    </resultMap>
+    <resultMap id="ExpertExport" type="com.gkhy.system.domain.vo.response.ProjectExpertExportResp">
+        <result property="name"      column="name"       />
+        <result property="idCard"    column="id_card"     />
+        <result property="companyName"       column="company_name"    />
+        <result property="job"       column="job"    />
+        <result property="title"       column="title"    />
+        <result property="freightBasis"    column="freight_basis"    />
+        <result property="billingDuration"    column="billing_duration"    />
+        <result property="afterTaxAmount"    column="after_tax_amount"    />
+        <result property="openBank"    column="open_bank"    />
+        <result property="bankCard"    column="bank_card"    />
+    </resultMap>
 
+
+
+    <sql id="selectProjectExpertVo">
+        select id, project_id, expert_id, score, evaluation_state, selection_mode, team_leader, del_flag, create_by, create_time, update_by, update_time, professional_ethics, impartial_honest, comprehensive_coordination, professional_ability, expressing_opinions, others, comprehensive_evaluation, major_dangers, general_hazards, content,
+               freight_basis, billing_duration, after_tax_amount, open_bank, bank_card from project_expert
+    </sql>
     <select id="selectProjectExpertList" parameterType="ProjectExpert" resultMap="ProjectExpertResult">
         <include refid="selectProjectExpertVo"/>
         <where>
@@ -33,6 +68,21 @@
             <if test="evaluationState != null "> and evaluation_state = #{evaluationState}</if>
             <if test="selectionMode != null "> and selection_mode = #{selectionMode}</if>
             <if test="teamLeader != null "> and team_leader = #{teamLeader}</if>
+            <if test="professionalEthics != null "> and professional_ethics = #{professionalEthics}</if>
+            <if test="impartialHonest != null "> and impartial_honest = #{impartialHonest}</if>
+            <if test="comprehensiveCoordination != null "> and comprehensive_coordination = #{comprehensiveCoordination}</if>
+            <if test="professionalAbility != null "> and professional_ability = #{professionalAbility}</if>
+            <if test="expressingOpinions != null "> and expressing_opinions = #{expressingOpinions}</if>
+            <if test="others != null  and others != ''"> and others = #{others}</if>
+            <if test="comprehensiveEvaluation != null "> and comprehensive_evaluation = #{comprehensiveEvaluation}</if>
+            <if test="majorDangers != null "> and major_dangers = #{majorDangers}</if>
+            <if test="generalHazards != null "> and general_hazards = #{generalHazards}</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="freightBasis != null  and freightBasis != ''"> and freight_basis = #{freightBasis}</if>
+            <if test="billingDuration != null "> and billing_duration = #{billingDuration}</if>
+            <if test="afterTaxAmount != null "> and after_tax_amount = #{afterTaxAmount}</if>
+            <if test="openBank != null  and openBank != ''"> and open_bank = #{openBank}</if>
+            <if test="bankCard != null  and bankCard != ''"> and bank_card = #{bankCard}</if>
         </where>
     </select>
     
@@ -55,7 +105,22 @@
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
-         </trim>
+            <if test="professionalEthics != null">professional_ethics,</if>
+            <if test="impartialHonest != null">impartial_honest,</if>
+            <if test="comprehensiveCoordination != null">comprehensive_coordination,</if>
+            <if test="professionalAbility != null">professional_ability,</if>
+            <if test="expressingOpinions != null">expressing_opinions,</if>
+            <if test="others != null">others,</if>
+            <if test="comprehensiveEvaluation != null">comprehensive_evaluation,</if>
+            <if test="majorDangers != null">major_dangers,</if>
+            <if test="generalHazards != null">general_hazards,</if>
+            <if test="content != null">content,</if>
+            <if test="freightBasis != null">freight_basis,</if>
+            <if test="billingDuration != null">billing_duration,</if>
+            <if test="afterTaxAmount != null">after_tax_amount,</if>
+            <if test="openBank != null">open_bank,</if>
+            <if test="bankCard != null">bank_card,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="projectId != null">#{projectId},</if>
             <if test="expertId != null">#{expertId},</if>
@@ -68,7 +133,22 @@
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
-         </trim>
+            <if test="professionalEthics != null">#{professionalEthics},</if>
+            <if test="impartialHonest != null">#{impartialHonest},</if>
+            <if test="comprehensiveCoordination != null">#{comprehensiveCoordination},</if>
+            <if test="professionalAbility != null">#{professionalAbility},</if>
+            <if test="expressingOpinions != null">#{expressingOpinions},</if>
+            <if test="others != null">#{others},</if>
+            <if test="comprehensiveEvaluation != null">#{comprehensiveEvaluation},</if>
+            <if test="majorDangers != null">#{majorDangers},</if>
+            <if test="generalHazards != null">#{generalHazards},</if>
+            <if test="content != null">#{content},</if>
+            <if test="freightBasis != null">#{freightBasis},</if>
+            <if test="billingDuration != null">#{billingDuration},</if>
+            <if test="afterTaxAmount != null">#{afterTaxAmount},</if>
+            <if test="openBank != null">#{openBank},</if>
+            <if test="bankCard != null">#{bankCard},</if>
+        </trim>
     </insert>
 
     <insert id="batchInsertProjectExpert" parameterType="java.util.List" >
@@ -90,10 +170,23 @@
             <if test="selectionMode != null">selection_mode = #{selectionMode},</if>
             <if test="teamLeader != null">team_leader = #{teamLeader},</if>
             <if test="delFlag != null">del_flag = #{delFlag},</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="professionalEthics != null">professional_ethics = #{professionalEthics},</if>
+            <if test="impartialHonest != null">impartial_honest = #{impartialHonest},</if>
+            <if test="comprehensiveCoordination != null">comprehensive_coordination = #{comprehensiveCoordination},</if>
+            <if test="professionalAbility != null">professional_ability = #{professionalAbility},</if>
+            <if test="expressingOpinions != null">expressing_opinions = #{expressingOpinions},</if>
+            <if test="others != null">others = #{others},</if>
+            <if test="comprehensiveEvaluation != null">comprehensive_evaluation = #{comprehensiveEvaluation},</if>
+            <if test="majorDangers != null">major_dangers = #{majorDangers},</if>
+            <if test="generalHazards != null">general_hazards = #{generalHazards},</if>
+            <if test="content != null">content = #{content},</if>
+            <if test="freightBasis != null">freight_basis = #{freightBasis},</if>
+            <if test="billingDuration != null">billing_duration = #{billingDuration},</if>
+            <if test="afterTaxAmount != null">after_tax_amount = #{afterTaxAmount},</if>
+            <if test="openBank != null">open_bank = #{openBank},</if>
+            <if test="bankCard != null">bank_card = #{bankCard},</if>
         </trim>
         where id = #{id}
     </update>
@@ -167,4 +260,16 @@
         order by b.team_leader asc , b.create_time desc
     </select>
 
+
+    <select id="projectExpertExportList" parameterType="Long" resultMap="ProjectExpertExportInfoResult">
+        select  a.project_name ,a.dept_name
+       ,c.name,c.id_card,c.name,c.job,c.title,c.company_name,b.freight_basis,b.billing_duration, b.after_tax_amount, b.open_bank, b.bank_card
+        from project_management a
+        left join project_expert b on a.id = b.project_id and b.del_flag = 0
+        left join sys_expert_info c on b.expert_id = c.id
+        where a.id  = #{projectId}
+        order by b.team_leader asc , b.create_time desc
+    </select>
+
+
 </mapper>
\ No newline at end of file
diff --git a/expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml b/expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml
index c9195e0..bcbc067 100644
--- a/expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml
+++ b/expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml
@@ -9,9 +9,10 @@
         <result property="projectName"    column="project_name"    />
         <result property="deptId"    column="dept_id"    />
         <result property="deptName"    column="dept_name"    />
-        <result property="companyName"    column="company_name"    />
+        <result property="jobCategory"    column="job_category"    />
         <result property="projectAddress"    column="project_address"    />
-        <result property="deptUserName"    column="dept_user_name"    />
+<!--        <result property="deptUserName"    column="dept_user_name"    />-->
+        <result property="deptPostName"    column="dept_post_name"   typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
         <result property="version"    column="version"    />
         <result property="state"    column="state"    />
         <result property="remark"    column="remark"    />
@@ -40,7 +41,7 @@
         <result property="remark"    column="remark"    />
         <result property="state"    column="state"    />
         <result property="step"    column="step"    />
-        <result property="companyName"    column="company_name"    />
+        <result property="jobCategory"    column="job_category"    />
         <result property="projectAddress"    column="project_address"    />
 <!--        <result property="deptUserName"    column="dept_user_name"    />-->
         <result property="projectDateStart"    column="project_date_start"    />
@@ -58,10 +59,14 @@
         <result property="ratingLevel"     column="rating_level"      />
         <result property="selectionMode"    column="selection_mode"     />
         <result property="teamLeader"       column="team_leader"    />
+        <result property="companyName"       column="company_name"    />
+        <result property="phone"       column="phone"    />
+        <result property="selectionTime"       column="selection_time"    />
+        <result property="expertRemark"       column="expert_remark"    />
     </resultMap>
 
     <sql id="selectProjectManagementVo">
-        select id, project_name, dept_id, dept_name, company_name, project_address, dept_user_name,
+        select id, project_name, dept_id, dept_name, job_category, project_address,dept_post_name,
                version, state, remark, project_date_start, project_date_end, expert_certificate,
                evaluation_state, expert_num, del_flag, create_by, create_time, update_by, update_time,project_check_time,expert_id,
                expert_name,project_end_time,`desc`,step
@@ -75,9 +80,9 @@
             <if test="projectName != null  and projectName != ''"> and project_name like concat('%', #{projectName}, '%')</if>
             <if test="deptId != null "> and dept_id = #{deptId}</if>
             <if test="deptName != null  and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
-            <if test="companyName != null  and companyName != ''"> and company_name like concat('%', #{companyName}, '%')</if>
+            <if test="jobCategory != null  and jobCategory != ''"> and job_category like concat('%', #{jobCategory}, '%')</if>
             <if test="projectAddress != null  and projectAddress != ''"> and project_address = #{projectAddress}</if>
-            <if test="deptUserName != null  and deptUserName != ''"> and dept_user_name like concat('%', #{deptUserName}, '%')</if>
+<!--            <if test="deptUserName != null  and deptUserName != ''"> and dept_user_name like concat('%', #{deptUserName}, '%')</if>-->
             <if test="version != null "> and version = #{version}</if>
             <if test="state != null "> and state = #{state}</if>
             <if test="step!= null "> and step = #{step}</if>
@@ -100,9 +105,10 @@
             <if test="projectName != null and projectName != ''">project_name,</if>
             <if test="deptId != null">dept_id,</if>
             <if test="deptName != null and deptName != ''">dept_name,</if>
-            <if test="companyName != null and companyName != ''">company_name,</if>
+            <if test="jobCategory != null and jobCategory != ''">job_category,</if>
             <if test="projectAddress != null and projectAddress != ''">project_address,</if>
-            <if test="deptUserName != null and deptUserName != ''">dept_user_name,</if>
+<!--            <if test="deptUserName != null and deptUserName != ''">dept_user_name,</if>-->
+            <if test="deptPostName != null and deptPostName != ''">dept_post_name,</if>
             <if test="version != null">version,</if>
             <if test="state != null">state,</if>
             <if test="step != null">step,</if>
@@ -122,9 +128,10 @@
             <if test="projectName != null and projectName != ''">#{projectName},</if>
             <if test="deptId != null">#{deptId},</if>
             <if test="deptName != null and deptName != ''">#{deptName},</if>
-            <if test="companyName != null and companyName != ''">#{companyName},</if>
+            <if test="jobCategory != null and jobCategory != ''">#{jobCategory},</if>
             <if test="projectAddress != null and projectAddress != ''">#{projectAddress},</if>
-            <if test="deptUserName != null and deptUserName != ''">#{deptUserName},</if>
+<!--            <if test="deptUserName != null and deptUserName != ''">#{deptUserName},</if>-->
+            <if test="deptPostName != null and deptPostName != ''">#{deptPostName},</if>
             <if test="version != null">#{version},</if>
             <if test="state != null">#{state},</if>
             <if test="step != null">#{step},</if>
@@ -148,9 +155,10 @@
             <if test="projectName != null and projectName != ''">project_name = #{projectName},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
             <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
-            <if test="companyName != null and companyName != ''">company_name = #{companyName},</if>
+            <if test="jobCategory != null and jobCategory != ''">job_category = #{jobCategory},</if>
             <if test="projectAddress != null and projectAddress != ''">project_address = #{projectAddress},</if>
-            <if test="deptUserName != null and deptUserName != ''">dept_user_name = #{deptUserName},</if>
+<!--            <if test="deptUserName != null and deptUserName != ''">dept_user_name = #{deptUserName},</if>-->
+            <if test="deptPostName != null and deptPostName != ''">dept_post_name = #{deptPostName},</if>
             <if test="version != null">version = #{version},</if>
             <if test="state != null">state = #{state},</if>
             <if test="step != null">step = #{step},</if>
@@ -186,11 +194,12 @@
     </update>
 
     <select id="projectExpertCheckInfo" parameterType="Long" resultMap="ProjectManagementInfoResult">
-        select a.id,a.step, a.project_name, a.dept_name, a.company_name, a.project_address, a.project_date_start, a.project_date_end, a.remark,a.project_check_time,a.state,
-            b.id project_expert_id,b.expert_id expert_id_info,c.name,c.sex,c.id_card,c.domain,c.rating_level,b.selection_mode,b.team_leader
+        select a.id,a.step, a.project_name, a.dept_name, a.job_category, a.project_address, a.project_date_start, a.project_date_end, a.remark,a.project_check_time,a.state,
+            b.id project_expert_id,b.expert_id expert_id_info,c.name,c.sex,c.id_card,c.domain,c.rating_level,b.selection_mode,b.team_leader,
+            c.company_name,c.phone,a.create_time selection_time,c.remark expert_remark
         from project_management a
         left join project_expert b on a.id = b.project_id and b.del_flag = 0
-                                   left join sys_expert_info c on b.expert_id = c.id
+        left join sys_expert_info c on b.expert_id = c.id
          where a.id = #{id}
         order by b.team_leader asc , b.create_time desc
     </select>
diff --git a/expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml b/expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
index 8f0acd5..3ed17c5 100644
--- a/expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
+++ b/expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
@@ -8,7 +8,7 @@
                graduation_school,degree,speciality,current_profession,support_direction_safety,
                support_direction_prevention,support_direction_emergency,resume_key,paper_situation_key,
                reward_key,achievement_key,personal_opinion_key,recommend_unit_opinion_key,remark,create_by,
-               create_time,big_classify,small_classify,del_flag,source,rating_level,employment_date_start,employment_date_end,expert_certificate,dept_id,domain
+               create_time,big_classify,small_classify,del_flag,source,rating_level,employment_date_start,employment_date_end,expert_certificate,dept_id,domain,evidence
         from sys_expert_info
     </sql>
 
@@ -20,7 +20,7 @@
     </update>
 
     <select id="expertInfoList" resultType="com.gkhy.system.domain.SysExpertInfo">
-        select id,name,sex,birthday,phone,title,degree,state,speciality,big_classify,small_classify,id_card,company_name,
+        select id,name,sex,birthday,phone,title,degree,state,speciality,big_classify,small_classify,id_card,company_name,evidence,
             domain,level,current_profession,duty_status,support_direction_safety,support_direction_prevention,support_direction_emergency,create_time,
             rating_level,employment_date_start,employment_date_end,expert_certificate,update_time from sys_expert_info
         <where>

--
Gitblit v1.9.2