项目管理列表添加开标时间字段

This commit is contained in:
fuqingji
2022-04-02 15:11:50 +08:00
parent e2ec3c64ed
commit 7836e5e4a8
9 changed files with 268 additions and 13 deletions

View File

@ -0,0 +1,37 @@
package com.chinaunicom.mall.ebtp.project.feign;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.project.feign.entity.BizBidOroomInitVo;
import com.chinaunicom.mall.ebtp.project.feign.fallback.EbtpMallOpenClientFallback;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.time.LocalDateTime;
import java.util.Map;
/**
* 标段出始化流程
*
* @author daixc
* @date 2020/11/25
*/
@FeignClient(value = "${mconfig.service-name-open}", fallbackFactory = EbtpMallOpenClientFallback.class)
public interface EbtpMallOpenApi {
/**
* 根据标段ID查询开标时间
*
* @param invo
* @return
*/
@ApiOperation("根据标段ID查询开标时间")
@PostMapping("/v1/bizbidopenroom//selectOpenTimeByBsIds")
public BaseResponse<Map<String, LocalDateTime>> updateOpenTime(@ApiParam(value = "开标室对象", required = false)
@RequestBody BizBidOroomInitVo invo);
}

View File

@ -92,4 +92,13 @@ public interface EbtpMallProcessApi {
@PostMapping("/v1/bizassessroom/simple/initialize") @PostMapping("/v1/bizassessroom/simple/initialize")
BaseResponse<Boolean> simpleInitialize(@ApiParam(value = "项目Id", required = true) @RequestParam(name = "tpId") String tpId, BaseResponse<Boolean> simpleInitialize(@ApiParam(value = "项目Id", required = true) @RequestParam(name = "tpId") String tpId,
@ApiParam(value = "标包Id", required = true) @RequestParam(name = "sectionIds") List<String> sectionId); @ApiParam(value = "标包Id", required = true) @RequestParam(name = "sectionIds") List<String> sectionId);
/**
* 根据包ids查询未开启的评审时信息如不存在则查询最后一轮
*
* @param sectionIds
* @return
*/
@PostMapping("/v1/bizassessroom/selectListByIds")
public BaseResponse<List<BizAssessRoom>> selectListByIds(@ApiParam(value = "项目标段ID集合", required = true) @RequestParam(name = "sectionIds") List<String> sectionIds);
} }

View File

@ -0,0 +1,92 @@
package com.chinaunicom.mall.ebtp.project.feign.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* 实体类 BizBidOpenroom
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
public class BizBidOroomInitVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 评审室id
*/
private String assessRoomId;
/**
* 评审轮次id
*/
private String turnId;
/**
* 轮次
*/
private String turnSort;
/**
* 项目id
*/
private String projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 项目编号
*/
private String projectNo;
/**
* 标段id
*/
private String sectionId;
/**
* 标段名称
*/
private String sectionName;
/**
* 标段编号
*/
private String sectionNo;
/**
* 开标时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String opingTime;
/**
* 评审室类型 1、资审 2、评审
*/
private String roomType;
/**
* 标段ids
*/
private List<String> sectionIds;
/**
* 实际开标时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime actualOpingTime;
/**
* 时间秘文
*/
private String timeKey;
}

View File

@ -0,0 +1,43 @@
package com.chinaunicom.mall.ebtp.project.feign.fallback;
import cn.hutool.core.exceptions.ExceptionUtil;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.project.feign.EbtpMallOpenApi;
import com.chinaunicom.mall.ebtp.project.feign.entity.BizBidOroomInitVo;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Map;
/**
* @author yuzining
* @version 1.0
* @date 2020-10-05 14:57:11
*/
@Slf4j
@Component
public class EbtpMallOpenClientFallback implements FallbackFactory<EbtpMallOpenApi> {
@Override
public EbtpMallOpenApi create(Throwable throwable) {
log.info(ExceptionUtil.stacktraceToString(throwable));
return new EbtpMallOpenApi() {
/**
* 根据标段ID查询开标时间
*
* @param invo
* @return
*/
@Override
public BaseResponse<Map<String, LocalDateTime>> updateOpenTime(BizBidOroomInitVo invo) {
return null;
}
};
}
}

View File

@ -66,6 +66,17 @@ public class EbtpMallProcessClientFallback implements FallbackFactory<EbtpMallPr
public BaseResponse<Boolean> simpleInitialize(String tpId, List<String> sectionId) { public BaseResponse<Boolean> simpleInitialize(String tpId, List<String> sectionId) {
return null; return null;
} }
/**
* 根据包ids查询未开启的评审时信息如不存在则查询最后一轮
*
* @param sectionIds
* @return
*/
@Override
public BaseResponse<List<BizAssessRoom>> selectListByIds(List<String> sectionIds) {
return null;
}
}; };
} }
} }

