diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallOpenApi.java b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallOpenApi.java new file mode 100644 index 0000000..f7910a7 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallOpenApi.java @@ -0,0 +1,36 @@ +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.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> updateOpenTime(@ApiParam(value = "开标室对象", required = false) + @RequestBody BizBidOroomInitVo invo); + + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallProcessApi.java b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallProcessApi.java index fab2765..110e595 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallProcessApi.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/EbtpMallProcessApi.java @@ -92,4 +92,13 @@ public interface EbtpMallProcessApi { @PostMapping("/v1/bizassessroom/simple/initialize") BaseResponse simpleInitialize(@ApiParam(value = "项目Id", required = true) @RequestParam(name = "tpId") String tpId, @ApiParam(value = "标包Id", required = true) @RequestParam(name = "sectionIds") List sectionId); + + /** + * 根据包ids查询未开启的评审时信息,如不存在则查询最后一轮 + * + * @param sectionIds + * @return + */ + @PostMapping("/v1/bizassessroom/selectListByIds") + public BaseResponse> selectListByIds(@ApiParam(value = "项目标段ID集合", required = true) @RequestParam(name = "sectionIds") List sectionIds); } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/entity/BizBidOroomInitVo.java b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/entity/BizBidOroomInitVo.java new file mode 100644 index 0000000..66356ed --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/entity/BizBidOroomInitVo.java @@ -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 sectionIds; + /** + * 实际开标时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime actualOpingTime; + /** + * 时间秘文 + */ + private String timeKey; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallOpenClientFallback.java b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallOpenClientFallback.java new file mode 100644 index 0000000..7f4aa03 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallOpenClientFallback.java @@ -0,0 +1,42 @@ +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.util.Map; + + +/** + * @author yuzining + * @version 1.0 + * @date 2020-10-05 14:57:11 + */ +@Slf4j +@Component +public class EbtpMallOpenClientFallback implements FallbackFactory { + + + @Override + public EbtpMallOpenApi create(Throwable throwable) { + log.info(ExceptionUtil.stacktraceToString(throwable)); + return new EbtpMallOpenApi() { + + /** + * 根据标段ID查询开标时间 + * + * @param invo + * @return + */ + @Override + public BaseResponse> updateOpenTime(BizBidOroomInitVo invo) { + return null; + } + }; + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallProcessClientFallback.java b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallProcessClientFallback.java index 00de29e..f93049e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallProcessClientFallback.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/feign/fallback/EbtpMallProcessClientFallback.java @@ -66,6 +66,17 @@ public class EbtpMallProcessClientFallback implements FallbackFactory simpleInitialize(String tpId, List sectionId) { return null; } + + /** + * 根据包ids查询未开启的评审时信息,如不存在则查询最后一轮 + * + * @param sectionIds + * @return + */ + @Override + public BaseResponse> selectListByIds(List sectionIds) { + return null; + } }; } } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java index 8836f53..abecbe4 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectrecord/service/impl/ProjectRecordServiceImpl.java @@ -58,7 +58,6 @@ import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; @@ -1065,12 +1064,21 @@ public class ProjectRecordServiceImpl extends BaseServiceImpl> conversionMap = sectionList.stream().collect(Collectors.groupingBy(ProjectSection::getProjectId)); List sectionVOList = new ArrayList<>(); + + //20220402 新增:查询开标时间或者评审时间 + Map timeMap = projectSectionService.getOpenTime(sectionList.stream().map(ProjectSection::getId).collect(Collectors.toList())); + //拼装标段总条数 for (String key: conversionMap.keySet()) { List tempList = conversionMap.get(key); if(!CollectionUtils.isEmpty(tempList)){ tempList = tempList.stream().sorted(Comparator.comparing(ProjectSection::getBidSectCode)).collect(Collectors.toList()); ProjectSectionVO vo = BeanUtil.toBean(tempList.get(0),ProjectSectionVO.class); + + if (timeMap.containsKey(vo.getId())) { + vo.setSectionOpenTime(timeMap.get(vo.getId())); + } + vo.setSectionCount(tempList.size()); sectionVOList.add(vo); } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/entity/ProjectSectionVO.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/entity/ProjectSectionVO.java index c4dad74..7e16d5a 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/entity/ProjectSectionVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/entity/ProjectSectionVO.java @@ -116,4 +116,10 @@ public class ProjectSectionVO extends ProjectSection implements Serializable { @ApiModelProperty(value = "采购方式字典回显") private String bidMethodDictValue; + + /** + * 开标时间或者评审室开启时间,用于项目列表展示 + */ + @ApiModelProperty(value = "开标时间或者评审室开启时间,用于项目列表展示") + private String sectionOpenTime; } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/IProjectSectionService.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/IProjectSectionService.java index 8153732..26bfe7a 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/IProjectSectionService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/IProjectSectionService.java @@ -237,4 +237,12 @@ public interface IProjectSectionService extends IBaseService{ */ boolean getSectionIsAnnounce(String planId); + + /** + * 根据包ids查询开标时间或者评审开始时间 + * + * @param sectionIds 项目标段ID,可以是不同项目的包 + * @return 返回结果 + */ + Map getOpenTime(List sectionIds); } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/impl/ProjectSectionServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/impl/ProjectSectionServiceImpl.java index da5741f..a1e5f3c 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/impl/ProjectSectionServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/project/projectsection/service/impl/ProjectSectionServiceImpl.java @@ -2,6 +2,7 @@ package com.chinaunicom.mall.ebtp.project.projectsection.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -19,14 +20,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.dictchooseprocess.entity.DictChooseProcess; import com.chinaunicom.mall.ebtp.project.dictchooseprocess.service.IDictChooseProcessService; -import com.chinaunicom.mall.ebtp.project.feign.EbtpArchiveApi; -import com.chinaunicom.mall.ebtp.project.feign.EbtpMallProcessApi; -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.feign.*; +import com.chinaunicom.mall.ebtp.project.feign.entity.*; 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.service.IProjectRecordService; @@ -44,10 +39,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -72,6 +64,9 @@ public class ProjectSectionServiceImpl extends BaseServiceImpl resultMap = response.getData(); ProjectRecord record = recordService.getById(projectId); ProjectExceptionEnum.FRAME_EXCEPTION_PROJECT_SECTION_NOT_FIND.customValid(null == record); + + //20220402 新增:查询开标时间或者评审时间 + Map timeMap = this.getOpenTime(sectionIds); + for (ProjectSection section:sectionList) { ProjectSectionVO vo = BeanUtil.toBean(section,ProjectSectionVO.class); Long applyCount = (null != resultMap.get(vo.getId()))? resultMap.get(vo.getId()) : 0L; vo.setApplyCount(applyCount); recordService.getLinkPercentage(vo,BeanUtil.toBean(record, ProjectRecordVO.class)); + if (timeMap.containsKey(vo.getId())) { + vo.setSectionOpenTime(timeMap.get(vo.getId())); + } resultList.add(vo); } @@ -657,6 +659,36 @@ public class ProjectSectionServiceImpl extends BaseServiceImpl ProjectCommonUtil.BUSINESS_MODULE_7; } + /** + * 根据包ids查询开标时间或者评审开始时间 + * + * @param sectionIds 项目标段ID,可以是不同项目的包 + * @return 返回结果 + */ + @Override + public Map getOpenTime(List sectionIds) { + return Optional.ofNullable(sectionIds) + .map(ids -> { + //查询评标服务 + BaseResponse> opening = ebtpMallOpenApi.updateOpenTime(new BizBidOroomInitVo().setSectionIds(ids)); + ProjectExceptionEnum.FRAME_EXCEPTION_ERROR.customValidName("评审时间查询失败", !opening.isSuccess()); + Map map = opening.getData(); + if (ids.size() != map.size()) { + //查询流程服务 + BaseResponse> process = ebtpMallProcessApi.selectListByIds(ids); + ProjectExceptionEnum.FRAME_EXCEPTION_ERROR.customValidName("评审时间查询失败", !process.isSuccess()); + process.getData().forEach(room -> { + //如果无评标时间,记录评审时间 + if (!map.containsKey(room.getSectionId())) { + map.put(room.getSectionId(), LocalDateTimeUtil.formatNormal(room.getOpenTime())); + } + }); + } + return map; + }) + .orElse(new HashMap<>()); + } + /** * 拼装标段模块修改流程实体并插入数据 * @param sectionId 标段ID