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') <= 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') >= date_format(#{startTime},'%y%m%d') </if> <if test="endTime != null "><!-- 结束时间检索 --> and date_format(b.update_time,'%y%m%d') <= 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') >= date_format(#{startTime},'%y%m%d') </if> <if test="endTime != null "><!-- 结束时间检索 --> and date_format(b.update_time,'%y%m%d') <= 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') >= date_format(#{projectDateStart},'%Y%m%d')</if> <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') <= 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') >= date_format(#{projectDateStart},'%Y%m%d')</if> <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') <= 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') >= date_format(#{projectDateStart},'%Y%m%d')</if> <if test="projectDateEnd != null "> and date_format(a.project_date_end,'%Y%m%d') <= 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