View File

@ -58,7 +58,6 @@ import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -1065,12 +1064,21 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl<ProjectRecordMappe
//分组排序 获取第一条 //分组排序 获取第一条
Map<String,List<ProjectSection>> conversionMap = sectionList.stream().collect(Collectors.groupingBy(ProjectSection::getProjectId)); Map<String,List<ProjectSection>> conversionMap = sectionList.stream().collect(Collectors.groupingBy(ProjectSection::getProjectId));
List<ProjectSectionVO> sectionVOList = new ArrayList<>(); List<ProjectSectionVO> sectionVOList = new ArrayList<>();
//20220402 新增:查询开标时间或者评审时间
Map<String, LocalDateTime> timeMap = projectSectionService.getOpenTime(sectionList.stream().map(ProjectSection::getId).collect(Collectors.toList()));
//拼装标段总条数 //拼装标段总条数
for (String key: conversionMap.keySet()) { for (String key: conversionMap.keySet()) {
List<ProjectSection> tempList = conversionMap.get(key); List<ProjectSection> tempList = conversionMap.get(key);
if(!CollectionUtils.isEmpty(tempList)){ if(!CollectionUtils.isEmpty(tempList)){
tempList = tempList.stream().sorted(Comparator.comparing(ProjectSection::getBidSectCode)).collect(Collectors.toList()); tempList = tempList.stream().sorted(Comparator.comparing(ProjectSection::getBidSectCode)).collect(Collectors.toList());
ProjectSectionVO vo = BeanUtil.toBean(tempList.get(0),ProjectSectionVO.class); ProjectSectionVO vo = BeanUtil.toBean(tempList.get(0),ProjectSectionVO.class);
if (timeMap.containsKey(vo.getId())) {
vo.setSectionOpenTime(timeMap.get(vo.getId()));
}
vo.setSectionCount(tempList.size()); vo.setSectionCount(tempList.size());
sectionVOList.add(vo); sectionVOList.add(vo);
} }

View File

@ -1,16 +1,21 @@
package com.chinaunicom.mall.ebtp.project.projectsection.entity; package com.chinaunicom.mall.ebtp.project.projectsection.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest; import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest;
import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
@ -116,4 +121,13 @@ public class ProjectSectionVO extends ProjectSection implements Serializable {
@ApiModelProperty(value = "采购方式字典回显") @ApiModelProperty(value = "采购方式字典回显")
private String bidMethodDictValue; private String bidMethodDictValue;
/**
* 开标时间或者评审室开启时间,用于项目列表展示
*/
@ApiModelProperty(value = "开标时间或者评审室开启时间,用于项目列表展示")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(typeHandler = CustomLocalDateTimeTypeHandler.class)
private LocalDateTime sectionOpenTime;
} }

View File

@ -7,6 +7,7 @@ import com.chinaunicom.mall.ebtp.project.feign.entity.SectionFlowVO;
import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSection; import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSection;
import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSectionVO; import com.chinaunicom.mall.ebtp.project.projectsection.entity.ProjectSectionVO;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -237,4 +238,12 @@ public interface IProjectSectionService extends IBaseService<ProjectSection>{
*/ */
boolean getSectionIsAnnounce(String planId); boolean getSectionIsAnnounce(String planId);
/**
* 根据包ids查询开标时间或者评审开始时间
*
* @param sectionIds 项目标段ID,可以是不同项目的包
* @return 返回结果
*/
Map<String, LocalDateTime> getOpenTime(List<String> sectionIds);
} }

View File

