heheng
3 天以前 f33cfe86447c16df8ca665e2e1a5f3333ff57792
版本改造
已修改18个文件
已添加6个文件
917 ■■■■■ 文件已修改
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/resources/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/OutProjectExpert.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/OutProjectExpertDetail.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveBatchReqDto.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveReqDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysProjectExpertReq.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertResp.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/OutProjectExpertDetailMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/OutProjectExpertMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/OutProjectExpertDetailMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/OutProjectExpertMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml 补丁 | 查看 | 原始文档 | blame | 历史
expert-admin/src/main/java/com/gkhy/web/controller/bussiness/ProjectManagementController.java
@@ -102,6 +102,17 @@
        return R.ok();
    }
    @ApiOperation(value = "项目生成审批单")
    @PostMapping("/projectBuildCheck")
    @RepeatSubmit
    public R projectBuildCheck(@Validated @RequestBody ProjectExpertSaveBatchReqDto projectManagement)
    {
        projectManagementService.projectBuildCheck(projectManagement);
        return R.ok();
    }
    //@PreAuthorize("@ss.hasPermi('system:management:info')")
    @ApiOperation(value = "获取项目专家审批用(获取项目信息和专家数据)")
    @GetMapping("/projectExpertCheckInfo")
@@ -217,11 +228,12 @@
    //@PreAuthorize("@ss.hasPermi('system:management:list')")
    @GetMapping("/selectProjectExpertDetail")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "projectExpertId", dataType = "long", required = true, value = "项目专家id")
            @ApiImplicitParam(paramType = "query", name = "projectExpertId", dataType = "long", required = true, value = "项目专家id"),
            @ApiImplicitParam(paramType = "query", name = "expertType", dataType = "long", required = true, value = "专家类型1库内2库外")
    })
    public R<ProjectDetailResp> selectProjectExpertDetail(@RequestParam("projectExpertId") Long projectExpertId)
    public R<ProjectDetailResp> selectProjectExpertDetail(@RequestParam("projectExpertId") Long projectExpertId,@RequestParam("expertType") Long expertType)
    {
        return R.ok(projectManagementService.selectProjectExpertDetail(projectExpertId));
        return R.ok(projectManagementService.selectProjectExpertDetail(projectExpertId,expertType));
    }
expert-admin/src/main/resources/application-dev.yml
@@ -34,9 +34,9 @@
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://localhost:3306/expert_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
                url: jdbc:mysql://192.168.2.90:7006/expert_management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
                username: root
                password: 123456
                password: 2farwL3yPXfbH2AP
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
@@ -90,7 +90,7 @@
    # redis 配置
    redis:
        # 地址
        host: localhost
        host: 192.168.2.90
        # 端口,默认为6379
        port: 6379
        # 数据库索引
expert-admin/src/main/resources/application.yml
@@ -48,13 +48,13 @@
    basename: i18n/messages
  profiles:
    # 环境配置,dev开发环境,prod生产环境
    active: dev
    #active: prod
    #active: dev
    active: prod
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 20MB
      max-file-size: 25MB
      # 设置总上传的文件大小
      max-request-size: 100MB
  # 服务模块
expert-system/src/main/java/com/gkhy/system/domain/OutProjectExpert.java
对比新文件
@@ -0,0 +1,197 @@
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 io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 * 项目专家关联表
 * </p>
 *
 * @author hh
 * @since 2025-08-26 13:11:13
 */
@Getter
@Setter
@TableName("out_project_expert")
@ApiModel(value = "OutProjectExpert对象", description = "项目专家关联表")
public class OutProjectExpert implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("项目id")
    @TableField("project_id")
    private Long projectId;
    @ApiModelProperty("专家名称")
    @TableField("name")
    private String name;
    @ApiModelProperty("性别(0男,1女,2未知,默认2)")
    @TableField("sex")
    private Integer sex;
    @ApiModelProperty("身份证号码")
    @TableField("id_card")
    private String idCard;
    @ApiModelProperty("专家领域")
    @TableField("domain")
    private String domain;
    @ApiModelProperty("入库分级")
    @TableField("level")
    private String level;
    @ApiModelProperty("评定等级1、一级,2、二级,3、三级")
    @TableField("rating_level")
    private String ratingLevel;
    @NotBlank(message ="职称不能为空" )
    @ApiModelProperty("职称")
    @TableField("title")
    private String title;
    @NotBlank(message ="单位名称不能为空" )
    @Length(min=1,max=30,message = "专家名称不能超过30个字")
    @ApiModelProperty("单位名称")
    @TableField("company_name")
    private String companyName;
    @ApiModelProperty("总分")
    @TableField("score")
    private Integer score;
    @ApiModelProperty("评估状态0未评估1已评估")
    @TableField("evaluation_state")
    private Integer evaluationState;
    @ApiModelProperty("选取方式1固定2随机")
    @TableField("selection_mode")
    private Integer selectionMode;
    @ApiModelProperty("是否组长0否1是")
    @TableField("team_leader")
    private Integer teamLeader;
    @ApiModelProperty("删除标志(0代表存在,1代表删除,默认0)")
    @TableField("del_flag")
    private Integer delFlag;
    @ApiModelProperty("创建人")
    @TableField("create_by")
    private String createBy;
    @ApiModelProperty("创建时间")
    @TableField("create_time")
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField("update_by")
    private String updateBy;
    @ApiModelProperty("修改时间")
    @TableField("update_time")
    private LocalDateTime updateTime;
    @ApiModelProperty("职业道德1优秀2合格3基本合格4不合格")
    @TableField("professional_ethics")
    private Integer professionalEthics;
    @ApiModelProperty("公正廉洁1优秀2合格3基本合格4不合格")
    @TableField("impartial_honest")
    private Integer impartialHonest;
    @ApiModelProperty("综合协调1优秀2合格3基本合格4不合格")
    @TableField("comprehensive_coordination")
    private Integer comprehensiveCoordination;
    @ApiModelProperty("专业能力1优秀2合格3基本合格4不合格")
    @TableField("professional_ability")
    private Integer professionalAbility;
    @ApiModelProperty("意见表达1优秀2合格3基本合格4不合格")
    @TableField("expressing_opinions")
    private Integer expressingOpinions;
    @ApiModelProperty("其他意见")
    @TableField("others")
    private String others;
    @ApiModelProperty("综合评价1优秀2合格3基本合格4不合格")
    @TableField("comprehensive_evaluation")
    private Integer comprehensiveEvaluation;
    @ApiModelProperty("重大隐患")
    @TableField("major_dangers")
    private Integer majorDangers;
    @ApiModelProperty("一般隐患")
    @TableField("general_hazards")
    private Integer generalHazards;
    @ApiModelProperty("内容描述")
    @TableField("content")
    private String content;
    @ApiModelProperty("计费标准")
    @TableField("freight_basis")
    private String freightBasis;
    @ApiModelProperty("计费时长")
    @TableField("billing_duration")
    private BigDecimal billingDuration;
    @ApiModelProperty("税后金额")
    @TableField("after_tax_amount")
    private BigDecimal afterTaxAmount;
    @ApiModelProperty("开户行")
    @TableField("open_bank")
    private String openBank;
    @ApiModelProperty("卡号")
    @TableField("bank_card")
    private String bankCard;
    @ApiModelProperty("应纳税所得额")
    @TableField("taxable_income")
    private BigDecimal taxableIncome;
    @ApiModelProperty("应缴个税")
    @TableField("income_tax_payable")
    private BigDecimal incomeTaxPayable;
    @ApiModelProperty("专家费(税前)")
    @TableField("tax_expert_fee")
    private BigDecimal taxExpertFee;
    @ApiModelProperty("计费表准说明")
    @TableField("billing_instructions")
    private String billingInstructions;
    @ApiModelProperty("交通费")
    @TableField("travel_expenses")
    private BigDecimal travelExpenses;
    @ApiModelProperty("住宿费")
    @TableField("accommodation_fee")
    private BigDecimal accommodationFee;
}
expert-system/src/main/java/com/gkhy/system/domain/OutProjectExpertDetail.java
对比新文件
@@ -0,0 +1,71 @@
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 io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * 项目专家得分明细表
 * </p>
 *
 * @author hh
 * @since 2025-08-26 13:11:13
 */