@ -19,14 +19,8 @@ import com.chinaunicom.mall.ebtp.project.dict.entity.DictProject;
import com.chinaunicom.mall.ebtp.project.dict.service.IDictProjectService; import com.chinaunicom.mall.ebtp.project.dict.service.IDictProjectService;
import com.chinaunicom.mall.ebtp.project.dictchooseprocess.entity.DictChooseProcess; import com.chinaunicom.mall.ebtp.project.dictchooseprocess.entity.DictChooseProcess;
import com.chinaunicom.mall.ebtp.project.dictchooseprocess.service.IDictChooseProcessService; import com.chinaunicom.mall.ebtp.project.dictchooseprocess.service.IDictChooseProcessService;
import com.chinaunicom.mall.ebtp.project.feign.EbtpArchiveApi; import com.chinaunicom.mall.ebtp.project.feign.*;
import com.chinaunicom.mall.ebtp.project.feign.EbtpMallProcessApi; import com.chinaunicom.mall.ebtp.project.feign.entity.*;
import com.chinaunicom.mall.ebtp.project.feign.EbtpRsmsApi;
import com.chinaunicom.mall.ebtp.project.feign.EbtpTenderApi;
import com.chinaunicom.mall.ebtp.project.feign.entity.BizAssessRoom;
import com.chinaunicom.mall.ebtp.project.feign.entity.DictProjectConfig;
import com.chinaunicom.mall.ebtp.project.feign.entity.SectionFlowVO;
import com.chinaunicom.mall.ebtp.project.feign.entity.WfProjectConfigTask;
import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord; import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecord;
import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecordVO; import com.chinaunicom.mall.ebtp.project.projectrecord.entity.ProjectRecordVO;
import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService; import com.chinaunicom.mall.ebtp.project.projectrecord.service.IProjectRecordService;
@ -44,10 +38,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.time.LocalDateTime;
import java.util.LinkedHashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -72,6 +64,9 @@ public class ProjectSectionServiceImpl extends BaseServiceImpl<ProjectSectionMap
@Resource @Resource
private EbtpMallProcessApi ebtpMallProcessApi; private EbtpMallProcessApi ebtpMallProcessApi;
@Resource
private EbtpMallOpenApi ebtpMallOpenApi;
@Resource @Resource
private IDictChooseProcessService chooseProcessService; private IDictChooseProcessService chooseProcessService;
@ -531,11 +526,18 @@ public class ProjectSectionServiceImpl extends BaseServiceImpl<ProjectSectionMap
Map<String,Long> resultMap = response.getData(); Map<String,Long> resultMap = response.getData();
ProjectRecord record = recordService.getById(projectId); ProjectRecord record = recordService.getById(projectId);
ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValid(null == record); ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValid(null == record);
//20220402 新增:查询开标时间或者评审时间
Map<String, LocalDateTime> timeMap = this.getOpenTime(sectionIds);
for (ProjectSection section:sectionList) { for (ProjectSection section:sectionList) {
ProjectSectionVO vo = BeanUtil.toBean(section,ProjectSectionVO.class); ProjectSectionVO vo = BeanUtil.toBean(section,ProjectSectionVO.class);
Long applyCount = (null != resultMap.get(vo.getId()))? resultMap.get(vo.getId()) : 0L; Long applyCount = (null != resultMap.get(vo.getId()))? resultMap.get(vo.getId()) : 0L;
vo.setApplyCount(applyCount); vo.setApplyCount(applyCount);
recordService.getLinkPercentage(vo,BeanUtil.toBean(record, ProjectRecordVO.class)); recordService.getLinkPercentage(vo,BeanUtil.toBean(record, ProjectRecordVO.class));
if (timeMap.containsKey(vo.getId())) {
vo.setSectionOpenTime(timeMap.get(vo.getId()));
}
resultList.add(vo); resultList.add(vo);
} }
@ -657,6 +659,36 @@ public class ProjectSectionServiceImpl extends BaseServiceImpl<ProjectSectionMap
vo.getBusinessModule() > ProjectCommonUtil.BUSINESS_MODULE_7; vo.getBusinessModule() > ProjectCommonUtil.BUSINESS_MODULE_7;
} }
/**
* 根据包ids查询开标时间或者评审开始时间
*
* @param sectionIds 项目标段ID可以是不同项目的包
* @return 返回结果
*/
@Override
public Map<String, LocalDateTime> getOpenTime(List<String> sectionIds) {
return Optional.ofNullable(sectionIds)
.map(ids -> {
//查询评标服务
BaseResponse<Map<String, LocalDateTime>> opening = ebtpMallOpenApi.updateOpenTime(new BizBidOroomInitVo().setSectionIds(ids));
ProjectExceptionEnum.FRAME_EXCEPTION_ERROR.customValidName("评审时间查询失败", !opening.isSuccess());
Map<String, LocalDateTime> map = opening.getData();
if (ids.size() != map.size()) {
//查询流程服务
BaseResponse<List<BizAssessRoom>> process = ebtpMallProcessApi.selectListByIds(ids);
ProjectExceptionEnum.FRAME_EXCEPTION_ERROR.customValidName("评审时间查询失败", !process.isSuccess());
process.getData().forEach(room -> {
//如果无评标时间,记录评审时间
if (!map.containsKey(room.getSectionId())) {
map.put(room.getSectionId(), room.getOpenTime());
}
});
}
return map;
})
.orElse(new HashMap<>());
}
/** /**
* 拼装标段模块修改流程实体并插入数据 * 拼装标段模块修改流程实体并插入数据
* @param sectionId 标段ID * @param sectionId 标段ID