@Getter
@Setter
@TableName("out_project_expert_detail")
@ApiModel(value = "OutProjectExpertDetail对象", description = "项目专家得分明细表")
public class OutProjectExpertDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("项目专家表id")
    @TableField("out_project_expert_id")
    private Long outProjectExpertId;
    @ApiModelProperty("内容")
    @TableField("content")
    private String content;
    @ApiModelProperty("类型1加分项2扣分项")
    @TableField("score_type")
    private String scoreType;
    @ApiModelProperty("分值")
    @TableField("score")
    private Integer score;
    @ApiModelProperty("删除标志(0代表存在,1代表删除,默认0)")
    @TableField("del_flag")
    private Integer delFlag;
    @ApiModelProperty("创建人")
    @TableField("create_by")
    private String createBy;
    @ApiModelProperty("创建时间")
    @TableField("create_time")
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField("update_by")
    private String updateBy;
    @ApiModelProperty("修改时间")
    @TableField("update_time")
    private LocalDateTime updateTime;
}
expert-system/src/main/java/com/gkhy/system/domain/ProjectManagement.java
@@ -148,6 +148,9 @@
    @ApiModelProperty(value = "专家名称组长")
    private String expertName;
    @ApiModelProperty(value = "1、内部专家2、外部专家")
    private Long expertType;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "项目结束日期")
    private Date projectEndTime;
@@ -378,4 +381,12 @@
    public void setDeptIds(List<Long> deptIds) {
        this.deptIds = deptIds;
    }
    public Long getExpertType() {
        return expertType;
    }
    public void setExpertType(Long expertType) {
        this.expertType = expertType;
    }
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveBatchReqDto.java
@@ -1,10 +1,10 @@
package com.gkhy.system.domain.vo.request;
import com.gkhy.system.domain.OutProjectExpert;
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.List;
@@ -19,8 +19,13 @@
    private List<Long> delData;
    @ApiModelProperty(value = "新增编辑数据")
    @NotEmpty
    private List<ProjectExpertSaveReqDto> saveData;
    @ApiModelProperty(value = "删除外部专家数据")
    private List<Long> delOutData;
    @ApiModelProperty(value = "新增外部专家数据")
    private List<OutProjectExpert> saveOutData;
    /**
     * 项目id
     */
@@ -30,4 +35,5 @@
    @ApiModelProperty(value = "步骤1暂存2专家选取3审批4完结")
    private Long step;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertSaveReqDto.java
@@ -57,5 +57,8 @@
    @NotNull(message = "是否组长不能为空")
    private Long teamLeader;
    @ApiModelProperty(value = "专家类型1库内2库外",required = false)
    private Long expertType;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/request/ProjectExpertScoreSaveReq.java
@@ -29,6 +29,10 @@
    @NotNull(message = "得分不能为空")
    private Long score;
    @ApiModelProperty(value = "专家类型1库内2库外")
    @NotNull(message = "专家类型不能为空")
    private Long expertType;
    @ApiModelProperty(value = "职业道德1优秀2合格3基本合格4不合格")
    @NotNull(message = "职业道德不能为空")
expert-system/src/main/java/com/gkhy/system/domain/vo/request/SysProjectExpertReq.java
@@ -35,4 +35,7 @@
    @ApiModelProperty(value = "部门处室",hidden = true)
    private Long deptId;
    @ApiModelProperty(value = "专家类型1库内专家2库外专家",required = true)
    private Long expertType;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertCheckResp.java
@@ -50,6 +50,8 @@
    @ApiModelProperty("备注")
    private String expertRemark;
    @ApiModelProperty("专家类型 1、库内2库外" )
    private Long expertType;
}
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertExportInfoRes.java
@@ -28,6 +28,8 @@
    @ApiModelProperty(name = "项目编码")
    private String projectCode;
    @ApiModelProperty(name = "项目id")
    private Integer id;
    /**
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertManagementInfoRes.java
@@ -88,6 +88,10 @@
    @ApiModelProperty(name = "项目概况")
    private String remark;
    @ApiModelProperty(name = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @ApiModelProperty(name = "专家数据")
    private List<ProjectExpertCheckResp> projectExpertCheckResp;
expert-system/src/main/java/com/gkhy/system/domain/vo/response/ProjectExpertResp.java
@@ -37,6 +37,9 @@
    @ApiModelProperty("专家名称")
    private String name;
    @ApiModelProperty(value = "专家类型1库内2库外")
    private Long expertType;
    @ApiModelProperty("身份证号码")
    private String idCard;
expert-system/src/main/java/com/gkhy/system/mapper/OutProjectExpertDetailMapper.java
对比新文件
@@ -0,0 +1,19 @@
package com.gkhy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.OutProjectExpertDetail;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * 项目专家得分明细表 Mapper 接口
 * </p>
 *
 * @author hh
 * @since 2025-08-26 13:11:13
 */
@Mapper
public interface OutProjectExpertDetailMapper extends BaseMapper<OutProjectExpertDetail> {
}
expert-system/src/main/java/com/gkhy/system/mapper/OutProjectExpertMapper.java
对比新文件
@@ -0,0 +1,19 @@
package com.gkhy.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gkhy.system.domain.OutProjectExpert;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * 项目专家关联表 Mapper 接口
 * </p>
 *
 * @author hh
 * @since 2025-08-26 13:11:13
 */
@Mapper
public interface OutProjectExpertMapper extends BaseMapper<OutProjectExpert> {
}
expert-system/src/main/java/com/gkhy/system/mapper/ProjectExpertMapper.java
@@ -92,6 +92,9 @@
     */
    List<ProjectExpertResp> projectExpertEvaList(SysProjectExpertReq req);
    List<ProjectExpertResp> projectExpertEvaOutList(SysProjectExpertReq req);
    /**
     * 导出报销
     * @param projectId
expert-system/src/main/java/com/gkhy/system/service/IProjectManagementService.java
@@ -77,6 +77,9 @@
     */
    void projectCheck(ProjectCheckReq req);
    void projectBuildCheck(ProjectExpertSaveBatchReqDto projectManagement);
    /**
     * 项目归档
     * @param req
@@ -126,7 +129,7 @@
    ProjectNumResp getProjectNum();
    ProjectDetailResp selectProjectExpertDetail(Long projectExpertId);
    ProjectDetailResp selectProjectExpertDetail(Long projectExpertId,Long expertType);
    /**
     * 导出项目报销
expert-system/src/main/java/com/gkhy/system/service/impl/ProjectManagementServiceImpl.java
@@ -2,6 +2,8 @@
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.common.enums.DeleteFlagEnum;
import com.gkhy.common.exception.ServiceException;
@@ -19,6 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -46,6 +49,12 @@
    private IProjectFileService projectFileService;
    @Autowired
    private SysExpertInfoMapper sysExpertInfoMapper;
    @Autowired
    private OutProjectExpertMapper outProjectExpertMapper;
    @Autowired
    private OutProjectExpertDetailMapper outProjectExpertDetailMapper;
    /**
     * 查询项目管理
@@ -126,42 +135,120 @@
            throw new ServiceException("该步骤不可操作专家数据!");
        }
        //outExpertInfoMapper
        List<ProjectExpertSaveReqDto> saveData = projectManagement.getSaveData();
        if (!StringUtils.isNotEmpty(saveData)){
        List<OutProjectExpert> saveOutData = projectManagement.getSaveOutData();
        if (ObjectUtil.isEmpty(saveData) && ObjectUtil.isEmpty(saveOutData)) {
            throw new ServiceException("专家不可为空!");
        }
        //专家库校验重复
        if (ObjectUtil.isNotEmpty(saveData)) {
        if (hasDuplicateExpertId(saveData)){
            throw new ServiceException("专家重复!");
        }
//        long count = saveData.stream()
//                .filter(dto -> dto.getSelectionMode() == 1)
//                .count();
//        if (count < 1){
//            throw new ServiceException("固定专家不能为空!");
//        }
        }
        if (ObjectUtil.isNotEmpty(saveOutData)){
            List<OutProjectExpert> uniqueList = saveOutData.stream()
                    .collect(Collectors.collectingAndThen(
                            Collectors.toMap(OutProjectExpert::getIdCard, o -> o, (existing, replacement) -> existing, LinkedHashMap::new),
                            map -> new ArrayList<>(map.values())
                    ));
            if (uniqueList.size() != saveOutData.size()){
                throw new ServiceException("外部专家身份证重复!");
            }
        }
        boolean flag = false;
        if ((projectManagement1.getStep() == 1 || projectManagement1.getStep() == 2) && (projectManagement.getStep() == 2  ) ){
            projectManagementSave.setStep(2L);
            projectManagementSave.setState(1L);
            List<ProjectExpertSaveReqDto> collect = saveData.stream()
            List<ProjectExpertSaveReqDto> collect = new ArrayList<>();
            List<OutProjectExpert> saveOutDataSp = new ArrayList<>();
            List<OutProjectExpert> saveOutDataSp11 = new ArrayList<>();
            if (ObjectUtil.isNotEmpty(saveData)) {
                 collect = saveData.stream()
                    .filter(dto -> "1".equals(dto.getTeamLeader().toString()))
                    .collect(Collectors.toList());
            if (StringUtils.isEmpty(collect)){
            }
            if (ObjectUtil.isNotEmpty(saveOutData)) {
                 saveOutDataSp = saveOutData.stream()
                        .filter(dto -> "1".equals(dto.getTeamLeader().toString()))
                        .collect(Collectors.toList());
                saveOutDataSp11 = saveOutData.stream()
                        .filter(dto -> "0".equals(dto.getTeamLeader().toString()))
                        .collect(Collectors.toList());
            }
            if (StringUtils.isEmpty(collect) && StringUtils.isEmpty(saveOutDataSp)) {
                throw new ServiceException("缺少组长!");
            }
            if (collect.size() > 1){
            if (collect.size()+saveOutDataSp.size() > 1) {
                throw new ServiceException("组长只能选一人!");
            }
            if (ObjectUtil.isNotEmpty( collect)){
            projectManagementSave.setExpertName(collect.get(0).getExpertName());
            projectManagementSave.setExpertId(collect.get(0).getExpertId());
                projectManagementSave.setExpertType(1L);
            }else {
                OutProjectExpert outExpertInfo = saveOutDataSp.get(0);
                flag = true;
                if (outExpertInfo.getId() != null){
                    outExpertInfo.setUpdateTime(LocalDateTime.now());
                    outExpertInfo.setUpdateBy(SecurityUtils.getUsername());
                    int update = outProjectExpertMapper.updateById(outExpertInfo);
                    if (update < 1) {
                        throw new ServiceException("保存专家失败!");
                    }
                }else {
                    outExpertInfo.setProjectId(projectManagement.getId());
                    int insert = outProjectExpertMapper.insert(outExpertInfo);
                    if (insert < 1) {
                        throw new ServiceException("保存专家失败!");
                    }
                }
                projectManagementSave.setExpertName(saveOutDataSp.get(0).getName());
                projectManagementSave.setExpertId(saveOutDataSp.get(0).getId());
                projectManagementSave.setExpertType(2L);
                if (ObjectUtil.isNotEmpty(saveOutDataSp11)){
                    flag = true;
                    saveOutDataSp11.forEach(
                            outExpertInfo1 -> {
                                if (outExpertInfo1.getId() != null){
                                    outExpertInfo1.setUpdateTime(LocalDateTime.now());
                                    outExpertInfo1.setUpdateBy(SecurityUtils.getUsername());
                                    int insert2 = outProjectExpertMapper.updateById(outExpertInfo1);
                                    if (insert2 < 1) {
                                        throw new ServiceException("保存专家失败!");
                                    }
                                }else {
                                    outExpertInfo1.setProjectId(projectManagement.getId());
                                    outExpertInfo1.setCreateTime(LocalDateTime.now());
                                    outExpertInfo1.setCreateBy(SecurityUtils.getUsername());
                                    int insert2 = outProjectExpertMapper.insert(outExpertInfo1);
                                    if (insert2 < 1) {
                                        throw new ServiceException("保存专家失败!");
                                    }
                                }
                            }
                    );
                }
            }
        }else if (projectManagement1.getStep() == 2 && projectManagement.getStep() == 3){
            projectManagementSave.setStep(2L);
            projectManagementSave.setState(2L);
            projectManagementSave.setProjectCheckTime(new Date());
        }
        if (ObjectUtil.isNotEmpty(saveData)){
        List<ProjectExpertSaveReqDto> saveList = saveData.stream()
                .filter(dto -> dto.getId() == null)
                .collect(Collectors.toList());
@@ -182,7 +269,42 @@
                throw new ServiceException("保存专家失败!");
            }
        }
        projectManagementSave.setExpertNum((long) saveData.size());
        }
        if (!flag){
            if (ObjectUtil.isNotEmpty(saveOutData)){
                saveOutData.forEach(
                        outExpertInfo1 -> {
                            if (outExpertInfo1.getId() != null){
                                outExpertInfo1.setUpdateTime(LocalDateTime.now());
                                outExpertInfo1.setUpdateBy(SecurityUtils.getUsername());
                                int insert2 = outProjectExpertMapper.updateById(outExpertInfo1);
                                if (insert2 < 1) {
                                    throw new ServiceException("保存专家失败!");
                                }
                            }else {
                                outExpertInfo1.setProjectId(projectManagement.getId());
                                outExpertInfo1.setCreateTime(LocalDateTime.now());
                                outExpertInfo1.setCreateBy(SecurityUtils.getUsername());
                                int insert2 = outProjectExpertMapper.insert(outExpertInfo1);
                                if (insert2 < 1) {
                                    throw new ServiceException("保存专家失败!");
                                }
                            }
                        }
                );
            }
        }
//        int outData = 0;
//        if(!ObjectUtil.isEmpty(saveOutData)){
//            outData = saveOutData.size();
//        }
//        int inData = 0;
//        if (!ObjectUtil.isEmpty(saveData)){
//            inData = saveData.size();
//        }
        List<Long> delData = projectManagement.getDelData();
        if (delData != null && delData.size() > 0) {
            int i = projectExpertMapper.deleteProjectExpertByIds(delData.toArray(new Long[delData.size()]));
@@ -190,6 +312,21 @@
                throw new ServiceException("保存专家失败!");
            }
        }
        List<Long> delOutData = projectManagement.getDelOutData();
        if (ObjectUtil.isNotEmpty(delOutData)){
            // 删除外部专家数据
            int update = outProjectExpertMapper.update(new OutProjectExpert(),
                    new LambdaUpdateWrapper<OutProjectExpert>().set(OutProjectExpert::getDelFlag, 1)
                            .set(OutProjectExpert::getUpdateTime, new Date()).set(OutProjectExpert::getUpdateBy, SecurityUtils.getUsername())
                            .in(OutProjectExpert::getId, delOutData));
            if (update < 1) {
                throw new ServiceException("保存外部专家失败!");
            }
        }
        Long l = outProjectExpertMapper.selectCount(new LambdaQueryWrapper<OutProjectExpert>().eq(OutProjectExpert::getDelFlag, 0).eq(OutProjectExpert::getProjectId, projectManagement.getId()));
        Long l1 = projectExpertMapper.selectCount(new LambdaQueryWrapper<ProjectExpert>().eq(ProjectExpert::getDelFlag, 0).eq(ProjectExpert::getProjectId, projectManagement.getId()));
        projectManagementSave.setExpertNum(l+l1);
        int i = projectManagementMapper.updateProjectManagement(projectManagementSave);
        if (i < 1){
            throw new ServiceException("保存专家失败!");
@@ -220,7 +357,6 @@
        }
        return projectExpert;
    }
    public  boolean hasDuplicateExpertId(List<ProjectExpertSaveReqDto> saveData) {
@@ -263,7 +399,20 @@
    @Override
    public ProjectExpertManagementInfoRes projectExpertCheckInfo(Long id) {
        return projectManagementMapper.projectExpertCheckInfo(id);
        // 查询
        ProjectExpertManagementInfoRes projectExpertManagementInfoRes = projectManagementMapper.projectExpertCheckInfo(id);
        List<ProjectExpertCheckResp> projectExpertCheckResps = projectExpertManagementInfoRes.getProjectExpertCheckResp();
        if (ObjectUtil.isNotEmpty(projectExpertCheckResps)){
            projectExpertCheckResps.forEach(projectExpertCheckResp -> {
                projectExpertCheckResp.setSelectionTime(projectExpertManagementInfoRes.getCreateTime());
            });
            projectExpertCheckResps.sort(Comparator
                    .comparing(ProjectExpertCheckResp::getTeamLeader, Comparator.nullsLast(Comparator.reverseOrder()))
                    .thenComparing(ProjectExpertCheckResp::getExpertType, Comparator.nullsLast(Comparator.naturalOrder())));
        }
        return projectExpertManagementInfoRes;
    }
    @Override
@@ -315,6 +464,30 @@
    }
    @Override
    public void projectBuildCheck(ProjectExpertSaveBatchReqDto projectManagement) {
        ProjectManagement projectManagement1 = checkDataPer(projectManagement.getId());
        //专家选取
        ProjectManagement projectManagementSave = new ProjectManagement();
        projectManagementSave.setUpdateBy(SecurityUtils.getUsername());
        projectManagementSave.setUpdateTime(DateUtils.getNowDate());
        projectManagementSave.setId(projectManagement.getId());
        if (projectManagement1.getStep() == 2 && projectManagement.getStep() == 3) {
            projectManagementSave.setStep(2L);
            projectManagementSave.setState(2L);
            projectManagementSave.setProjectCheckTime(new Date());
        }else {
            throw new ServiceException("该步骤无法生成审批单!");
        }
        int i = projectManagementMapper.updateProjectManagement(projectManagementSave);
        if (i<0){
            throw new ServiceException("生成审批单失败!");
        }
    }
    @Override
    public void projectArchive(ProjectArchiveReq req) {
        ProjectManagement projectManagement = checkDataPer(req.getId());
@@ -360,19 +533,24 @@
    @Override
    public List<ProjectExpertEvaluationResp> projectExpertEvaluationList(Long projectId) {
        return projectExpertMapper.projectExpertEvaluationList(projectId);
        List<ProjectExpertEvaluationResp> projectExpertEvaluationResps = projectExpertMapper.projectExpertEvaluationList(projectId);
        projectExpertEvaluationResps.sort(Comparator
                    .comparing(ProjectExpertCheckResp::getTeamLeader, Comparator.nullsLast(Comparator.reverseOrder()))
                    .thenComparing(ProjectExpertCheckResp::getSelectionMode, Comparator.nullsLast(Comparator.reverseOrder()))
                    .thenComparing(ProjectExpertCheckResp::getExpertType, Comparator.nullsLast(Comparator.naturalOrder())));
        return projectExpertEvaluationResps;
    }
    @Override
    @Transactional
    public void projectExpertDetailSave(ProjectExpertScoreSaveReq req) {
        Long projectId = null;
        Long expertType = req.getExpertType();
        List<Long> delData = req.getDelData();
        if (StringUtils.isNotEmpty(delData)){
            projectExpertDetailMapper.deleteProjectExpertDetailByIds(delData.toArray(new Long[delData.size()]));
        }
        List<ProjectExpertScoreSaveReq.Score> saveData = req.getSaveData();
        if (expertType == 1) {
        ProjectExpert projectExpert1 = projectExpertMapper.selectProjectExpertById(req.getProjectExpertId());
        if (projectExpert1 == null){
            throw new ServiceException("项目专家不存在!");
@@ -381,7 +559,11 @@
        if (projectManagement1.getState() != 4){
            throw new ServiceException("项目未完成!");
        }
            projectId = projectExpert1.getProjectId();
            if (StringUtils.isNotEmpty(delData)) {
                projectExpertDetailMapper.deleteProjectExpertDetailByIds(delData.toArray(new Long[delData.size()]));
            }
        //更新项目专家表
        ProjectExpert projectExpert = new ProjectExpert();
        BeanUtil.copyProperties(req, projectExpert);
@@ -392,8 +574,6 @@
        if (i < 1){
            throw new ServiceException("保存失败!");
        }
        List<ProjectExpertScoreSaveReq.Score> saveData = req.getSaveData();
        if (StringUtils.isNotEmpty(saveData)){
            List<ProjectExpertDetail> projectExpertDetails = dealData(saveData, req.getProjectExpertId());
@@ -417,11 +597,51 @@
            }
        }
        }else {
            OutProjectExpert outProjectExpert1 = outProjectExpertMapper.selectById(req.getProjectExpertId());
            if (outProjectExpert1 == null) {
                throw new ServiceException("项目专家不存在!");
            }
            ProjectManagement projectManagement1 = checkData(outProjectExpert1.getProjectId());
            if (projectManagement1.getState() != 4) {
                throw new ServiceException("项目未完成!");
            }
            projectId = outProjectExpert1.getProjectId();
            if (StringUtils.isNotEmpty(delData)){
                outProjectExpertDetailMapper.update(new OutProjectExpertDetail(),
                        new LambdaUpdateWrapper<OutProjectExpertDetail>().in(OutProjectExpertDetail::getId, delData)
                                .set(OutProjectExpertDetail::getDelFlag, 1).set(OutProjectExpertDetail::getUpdateBy, SecurityUtils.getUsername())
                                .set(OutProjectExpertDetail::getUpdateTime, new Date()));
            }
            OutProjectExpert outProjectExpert = new OutProjectExpert();
            BeanUtil.copyProperties(req, outProjectExpert);
            outProjectExpert.setId(req.getProjectExpertId());
            outProjectExpert.setScore(req.getScore().intValue());
            outProjectExpert.setEvaluationState(1);
            int update = outProjectExpertMapper.updateById(outProjectExpert);
            if (update < 1) {
                throw new ServiceException("保存失败!");
            }
            if (StringUtils.isNotEmpty(saveData)) {
                List<OutProjectExpertDetail> outProjectExpertDetails = dealOutData(saveData, req.getProjectExpertId());
                outProjectExpertDetails.forEach(outProjectExpertDetail -> {
                    if (outProjectExpertDetail.getId() == null){
                        outProjectExpertDetailMapper.insert(outProjectExpertDetail);
                    }else {
                        outProjectExpertDetailMapper.updateById(outProjectExpertDetail);
                    }
                });
            }
        }
        //验证是否都已考评
        int unEva = projectExpertMapper.getUnEva(projectExpert1.getProjectId());
        if (unEva == 0){
        int unEva = projectExpertMapper.getUnEva(projectId);
        Long l = outProjectExpertMapper.selectCount(new LambdaQueryWrapper<OutProjectExpert>().eq(OutProjectExpert::getProjectId, projectId)
                .eq(OutProjectExpert::getDelFlag, 0).eq(OutProjectExpert::getEvaluationState, 0));
        if (unEva+l == 0) {
            ProjectManagement projectManagement = new ProjectManagement();
            projectManagement.setId(projectExpert1.getProjectId());
            projectManagement.setId(projectId);
            projectManagement.setEvaluationState(1L);
            projectManagement.setUpdateBy(SecurityUtils.getUsername());
            int i1 = projectManagementMapper.updateProjectManagement(projectManagement);
@@ -437,7 +657,14 @@
        if (!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
            req.setDeptId(SecurityUtils.getDeptId());
        }
        return projectExpertMapper.projectExpertEvaList(req);
//        if (req.getExpertType() == 1){
//            return projectExpertMapper.projectExpertEvaList(req);
//        }else {
//            return projectExpertMapper.projectExpertEvaOutList(req);
//        }
    }
    @Override
@@ -480,8 +707,9 @@
    }
    @Override
    public ProjectDetailResp selectProjectExpertDetail(Long projectExpertId) {
    public ProjectDetailResp selectProjectExpertDetail(Long projectExpertId,Long expertType) {
        ProjectDetailResp projectDetailResp = new ProjectDetailResp();
        if (expertType == 1){
        ProjectExpert projectExpert = projectExpertMapper.selectProjectExpertById(projectExpertId);
        BeanUtil.copyProperties(projectExpert, projectDetailResp);
        if (projectDetailResp != null){
@@ -508,6 +736,39 @@
            }
        }
        }else if (expertType == 2){
            OutProjectExpert outProjectExpert = outProjectExpertMapper.selectById(projectExpertId);
            BeanUtil.copyProperties(outProjectExpert, projectDetailResp);
            if (projectDetailResp != null) {
                LambdaQueryWrapper<OutProjectExpertDetail> queryWrapper = new LambdaQueryWrapper<>();
                queryWrapper.eq(OutProjectExpertDetail::getOutProjectExpertId, projectExpertId);
                List<OutProjectExpertDetail> outProjectExpertDetails = outProjectExpertDetailMapper.selectList(queryWrapper);
                if (StringUtils.isNotEmpty(outProjectExpertDetails)) {
                    List<ProjectExpertDetail> projectExpertDetails = new ArrayList<>();
                    outProjectExpertDetails.forEach(outProjectExpertDetail -> {
                        ProjectExpertDetail projectExpertDetail = new ProjectExpertDetail();
                        BeanUtil.copyProperties(outProjectExpertDetail, projectExpertDetail);
                        projectExpertDetails.add(projectExpertDetail);
                    });
                    projectDetailResp.setExpertDetails(projectExpertDetails);
                }
                Long projectId = projectDetailResp.getProjectId();
                ProjectManagement projectManagement = projectManagementMapper.selectProjectManagementById(projectId);
                projectDetailResp.setDeptId(projectManagement.getDeptId());
                projectDetailResp.setDeptName(projectDetailResp.getDeptName());
                projectDetailResp.setProjectName(projectManagement.getProjectName());
                projectDetailResp.setProjectDateStart(projectManagement.getProjectDateStart());
                projectDetailResp.setProjectDateEnd(projectManagement.getProjectDateEnd());
                if (StringUtils.isNotEmpty(projectManagement.getJobCategory())) {
                    projectDetailResp.setJobCategory(projectManagement.getJobCategory());
                }
            }
        }
        return projectDetailResp;
    }
@@ -554,6 +815,27 @@
    }
    private List<OutProjectExpertDetail> dealOutData(List<ProjectExpertScoreSaveReq.Score> data, Long projectExpertId) {
        List<OutProjectExpertDetail> dealData = new ArrayList<>();
        data.forEach(dto -> {
            OutProjectExpertDetail projectExpertDetail = new OutProjectExpertDetail();
            projectExpertDetail.setOutProjectExpertId(projectExpertId);
            projectExpertDetail.setContent(dto.getContent());
            projectExpertDetail.setScore(dto.getScore().intValue());
            projectExpertDetail.setScoreType(dto.getScoreType());
            if (dto.getId() == null) {
                projectExpertDetail.setCreateBy(SecurityUtils.getUsername());
            } else {
                projectExpertDetail.setId(dto.getId());
                projectExpertDetail.setUpdateBy(SecurityUtils.getUsername());
            }
            dealData.add(projectExpertDetail);
        });
        return dealData;
    }
    public ProjectManagement checkData(Long id){
        ProjectManagement projectManagement = projectManagementMapper.selectProjectManagementById(id);
        if (ObjectUtil.isNull(projectManagement)){
@@ -584,7 +866,6 @@
            throw new ServiceException("非本处室数据,无权操作!");
        }
    }
}
expert-system/src/main/resources/mapper/system/OutProjectExpertDetailMapper.xml
对比新文件
@@ -0,0 +1,5 @@
<?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.gkhy.system.mapper.OutProjectExpertDetailMapper">
</mapper>
expert-system/src/main/resources/mapper/system/OutProjectExpertMapper.xml
对比新文件
@@ -0,0 +1,5 @@
<?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.gkhy.system.mapper.OutProjectExpertMapper">
</mapper>
expert-system/src/main/resources/mapper/system/ProjectExpertMapper.xml
@@ -44,7 +44,9 @@
        <result property="projectName"    column="project_name"    />
        <result property="deptName"    column="dept_name"    />
        <result property="projectCode"    column="project_code"    />
        <collection  property="projectExpertExportResps"   javaType="java.util.List"  resultMap="ExpertExport" />
        <result property="id"    column="id"    />
        <collection  property="projectExpertExportResps"  ofType="com.gkhy.system.domain.vo.response.ProjectExpertExportResp"  javaType="java.util.List"  select="projectExpertExportDataList"
                     column="id"/>
    </resultMap>
    <resultMap id="ExpertExport" type="com.gkhy.system.domain.vo.response.ProjectExpertExportResp">
        <result property="name"      column="name"       />
@@ -259,19 +261,27 @@
    <select id="projectExpertEvaluationList" parameterType="Long" resultType="com.gkhy.system.domain.vo.response.ProjectExpertEvaluationResp">
        select b.id ,b.expert_id expertId ,c.name,c.sex,c.id_card idCard,c.domain,c.rating_level ratingLevel,
               b.selection_mode selectionMode,b.team_leader teamLeader,b.score,b.evaluation_state evaluationState,
               d.classify_name bigClassifyName
               d.classify_name bigClassifyName,1 as expertType
        from  project_expert b
                 left join sys_expert_info c on b.expert_id = c.id
        left join sys_expert_classify d on c.big_classify = d.id
        where b.del_flag = 0 and  b.project_id = #{projectId}
        order by b.team_leader asc , b.selection_mode asc, b.create_time desc
         union all
        select b.id ,b.id expertId ,b.name,b.sex,b.id_card idCard,b.domain,b.rating_level ratingLevel,
               b.selection_mode selectionMode,b.team_leader teamLeader,b.score,b.evaluation_state evaluationState,
               "空" bigClassifyName,2 as expertType
        from  out_project_expert b
        where b.del_flag = 0 and  b.project_id = #{projectId}
        order by teamLeader asc , selectionMode asc
    </select>
    <select id="projectExpertEvaList" parameterType="com.gkhy.system.domain.vo.request.SysProjectExpertReq" resultType="com.gkhy.system.domain.vo.response.ProjectExpertResp">
        select a.id projectId, a.project_name projectName,
               b.id projectExpertId,b.expert_id  expertId,c.name,c.id_card idCard,c.domain,b.selection_mode selectionMode,
               b.team_leader teamLeader,b.update_time updateTime,b.score
               b.team_leader teamLeader,b.update_time updateTime,b.score,1 as expertType
        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
@@ -293,20 +303,91 @@
        <if test="endTime != null "><!-- 结束时间检索 -->
            and date_format(b.update_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        union all
        select a.id projectId, a.project_name projectName,
        b.id projectExpertId,b.id  expertId,b.name,b.id_card idCard,b.domain,b.selection_mode selectionMode,
        b.team_leader teamLeader,b.update_time updateTime,b.score,2 as expertType
        from project_management a
        left join out_project_expert b on a.id = b.project_id and b.del_flag = 0
        where 1=1 and b.evaluation_state = 1
        <if test="deptId != null "> and a.dept_id = #{deptId}</if>
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="name != null and name != ''">
            and b.name like concat('%', #{name}, '%')
        </if>
        <if test="idCard != null and idCard != ''">
            and b.id_card like concat('%', #{idCard}, '%')
        </if>
        <if test="domain != null and domain != ''">
            and b.domain like concat('%', #{domain}, '%')
        </if>
        <if test="startTime != null "><!-- 开始时间检索 -->
            and date_format(b.update_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
        </if>
        <if test="endTime != null "><!-- 结束时间检索 -->
            and date_format(b.update_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        order by updateTime desc
    </select>
    <select id="projectExpertEvaOutList" parameterType="com.gkhy.system.domain.vo.request.SysProjectExpertReq" resultType="com.gkhy.system.domain.vo.response.ProjectExpertResp">
        select a.id projectId, a.project_name projectName,
        b.id projectExpertId,b.expert_id  expertId,b.name,b.id_card idCard,b.domain,b.selection_mode selectionMode,
        b.team_leader teamLeader,b.update_time updateTime,b.score
        from project_management a
        left join out_project_expert b on a.id = b.project_id and b.del_flag = 0
        where 1=1 and b.evaluation_state = 1
        <if test="deptId != null "> and a.dept_id = #{deptId}</if>
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="name != null and name != ''">
            and b.name like concat('%', #{name}, '%')
        </if>
        <if test="idCard != null and idCard != ''">
            and b.id_card like concat('%', #{idCard}, '%')
        </if>
        <if test="domain != null and domain != ''">
            and b.domain like concat('%', #{domain}, '%')
        </if>
        <if test="startTime != null "><!-- 开始时间检索 -->
            and date_format(b.update_time,'%y%m%d') &gt;= date_format(#{startTime},'%y%m%d')
        </if>
        <if test="endTime != null "><!-- 结束时间检索 -->
            and date_format(b.update_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        order by b.update_time desc
    </select>
    <select id="projectExpertExportList" parameterType="Long" resultMap="ProjectExpertExportInfoResult">
        select  a.project_name ,a.dept_name,a.project_code
       ,c.name,c.id_card,c.name,c.job,c.title,c.company_name,b.freight_basis,b.billing_instructions,
        b.billing_duration, b.after_tax_amount, b.open_bank, b.bank_card,b.taxable_income,b.income_tax_payable,b.tax_expert_fee,b.travel_expenses,b.accommodation_fee
        select  a.project_name ,a.dept_name,a.project_code,a.id
        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>
    <select id="projectExpertExportDataList" parameterType="Long" resultMap="ExpertExport">
        select  c.name,c.id_card,c.job,c.title,c.company_name,b.freight_basis,b.billing_instructions,
            b.billing_duration, b.after_tax_amount, b.open_bank, b.bank_card,b.taxable_income,b.income_tax_payable,b.tax_expert_fee,b.travel_expenses,b.accommodation_fee
             ,b.team_leader,b.create_time
        from project_expert b
                 left join sys_expert_info c on b.expert_id = c.id
        where b.project_id  = #{id} and b.del_flag = 0
        union all
        select  b.name,b.id_card,'' as job, b.title,b.company_name,b.freight_basis,b.billing_instructions,
            b.billing_duration, b.after_tax_amount, b.open_bank, b.bank_card,b.taxable_income,b.income_tax_payable,b.tax_expert_fee,b.travel_expenses,b.accommodation_fee
             ,b.team_leader,b.create_time
        from  out_project_expert b
        where b.project_id  = #{id} and b.del_flag = 0
        order by team_leader asc , create_time desc
    </select>
</mapper>
expert-system/src/main/resources/mapper/system/ProjectManagementMapper.xml
@@ -50,7 +50,15 @@
        <result property="projectDateStart"    column="project_date_start"    />
        <result property="projectDateEnd"    column="project_date_end"    />
        <result property="projectCheckTime"    column="project_check_time"    />
        <collection  property="projectExpertCheckResp"   javaType="java.util.List"  resultMap="ExpertCheck" />
        <result property="createTime" column="create_time"/>
<!--        <collection  property="projectExpertCheckResp"   javaType="java.util.List"  resultMap="ExpertCheck" />-->
        <collection property="projectExpertCheckResp"
                    javaType="java.util.List"
                    ofType="com.gkhy.system.domain.vo.response.ProjectExpertCheckResp"
                    select="selectExpertsByProjectId"
                    column="id">
        </collection>
    </resultMap>
    <resultMap id="ExpertCheck" type="com.gkhy.system.domain.vo.response.ProjectExpertCheckResp">
        <result  property="id"       column="project_expert_id"        />
@@ -66,6 +74,7 @@
        <result property="phone"       column="phone"    />
        <result property="selectionTime"       column="selection_time"    />
        <result property="expertRemark"       column="expert_remark"    />
        <result property="expertType"       column="expert_type"    />
    </resultMap>
    <sql id="selectProjectManagementVo">
@@ -123,8 +132,50 @@
        </if>
        <if test="projectDateStart != null "> and date_format(a.project_date_start,'%Y%m%d') &gt;= date_format(#{projectDateStart},'%Y%m%d')</if>
        <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') &lt;= date_format(#{projectDateEnd},'%Y%m%d')</if>
        order BY a.dept_name asc ,c.`name` desc
        UNION ALL
        select  a.dept_name deptName,b.name expertName,b.tax_expert_fee expertFee,a.create_time createTime,a.project_name projectName,
        b.major_dangers majorDangers,b.general_hazards generalHazards,b.travel_expenses travelExpenses,b.accommodation_fee accommodationFee
        from project_management a
        left join out_project_expert b on a.id = b.project_id and b.del_flag = 0 and b.evaluation_state = 1
        where a.del_flag = 0 and a.state = 4 and a.evaluation_state = 1
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="projectCode != null  and projectCode != ''"> and a.project_code like concat('%', #{projectCode}, '%')</if>
        <if test="deptId != null "> and a.dept_id = #{deptId}</if>
        <if test="deptIds != null and deptIds.size() > 0">
            AND a.dept_id IN
            <foreach item="deptId" collection="deptIds" open="(" separator="," close=")">
                #{deptId}
            </foreach>
        </if>
        <if test="projectDateStart != null "> and date_format(a.project_date_start,'%Y%m%d') &gt;= date_format(#{projectDateStart},'%Y%m%d')</if>
        <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') &lt;= date_format(#{projectDateEnd},'%Y%m%d')</if>
        order BY deptName asc ,expertName desc
    </select>
    <select id="selectProjectDataOut" parameterType="ProjectManagement" resultType="com.gkhy.system.domain.vo.response.ProjectDataResp">
        select  a.dept_name deptName,b.name expertName,b.tax_expert_fee expertFee,a.create_time createTime,a.project_name projectName,
        b.major_dangers majorDangers,b.general_hazards generalHazards,b.travel_expenses travelExpenses,b.accommodation_fee accommodationFee
        from project_management a
        left join out_project_expert b on a.id = b.project_id and b.del_flag = 0 and b.evaluation_state = 1
        where a.del_flag = 0 and a.state = 4 and a.evaluation_state = 1
        <if test="projectName != null  and projectName != ''"> and a.project_name like concat('%', #{projectName}, '%')</if>
        <if test="projectCode != null  and projectCode != ''"> and a.project_code like concat('%', #{projectCode}, '%')</if>
        <if test="deptId != null "> and a.dept_id = #{deptId}</if>
        <if test="deptIds != null and deptIds.size() > 0">
            AND a.dept_id IN
            <foreach item="deptId" collection="deptIds" open="(" separator="," close=")">
                #{deptId}
            </foreach>
        </if>
        <if test="projectDateStart != null "> and date_format(a.project_date_start,'%Y%m%d') &gt;= date_format(#{projectDateStart},'%Y%m%d')</if>
        <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') &lt;= date_format(#{projectDateEnd},'%Y%m%d')</if>
        order BY a.dept_name asc ,b.`name` desc
    </select>
    
    <select id="selectProjectManagementById" parameterType="Long" resultMap="ProjectManagementResult">
@@ -206,6 +257,7 @@
            <if test="expertNum != null">expert_num = #{expertNum},</if>
            <if test="expertId != null">expert_id = #{expertId},</if>
            <if test="expertName != null">expert_name = #{expertName},</if>
            <if test="expertType != null">expert_type = #{expertType},</if>
            <if test="projectEndTime != null">project_end_time = #{projectEndTime},</if>
            <if test="desc != null and desc != ''">`desc` = #{desc},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
@@ -229,15 +281,30 @@
    </update>
    <select id="projectExpertCheckInfo" parameterType="Long" resultMap="ProjectManagementInfoResult">
        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,a.project_code,a.expert_num
        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,
           a.project_code,a.expert_num
        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 = #{id}
        order by b.team_leader desc , b.create_time desc
    </select>
    <select id="selectExpertsByProjectId" parameterType="long" resultMap="ExpertCheck">
        select  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,null selection_time,c.remark expert_remark, 1 as expert_type
        from  project_expert b
                 left join sys_expert_info c on b.expert_id = c.id
        where b.project_id = #{id} and b.del_flag = 0
        union all
        select b.id project_expert_id,b.id expert_id_info,b.name,b.sex,b.id_card,b.domain,b.rating_level,b.selection_mode,b.team_leader,
               b.company_name,'' as phone,null selection_time,'' as expert_remark, 2 as expert_type
        from  out_project_expert b
        where b.project_id = #{id} and b.del_flag = 0
        order by team_leader desc
    </select>
    <select id="getProjectExpertSate" parameterType="com.gkhy.system.domain.vo.request.ProjectExpertStateReq" resultType="com.gkhy.system.domain.vo.response.ProjectExpertStateResp">
        select a.id, a.project_name, a.evaluation_state, a.project_check_time, a.project_end_time, a.dept_name, a.expert_num
        from project_management a
expert-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml