From 90a2d2e351e116895ac5a28e73948a07706a672d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=98=E5=BA=86=E5=90=89?= <51312040@qq.com> Date: Mon, 12 Apr 2021 10:54:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=8A=A5=E8=A1=A8=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extend/export/bean/BidEvalDetailDTO.java | 4 +- .../ebtp/extend/export/bean/BidEvalInfo.java | 2 - .../extend/export/bean/BizExportDict.java | 14 + .../export/bean/BizSupplierRegister.java | 72 ----- .../{ExportParame.java => ExportParam.java} | 4 +- .../mall/ebtp/extend/export/bean/Tdoc.java | 28 -- .../export/controller/ExportController.java | 6 +- .../export/dao/mapper/BizExportDictMapper.xml | 2 +- .../entity/BidOpenRecordExportData.java | 35 +++ .../extend/export/entity/ExportTableData.java | 34 +++ .../export/entity/RvwFirstExportData.java | 35 +++ .../export/feign/RespsFeignService.java | 24 -- .../extend/export/service/ExportService.java | 56 +++- .../export/service/ExportServiceFactory.java | 6 +- .../common/ExportCommonFeignService.java | 92 ++++++ .../impl/ExportCommonFeignServiceImpl.java | 195 ++++++++++++ .../{ => dict}/IBizExportDictService.java | 2 +- .../impl/BizExportDictServiceImpl.java | 101 +++--- .../service/impl/BidOpenRecordImpl.java | 147 +++++++++ .../service/impl/CbpsExportServiceImpl.java | 9 +- .../service/impl/DfhzExportServiceImpl.java | 7 +- .../export/service/impl/FirstRvwImpl.java | 113 +++++++ .../service/impl/JgdfExportServiceImpl.java | 10 +- .../service/impl/JudgesExportServiceImpl.java | 96 ------ ...erviceImpl.java => JudgesPromiseImpl.java} | 19 +- .../export/service/impl/JudgesSignImpl.java | 78 +++++ .../export/service/impl/JudgesSignInImpl.java | 76 +++++ .../service/impl/KbjlExportServiceImpl.java | 120 -------- .../service/impl/PbbgExportServiceImpl.java | 264 ---------------- .../service/impl/PszjExportServiceImpl.java | 84 ----- .../export/service/impl/ReviewReportImpl.java | 194 ++++++++++++ .../service/impl/ZjgrExportServiceImpl.java | 9 +- .../service/policy/DetailTablePolicy.java | 78 +++++ .../TemplateFileService.java | 2 +- .../impl/TemplateFileServiceImpl.java | 4 +- .../export/vo/BidEvalDetailSummaryVO.java | 2 +- .../feign/client/DocumentCenterService.java | 4 +- .../client}/OpenFeignService.java | 4 +- .../client/ProcessFeignService.java} | 13 +- .../client}/ProjectFeignService.java | 8 +- .../feign/client/RespsFeignService.java | 28 ++ .../client}/RsmsFeignService.java | 7 +- .../client}/TenderFeignService.java | 6 +- .../feign/client/UsercenterFeignService.java | 23 ++ .../DocumentCenterServiceFallbackFactory.java | 4 +- .../factory/ExportServiceFallback.java | 7 +- .../ExportServiceOpenFallbakFactory.java | 4 +- .../ExportServiceRespsFallbakFactory.java | 21 +- .../factory/ProcessFeignFallbackFactory.java | 14 +- .../factory/ProjectFeignFallbackFactory.java | 8 +- .../factory/TenderFeignFallbackFactory.java | 6 +- .../UsercenterFeignFallbackFactory.java | 19 ++ .../DocumentCenterServiceFallbackImpl.java | 4 +- .../FeignConfiguration.java | 2 +- .../bean => feign/entity}/BizAssessRoom.java | 2 +- .../feign/entity/BizSupplierRegister.java | 288 ++++++++++++++++++ .../vo => feign/entity}/JuryPrintVO.java | 5 +- .../feign/entity/LoginUserDetailVO.java | 118 +++++++ .../entity}/ProjectRecordVO.java | 2 +- .../bean => feign/entity}/ProjectSection.java | 2 +- .../entity}/ProjectSectionVO.java | 2 +- .../vo => feign/entity}/ResultDetailVO.java | 2 +- .../entity}/ReviewConfigCategoryDTO.java | 3 +- .../entity}/ReviewConfigDetailDTO.java | 4 +- .../mall/ebtp/extend/feign/entity/Tdoc.java | 139 +++++++++ .../ebtp/extend/feign/entity/TdocCatalog.java | 63 ++++ .../entity/BizBidClientVersion.java | 68 ++--- .../sevice/BizBidClientVersionService.java | 5 +- src/main/resources/application-local.yml | 1 + src/main/resources/application-pro.yml | 2 +- src/main/resources/application-test.yml | 2 +- src/main/resources/application-uat.yml | 2 +- src/main/resources/application.yml | 2 +- src/main/resources/model/初步评审.docx | Bin 0 -> 23687 bytes src/main/resources/model/开标记录表.docx | Bin 18014 -> 24142 bytes src/main/resources/model/评标报告.docx | Bin 26248 -> 22706 bytes 76 files changed, 2019 insertions(+), 899 deletions(-) delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizSupplierRegister.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/{ExportParame.java => ExportParam.java} (89%) delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/Tdoc.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/BidOpenRecordExportData.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/ExportTableData.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/RvwFirstExportData.java delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RespsFeignService.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/ExportCommonFeignService.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/impl/ExportCommonFeignServiceImpl.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/{ => dict}/IBizExportDictService.java (87%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/{ => dict}/impl/BizExportDictServiceImpl.java (52%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BidOpenRecordImpl.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/FirstRvwImpl.java delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesExportServiceImpl.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/{ZjcnExportServiceImpl.java => JudgesPromiseImpl.java} (68%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignImpl.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignInImpl.java delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/KbjlExportServiceImpl.java delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PbbgExportServiceImpl.java delete mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PszjExportServiceImpl.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ReviewReportImpl.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/policy/DetailTablePolicy.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/{ => templateFile}/TemplateFileService.java (75%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/{ => templateFile}/impl/TemplateFileServiceImpl.java (88%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/OpenFeignService.java (87%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign/ProcessFeignClient.java => feign/client/ProcessFeignService.java} (70%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/ProjectFeignService.java (79%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RespsFeignService.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/RsmsFeignService.java (94%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/TenderFeignService.java (80%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/UsercenterFeignService.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/feign/{ => client}/factory/DocumentCenterServiceFallbackFactory.java (80%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/ExportServiceFallback.java (92%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/ExportServiceOpenFallbakFactory.java (86%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/ExportServiceRespsFallbakFactory.java (50%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/ProcessFeignFallbackFactory.java (59%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/ProjectFeignFallbackFactory.java (79%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/feign => feign/client}/factory/TenderFeignFallbackFactory.java (81%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/UsercenterFeignFallbackFactory.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/feign/{ => client}/fallback/DocumentCenterServiceFallbackImpl.java (87%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/feign/{factory => config}/FeignConfiguration.java (98%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/BizAssessRoom.java (98%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizSupplierRegister.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/vo => feign/entity}/JuryPrintVO.java (93%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/LoginUserDetailVO.java rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/ProjectRecordVO.java (99%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/ProjectSection.java (99%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/ProjectSectionVO.java (97%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/vo => feign/entity}/ResultDetailVO.java (98%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/ReviewConfigCategoryDTO.java (85%) rename src/main/java/com/chinaunicom/mall/ebtp/extend/{export/bean => feign/entity}/ReviewConfigDetailDTO.java (89%) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/Tdoc.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/TdocCatalog.java create mode 100644 src/main/resources/model/初步评审.docx diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalDetailDTO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalDetailDTO.java index 86f911a..1711528 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalDetailDTO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalDetailDTO.java @@ -51,9 +51,7 @@ public class BidEvalDetailDTO extends BidEvalDetail implements Serializable { private List supplierRegisterIds; - public static long getSerialversionuid() { - return serialVersionUID; - } + public String getReviewTurnId() { return reviewTurnId; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalInfo.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalInfo.java index dfe774d..e6c3b42 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalInfo.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BidEvalInfo.java @@ -1,11 +1,9 @@ package com.chinaunicom.mall.ebtp.extend.export.bean; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizExportDict.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizExportDict.java index a632673..f3bd1ae 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizExportDict.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizExportDict.java @@ -1,5 +1,6 @@ package com.chinaunicom.mall.ebtp.extend.export.bean; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; import io.swagger.annotations.ApiModel; @@ -52,6 +53,12 @@ public class BizExportDict implements Serializable { @ApiModelProperty(value = "") private Integer level; + /** + * + */ + @ApiModelProperty(value = "") + private Integer queryType; + /** * 使能:0、不可用,1、可用 */ @@ -64,5 +71,12 @@ public class BizExportDict implements Serializable { @ApiModelProperty(value = "") private String methodDict; + /** + * + */ + @TableField(exist = false) + @ApiModelProperty(value = "是否可点击") + private boolean onClick; + } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizSupplierRegister.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizSupplierRegister.java deleted file mode 100644 index d24d545..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizSupplierRegister.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; -import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; - -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Map; - -/** - * 实体类 BizSupplierRegister - * - * @auto.generated - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -@ApiModel(value = "BizSupplierRegister对象", description = "供应商报名登记表") -public class BizSupplierRegister extends BaseEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - - - /** - * 机构名称 - */ - @ApiModelProperty(value = "机构名称") - private String companyName; - - - /** - * 投标人姓名 - */ - @ApiModelProperty(value = "投标人姓名") - private String bidUserName; - - /** - * 联系人名称 - */ - @ApiModelProperty(value = "联系人名称") - private String contactName; - - - /** - * 签字确认时间 - */ - - @ApiModelProperty(value = "签字确认时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime signTime; - - - private String newPrice; - - /** - * 下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件] - */ - @ApiModelProperty(value = "下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件]") - private String downloadStatus; -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParame.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParam.java similarity index 89% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParame.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParam.java index 5695a62..244b4f5 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParame.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ExportParam.java @@ -11,13 +11,13 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @ApiModel("参数") -public class ExportParame { +public class ExportParam { private String assessRoomId; private String reviewTurnId; - private String reviewTurnSort; + private Integer reviewTurnSort; private String projectId; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/Tdoc.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/Tdoc.java deleted file mode 100644 index 264cd16..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/Tdoc.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; - -import io.swagger.annotations.ApiModelProperty; - -public class Tdoc { - - @ApiModelProperty(value = "") - private String assessRoomId; - - @ApiModelProperty(value = "轮次") - private Integer turnSort; - - public String getAssessRoomId() { - return assessRoomId; - } - - public void setAssessRoomId(String assessRoomId) { - this.assessRoomId = assessRoomId; - } - - public Integer getTurnSort() { - return turnSort; - } - - public void setTurnSort(Integer turnSort) { - this.turnSort = turnSort; - } -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/controller/ExportController.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/controller/ExportController.java index 0ed055a..7d3b597 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/controller/ExportController.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/controller/ExportController.java @@ -2,9 +2,9 @@ package com.chinaunicom.mall.ebtp.extend.export.controller; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.BizExportDict; -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; import com.chinaunicom.mall.ebtp.extend.export.service.ExportServiceFactory; -import com.chinaunicom.mall.ebtp.extend.export.service.IBizExportDictService; +import com.chinaunicom.mall.ebtp.extend.export.service.dict.IBizExportDictService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -41,7 +41,7 @@ public class ExportController { */ @PreAuthorize("hasAnyAuthority('ebtp-purchase','ebtp-agency-project-manager')") @GetMapping(value = "/{type}") - public void export(@PathVariable String type, ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void export(@PathVariable String type, ExportParam param, HttpServletRequest request, HttpServletResponse response) { exportServiceFactory.getService(type).doExport(param, request, response); } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/dao/mapper/BizExportDictMapper.xml b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/dao/mapper/BizExportDictMapper.xml index a246bfc..29394d0 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/dao/mapper/BizExportDictMapper.xml +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/dao/mapper/BizExportDictMapper.xml @@ -25,6 +25,6 @@ SELECT `id`, `dic_name`, `path`, `level`, `url` FROM `biz_export_dict` where active = 1 AND (method_dict = #{type} OR method_dict = '0') - ORDER BY id + ORDER BY sort \ No newline at end of file diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/BidOpenRecordExportData.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/BidOpenRecordExportData.java new file mode 100644 index 0000000..c9eca99 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/BidOpenRecordExportData.java @@ -0,0 +1,35 @@ +package com.chinaunicom.mall.ebtp.extend.export.entity; + + +import com.deepoove.poi.expression.Name; +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; + + +/** + * 开标记录表导出数据实体 + */ +@Data +@Accessors(chain = true) +public class BidOpenRecordExportData implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer index; + + private String projName; + + private String projNum; + + private String bidNum; + + private String openTime; + + @Name("detail_table") + private ExportTableData tableData; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/ExportTableData.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/ExportTableData.java new file mode 100644 index 0000000..9044453 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/ExportTableData.java @@ -0,0 +1,34 @@ +package com.chinaunicom.mall.ebtp.extend.export.entity; + + +import com.deepoove.poi.data.CellRenderData; +import com.deepoove.poi.data.MergeCellRule; +import com.deepoove.poi.data.RowRenderData; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + + +@Data +@Accessors(chain = true) +public class ExportTableData implements Serializable { + + private static final long serialVersionUID = 1L; + //表头的循环数据 + private List cells; + + //行单元格合并 + private MergeCellRule cellMerge; + + + //行的循环 + private List rows; + + //列单元格合并 + private MergeCellRule rowMerge; + + + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/RvwFirstExportData.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/RvwFirstExportData.java new file mode 100644 index 0000000..baf7c35 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/entity/RvwFirstExportData.java @@ -0,0 +1,35 @@ +package com.chinaunicom.mall.ebtp.extend.export.entity; + + +import com.deepoove.poi.expression.Name; +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; + + +/** + * 初步评审导出数据实体 + */ +@Data +@Accessors(chain = true) +public class RvwFirstExportData implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer index; + + private String title; + + private String projName; + + private String projNum; + + private String date; + + @Name("detail_table") + private ExportTableData tableData; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RespsFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RespsFeignService.java deleted file mode 100644 index a7da9a2..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RespsFeignService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; - -import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizSupplierRegister; -import com.chinaunicom.mall.ebtp.extend.export.bean.Tdoc; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.ExportServiceRespsFallbakFactory; -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.List; - -/** - * 调用 RESPS_SERVICE - */ -@FeignClient(value = "${mconfig.feign.name.resps}" , fallbackFactory = ExportServiceRespsFallbakFactory.class) -public interface RespsFeignService { - - @PostMapping("/v1/tfile/getTenderQuoteList") - BaseResponse> getTenderQuoteList(@ApiParam(value = "assessRoomId,turnSort", required = true) @RequestBody Tdoc tdocPara); - - -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportService.java index d66a868..30d723e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportService.java @@ -1,28 +1,54 @@ package com.chinaunicom.mall.ebtp.extend.export.service; -import java.io.File; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.util.PoitlIOUtils; +import lombok.SneakyThrows; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.OutputStream; public interface ExportService { + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response); - /** - * 导出 - * - * @param param - * @param request - * @param response - */ - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response); - default File getExportTemplet(String path) { - File f = new File("C:\\Users\\Administrator\\Desktop\\新建文件夹\\doc\\" + path); + /** + * 执行导出操作 + * + * @param template + * @param fileName + * @param response + */ + @SneakyThrows + default void write(XWPFTemplate template, String fileName, HttpServletResponse response) { - return f; - } + response.setContentType("application/octet-stream"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + + // HttpServletResponse response + OutputStream out = response.getOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + template.write(bos); + bos.flush(); + out.flush(); + PoitlIOUtils.closeQuietlyMulti(template, bos, out); + } + + default File getExportTemplet(String path) { + File f = new File("D:\\EasyPoiTemplet\\" + path); + + return f; + } } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportServiceFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportServiceFactory.java index 94b4c9f..a885a5e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportServiceFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/ExportServiceFactory.java @@ -11,13 +11,13 @@ import java.util.Map; public class ExportServiceFactory { @Autowired - private Map map = new LinkedHashMap<>(); + private final Map EXPORT_MAP = new LinkedHashMap<>(); public ExportService getService(String key) { - if (!map.containsKey(key)) { + if (!EXPORT_MAP.containsKey(key)) { ExportExceptionEnum.FRAME_EXCEPTION_METHOD_IS_NOT_EXIXT.throwException(); } - return map.get(key); + return EXPORT_MAP.get(key); } } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/ExportCommonFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/ExportCommonFeignService.java new file mode 100644 index 0000000..7430bf0 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/ExportCommonFeignService.java @@ -0,0 +1,92 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.common; + + +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizAssessRoom; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.*; + +import java.util.List; +import java.util.Map; + +/** + * 报表导出通用feign接口调用类 + */ +public interface ExportCommonFeignService { + + /** + * 查询用户信息 + */ + LoginUserDetailVO userCenterGetLoninUserDetail(String userId); + + + /** + * 根据包id 查询信息 + * + * @param sectionId + * @return + */ + ProjectSectionVO projectGetSectionById(String sectionId); + + /** + * 根据包id 查询项目信息 + * + * @param projId + * @return + */ + ProjectRecordVO projectGetProjById(String projId); + + + /** + * 根据评审室id 查询供应商信息 + * + * @param roomId + * @return + */ + List tenderGetSupplierRegisterByRoomId(String roomId); + + + /** + * 查询初审汇总数据 + * + * @param param + * @return + */ + List rsmsFindScoreEarlySummary(ExportParam param); + + + /** + * 通过评审室Id查询评委会成员数据及签到数据 + * + * @param roomId + * @return + */ + List rsmsQueryReportPrintByRoomId(String roomId); + + /** + * 通过评审室查询detail表数据 + * + * @param roomId + * @return + */ + List rsmsQueryReviewDetailByRoomId(String roomId); + + + /** + * 开标唱标页列表 + * + * @param tdocPara assessRoomId 评审室id turnSort 轮次序号 + * @return title-表格标题,dataDecrypt-解密状态id、status dataQuote-报价信息 + */ + Map respsGetOpenTenderList(ExportParam param); + + + /** + * 通过room_id查询评审室信息 + * + * @param roomId + * @return + */ + BizAssessRoom processGetRoomInfoById(String roomId); +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/impl/ExportCommonFeignServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/impl/ExportCommonFeignServiceImpl.java new file mode 100644 index 0000000..5a590f4 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/common/impl/ExportCommonFeignServiceImpl.java @@ -0,0 +1,195 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.common.impl; + + +import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; +import com.chinaunicom.mall.ebtp.extend.export.bean.BidEvalDetailDTO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizAssessRoom; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.client.*; +import com.chinaunicom.mall.ebtp.extend.feign.entity.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 报表导出通用feign接口调用类 + */ +@Service +@Slf4j +public class ExportCommonFeignServiceImpl implements ExportCommonFeignService { + + + @Autowired + private UsercenterFeignService usercenterFeignService; + + /** + * 查询用户信息 + * + * @param userId + */ + @Override + public LoginUserDetailVO userCenterGetLoninUserDetail(String userId) { + BaseResponse response = usercenterFeignService.getLoninUserDetail(userId); + if (response == null || response.getData() == null) { + return new LoginUserDetailVO(); + } + return response.getData(); + } + + + @Autowired + private ProjectFeignService projectFeignService; + + /** + * 根据包id 查询信息 + * + * @param sectionId + * @return + */ + @Override + public ProjectSectionVO projectGetSectionById(String sectionId) { + //查询项目名称 + ProjectSectionVO projectSectionVO = new ProjectSectionVO(); + projectSectionVO.setId(sectionId); + BaseResponse response = projectFeignService.selectById(projectSectionVO); + if (response == null || response.getData() == null) { + return new ProjectSectionVO(); + } + return response.getData(); + } + + /** + * 根据包id 查询项目信息 + * + * @param projId + * @return + */ + @Override + public ProjectRecordVO projectGetProjById(String projId) { + BaseResponse response = projectFeignService.getProjById(projId); + if (response == null || response.getData() == null) { + return new ProjectRecordVO(); + } + return response.getData(); + } + + + @Autowired + private TenderFeignService tenderFeignService; + + /** + * 根据评审室id 查询供应商信息 + * + * @param roomId + * @return + */ + @Override + public List tenderGetSupplierRegisterByRoomId(String roomId) { + BaseResponse> response = tenderFeignService.queryRoomTenderCount(roomId); + if (response == null || response.getData() == null) { + return new ArrayList<>(); + } + return response.getData(); + } + + + @Autowired + private RsmsFeignService rsmsFeignService; + + /** + * 查询初审汇总数据 + * + * @param param + * @return + */ + @Override + public List rsmsFindScoreEarlySummary(ExportParam param) { + BidEvalDetailDTO bidEvalDetailDTO = new BidEvalDetailDTO(); + bidEvalDetailDTO.setReviewTurnId(param.getReviewTurnId()); + bidEvalDetailDTO.setReviewType(param.getReviewType()); + BaseResponse> response = rsmsFeignService.findScoreEarlySummary(bidEvalDetailDTO); + if (response == null || response.getData() == null) { + return new ArrayList<>(); + } + return response.getData(); + } + + /** + * 通过评审室Id查询评委会成员数据及签到数据 + * + * @param roomId + * @return + */ + @Override + public List rsmsQueryReportPrintByRoomId(String roomId) { + BaseResponse> response = rsmsFeignService.queryReportPrintByRoomId(roomId); + if (response == null || response.getData() == null) { + return new ArrayList<>(); + } + return response.getData(); + } + + /** + * 通过评审室查询detail表数据 + * + * @param roomId + * @return + */ + @Override + public List rsmsQueryReviewDetailByRoomId(String roomId) { + BaseResponse> response = rsmsFeignService.get(roomId); + if (response == null || response.getData() == null) { + return new ArrayList<>(); + } + return response.getData(); + } + + @Autowired + private RespsFeignService respsFeignService; + + /** + * 开标唱标页列表 + * + * @param tdocPara assessRoomId 评审室id turnSort 轮次序号 + * @return title-表格标题,dataDecrypt-解密状态id、status dataQuote-报价信息 + */ + @Override + public Map respsGetOpenTenderList(ExportParam param) { + Tdoc tdoc = new Tdoc(); + tdoc.setAssessRoomId(param.getAssessRoomId()) + .setTurnSort(param.getReviewTurnSort()); + BaseResponse response = respsFeignService.getOpenTenderList(tdoc); + + if (response == null || response.getData() == null) { + return new HashMap(); + } + return response.getData(); + } + + + @Autowired + private ProcessFeignService processFeignService; + + /** + * 通过room_id查询评审室信息 + * + * @param roomId + * @return + */ + @Override + public BizAssessRoom processGetRoomInfoById(String roomId) { + BaseResponse response = processFeignService.getById(roomId); + if (response == null || response.getData() == null) { + return new BizAssessRoom(); + } + return response.getData(); + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/IBizExportDictService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/IBizExportDictService.java similarity index 87% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/IBizExportDictService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/IBizExportDictService.java index 98f6103..91264e3 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/IBizExportDictService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/IBizExportDictService.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.service; +package com.chinaunicom.mall.ebtp.extend.export.service.dict; import com.chinaunicom.mall.ebtp.common.base.service.IBaseService; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BizExportDictServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/impl/BizExportDictServiceImpl.java similarity index 52% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BizExportDictServiceImpl.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/impl/BizExportDictServiceImpl.java index 0b7ede0..9a1b629 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BizExportDictServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/dict/impl/BizExportDictServiceImpl.java @@ -1,15 +1,15 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; +package com.chinaunicom.mall.ebtp.extend.export.service.dict.impl; import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; -import com.chinaunicom.mall.ebtp.common.constant.CommonConstants; -import com.chinaunicom.mall.ebtp.common.util.JsonUtils; import com.chinaunicom.mall.ebtp.extend.export.bean.*; import com.chinaunicom.mall.ebtp.extend.export.dao.BizExportDictMapper; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProcessFeignClient; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; -import com.chinaunicom.mall.ebtp.extend.export.service.IBizExportDictService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizAssessRoom; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProcessFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.export.service.dict.IBizExportDictService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,7 +27,7 @@ import java.util.stream.Collectors; public class BizExportDictServiceImpl extends BaseServiceImpl implements IBizExportDictService { @Autowired - private ProcessFeignClient processFeignClient; + private ProcessFeignService processFeignService; @Autowired private ProjectFeignService projectFeignService; @Autowired @@ -40,13 +40,13 @@ public class BizExportDictServiceImpl extends BaseServiceImpl> getList(String roomId) { - BizAssessRoom room = processFeignClient.getById(roomId).getData(); + BizAssessRoom room = processFeignService.getById(roomId).getData(); //查询项目名称 ProjectRecordVO proj = projectFeignService.getProjById(room.getTpId()).getData(); //包 - ProjectSectionVO projectSectionVO = new ProjectSectionVO(); - projectSectionVO.setId(room.getSectionId()); - ProjectSectionVO section = projectFeignService.selectById(projectSectionVO).getData(); +// ProjectSectionVO projectSectionVO = new ProjectSectionVO(); +// projectSectionVO.setId(room.getSectionId()); +// ProjectSectionVO section = projectFeignService.selectById(projectSectionVO).getData(); List list = baseMapper.selectDictList(proj.getBidMethodDict()); @@ -56,7 +56,7 @@ public class BizExportDictServiceImpl extends BaseServiceImpl> resultsMap = new HashMap<>(); - //是否包含开标阶段 + //是否包含开标阶段 boolean toInitialOpenRoom = "procurement_mode_1".equals(proj.getBidMethodDict()) || "procurement_mode_2".equals(proj.getBidMethodDict()); if ("procurement_mode_3".equals(proj.getBidMethodDict())) { @@ -71,50 +71,53 @@ public class BizExportDictServiceImpl extends BaseServiceImpl f.getPath().equals(String.valueOf(bizExportDict.getId()))) + .map(m -> m.setUrl(m.getUrl() + "?projectId=" + proj.getId() + "§ionId=" + room.getSectionId() + "&assessRoomId=" + roomId) + .setOnClick(true)) .collect(Collectors.toList()) ); } + //初审数据url - String isReviewMethod = room.getRoomType().equals(CommonConstants.ROOM_TYPE_1) ? "1" : "0"; - List archiveLinks = getFirstArchiveLinks(); - Map> firstRvwMap = rsmsFeignService.findEarlyArchiveList(room.getSectionId(), isReviewMethod, archiveLinks).getData(); - //详审数据url - archiveLinks = getDetailArchiveLinks(); - Map> detailRvwMap = rsmsFeignService.findDetailArchiveList(room.getSectionId(), isReviewMethod, archiveLinks).getData(); - - - resultsMap.forEach((key, value) -> { - value.forEach(bizExportDict -> { - if ("1".equals(bizExportDict.getUrl())) { - //查询初审报表 - Optional opt = firstRvwMap.get(bizExportDict.getUrl()).stream().filter(f -> f.getAssessRoomId().equals(roomId)).findFirst(); - opt.ifPresent(o -> bizExportDict.setUrl(o.getArchiveFileUrl())); - } else if (bizExportDict.getUrl().length() < 5) { - //查询详审报表 - Optional opt = detailRvwMap.get(bizExportDict.getUrl()).stream().filter(f -> f.getAssessRoomId().equals(roomId)).findFirst(); - opt.ifPresent(o -> bizExportDict.setUrl(o.getArchiveFileUrl())); - } else { - String sbl = bizExportDict.getUrl() + - "?assessRoomId=" + roomId + -// "&reviewTurnId=" + v.getReviewTurnId() + - "&projectId=" + proj.getId() + - "§ionId=" + section.getId() + - "&reviewTurnSort=1"; - bizExportDict.setUrl(sbl); - } - }); - //如果没进行初审或详审 则删除相关报表 length < 5 为虚数 - value.removeIf(bizExportDict -> bizExportDict.getUrl().length() < 5); - }); - //删除value为空的key - resultsMap.values().removeIf(List::isEmpty); +// String isReviewMethod = room.getRoomType().equals(CommonConstants.ROOM_TYPE_1) ? "1" : "0"; +// List archiveLinks = getFirstArchiveLinks(); +// Map> firstRvwMap = rsmsFeignService.findEarlyArchiveList(room.getSectionId(), isReviewMethod, archiveLinks).getData(); +// //详审数据url +// archiveLinks = getDetailArchiveLinks(); +// Map> detailRvwMap = rsmsFeignService.findDetailArchiveList(room.getSectionId(), isReviewMethod, archiveLinks).getData(); +// +// +// resultsMap.forEach((key, value) -> { +// value.forEach(bizExportDict -> { +// if ("1".equals(bizExportDict.getUrl())) { +// //查询初审报表 +// Optional opt = firstRvwMap.get(bizExportDict.getUrl()).stream().filter(f -> f.getAssessRoomId().equals(roomId)).findFirst(); +// opt.ifPresent(o -> bizExportDict.setUrl(o.getArchiveFileUrl()).setOnClick(true)); +// } else if (bizExportDict.getUrl().length() < 5) { +// //查询详审报表 +// Optional opt = detailRvwMap.get(bizExportDict.getUrl()).stream().filter(f -> f.getAssessRoomId().equals(roomId)).findFirst(); +// opt.ifPresent(o -> bizExportDict.setUrl(o.getArchiveFileUrl()).setOnClick(true)); +// } else { +// String sbl = bizExportDict.getUrl() + +// "?assessRoomId=" + roomId + +//// "&reviewTurnId=" + v.getReviewTurnId() + +// "&projectId=" + proj.getId() + +// "§ionId=" + section.getId() + +// "&reviewTurnSort=1"; +// bizExportDict.setUrl(sbl).setOnClick(true); +// } +// }); +// //如果没进行初审或详审 则删除相关报表 length < 5 为虚数 +// value.removeIf(bizExportDict -> bizExportDict.getUrl().length() < 5); +// }); +// //删除value为空的key +// resultsMap.values().removeIf(List::isEmpty); return resultsMap; } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BidOpenRecordImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BidOpenRecordImpl.java new file mode 100644 index 0000000..e542213 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/BidOpenRecordImpl.java @@ -0,0 +1,147 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.chinaunicom.mall.ebtp.common.util.JsonUtils; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.export.entity.BidOpenRecordExportData; +import com.chinaunicom.mall.ebtp.extend.export.entity.ExportTableData; +import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.export.service.policy.DetailTablePolicy; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizSupplierRegister; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.TdocCatalog; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.*; +import lombok.SneakyThrows; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * 开标记录表导出 + */ +@Service("bidOpenRecord") +public class BidOpenRecordImpl implements ExportService { + + private static final String DATE_FORMATTER = "yyyy年MM月dd日HH时mm分"; + + + @Autowired + private ExportCommonFeignService commonFeignService; + + @Autowired + private TemplateFileService templateFileService; + + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + @SneakyThrows + @Override + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { + //查询包 + ProjectSectionVO section = commonFeignService.projectGetSectionById(param.getSectionId()); + //查询项目 + ProjectRecordVO proj = commonFeignService.projectGetProjById(section.getProjectId()); + + //供应商信息 + List suppliers = commonFeignService.tenderGetSupplierRegisterByRoomId(param.getAssessRoomId()); + + + Map openTenderList = commonFeignService.respsGetOpenTenderList(param); + + BidOpenRecordExportData data = new BidOpenRecordExportData(); + data.setProjName(proj.getProjectName()) + .setProjNum(proj.getProjectBizNum()) + .setBidNum(section.getBidSectBizNum()); + + ExportTableData tableData = new ExportTableData(); + + //应答项 + List cells = new ArrayList<>(); + //应答数据 + List rows = new ArrayList<>(); + + if (openTenderList.containsKey("title")) { + //标题 + List title = JsonUtils.jsonToList((List) openTenderList.get("title"), TdocCatalog.class); + //去除解密状态列 + title.removeIf(t -> t.getCatalogType() != null); + + List titleIds = new ArrayList<>(); + for (TdocCatalog tdocCatalog : title) { + cells.add(Cells.of(tdocCatalog.getName()).create()); + titleIds.add(tdocCatalog.getId()); + } + + cells.add(Cells.of("是否异议").create()); + cells.add(Cells.of("投标人授权代表签字确认时间").create()); + + if (openTenderList.containsKey("suppliers")) { + //供应商 + List regs = JsonUtils.jsonToList((List) openTenderList.get("suppliers"), BizSupplierRegister.class); + Map regMap = regs.stream().collect(Collectors.toMap(BizSupplierRegister::getCompanyId, Function.identity())); + + for (int i = 0; i < suppliers.size(); i++) { + BizSupplierRegister supplier = suppliers.get(i); + RowRenderData e = Rows.of(String.valueOf(i + 1), supplier.getCompanyName()).create(); + if (regMap.containsKey(supplier.getCompanyId())) { + //应答数据 + Map dataMap = regMap.get(supplier.getCompanyId()).getDataMap(); + for (String titleId : titleIds) { + e.addCell(Cells.of(dataMap.get(titleId)).create()); + } + e.addCell(Cells.of("").create()); + String s = StringUtils.isBlank(supplier.getSignUserId()) ? "" : commonFeignService.userCenterGetLoninUserDetail(supplier.getSignUserId()).getOuName() + ":" + DateUtil.format(supplier.getSignTime(), DATE_FORMATTER); + e.addCell(Cells.of(s).create()); + + } else { + cells.forEach(c -> e.addCell(Cells.of("").create())); + } + rows.add(e); + } + + } + + rows.add(Rows.of("备注信息").center().create()); + rows.add(Rows.of("").create()); + } + + + //横向合并 + MergeCellRule hangBuild = MergeCellRule.builder().map(MergeCellRule.Grid.of(rows.size(), 0), MergeCellRule.Grid.of(rows.size(), cells.size() + 1)) + .map(MergeCellRule.Grid.of(rows.size() - 1, 0), MergeCellRule.Grid.of(rows.size() - 1, cells.size() + 1)) + .build(); + + data.setTableData(tableData.setCells(cells).setRows(rows).setCellMerge(hangBuild)) + .setOpenTime(DateUtil.format(LocalDateTime.now(), DATE_FORMATTER)); + +// InputStream file = templateFileService.getExportTemplet("bidOpenRecord"); + File file = getExportTemplet("开标记录表.docx"); + Configure config = Configure.builder().bind("detail_table", new DetailTablePolicy()).build(); + XWPFTemplate template = XWPFTemplate.compile(file, config).render(data); + + String fileName = new String("开标记录表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + + this.write(template, fileName, response); + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/CbpsExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/CbpsExportServiceImpl.java index 372ea38..5e7c2f1 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/CbpsExportServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/CbpsExportServiceImpl.java @@ -2,11 +2,14 @@ package com.chinaunicom.mall.ebtp.extend.export.service.impl; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalEarlyJudgesSummaryVO; import com.chinaunicom.mall.ebtp.extend.export.vo.SupplierRegisterVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigCategoryDTO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigDetailDTO; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; @@ -46,7 +49,7 @@ public class CbpsExportServiceImpl implements ExportService { */ @SneakyThrows @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { //查询项目名称 ProjectSectionVO projectSectionVO = new ProjectSectionVO(); projectSectionVO.setId(param.getSectionId()); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/DfhzExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/DfhzExportServiceImpl.java index 7588604..2e03fee 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/DfhzExportServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/DfhzExportServiceImpl.java @@ -2,13 +2,14 @@ package com.chinaunicom.mall.ebtp.extend.export.service.impl; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalDetailJudgesSummaryVO; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalDetailSummaryVO; import com.chinaunicom.mall.ebtp.extend.export.vo.MemberVO; import com.chinaunicom.mall.ebtp.extend.export.vo.SupplierRegisterVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; @@ -52,7 +53,7 @@ public class DfhzExportServiceImpl implements ExportService { */ @SneakyThrows @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { BidEvalInfoDTO bidEvalInfoDTO = new BidEvalInfoDTO(); bidEvalInfoDTO.setAssessRoomId(param.getAssessRoomId()); bidEvalInfoDTO.setReviewTurnId(param.getReviewTurnId()); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/FirstRvwImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/FirstRvwImpl.java new file mode 100644 index 0000000..d654cf7 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/FirstRvwImpl.java @@ -0,0 +1,113 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.chinaunicom.mall.ebtp.extend.export.entity.ExportTableData; +import com.chinaunicom.mall.ebtp.extend.export.entity.RvwFirstExportData; +import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.export.service.policy.DetailTablePolicy; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizSupplierRegister; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigCategoryDTO; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.data.*; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +/** + * 初步评审表 + * + * @author fqj + */ +@Service("firstRvw") +public class FirstRvwImpl implements ExportService { + + private static final String DATE_FORMATTER = "yyyy年MM月dd日"; + + @Autowired + private ExportCommonFeignService commonFeignService; + + @Autowired + private TemplateFileService templateFileService; + + + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + @SneakyThrows + @Override + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { + //查询包 + ProjectSectionVO section = commonFeignService.projectGetSectionById(param.getSectionId()); + //查询项目 + ProjectRecordVO proj = commonFeignService.projectGetProjById(section.getProjectId()); + + //供应商信息 + List suppliers = commonFeignService.tenderGetSupplierRegisterByRoomId(param.getAssessRoomId()); + + //初审评分信息 + List earlySummary = commonFeignService.rsmsFindScoreEarlySummary(param); + + RvwFirstExportData data = new RvwFirstExportData(); + data.setProjName(proj.getProjectName()) + .setProjNum(proj.getProjectBizNum()); + + + ExportTableData tableData = new ExportTableData(); + //供应商 + List cells = new ArrayList<>(); + for (BizSupplierRegister supplier : suppliers) { + cells.add(Cells.of(supplier.getCompanyName()).center().create()); + } + + //评分项 + List rows = new ArrayList<>(); + int i = 1; + for (ReviewConfigCategoryDTO dto : earlySummary) { + RowRenderData e = Rows.of(String.valueOf(i++), dto.getCategory(), dto.getConfigId()).center().create(); + e.addCell(Cells.of("1").create()); + e.addCell(Cells.of("2").create()); + e.addCell(Cells.of("3").create()); + rows.add(e); + } + RowRenderData e = Rows.of("结论", "是否通过初步评审", "").center().create(); + for (BizSupplierRegister supplier : suppliers) { + e.addCell(Cells.of("").center().create()); + } + + +//.setCellMerge(MergeCellRule.builder().map(MergeCellRule.Grid.of(1, 3), MergeCellRule.Grid.of(1, 5)).build()) + data.setTableData(tableData.setCells(cells).setRows(rows)) + .setDate(DateUtil.format(LocalDateTime.now(),DATE_FORMATTER)); + + + //获取模板 +// InputStream file = templateFileService.getExportTemplet("firstRvw"); + File file = getExportTemplet("初步评审.docx"); + Configure config = Configure.builder().bind("detail_table", new DetailTablePolicy()).build(); + XWPFTemplate template = XWPFTemplate.compile(file, config).render(data); + + String fileName = new String("初步评审表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + + this.write(template, fileName, response); + + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JgdfExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JgdfExportServiceImpl.java index c1a40f5..5acc7d5 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JgdfExportServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JgdfExportServiceImpl.java @@ -2,10 +2,10 @@ package com.chinaunicom.mall.ebtp.extend.export.service.impl; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.BidEvalDetailDTO; -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectSectionVO; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; import com.chinaunicom.mall.ebtp.extend.export.vo.SupplierRegisterPriceScoreVO; import lombok.SneakyThrows; @@ -44,7 +44,7 @@ public class JgdfExportServiceImpl implements ExportService { */ @SneakyThrows @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { List titles = new LinkedList<>(); titles.add("序号"); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesExportServiceImpl.java deleted file mode 100644 index 2de2db7..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesExportServiceImpl.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; - -import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectSectionVO; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; -import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; -import com.chinaunicom.mall.ebtp.extend.export.vo.JuryPrintVO; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.policy.HackLoopTableRenderPolicy; -import lombok.SneakyThrows; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * 评标委员会签字表 - */ -@Service("judges") -public class JudgesExportServiceImpl implements ExportService { - private final RsmsFeignService rsmsFeignService; - private final ProjectFeignService projectFeignService; - private final TemplateFileService templateFileService; - - public JudgesExportServiceImpl(RsmsFeignService rsmsFeignService, ProjectFeignService projectFeignService, TemplateFileService templateFileService) { - this.rsmsFeignService = rsmsFeignService; - this.projectFeignService = projectFeignService; - this.templateFileService = templateFileService; - } - - - /** - * 导出 - * - * @param param - * @param request - * @param response - */ - @SneakyThrows - @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { - - //项目和招标名称数据 - ProjectSectionVO projectSectionVO = new ProjectSectionVO(); - projectSectionVO.setId(param.getSectionId()); - BaseResponse list = projectFeignService.selectById(projectSectionVO); - //专家人员数据 - BaseResponse> listBaseResponse = rsmsFeignService.queryReportPrintByRoomId(param.getAssessRoomId()); - ArrayList> maps = new ArrayList<>(); - if (listBaseResponse != null && list != null) { - for (int i = 0; i < listBaseResponse.getData().size(); i++) { - Map data = new HashMap<>(); - data.put("name", (listBaseResponse.getData().get(i).getName())); - data.put("phone", listBaseResponse.getData().get(i).getMobile()); - maps.add(data); - } - } - //获取模板 - InputStream file = templateFileService.getExportTemplet("judges"); - Map all = new HashMap() {{ - put("Judges", maps); - put("time", ""); - - if (list != null) { - put("bh", list.getData().getBidSectBizNum()); - put("mc", list.getData().getProjectName()); - } else { - put("bh", ""); - put("mc", ""); - } - }}; - - HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); - Configure config = Configure.builder().bind("Judges", policy).build(); - XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); - - String fileName = new String("评标委员会签字表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); - - OutputStream os = response.getOutputStream(); - response.setHeader("Content-disposition", "attachment; filename=" + fileName); - template.write(os); - - } -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjcnExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesPromiseImpl.java similarity index 68% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjcnExportServiceImpl.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesPromiseImpl.java index a371716..9815fca 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjcnExportServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesPromiseImpl.java @@ -1,11 +1,12 @@ package com.chinaunicom.mall.ebtp.extend.export.service.impl; -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; import com.deepoove.poi.XWPFTemplate; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -18,15 +19,13 @@ import java.nio.charset.StandardCharsets; /** * 评标专家承诺书 */ -@Service("zjcn") +@Service("promise") @Slf4j -public class ZjcnExportServiceImpl implements ExportService { +public class JudgesPromiseImpl implements ExportService { - private final TemplateFileService templateFileService; + @Autowired + private TemplateFileService templateFileService; - public ZjcnExportServiceImpl(TemplateFileService templateFileService) { - this.templateFileService = templateFileService; - } /** * 导出 @@ -37,9 +36,9 @@ public class ZjcnExportServiceImpl implements ExportService { */ @SneakyThrows @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { //文件模板从数据库或者项目位置取得 - InputStream file = templateFileService.getExportTemplet("zjcn"); + InputStream file = templateFileService.getExportTemplet("promise"); XWPFTemplate template = XWPFTemplate.compile(file); String fileName = new String("评标专家承诺书.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignImpl.java new file mode 100644 index 0000000..152d6e1 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignImpl.java @@ -0,0 +1,78 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.impl; + +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.policy.HackLoopTableRenderPolicy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 评标委员会签字表 + */ +@Service("judgesSign") +public class JudgesSignImpl implements ExportService { + + @Autowired + private ExportCommonFeignService commonFeignService; + + + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + @Override + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { + + //项目和招标名称数据 + ProjectSectionVO section = commonFeignService.projectGetSectionById(param.getSectionId()); + //专家人员数据 + List list = commonFeignService.rsmsQueryReportPrintByRoomId(param.getAssessRoomId()); + ArrayList> maps = new ArrayList<>(); + + for (int i = 0; i < list.size(); i++) { + Map data = new HashMap<>(); + data.put("name", list.get(i).getName()); + data.put("phone", list.get(i).getMobile()); + maps.add(data); + } + + //获取模板 + Map all = new HashMap() {{ + put("Judges", maps); + put("time", ""); + + + put("bh", section.getBidSectBizNum()); + put("mc", section.getProjectName()); + + }}; +// InputStream file = templateFileService.getExportTemplet("judgesSign"); + File file = getExportTemplet("评标委员会签字表.docx"); + HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); + Configure config = Configure.builder().bind("Judges", policy).build(); + XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); + + String fileName = new String("评标委员会签字表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + + this.write(template, fileName, response); + + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignInImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignInImpl.java new file mode 100644 index 0000000..64fc605 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/JudgesSignInImpl.java @@ -0,0 +1,76 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.impl; + +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.policy.HackLoopTableRenderPolicy; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.time.format.DateTimeFormatter; +import java.util.*; + + +/** + * 评审专家签到表 + */ +@Service("judgesSignIn") +public class JudgesSignInImpl implements ExportService { + @Autowired + private TemplateFileService templateFileService; + @Autowired + private ExportCommonFeignService commonFeignService; + + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + @SneakyThrows + @Override + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { + + //专家人员数据 + List list = commonFeignService.rsmsQueryReportPrintByRoomId(param.getAssessRoomId()); + ArrayList> maps = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + Map data = new HashMap<>(); + JuryPrintVO juryPrintVO = list.get(i); + data.put("name", juryPrintVO.getName()); + data.put("phone", juryPrintVO.getMobile()); + data.put("idCard", juryPrintVO.getCertificate()); + data.put("isTrue", Objects.equals(juryPrintVO.getAttitude(), 1) ? "是" : "否"); + data.put("time", juryPrintVO.getLoginTime() != null ? DateTimeFormatter.ofPattern("yyyy年MM月dd日").format(juryPrintVO.getLoginTime()) : ""); + maps.add(data); + } + + + InputStream file = templateFileService.getExportTemplet("judgesSignIn"); + Map all = new HashMap() {{ + put("table", maps); + }}; + + HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); + Configure config = Configure.builder().bind("table", policy).build(); + XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); + + String fileName = new String("评审专家签到表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + + OutputStream os = response.getOutputStream(); + response.setHeader("Content-disposition", "attachment; filename=" + fileName); + template.write(os); + + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/KbjlExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/KbjlExportServiceImpl.java deleted file mode 100644 index 774748f..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/KbjlExportServiceImpl.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; - -import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.OpenFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RespsFeignService; -import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.policy.HackLoopTableRenderPolicy; -import lombok.SneakyThrows; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * 开标记录表导出 - */ -@Service("kbjl") -public class KbjlExportServiceImpl implements ExportService { - - private final ProjectFeignService projectFeignService; - private final RespsFeignService respsFeignService; - private final OpenFeignService openFeignService; - private final TemplateFileService templateFileService; - public KbjlExportServiceImpl(ProjectFeignService projectFeignService, RespsFeignService respsFeignService, OpenFeignService openFeignService, TemplateFileService templateFileService) { - this.projectFeignService = projectFeignService; - this.respsFeignService = respsFeignService; - this.openFeignService = openFeignService; - this.templateFileService = templateFileService; - } - - /** - * 导出 - * - * @param param - * @param request - * @param response - */ - @SneakyThrows - @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { - - Tdoc tdocPara = new Tdoc(); - tdocPara.setAssessRoomId(param.getAssessRoomId()); - tdocPara.setTurnSort(Integer.parseInt(param.getReviewTurnSort())); - //开标记录数据 - BaseResponse> listBaseResponse = respsFeignService.getTenderQuoteList(tdocPara); - ArrayList> maps = new ArrayList<>(); - - if (listBaseResponse != null) { - for (int i = 0; i < listBaseResponse.getData().size(); i++) { - Map data = new HashMap<>(); - data.put("num", (i + 1)); - data.put("tbr", (listBaseResponse.getData().get(i).getBidUserName())); - data.put("bj", (listBaseResponse.getData().get(i).getNewPrice())); - data.put("yy", ""); - LocalDateTime signTime = listBaseResponse.getData().get(i).getSignTime(); - data.put("sign", signTime == null ? "" : (listBaseResponse.getData().get(i).getContactName()) + ":" + DateTimeFormatter.ofPattern("yyyy年MM月dd日").format(signTime)); - maps.add(data); - } - - } - - //查询项目名称 - ProjectSectionVO projectSectionVO = new ProjectSectionVO(); - projectSectionVO.setId(param.getSectionId()); - BaseResponse project = projectFeignService.selectById(projectSectionVO); - - //查询开标时间 - BizBidOpenroom bizBidOpenroom = new BizBidOpenroom(); - bizBidOpenroom.setAssessRoomId(param.getAssessRoomId()); - BaseResponse> timeList = openFeignService.list(bizBidOpenroom); - - InputStream file = templateFileService.getExportTemplet("kbjl"); - Map all = new HashMap() {{ - put("Record", maps); - - if (timeList.getData() != null) { - put("time", timeList.getData().get(0).getOpingTime()); - } else { - put("time", ""); - } - - if (project.getData() != null) { - put("mc", project.getData().getProjectName()); - put("bh", project.getData().getBidSectBizNum()); - put("bao", project.getData().getBidSectName()); - } else { - put("mc", ""); - put("bh", ""); - put("bao", ""); - } - - put("yuan", ""); - }}; - - HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); - Configure config = Configure.builder().bind("Record", policy).build(); - XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); - - String fileName = new String("开标记录表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); - OutputStream os = response.getOutputStream(); - response.setHeader("Content-disposition", "attachment; filename=" + fileName); - template.write(os); - } -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PbbgExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PbbgExportServiceImpl.java deleted file mode 100644 index 0031208..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PbbgExportServiceImpl.java +++ /dev/null @@ -1,264 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; - -import cn.hutool.core.util.StrUtil; -import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.enums.ExportExceptionEnum; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProcessFeignClient; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.TenderFeignService; -import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; -import com.chinaunicom.mall.ebtp.extend.export.vo.JuryPrintVO; -import com.chinaunicom.mall.ebtp.extend.export.vo.ResultDetailVO; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.policy.HackLoopTableRenderPolicy; -import lombok.SneakyThrows; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * 评标报告 - */ -@Service("pbbg") -public class PbbgExportServiceImpl implements ExportService { - private final RsmsFeignService rsmsFeignService; - private final TemplateFileService templateFileService; - private final ProcessFeignClient processFeignClient; - private final TenderFeignService tenderFeignService; - private final ProjectFeignService projectFeignClient; - - public PbbgExportServiceImpl(RsmsFeignService rsmsFeignService, TemplateFileService templateFileService, ProcessFeignClient processFeignClient, TenderFeignService tenderFeignService, ProjectFeignService projectFeignClient) { - this.rsmsFeignService = rsmsFeignService; - this.templateFileService = templateFileService; - this.processFeignClient = processFeignClient; - this.tenderFeignService = tenderFeignService; - this.projectFeignClient = projectFeignClient; - } - - /** - * 导出 - * - * @param param - * @param request - * @param response - */ - @SneakyThrows - @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { - BaseResponse processResponse = processFeignClient.getById(param.getAssessRoomId()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_ROOM_DETAIL_FAIL.customValid(!processResponse.isSuccess()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_ROOM_DETAIL_FAIL.assertNotNull(processResponse.getData()); - - BaseResponse proj = projectFeignClient.getProjById(processResponse.getData().getTpId()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_PROJECT_INFO.customValid(!proj.isSuccess()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_PROJECT_INFO.assertNotNull(proj.getData()); - ProjectRecordVO project = proj.getData(); - - - String zbfs = ""; - switch (project.getBidMethodDict()) { - case "procurement_mode_1": - case "procurement_mode_2": - zbfs = "公开招标"; - break; - case "procurement_mode_3": - zbfs = "公开比选"; - break; - case "procurement_mode_4": - zbfs = "招募"; - break; - case "procurement_mode_5": - case "procurement_mode_6": - zbfs = "谈判"; - break; - case "procurement_mode_7": - zbfs = "询价"; - break; - case "procurement_mode_8": - zbfs = "竞拍"; - break; - default: - zbfs = ""; - } - - - BaseResponse> roomTenderResponse = tenderFeignService.queryRoomTenderCount(param.getAssessRoomId()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_TENDERL_FAIL.customValid(!roomTenderResponse.isSuccess()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_TENDERL_FAIL.assertNotNull(roomTenderResponse.getData()); - List registerList = roomTenderResponse.getData(); - //表一 - List> list1 = new ArrayList<>(); - for (int i = 0; i < registerList.size(); i++) { - Map map = new HashMap<>(16); - int num = i + 1; - BizSupplierRegister register = registerList.get(i); - map.put("num", num); - map.put("name", register.getCompanyName()); - map.put("type", StrUtil.isBlank(register.getDownloadStatus()) ? "" : "2".equals(register.getDownloadStatus()) ? "已投递" : "1".equals(register.getDownloadStatus()) ? "已下载" : "未下载"); - list1.add(map); - } - - //表二假数据 - List> list2 = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map map = new HashMap<>(); - map.put("time", "2021.3.4"); - map.put("nr", "好多内容"); - list2.add(map); - } - - - //表三数据 - //专家人员数据 - BaseResponse> listBaseResponse = rsmsFeignService.queryReportPrintByRoomId(param.getAssessRoomId()); - ArrayList> list3 = new ArrayList<>(); - String pbwyhzz = ""; - if (listBaseResponse != null && listBaseResponse.getData() != null) { - List juryPrintVOList = listBaseResponse.getData(); - for (int i = 0; i < juryPrintVOList.size(); i++) { - int num = i + 1; - JuryPrintVO juryPrintVO = juryPrintVOList.get(i); - Map data = new HashMap<>(); - data.put("num", num); - data.put("work", juryPrintVO.getWorkunit()); - data.put("name", juryPrintVO.getName()); - data.put("job", juryPrintVO.getJobTitle()); - data.put("unit", juryPrintVO.getWorkunit()); - list3.add(data); - if ("2".equals(juryPrintVO.getDuty())) { - pbwyhzz = juryPrintVO.getName(); - } - } - - } - - - BaseResponse> baseResponse = rsmsFeignService.get(param.getAssessRoomId()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_ROOM_DETAIL_FAIL.customValid(!baseResponse.isSuccess()); - ExportExceptionEnum.FRAME_EXCEPTION_GET_ROOM_DETAIL_FAIL.assertNotNull(baseResponse.getData()); - List resultDetails = baseResponse.getData(); - - if (resultDetails.isEmpty()) { - return; - } - int size = resultDetails.size(); - - List> list4 = new ArrayList<>(); - List> list5 = new ArrayList<>(); - List> list6 = new ArrayList<>(); - List> list7 = new ArrayList<>(); - List> list8 = new ArrayList<>(); - for (int i = 0; i < size; i++) { - int num = i + 1; - ResultDetailVO detail = resultDetails.get(i); - String tbr = detail.getCompanyName(); - Map map = new HashMap<>(16); - //表4,初步评审结果 投标人,投标结果 - map.put("num", num); - map.put("tbr", tbr); - map.put("jg", detail.getFirstRvwResult() == null ? "" : detail.getFirstRvwResult() == 0 ? "未通过" : "通过"); - list4.add(map); - - //表六 详细评审数据 投标人,技术分,商务分 - - map.put("js", StrUtil.isNotBlank(detail.getTechnicalScore()) ? detail.getTechnicalScore() : ""); - map.put("sw", StrUtil.isNotBlank(detail.getBusinessScore()) ? detail.getBusinessScore() : ""); - list6.add(map); - - - //表七 价格评审数据 投标人,投标价,评审价格,价格得分 - - map.put("bj", detail.getPrice() == null ? BigDecimal.ZERO : detail.getPrice()); - map.put("psjg", detail.getPriceReview() == null ? BigDecimal.ZERO : detail.getPriceReview()); - map.put("jgdf", StrUtil.isNotBlank(detail.getPriceScore()) ? detail.getPriceScore() : ""); - list7.add(map); - - - //表八 评审总结数据 - map.put("jgdf2", StrUtil.isNotBlank(detail.getPriceScore()) ? detail.getPriceScore() : ""); - map.put("zhdf", StrUtil.isNotBlank(detail.getTotalScore()) ? detail.getTotalScore() : ""); - list8.add(map); - - } - - - String finalZbfs = zbfs; - String finalPbwyhzz = pbwyhzz; - Map all = new HashMap() {{ - put("table1", list1); - put("table2", list2); - put("table3", list3); - put("table4", list4); - put("table5", list5); - put("table6", list6); - put("table7", list7); - put("table8", list8); - put("zbdljg", project.getTenderAgencyName()); - put("zbbh", project.getEbpProjectNumber()); - put("zbfs", finalZbfs); - put("pbwyhzz", finalPbwyhzz); - }}; - - - HackLoopTableRenderPolicy policy1 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy2 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy3 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy4 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy5 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy6 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy7 = new HackLoopTableRenderPolicy(); - HackLoopTableRenderPolicy policy8 = new HackLoopTableRenderPolicy(); - - Configure config = Configure.builder().bind("table1", policy1).bind("table2", policy2).bind("table3", policy3) - .bind("table4", policy4).bind("table5", policy5).bind("table6", policy6) - .bind("table7", policy7).bind("table8", policy8).build(); - - - InputStream file = templateFileService.getExportTemplet("pbbg"); -// File file = getExportTemplet("评标报告.docx"); - XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); - - String fileName = new String("评标报告.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); - OutputStream os = response.getOutputStream(); - response.setHeader("Content-disposition", "attachment; filename=" + fileName); - template.write(os); - - } - - private List getFirstArchiveLinks() { - List archiveLinks = new ArrayList<>(); - //初步评审表URL - archiveLinks.add(new ArchiveLink().setId("1").setArchiveDirectory("1")); - return archiveLinks; - } - - private List getDetailArchiveLinks() { - List archiveLinks = new ArrayList<>(); - //详细评审表URL -// archiveLinks.add(new ArchiveLink().setId("2").setArchiveDirectory("2")); - //专家打分表URL - archiveLinks.add(new ArchiveLink().setId("3").setArchiveDirectory("3")); - //价格打分表URL - archiveLinks.add(new ArchiveLink().setId("4").setArchiveDirectory("4")); - //打分汇总表URL - archiveLinks.add(new ArchiveLink().setId("5").setArchiveDirectory("5")); - //评审报告URL -// archiveLinks.add(new ArchiveLink().setId("6").setArchiveDirectory("6")); - return archiveLinks; - } -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PszjExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PszjExportServiceImpl.java deleted file mode 100644 index 5e7e2ed..0000000 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/PszjExportServiceImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; - -import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParame; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; -import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; -import com.chinaunicom.mall.ebtp.extend.export.vo.JuryPrintVO; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.policy.HackLoopTableRenderPolicy; -import lombok.SneakyThrows; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * 评审专家签到表 - */ -@Service("pszj") -public class PszjExportServiceImpl implements ExportService { - private final RsmsFeignService rsmsFeignService; - private final TemplateFileService templateFileService; - - public PszjExportServiceImpl(RsmsFeignService rsmsFeignService, TemplateFileService templateFileService) { - this.rsmsFeignService = rsmsFeignService; - this.templateFileService = templateFileService; - } - - /** - * 导出 - * - * @param param - * @param request - * @param response - */ - @SneakyThrows - @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { - - //专家人员数据 - BaseResponse> listBaseResponse = rsmsFeignService.queryReportPrintByRoomId(param.getAssessRoomId()); - - ArrayList> maps = new ArrayList<>(); - if (listBaseResponse != null && listBaseResponse.getData() != null) { - for (int i = 0; i < listBaseResponse.getData().size(); i++) { - Map data = new HashMap<>(); - data.put("name", listBaseResponse.getData().get(i).getName()); - data.put("phone", listBaseResponse.getData().get(i).getMobile()); - data.put("idCard", listBaseResponse.getData().get(i).getCertificate()); - data.put("isTrue", listBaseResponse.getData().get(i).getAttitude() == 1 ? "是" : "否"); - data.put("time", DateTimeFormatter.ofPattern("yyyy年MM月dd日").format(listBaseResponse.getData().get(i).getLoginTime())); - maps.add(data); - } - } - - - InputStream file = templateFileService.getExportTemplet("pszj"); - Map all = new HashMap() {{ - put("table", maps); - }}; - - HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); - Configure config = Configure.builder().bind("table", policy).build(); - XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); - - String fileName = new String("评审专家签到表.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); - - OutputStream os = response.getOutputStream(); - response.setHeader("Content-disposition", "attachment; filename=" + fileName); - template.write(os); - - } -} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ReviewReportImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ReviewReportImpl.java new file mode 100644 index 0000000..9976f10 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ReviewReportImpl.java @@ -0,0 +1,194 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.chinaunicom.mall.ebtp.extend.export.bean.ExportParam; +import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; +import com.chinaunicom.mall.ebtp.extend.export.service.common.ExportCommonFeignService; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizSupplierRegister; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.policy.HackLoopTableRenderPolicy; +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * 评审报告 + */ +@Service("reviewReport") +public class ReviewReportImpl implements ExportService { + + @Autowired + private ExportCommonFeignService commonFeignService; + + @Autowired + private TemplateFileService templateFileService; + + + /** + * 导出 + * + * @param param + * @param request + * @param response + */ + @SneakyThrows + @Override + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { + + // 项目信息 + ProjectRecordVO project = commonFeignService.projectGetProjById(param.getProjectId()); + + + String zbfs = ""; + switch (project.getBidMethodDict()) { + case "procurement_mode_1": + case "procurement_mode_2": + zbfs = "公开招标"; + break; + case "procurement_mode_3": + zbfs = "公开比选"; + break; + case "procurement_mode_4": + zbfs = "招募"; + break; + case "procurement_mode_5": + case "procurement_mode_6": + zbfs = "谈判"; + break; + case "procurement_mode_7": + zbfs = "询价"; + break; + case "procurement_mode_8": + zbfs = "竞拍"; + break; + default: + zbfs = ""; + } + + + //供应商信息 + List registerList = commonFeignService.tenderGetSupplierRegisterByRoomId(param.getAssessRoomId()); + + //表一 + List> list1 = new ArrayList<>(); + for (int i = 0; i < registerList.size(); i++) { + Map map = new HashMap<>(16); + int num = i + 1; + BizSupplierRegister register = registerList.get(i); + map.put("num", num); + map.put("name", register.getCompanyName()); + map.put("type", StrUtil.isBlank(register.getDownloadStatus()) ? "" : "2".equals(register.getDownloadStatus()) ? "已投递" : "1".equals(register.getDownloadStatus()) ? "已下载" : "未下载"); + list1.add(map); + } + + //表二 专家人员数据 + List memberList = commonFeignService.rsmsQueryReportPrintByRoomId(param.getAssessRoomId()); + ArrayList> list2 = new ArrayList<>(); + String pbwyhzz = null; + for (int i = 0; i < memberList.size(); i++) { + JuryPrintVO juryPrintVO = memberList.get(i); + Map data = new HashMap<>(); + data.put("num", i + 1); + data.put("work", juryPrintVO.getWorkunit()); + data.put("name", juryPrintVO.getName()); + data.put("job", juryPrintVO.getJobTitle()); + data.put("unit", juryPrintVO.getWorkunit()); + list2.add(data); + if ("2".equals(juryPrintVO.getDuty())) { + pbwyhzz = juryPrintVO.getName(); + } + } + + ArrayList> list3 = new ArrayList<>(); + + for (int i = 0; i < registerList.size(); i++) { + Map map = new HashMap<>(16); + int num = i + 1; + BizSupplierRegister register = registerList.get(i); + map.put("num", num); + map.put("id", register.getCompanyId()); + map.put("tbr", register.getCompanyName()); + list3.add(map); + + } + + //评审结果表数据 + List resultDetails = commonFeignService.rsmsQueryReviewDetailByRoomId(param.getAssessRoomId()); + Map detailVOMap = resultDetails.stream().collect(Collectors.toMap(ResultDetailVO::getCompanyId, Function.identity(), (o1, o2) -> o1)); + for (int i = 0; i < registerList.size(); i++) { + BizSupplierRegister register = registerList.get(i); + if (detailVOMap.containsKey(register.getCompanyId())) { + ResultDetailVO detail = detailVOMap.get(register.getCompanyId()); + + Map map = list3.stream().filter(f -> f.get("id").equals(register.getCompanyId())).findAny().orElse(new HashMap<>()); + //表三,初步评审结果 投标人,投标结果 + map.put("jg", detail.getFirstRvwResult() == null ? "" : detail.getFirstRvwResult() == 0 ? "未通过" : "通过"); + + + //表四 详细评审数据 投标人,技术分,商务分 + map.put("js", StrUtil.isNotBlank(detail.getTechnicalScore()) ? detail.getTechnicalScore() : ""); + map.put("sw", StrUtil.isNotBlank(detail.getBusinessScore()) ? detail.getBusinessScore() : ""); + + + //表五 价格评审数据 投标人,投标价,评审价格,价格得分 + map.put("bj", detail.getPrice() == null ? BigDecimal.ZERO : detail.getPrice()); + map.put("psjg", detail.getPriceReview() == null ? BigDecimal.ZERO : detail.getPriceReview()); + map.put("jgdf", StrUtil.isNotBlank(detail.getPriceScore()) ? detail.getPriceScore() : ""); + + + //表六 评审总结数据 + map.put("jgdf2", StrUtil.isNotBlank(detail.getPriceScore()) ? detail.getPriceScore() : ""); + map.put("zhdf", StrUtil.isNotBlank(detail.getTotalScore()) ? detail.getTotalScore() : ""); + } + } + + String finalZbfs = zbfs; + String finalPbwyhzz = pbwyhzz; + Map all = new HashMap() {{ + put("table1", list1); + put("table2", list2); + put("table3", list3); + put("zbdljg", project.getTenderAgencyName()); + put("zbbh", project.getEbpProjectNumber()); + put("zbfs", finalZbfs); + put("pbwyhzz", finalPbwyhzz == null ? "______" : finalPbwyhzz); + }}; + + + HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); + + Configure config = Configure.builder() + .bind("table1", policy) + .bind("table2", policy) + .bind("table3", policy) + .build(); + + +// InputStream file = templateFileService.getExportTemplet("reviewReport"); + File file = getExportTemplet("评标报告.docx"); + XWPFTemplate template = XWPFTemplate.compile(file, config).render(all); + + String fileName = new String("评标报告.docx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + + this.write(template, fileName, response); + } + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjgrExportServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjgrExportServiceImpl.java index 8099fc0..f1bebb6 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjgrExportServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/ZjgrExportServiceImpl.java @@ -2,12 +2,15 @@ package com.chinaunicom.mall.ebtp.extend.export.service.impl; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; import com.chinaunicom.mall.ebtp.extend.export.service.ExportService; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalDetailVO; import com.chinaunicom.mall.ebtp.extend.export.vo.MemberVO; import com.chinaunicom.mall.ebtp.extend.export.vo.SupplierRegisterVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigCategoryDTO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigDetailDTO; import lombok.SneakyThrows; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; @@ -48,7 +51,7 @@ public class ZjgrExportServiceImpl implements ExportService { */ @SneakyThrows @Override - public void doExport(ExportParame param, HttpServletRequest request, HttpServletResponse response) { + public void doExport(ExportParam param, HttpServletRequest request, HttpServletResponse response) { //查询项目名称 ProjectSectionVO projectSectionVO = new ProjectSectionVO(); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/policy/DetailTablePolicy.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/policy/DetailTablePolicy.java new file mode 100644 index 0000000..e69b99c --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/policy/DetailTablePolicy.java @@ -0,0 +1,78 @@ +package com.chinaunicom.mall.ebtp.extend.export.service.policy; + +import com.chinaunicom.mall.ebtp.extend.export.entity.ExportTableData; +import com.deepoove.poi.data.CellRenderData; +import com.deepoove.poi.data.RowRenderData; +import com.deepoove.poi.policy.DynamicTableRenderPolicy; +import com.deepoove.poi.policy.TableRenderPolicy; +import com.deepoove.poi.util.TableTools; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; + +import java.util.List; + +public class DetailTablePolicy extends DynamicTableRenderPolicy { + + // 横向填充名称所在行 + private int horizonalNameIndex = 0; + // 竖向填充数据所在行 + private int verticallyStartIndex = 1; + public DetailTablePolicy() { + } + + public DetailTablePolicy(int horizonalNameIndex, int verticallyStartIndex) { + this.horizonalNameIndex = horizonalNameIndex; + this.verticallyStartIndex = verticallyStartIndex; + } + @Override + public void render(XWPFTable xwpfTable, Object o) throws Exception { + if (o == null) { + return; + } + ExportTableData data = (ExportTableData) o; + + + //供应商名称 + List cols = data.getCells(); + if (cols != null) { + XWPFTableRow row = xwpfTable.getRow(horizonalNameIndex); + row.removeCell(row.getTableCells().size() - 1); + //循环添加供应商名称 + for (CellRenderData col : cols) { + XWPFTableCell cell = row.createCell(); + // 单元格渲染 + TableRenderPolicy.Helper.renderCell(cell, col, null); + } + } + + //供应商 + List rows = data.getRows(); + if (rows != null && !rows.isEmpty()) { + xwpfTable.removeRow(verticallyStartIndex); + for (int i = 0; i < rows.size(); i++) { + XWPFTableRow insertNewTableRow = xwpfTable.insertNewTableRow(verticallyStartIndex + i); + for (int j = 0; j < rows.get(i).getCells().size(); j++) { + insertNewTableRow.createCell(); + } + TableRenderPolicy.Helper.renderRow(xwpfTable.getRow(verticallyStartIndex + i), rows.get(i)); + } + } + + if (data.getCellMerge() != null) { + // 水平合并 + data.getCellMerge().getMapping().forEach((key, value) -> { + TableTools.mergeCellsHorizonal(xwpfTable, key.getI(), key.getJ(), value.getJ()); + }); + } + + if (data.getRowMerge() != null) { + // 垂直合并 + data.getCellMerge().getMapping().forEach((key, value) -> { + TableTools.mergeCellsVertically(xwpfTable, key.getI(), key.getJ(), value.getJ()); + }); + } + + + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/TemplateFileService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/TemplateFileService.java similarity index 75% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/TemplateFileService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/TemplateFileService.java index a326845..ed82fe6 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/TemplateFileService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/TemplateFileService.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.service; +package com.chinaunicom.mall.ebtp.extend.export.service.templateFile; import java.io.InputStream; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/TemplateFileServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/impl/TemplateFileServiceImpl.java similarity index 88% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/TemplateFileServiceImpl.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/impl/TemplateFileServiceImpl.java index 1b8344c..642c0dd 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/impl/TemplateFileServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/service/templateFile/impl/TemplateFileServiceImpl.java @@ -1,7 +1,7 @@ -package com.chinaunicom.mall.ebtp.extend.export.service.impl; +package com.chinaunicom.mall.ebtp.extend.export.service.templateFile.impl; import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.api.AttachmentClient; -import com.chinaunicom.mall.ebtp.extend.export.service.TemplateFileService; +import com.chinaunicom.mall.ebtp.extend.export.service.templateFile.TemplateFileService; import com.chinaunicom.mall.ebtp.extend.templatewarehouse.entity.BizBidTemplateWarehouse; import com.chinaunicom.mall.ebtp.extend.templatewarehouse.sevice.BizBidTemplateWarehouseService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/BidEvalDetailSummaryVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/BidEvalDetailSummaryVO.java index 49575e4..b208986 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/BidEvalDetailSummaryVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/BidEvalDetailSummaryVO.java @@ -43,7 +43,7 @@ public class BidEvalDetailSummaryVO implements Serializable { @ApiModelProperty(value = "专家评分") @JsonInclude(JsonInclude.Include.NON_EMPTY) - List scoreList; + private List scoreList; @ApiModelProperty(value = "详审专家汇总") @JsonInclude(JsonInclude.Include.NON_EMPTY) diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/DocumentCenterService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/DocumentCenterService.java index 5f32239..99a2aae 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/DocumentCenterService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/DocumentCenterService.java @@ -1,7 +1,7 @@ package com.chinaunicom.mall.ebtp.extend.feign.client; -import com.chinaunicom.mall.ebtp.extend.feign.factory.FeignConfiguration; -import com.chinaunicom.mall.ebtp.extend.feign.factory.DocumentCenterServiceFallbackFactory; +import com.chinaunicom.mall.ebtp.extend.feign.config.FeignConfiguration; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.DocumentCenterServiceFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/OpenFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/OpenFeignService.java similarity index 87% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/OpenFeignService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/OpenFeignService.java index dac2862..16cbca6 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/OpenFeignService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/OpenFeignService.java @@ -1,8 +1,8 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; +package com.chinaunicom.mall.ebtp.extend.feign.client; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.BizBidOpenroom; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.ExportServiceOpenFallbakFactory; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.ExportServiceOpenFallbakFactory; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProcessFeignClient.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProcessFeignService.java similarity index 70% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProcessFeignClient.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProcessFeignService.java index 75340b4..77247ae 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProcessFeignClient.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProcessFeignService.java @@ -1,28 +1,25 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; +package com.chinaunicom.mall.ebtp.extend.feign.client; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizAssessRoom; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.ProcessFeignFallbackFactory; -import com.chinaunicom.mall.ebtp.extend.export.vo.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizAssessRoom; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.ProcessFeignFallbackFactory; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import java.util.List; - /** * 评审流程 */ @FeignClient(value = "${mconfig.feign.name.process}", fallbackFactory = ProcessFeignFallbackFactory.class) -public interface ProcessFeignClient { +public interface ProcessFeignService { /** - * 查询数据 + * 通过room_id查询评审室信息 * * @param id * diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProjectFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProjectFeignService.java similarity index 79% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProjectFeignService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProjectFeignService.java index ddb8d5f..b0d02ff 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/ProjectFeignService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/ProjectFeignService.java @@ -1,9 +1,9 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; +package com.chinaunicom.mall.ebtp.extend.feign.client; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectRecordVO; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectSectionVO; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.ProjectFeignFallbackFactory; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.ProjectFeignFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RespsFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RespsFeignService.java new file mode 100644 index 0000000..626618a --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RespsFeignService.java @@ -0,0 +1,28 @@ +package com.chinaunicom.mall.ebtp.extend.feign.client; + +import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.ExportServiceRespsFallbakFactory; +import com.chinaunicom.mall.ebtp.extend.feign.entity.Tdoc; +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; + +/** + * 调用 RESPS_SERVICE + */ +@FeignClient(value = "${mconfig.feign.name.resps}", fallbackFactory = ExportServiceRespsFallbakFactory.class) +public interface RespsFeignService { + + /** + * 开标唱标页列表 + * + * @param tdocPara assessRoomId 评审室id turnSort 轮次序号 + * @return title-表格标题,dataDecrypt-解密状态id、status dataQuote-报价信息 + */ + @PostMapping("/v1/tfile/getOpenTenderList") + public BaseResponse getOpenTenderList(@ApiParam(value = "assessRoomId 评审室id turnSort 轮次序号", required = false) @RequestBody Tdoc tdocPara); + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RsmsFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RsmsFeignService.java similarity index 94% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RsmsFeignService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RsmsFeignService.java index 585d3db..0f78fe6 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/RsmsFeignService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/RsmsFeignService.java @@ -1,9 +1,12 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; +package com.chinaunicom.mall.ebtp.extend.feign.client; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.ExportServiceFallback; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.ExportServiceFallback; import com.chinaunicom.mall.ebtp.extend.export.vo.*; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigCategoryDTO; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/TenderFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/TenderFeignService.java similarity index 80% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/TenderFeignService.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/TenderFeignService.java index fef0b15..27872fd 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/TenderFeignService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/TenderFeignService.java @@ -1,8 +1,8 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign; +package com.chinaunicom.mall.ebtp.extend.feign.client; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizSupplierRegister; -import com.chinaunicom.mall.ebtp.extend.export.feign.factory.TenderFeignFallbackFactory; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizSupplierRegister; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.TenderFeignFallbackFactory; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/UsercenterFeignService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/UsercenterFeignService.java new file mode 100644 index 0000000..32bba29 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/UsercenterFeignService.java @@ -0,0 +1,23 @@ +package com.chinaunicom.mall.ebtp.extend.feign.client; + + +import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; +import com.chinaunicom.mall.ebtp.extend.feign.client.factory.UsercenterFeignFallbackFactory; +import com.chinaunicom.mall.ebtp.extend.feign.entity.LoginUserDetailVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + + +/** + * 用户中心 + */ +@FeignClient(value = "${mconfig.feign.name.usercenter}", fallbackFactory = UsercenterFeignFallbackFactory.class) +public interface UsercenterFeignService { + /* + * 查询用户信息 + */ + @GetMapping("/v1.0/user/info") + BaseResponse getLoninUserDetail(@RequestParam("uid") String uid); + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/DocumentCenterServiceFallbackFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/DocumentCenterServiceFallbackFactory.java similarity index 80% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/DocumentCenterServiceFallbackFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/DocumentCenterServiceFallbackFactory.java index d23317b..8ecc694 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/DocumentCenterServiceFallbackFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/DocumentCenterServiceFallbackFactory.java @@ -1,7 +1,7 @@ -package com.chinaunicom.mall.ebtp.extend.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import com.chinaunicom.mall.ebtp.extend.feign.client.DocumentCenterService; -import com.chinaunicom.mall.ebtp.extend.feign.fallback.DocumentCenterServiceFallbackImpl; +import com.chinaunicom.mall.ebtp.extend.feign.client.fallback.DocumentCenterServiceFallbackImpl; import feign.hystrix.FallbackFactory; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceFallback.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceFallback.java similarity index 92% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceFallback.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceFallback.java index 14b84a0..5c8648a 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceFallback.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceFallback.java @@ -1,10 +1,13 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.*; -import com.chinaunicom.mall.ebtp.extend.export.feign.RsmsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RsmsFeignService; import com.chinaunicom.mall.ebtp.extend.export.vo.*; +import com.chinaunicom.mall.ebtp.extend.feign.entity.JuryPrintVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ResultDetailVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ReviewConfigCategoryDTO; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceOpenFallbakFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceOpenFallbakFactory.java similarity index 86% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceOpenFallbakFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceOpenFallbakFactory.java index da0e857..e895085 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceOpenFallbakFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceOpenFallbakFactory.java @@ -1,9 +1,9 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; import com.chinaunicom.mall.ebtp.extend.export.bean.BizBidOpenroom; -import com.chinaunicom.mall.ebtp.extend.export.feign.OpenFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.OpenFeignService; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceRespsFallbakFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceRespsFallbakFactory.java similarity index 50% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceRespsFallbakFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceRespsFallbakFactory.java index 05aee0b..8954f3e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ExportServiceRespsFallbakFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ExportServiceRespsFallbakFactory.java @@ -1,24 +1,31 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizSupplierRegister; -import com.chinaunicom.mall.ebtp.extend.export.bean.Tdoc; -import com.chinaunicom.mall.ebtp.extend.export.feign.RespsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.client.RespsFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.Tdoc; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.List; +import java.util.HashMap; +import java.util.Map; + @Component @Slf4j public class ExportServiceRespsFallbakFactory implements FallbackFactory { @Override public RespsFeignService create(Throwable throwable) { RespsFeignService resps = new RespsFeignService() { + /** + * 开标唱标页列表 + * + * @param tdocPara assessRoomId 评审室id turnSort 轮次序号 + * @return title-表格标题,dataDecrypt-解密状态id、status dataQuote-报价信息 + */ @Override - public BaseResponse> getTenderQuoteList(Tdoc tdocPara) { - return null; + public BaseResponse getOpenTenderList(Tdoc tdocPara) { + return BaseResponse.fail(new HashMap()); } }; log.error(ExceptionUtil.stacktraceToString(throwable)); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProcessFeignFallbackFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProcessFeignFallbackFactory.java similarity index 59% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProcessFeignFallbackFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProcessFeignFallbackFactory.java index 2f64c6e..3fa242e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProcessFeignFallbackFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProcessFeignFallbackFactory.java @@ -1,23 +1,21 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.common.util.JsonUtils; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizAssessRoom; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProcessFeignClient; -import com.chinaunicom.mall.ebtp.extend.export.vo.ReviewFlowVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizAssessRoom; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProcessFeignService; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Component @Slf4j -public class ProcessFeignFallbackFactory implements FallbackFactory { +public class ProcessFeignFallbackFactory implements FallbackFactory { @Override - public ProcessFeignClient create(Throwable throwable) { - ProcessFeignClient back = new ProcessFeignClient() { + public ProcessFeignService create(Throwable throwable) { + ProcessFeignService back = new ProcessFeignService() { /** diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProjectFeignFallbackFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProjectFeignFallbackFactory.java similarity index 79% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProjectFeignFallbackFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProjectFeignFallbackFactory.java index ffce41a..bab1e2d 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/ProjectFeignFallbackFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/ProjectFeignFallbackFactory.java @@ -1,10 +1,10 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectRecordVO; -import com.chinaunicom.mall.ebtp.extend.export.bean.ProjectSectionVO; -import com.chinaunicom.mall.ebtp.extend.export.feign.ProjectFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectRecordVO; +import com.chinaunicom.mall.ebtp.extend.feign.entity.ProjectSectionVO; +import com.chinaunicom.mall.ebtp.extend.feign.client.ProjectFeignService; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/TenderFeignFallbackFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/TenderFeignFallbackFactory.java similarity index 81% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/TenderFeignFallbackFactory.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/TenderFeignFallbackFactory.java index 38e302a..e9ae54b 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/feign/factory/TenderFeignFallbackFactory.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/TenderFeignFallbackFactory.java @@ -1,9 +1,9 @@ -package com.chinaunicom.mall.ebtp.extend.export.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; import cn.hutool.core.exceptions.ExceptionUtil; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; -import com.chinaunicom.mall.ebtp.extend.export.bean.BizSupplierRegister; -import com.chinaunicom.mall.ebtp.extend.export.feign.TenderFeignService; +import com.chinaunicom.mall.ebtp.extend.feign.entity.BizSupplierRegister; +import com.chinaunicom.mall.ebtp.extend.feign.client.TenderFeignService; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/UsercenterFeignFallbackFactory.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/UsercenterFeignFallbackFactory.java new file mode 100644 index 0000000..613db52 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/factory/UsercenterFeignFallbackFactory.java @@ -0,0 +1,19 @@ +package com.chinaunicom.mall.ebtp.extend.feign.client.factory; + +import cn.hutool.core.exceptions.ExceptionUtil; +import com.chinaunicom.mall.ebtp.extend.feign.client.UsercenterFeignService; +import feign.hystrix.FallbackFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class UsercenterFeignFallbackFactory implements FallbackFactory { + + @Override + public UsercenterFeignService create(Throwable throwable) { + UsercenterFeignService back = uid -> null; + log.error(ExceptionUtil.stacktraceToString(throwable)); + return back; + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/fallback/DocumentCenterServiceFallbackImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/fallback/DocumentCenterServiceFallbackImpl.java similarity index 87% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/feign/fallback/DocumentCenterServiceFallbackImpl.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/fallback/DocumentCenterServiceFallbackImpl.java index 79a9a62..4a3ffd2 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/fallback/DocumentCenterServiceFallbackImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/client/fallback/DocumentCenterServiceFallbackImpl.java @@ -1,12 +1,10 @@ -package com.chinaunicom.mall.ebtp.extend.feign.fallback; +package com.chinaunicom.mall.ebtp.extend.feign.client.fallback; import com.chinaunicom.mall.ebtp.extend.feign.client.DocumentCenterService; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.List; - /** * 熔断 * diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/FeignConfiguration.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/config/FeignConfiguration.java similarity index 98% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/FeignConfiguration.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/config/FeignConfiguration.java index 712e402..98a75cc 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/factory/FeignConfiguration.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/config/FeignConfiguration.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.feign.factory; +package com.chinaunicom.mall.ebtp.extend.feign.config; import com.alibaba.fastjson.JSONObject; import com.chinaunicom.mall.ebtp.extend.feign.utils.UrlConstants; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizAssessRoom.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizAssessRoom.java similarity index 98% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizAssessRoom.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizAssessRoom.java index dcaa94a..43ac113 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/BizAssessRoom.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizAssessRoom.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizSupplierRegister.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizSupplierRegister.java new file mode 100644 index 0000000..ea9b8f8 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/BizSupplierRegister.java @@ -0,0 +1,288 @@ +package com.chinaunicom.mall.ebtp.extend.feign.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; +import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Map; + +/** + * 实体类 BizSupplierRegister + * + * @auto.generated + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName(value = "biz_supplier_register", autoResultMap = true) +@ApiModel(value = "BizSupplierRegister对象", description = "供应商报名登记表") +public class BizSupplierRegister extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 供应商报名登记表id + */ + @TableId + @ApiModelProperty(value = "供应商报名登记表id") + private String id; + + /** + * 项目表id + */ + @ApiModelProperty(value = "项目表id") + private String projectId; + + /** + * 标包id + */ + @ApiModelProperty(value = "标包id") + private String packageId; + + /** + * 评审室表id + */ + @ApiModelProperty(value = "评审室表id") + private String assessRoomId; + + /** + * 评审室轮次 + */ + @ApiModelProperty(value = "评审室轮次") + private Integer assessRoomSort; + /** + * 机构id + */ + @ApiModelProperty(value = "机构id") + private String companyId; + + /** + * 机构名称 + */ + @ApiModelProperty(value = "机构名称") + private String companyName; + + /** + * 投标人id + */ + @ApiModelProperty(value = "投标人id") + private String bidUserId; + + /** + * 投标人姓名 + */ + @ApiModelProperty(value = "投标人姓名") + private String bidUserName; + + /** + * 联系人id + */ + @ApiModelProperty(value = "联系人id") + private String contactId; + + /** + * 报名状态[1:已报名提交][2:已报名审核][3:已报名被拒绝][4:已退出][5:已中标][6:未中标][9:重评前的数据] + */ + @ApiModelProperty(value = "报名状态[1:已报名提交][2:已报名审核][3:已报名被拒绝][4:已退出][5:已中标][6:未中标][9:重评前的数据]") + private String registerStatus; + + /** + * 报名时间 + */ + @ApiModelProperty(value = "报名时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime registerTime; + + + /** + * 下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件] + */ + @ApiModelProperty(value = "下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件]") + private String downloadStatus; + + /** + * 下载时间 + */ + @ApiModelProperty(value = "下载时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime downloadTime; + + /** + * 下载版本 + */ + @ApiModelProperty(value = "下载版本") + private String downloadVersion; + + /** + * 上传时间 + */ + @ApiModelProperty(value = "上传时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime uploadTime; + + /** + * 解密状态:[1:未解密][2:解密成功][3:解密失败] + */ + @ApiModelProperty(value = "解密状态:[1:未解密][2:解密成功][3:解密失败]") + private String decryptStatus; + + /** + * 解密时间 + */ + @ApiModelProperty(value = "解密时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime decryptTime; + + /** + * 营业执照id,附件表 + */ + @ApiModelProperty(value = "营业执照id,附件表") + private String businessLicenseId; + + /** + * 法人代表授权书id,附件表 + */ + @ApiModelProperty(value = "法人代表授权书id,附件表") + private String legalPersionAuthorizationId; + + /** + * 退出原因 + */ + @ApiModelProperty(value = "退出原因") + private String quitReason; + + /** + * 购标时间 + */ + @ApiModelProperty(value = "购标时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime payTime; + + /** + * 购标状态:[1:未支付][2:已支付][3:支付失败] + */ + @ApiModelProperty(value = "购标状态:[1:未支付][2:已支付][3:支付失败]") + private String payStatus; + + /** + * 备注 + */ + @ApiModelProperty(value = "备注") + private String remark; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "1:预审;2:资审") + private Integer roomType; + + /** + * 报价总金额净价 offer_total_price + */ + @ApiModelProperty(value = "报价总金额净价") + private BigDecimal offerTotalPrice; + + /** + * 报价总金额含税价 offer_total_tax_price + */ + @ApiModelProperty(value = "报价总金额含税价") + private BigDecimal offerTotalTaxPrice; + + /** + * 报价单号 + */ + @ApiModelProperty(value = "报价单号") + private String offerOrderNo; + + @ApiModelProperty(value = "招募状态:0非招募、1招募单轮、2招募多轮") + private String recruitType; + + /** + * 联系人名称 + */ + @TableField(exist = false) + @ApiModelProperty(value = "联系人名称") + private String contactName; + + /** + * 联系电话 + */ + @TableField(exist = false) + @ApiModelProperty(value = "联系电话") + private String contactTelephone; + + /** + * 联系传真 + */ + @TableField(exist = false) + @ApiModelProperty(value = "联系传真") + private String contactFax; + + /** + * 签字确认账号id + */ + @TableField(exist = false) + @ApiModelProperty(value = "签字确认账号id") + private String signUserId; + + /** + * 轮次id + */ + @TableField(exist = false) + @ApiModelProperty(value = "轮次id") + private String reviewTurnId; + + /** + * 轮次序号 + */ + @TableField(exist = false) + @ApiModelProperty(value = "轮次序号") + private String reviewTurnSort; + + /** + * 签字确认账号名称 + */ + @TableField(exist = false) + @ApiModelProperty(value = "签字确认账号名称") + private String signUserName; + + /** + * 签字确认时间 + */ + + @ApiModelProperty(value = "签字确认时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(exist = false, typeHandler = CustomLocalDateTimeTypeHandler.class) + private LocalDateTime signTime; + + /** + * 其他下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件] + */ + @TableField(exist = false) + @ApiModelProperty(value = "下载状态:[0:未下载标书][1:已下载标书][2:已上传投标文件]") + private String downloadOtherStatus; + + private Map dataMap; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/JuryPrintVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/JuryPrintVO.java similarity index 93% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/JuryPrintVO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/JuryPrintVO.java index f25fb0e..a017f92 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/JuryPrintVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/JuryPrintVO.java @@ -1,11 +1,10 @@ -package com.chinaunicom.mall.ebtp.extend.export.vo; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; /** @@ -75,7 +74,7 @@ public class JuryPrintVO { */ @ApiModelProperty(value = "登录时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(typeHandler = CustomLocalDateTimeTypeHandler.class) private java.time.LocalDateTime loginTime; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/LoginUserDetailVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/LoginUserDetailVO.java new file mode 100644 index 0000000..05306a8 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/LoginUserDetailVO.java @@ -0,0 +1,118 @@ +package com.chinaunicom.mall.ebtp.extend.feign.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author 邵智敬 + * @date 2019-04-25 + * @version: V1.0 + * @update [序号][日期YYYY-MM-DD] [更改人姓名][变更描述] + */ + +@Data +@Accessors(chain = true) +@ApiModel(value = "用户名获取用户信息、权限字信息、角色信息") +public class LoginUserDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "租户ID") + private String tenantId; + @ApiModelProperty(value = "部门编码,根据门户现状,位数不规则,部分沿用HR原编码") + private String ou; + @ApiModelProperty(value = "部门名称") + private String ouName; + + @ApiModelProperty(value = "所属省份ou") + private String province; + + @ApiModelProperty(value = "所属城市名称ou") + private String city; + + @ApiModelProperty(value = "所属省份名称") + private String provinceName; + + @ApiModelProperty(value = "所属城市名称") + private String cityName; + + @ApiModelProperty(value = "门户全国目录中的唯一编码 uid") + private String staffId; + + @ApiModelProperty(value = "空即可") + private String staffOrgId; + + @ApiModelProperty(value = "eshop_portaluser的cn") + private String username; + + @ApiModelProperty(value = "用户密码") + private String password; + @ApiModelProperty(value = "公司ID") + private String orgId; + @ApiModelProperty(value = "eshop_portaluser的cn") + private String staffName; + + @ApiModelProperty(value = "租户ID") + private String staffType; + + @ApiModelProperty(value = "租户ID") + private Boolean enabled; + + @ApiModelProperty(value = "权限字列表") + private List authoritiesList; + + @ApiModelProperty(value = "用户") + private Long userid; + + @ApiModelProperty(value = "机构id") + private String partnerId; + + @ApiModelProperty(value = "机构名称") + private String partnerName; + + @ApiModelProperty("是否前台综合员:Y-是, N-否") + private String isSyntheser; + + @ApiModelProperty("是否是资产管理员:Y-是, N-否") + private String isAsseter; + + @ApiModelProperty("是否采购员:Y-是, N-否") + private String isCurement; + + @ApiModelProperty("身份证号吗") + private String identityCard; + + @ApiModelProperty("联系电话") + private String tel; + + @ApiModelProperty("公司名称") + private String orgName; + + @ApiModelProperty("当前及所有上级组织ou集合") + private List ouList; + + @ApiModelProperty("邮箱") + private String cumail; + + @ApiModelProperty("当前用户ou") + private String currentOu; + + @ApiModelProperty("当前用户岗位名称") + private String currentOuDisplay; + + @ApiModelProperty("省份简称") + private String site; + + @ApiModelProperty(value = "HR员工编码(非正式用户无该信息)") + private String employeenumber; + + @ApiModelProperty("手机号") + private String mobile; + + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectRecordVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectRecordVO.java similarity index 99% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectRecordVO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectRecordVO.java index f4f0496..617613d 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectRecordVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectRecordVO.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSection.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSection.java similarity index 99% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSection.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSection.java index 6e1e392..b9dae80 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSection.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSection.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSectionVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSectionVO.java similarity index 97% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSectionVO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSectionVO.java index 2d41d06..493de6c 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ProjectSectionVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ProjectSectionVO.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.chinaunicom.mall.ebtp.common.base.entity.BasePageRequest; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/ResultDetailVO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ResultDetailVO.java similarity index 98% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/ResultDetailVO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ResultDetailVO.java index d7262d7..e61db32 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/vo/ResultDetailVO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ResultDetailVO.java @@ -1,4 +1,4 @@ -package com.chinaunicom.mall.ebtp.extend.export.vo; +package com.chinaunicom.mall.ebtp.extend.feign.entity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigCategoryDTO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigCategoryDTO.java similarity index 85% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigCategoryDTO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigCategoryDTO.java index de308e9..fe05581 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigCategoryDTO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigCategoryDTO.java @@ -1,5 +1,6 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; +import com.chinaunicom.mall.ebtp.extend.export.bean.ReviewConfigCategory; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigDetailDTO.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigDetailDTO.java similarity index 89% rename from src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigDetailDTO.java rename to src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigDetailDTO.java index 733bd8c..e10a6db 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/export/bean/ReviewConfigDetailDTO.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/ReviewConfigDetailDTO.java @@ -1,5 +1,7 @@ -package com.chinaunicom.mall.ebtp.extend.export.bean; +package com.chinaunicom.mall.ebtp.extend.feign.entity; +import com.chinaunicom.mall.ebtp.extend.export.bean.ReviewConfigDetail; +import com.chinaunicom.mall.ebtp.extend.export.bean.ReviewConfigStandard; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalDetailVO; import com.chinaunicom.mall.ebtp.extend.export.vo.BidEvalEarlyJudgesSummaryVO; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/Tdoc.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/Tdoc.java new file mode 100644 index 0000000..94bc6ec --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/Tdoc.java @@ -0,0 +1,139 @@ +package com.chinaunicom.mall.ebtp.extend.feign.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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; +import java.util.Map; + +/** +* 实体类 Tdoc-目录主表 +* +* @author yss +*/ +@Data +@Accessors(chain = true) +@TableName(value = "biz_resps_tdoc", autoResultMap = true) +@ApiModel(value = "Tdoc对象", description = "目录主表") +public class Tdoc implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId + @ApiModelProperty(value = "") + private String id; + + @ApiModelProperty(value = "临时表id") + private String tempId; + + @ApiModelProperty(value = "项目id") + private String tpId; + + @ApiModelProperty(value = "标段id") + private String sectionId; + + @ApiModelProperty(value = "评审室id") + private String assessRoomId; + + @ApiModelProperty(value = "评审室轮次") + private Integer assessRoomSort; + + @ApiModelProperty(value = "轮次id") + private String turnId; + + @ApiModelProperty(value = "轮次") + private Integer turnSort; + + @ApiModelProperty(value = "报价或其他:0-报价 1-其他 空是全部") + private Integer quoteOrOther; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "评审类型 1-预审 2-后审 ") + private Integer roomType; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "应答开始时间") + private LocalDateTime startDate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "应答截止时间") + private LocalDateTime endDate; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "解密截止时间") + private LocalDateTime decryptEndDate; + + @ApiModelProperty(value = "结束状态 0-否 1-是 只有谈判室内的有") + private Integer endStatus; + @ApiModelProperty(value = "版本号") + private Integer version; + + @TableField(fill = FieldFill.INSERT) + @ApiModelProperty(value = "创建者") + private String createBy; + + @TableField(fill = FieldFill.INSERT,typeHandler = CustomLocalDateTimeTypeHandler.class) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private LocalDateTime createDate; + + @TableField(fill = FieldFill.UPDATE,typeHandler = CustomLocalDateTimeTypeHandler.class) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateDate; + + /** + * 标段id + */ + @TableField(exist = false) + private List sectionIdList; + /** + * 目录表 + */ + @TableField(exist = false) + private List catalogList; + /** + * 是否重评 false-否,true-是 + */ + @TableField(exist = false) + private Boolean reAssess; + + @ApiModelProperty(value = "文档存储路径") + private String filepath; + + @ApiModelProperty(value = "文档名称") + private String filename; + + @TableField(exist = false) + @ApiModelProperty(value = "投标人id") + private String tendererId; + + @TableField(exist = false) + @ApiModelProperty(value = "投标人id") + private String commpanyId; + @TableField(exist = false) + private List catalogIdList; + + @TableField(exist = false) + private Map key_key; + + @TableField(exist = false) + @ApiModelProperty(value = "解密状态:true-全部已解密,false-仍有未解密,供应商开标页:true-可以解密 false-未设置解密截止时间或已过解密时间") + private boolean decryptStatus; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/TdocCatalog.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/TdocCatalog.java new file mode 100644 index 0000000..31b7130 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/feign/entity/TdocCatalog.java @@ -0,0 +1,63 @@ +package com.chinaunicom.mall.ebtp.extend.feign.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** +* 实体类 TdocCatalog-目录表 +* +* @author yss +*/ +@Data +@Accessors(chain = true) +@TableName(value = "biz_resps_tdoc_catalog", autoResultMap = true) +public class TdocCatalog implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId + @ApiModelProperty(value = "") + private String id; + + @ApiModelProperty(value = "目录主表id") + private String tdocId; + + @ApiModelProperty(value = "父id") + private String parentId; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "目录类型:0-商务、1-技术、2-服务、3-报价、4-其他、5-引用供应商信息库") + private Integer catalogType; + + @ApiModelProperty(value = "文件类型:0-普通、1-结构化、2-报价一览表") + private Integer structureType; + + @ApiModelProperty(value = "引用的编码") + private String quoteCode; + + @ApiModelProperty(value = "排序") + private Integer sort; + + /** + *树结构使用 + */ + @TableField(exist = false) + private List children; + + @TableField(exist = false) + private String path; + + @ApiModelProperty(value = "评审室id") + @TableField(exist = false) + private String assessRoomId; + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/entity/BizBidClientVersion.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/entity/BizBidClientVersion.java index dd5bcf1..c0187ba 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/entity/BizBidClientVersion.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/entity/BizBidClientVersion.java @@ -3,7 +3,6 @@ package com.chinaunicom.mall.ebtp.extend.templatewarehouse.entity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import com.chinaunicom.mall.ebtp.common.base.entity.BaseEntity; import com.chinaunicom.mall.ebtp.common.config.CustomLocalDateTimeTypeHandler; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -26,45 +25,44 @@ import java.time.LocalDateTime; @TableName(value = "biz_bid_client_version", autoResultMap = true) public class BizBidClientVersion implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @ApiModelProperty(value = "主键") - private String id; + private static final long serialVersionUID = 1L; - /** - * 文档中心-文档ID - */ - @ApiModelProperty(value = "文档中心-文档ID") - private String documentCenterId; + /** + * 主键 + */ + @ApiModelProperty(value = "主键") + private String id; - /** - * ipass客户端版本号 - */ - @ApiModelProperty(value = "ipass客户端版本号") - private String ipassVersion; + /** + * 文档中心-文档ID + */ + @ApiModelProperty(value = "文档中心-文档ID") + private String documentCenterId; - @TableField( - fill = FieldFill.INSERT, - typeHandler = CustomLocalDateTimeTypeHandler.class - ) - @JsonFormat( - pattern = "yyyy-MM-dd HH:mm:ss" - ) - @DateTimeFormat( - pattern = "yyyy-MM-dd HH:mm:ss" - ) - @ApiModelProperty("客户端发布时间") - private LocalDateTime publishDate; + /** + * ipass客户端版本号 + */ + @ApiModelProperty(value = "ipass客户端版本号") + private String ipassVersion; - /** - * ipass客户端版本号 - */ - @ApiModelProperty(value = "备注") - private String remark; + @TableField( + fill = FieldFill.INSERT, + typeHandler = CustomLocalDateTimeTypeHandler.class + ) + @JsonFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @DateTimeFormat( + pattern = "yyyy-MM-dd HH:mm:ss" + ) + @ApiModelProperty("客户端发布时间") + private LocalDateTime publishDate; + /** + * ipass客户端版本号 + */ + @ApiModelProperty(value = "备注") + private String remark; } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/sevice/BizBidClientVersionService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/sevice/BizBidClientVersionService.java index 8c09013..ddf7912 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/sevice/BizBidClientVersionService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/templatewarehouse/sevice/BizBidClientVersionService.java @@ -10,13 +10,14 @@ import java.io.IOException; /** * 对数据表 biz_bid_client_version 操作的 service - * @author Auto create * + * @author Auto create */ -public interface BizBidClientVersionService extends IBaseService{ +public interface BizBidClientVersionService extends IBaseService { /** * 通过版本号获得对应客户端文件id + * * @param version * @return */ diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 63a3334..4e95ae0 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -163,6 +163,7 @@ mconfig: rsms: biz-service-ebtp-rsms #评审结构化服务 tender: biz-service-ebtp-tender #投标服务 documentcenter: core-service-document-center #文档中心 + usercenter: core-service-usercenter-public #用户中心 document: diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml index 885f90f..9ea52e4 100644 --- a/src/main/resources/application-pro.yml +++ b/src/main/resources/application-pro.yml @@ -166,7 +166,7 @@ mconfig: rsms: biz-service-ebtp-rsms #评审结构化服务 tender: biz-service-ebtp-tender #投标服务 documentcenter: core-service-document-center #文档中心 - + usercenter: core-service-usercenter-public #用户中心 document: clientHttpUrl: http://10.238.25.112:8100/auth/oauth/token?grant_type=client_credentials&client_id=bVS46ElU&client_secret=58ea04ba02475c8da2321cc99849d2a10f15b749 diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index ca20abb..6d6acc0 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -171,7 +171,7 @@ mconfig: rsms: biz-service-ebtp-rsms #评审结构化服务 tender: biz-service-ebtp-tender #投标服务 documentcenter: core-service-document-center #文档中心 - + usercenter: core-service-usercenter-public #用户中心 document: clientHttpUrl: http://10.242.31.158:8100/auth/oauth/token?grant_type=client_credentials&client_id=bVS46ElU&client_secret=58ea04ba02475c8da2321cc99849d2a10f15b749 diff --git a/src/main/resources/application-uat.yml b/src/main/resources/application-uat.yml index ed339c2..ab1948b 100644 --- a/src/main/resources/application-uat.yml +++ b/src/main/resources/application-uat.yml @@ -169,7 +169,7 @@ mconfig: rsms: biz-service-ebtp-rsms #评审结构化服务 tender: biz-service-ebtp-tender #投标服务 documentcenter: core-service-document-center #文档中心 - + usercenter: core-service-usercenter-public #用户中心 document: clientHttpUrl: http://10.242.31.158:8100/auth/oauth/token?grant_type=client_credentials&client_id=bVS46ElU&client_secret=58ea04ba02475c8da2321cc99849d2a10f15b749 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 027b4e3..f2b90d5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,3 +1,3 @@ spring: profiles: - active: test \ No newline at end of file + active: uat \ No newline at end of file diff --git a/src/main/resources/model/初步评审.docx b/src/main/resources/model/初步评审.docx new file mode 100644 index 0000000000000000000000000000000000000000..a9dc4466344a4de78cd56539877e08eaa7549f33 GIT binary patch literal 23687 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 PsLwL0x$61JjaUB$X72oK literal 0 HcmV?d00001 diff --git a/src/main/resources/model/开标记录表.docx b/src/main/resources/model/开标记录表.docx index 809e86d92988d740fded1bc5722b6dc6033acacf..28cfcd708d88d12517bafd282dbda8be4c4775c9 100644 GIT binary patch literal 24142 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 literal 18014 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 diff --git a/src/main/resources/model/评标报告.docx b/src/main/resources/model/评标报告.docx index 944df38736bda3ef3fa2190db25fd3457330037a..4013c2bd21ee00061c8cc004c8657b8ba202ffef 100644 GIT binary patch literal 22706 zcmeFZgOecLvgq5k-92sF#F(F_?R)n*=f%G9{($?cA}Ury zt;&VWT=`p-6(uJL41xjx1^@v706+lXx2cI;3kU#^2@U{&3;+S7DQIisWNhQ4tK@EH z?5IuaW^IL^4+2D<3jp+8|NlS!FP?$MWNF)VdYF)F&?h_?ZE(#~xFNa0Q~mQ8P5+`3 z_4pIDv`4^r^Gsh|PMN4?u?i-VsPvD3wZ^9WBdv%s1mcNRoYH=L-)agB{B z-{fs!|H4jr?HjpBmfY41Z;s5VWyIPYtJo&9@V%m>QcXLk3WPq#LdY?Sz2(Lv`BPsD z$h&nT2Lk6CkZg%FmO-mGWUQvM(pH~?X<+dHIN@7EwH41rfuR-ksxa}xF18x2-&KM` z>6t7mYhk*Wf}>q<-Urr!)?0YA()C~wKax*c9HI#D1Q_Q)x*R$~&%D!lvhvI;Ll}Bg zBPq=I4l+8bv4~{Ud-i=32WmEekW6v$jFP4V@T<6b_mN@R!PmCcEow5sn73R18(P9_)zh;SnKOz z;T&y;ujshZes;R2$MxBG@Y#}cn2%B>y(hQvNwZ%(-|qbN1q>kfKO7x59;@a4+j?cb z{TTY&(RCe+tsLoS|6c!p2mim=tN+{3qY~C7fcgJA__qG2H`_WC;oRz$Se`54IdD+= z1)wY3MB!R@R{?&z+`7)u!|}N6Qf6T00#^w)SdG5=V(v<&p6Irvn{`VhxSaZ^W=4Q1 ztmss&xsB}-9d~?E9(NQ&MgCqx2tV;pLKCLi08}PoU?#6bl{y<^W8^kxbO(nsnNVW-vt93=*)ip zM<2<27unbOzB2*}0Duhu0qAP$U_|#XM=`QBbhiGEi+=;+|8^R{@2L1)`~U8vGHFs~ zfF2>}TC7v>fXiMn7j&T!o$m}ag1uvkGhFOqbPLGaGet#uj`w*_vQV3fDaX`W)}+T7 z)jQC+XqG~94=|EXGBKG`c6DU$@yK5oE_h1Fn7PmjHfFMTSv8TZ6l6}en*0ZPe1r=H z6+$N2)Gz8>G+I_zGY$FSC7`lK4%?tVNE|o2dh~nEHGRdN8MEAy>Ay@5deqnsywump zl_lI*9h3uykzPfr}p?tkS9lfMWp*;*w`1X6ne0UMW>of?|U`ayj66ErNbN2hqewlP! zG8cu?8%{{BYZuJc^y}<6QgiIhOztN+jD$42hq^0{*M~)7;rZkeDdcAd1dU?15uMK) z+pj;5U32TVJDJ^7Zr3R5k_UecX2#8D_gIB{>e1B#B{z7O!A&KW1Kr<^t$VRZ1} z%T6CN9`pxQAA=*_4`=_VC>_O=SKfUt4(cc2k4_&rv=mK@GywFm6j8YgD8@}pUiI(H z)yks74W5k*NRd1)%yPjTj)A||KL}sxRKQ@vJ1KqSJ4msA;yd!+&RggV9>1>VlFeY^ z^R?$gByj_4%bhxmNM45E#OmC`_AQjup|hu;yS=7CK@Mc;G3~0)VPP+WfUZSJ2DA)u zOpl`OprEUB$3NFpUpzxZwy#NLPz{37=LyUawfiLXP3VlHQX2rt#CkvIk1-4G-c~$# z&3|Mc(y}b*(rq=17G^a;mPNxW=9>PruuueEu-a^J6p)X?88aQ;&Y>BNh)dZCM?(q} zg%BPl1*D#Hcw*#0i=~bNUNM@M8r-{8oDUp3HHymNq?m%ZPf+nZ6kMm^91VrypgyR- z>rc{}K~cxTCtJvm13U}9EyPYw?34FndfJ`fb|==?Ni=+@KxeeuO~98PWCYO9@1LTy z(sPd2l_FUMb+(sq&i>)|jK3XX7{4i;GltEd9x_7c3SmJCPUZcyq25OC`4G5qktKpF zj-qtgnt^OlGl4@_O3P-X7mOV^(=s}mPD&ZGOhgn-|0^*pxdxOcu{}J0Jb% z-s;nFjwHOtAghZ&%aeC}nq-v2&E!0U?|?9z3F}8EdI~3pTF1hltPzFvFf5bUE7g&` z_~e+Ib6{;`il9BnToHLhW%)MZVN!V9o-N--<3Daif1XlZJ>g@SyFfW1?c0C|yaj3$ z9Rq+~038s61=)dD(wLvcKp{EI*Hw7mpn2SD+l>BPMszpJdo+kFJVW4u*Uy*8k)_w&IECpq(`$yDRNCn^o5VNBCTjxFE+L`uJ%ZwnA5lH+*j`hc zZ8f+JeXlJ)rl|4h@OtI#(@Xd!C^d zt!oh9Og}-4JY8K)cha$>0%9d#vzzBvwnJc`!S=zHhkjE9z_=(pZ&+enR<)BCMcQhE z$52@F0b4@${^0UHlx0bvPcIUowPK1hvoLdVgOc`~I6B6xMz_mcC1;&0Z;mV8fhDbc zl01#iX4lh6MPL8jn$M%nGt%HCdD=xTys|^{c9*~V6QM<@taEj`u97REZ~#JcJT(^liQWMuwcK9n6*qkHb@`oN{<(yp+k!=}O( zh9quy6hkwZwHH^a!428djn19=X>(nCImScMx6vEQsQ13^EXD>(m#OB-Eb zBY@~zMVq&Jd8@f?rN4(Bq&$h_xte;~1$C4apmxN2&MKx#A$hTX1~u<}ChWqc;HGTT zrs@hTJ>v%5oNLBDxHK#KX|u#0a*y~Z6bN3O8thKvGP$66ADlOk%Q4gOwc;TlS2ilXFX+SZe7v= z_dDnW>tds^%*cZGXc4dg1nJ@c7Y3@|J6*E*B44?z1uie%l+5G7*hF1dxmjA;7-7omyk~_3S;<~t z8R8q92~A{35laG*oBJ9git8&%$ffPLbGUYH$xtOWt3-woIc2`o{dD5>D2FD z7uejqhebh-4nqk)Aylcv`?g$E&704zSt(Z}@qXY=w&(F6Bil=Ah$eqswJxZ4!m*P+ z=OC37L?W17N_M0|;6yxr$LiDuId#>ZYnp7Tq4X?zbro;2|-`uuI_ z{B1q>BBQyD%`WnB42?*$s*VPAEDvw2PYA`qtmn2s{~(?2HNJ)MG#9V)zMOuwz^n;U zP_$|Z7@R1E2msaOn*O8Y{VjDn=?PcB4Vf4q|24$5aKOzjI@A|WhTF}+$ZcZCD-i=1 z%Y5B@7&&m&uT@o(gJw+;I0SzV%MIGNy?Ejp*HmVkZefWqipf-*vZ?`E$+zw8og$LS z^`wXO9l&0XBq4mzNpW#q^ZDIX2aA}RRoxbArd%yEWc31fuEmDGN-E*eU`eGi3;)rC zGDjfZ7m@uu;7-tp2u3%6eb)LUa6M-61%tiy?O~@+5u6k8vZ*c@vTU{(laM7LWD~H6 ztRL?&=gNOA+-OBZ0yaTE(n#%duetlp4FIkWsS^PO5v43Zel?uN&%pdWyZf=?_7d6f z*v8we@ClspauT$8fx&_}v}}?jLnQi)ekgZ#IC=3AuP?m6%o z2Y)FT^qh9oJcu)h6A4I4@^k2vm-GZzgb2rgotsy8)ErmI)MDgdhMjoo0jhBcuna4f zyMIp#r?Uo$yck@OOeSV7!3D?Ddk^!%B@t4f^6*%$+Hn=CkU1)a3oY@A1AxMx^--`ql~>`e(i{~6nWYfyt_6|+8O5}#gY1t44-OPZt;GX=kl7% zQYGZG7s@M>fT6$F|+Rv8{M5)8edG@!p;UCyhOxo1hl;?=bd*NWTuo{+y9xZf*h zaL_cfCO(iOah82jf?P`)xY&V-0pq0qc^dT!YW7ig;A0bAE_|$bS*PuJM;EHMt>M?F z;?{eRl7v@_>pTT${3_8;Ub;Q&NY;6sh+*LzZZ(~dq0Q~h`RnT5xpOMEsGdY4==b!G zcV8yfWqc&S{DvLquQJ;WKltIZgu2%aZsj#^Val)ha|#!LC?=JwPsh^;pAS_tFsX>o zb+FmxZrQ>8k-b}AN6aag*`IcY%nCU(hQB&D2|}xAG?(ej{kROoS!Cyn=B zB}Nu@PLT`jh1Fx4UY9!D2wuuuVjTu*;`1v>xm|MIT}thP(|Xa42Lg8oTl($1S);%x z?sSEHJ&cJZpsz$`Vh0F0tmbME%xBe7C=xMv$h(WS1_%A86YxS141J<5wTMzs+L_N~ z+ZtkIZVH4%`M_x$(gLs?uGmV@VbIa9&RYEDN_6OqQhFS&{yu}S83zAqMkx?<(^@S) zXknqo#=STu0u#CT!*oTca0Js2%Y}S$@s***lq-b1IvS$1h+jee5ZWvR07PLkH24p} z>L6zMuHdD?`+zgG(&3Q7*jQwr9-4ucKm427D7O-v@-dEwb`!A2DA}ge*jYHaL6t{a zacV`EhHW2=Fe-7qr2TFPZEgZKuW=2&Atew5Ml6rMT4&j|lbY98->U)cRvtswpnT;? z2Hc{Wo+{i()WAy|5J_rG3guv)EJ$GK?E&#UX(#2W(I~@a4(Xb6*GvX0`z3+lJiV>| zQU`+O&laF2ufGf%k9EIwW;{tc`L^_uSlRiWHpa*cQYn6yqiE0lZvt_qc;L_D&tR^y3-uice3gEsxY94An9TS75*&lA1VOVTS563lm zLK3f+1$X=FhsV6%R;#D$H%CEh5Q>-R+}V_ncOqja&;;)ZwjR1=Ij=p<&wI%(F4x3l zKtM%l@Fb|O!krh^FHG6*uMegW?`o5%Wc04%xM`L)9B$&WXu-OP%j8MOKTn1}{A=mC zy<}5EMle&Of=Xd1Ydgh9QqZvRktLbft+J#eJ%O76LYvx%>OH&{M&V3rDPfQpkx+RD znMEOe6K!W-N+#gQtMeJ?m4vChv5ty0TMCv$Hi3aCk$F)bIy)Nth9k;E1KPxOE_!cQ z`q|V3gwouw=uVH82q0`srJf71w0Ba8OlT7iwb9@YRP&KHu#&YHJV`&mg`&}5&_u~$ zKykm-_h$0Av|MjkP#FSuociTD6v+x1dB;T9;L(@cj?O`>h?i7%DUmV06|u7nEpIKd zFi3z>p9TL1B3s_=698_e zGUp&cgnI3Tz6lYQV8ki)6VhUme}eyEBRUeQ>6#Ed~Qn zHsQ2g>gN;ZeTBhv2~115YG1FCaB~F1SZb{ zL`g&4$%2oCh=?Gb7*|Q7`HgV>_v|zT8X#oXmjT$rDWq2pWy>>IAPfpM_AT%_-q=2c zh8qVr0YP|7mPY*87Tq;Oxz-pAnc^Z3yKJZ9E`xBDX{9O;-O{9gqmYAegK#UIehT^N zsn5z4h?L!=nHk@So6?f3F6jlyQpn;LFfNLvbLd1$iR7$ zF`SCwI1VZ`xG$dKaVUmZ>B`A*@OC*!FMUukh0Qzy1_tVM#p`(UqGrMT^CF!i%@3Se zagSkT?5wbkUT5s_IbQ2>T45=o7lYdC7c^@wOTb#_soy-=sZOb413_hl*dKQ9RJhT! z?tz_wLB{}pjFOtMsAYVqP0BjPqAs}-a1rL+qOjawa*mN)+vIhi7B9PD%*Du?zQ_i4( zR=E^&A0qHzW#R)6X2i%5S!sCElElJLAO_YP#ZeACnXq^QofLF$gp)wC`h7Dsd`zN+ zUx;UEc9&W3Qmr8d)N1KNL}`mTz(}`nCip?D0#dCaor2FQPMezK+Z@kqF2saq40H%b zi}4WA$7bBFZtR`}DxkYlkghBCNV{<3r$Vf5r(V(=pcY$KeR8`OQgiw(;Fv>=BON2Z zK6?HpEWW-jG&XJL;8>d>#*8u@1y zN+U^!Umo`s*a{TCFenB}KA^K5ZJ{msS!bm%4*^?Cp3l7=Hokk7RVp>_K5jH6W~^ba zq%A9PwWRSe?hOf1ggFn1phR|~#-^@77%^aitsNgzqQ|(%NDU=eLn)$wb%=Mn1C?hI zNh>y$FB^yalO+1bZlHHYUYc<3p)+iAzTAZyHtVmvR%}V_K{RCMPwRWz;=7TpmSuGw zcw}Wg-BIig8|1Xw32NKRgd@5tED*E+wBzA(kjVfW0M$luB!~H}g2fav8%61dwxm+>}Os%Pys!~q$ zsJzVHP;L(YL_;D?R-hRuD~~3)$Du8ViJGGN?7>T5_ss(l0Xwm%6@F&>fj+xR)#2SMRH^p&%whwwK*toq_M0r*kC@wP;?G%c5%YcRM@Oa zQ4!qN@%RqQUxz%mI6(A#{x6Aa>}q#;{AAU?pG359zhCY_45EUm)q#jcZvv!*a;@31 z(t5@@)WMp9!an`>e76JheO`C(o$!Y9P5tE!XaxVc1~7*YisuYL5nQKor8UJEIWl!J zge1s)CXArZIE<*jrYoddCv!WFTP4c8dk&(sFpwV9av932je#_)=*9d4_^KBME2c&C(5(MI!Q8=Ck{vDWrC_^kMWxW@qr;jL$k7sBQSq8BunI_!X5b$z@g z^f0r5s94`>5_^yii9-3SP2257%Dcxv*K=uiS6fFHkZHyH)9%&N<>uvN{Ps`Lud3;o zEviwNP{fPf0(M>UIUy7gP9x(8dEWTYIbvW>?+-)-7I}a_K%B-9 zV_BYa<>a)>ZiS6j)xFJiwP<{`Queco`GpX+4@8)3T^Mn* zCYzmVVF;Awo5d2iZMxr_A|xAYEaG>@n0<{o(3?$LV+!OW$?xdkOG4Rk=#_&^$f9JM z<(r6O<;}OJB%PQ~R;<-Wa#S7!^q1Gw31#UfChvR=8X0J54Xz9|K-om8v(6YYYz6P( zATlEtbf&jpG@z};-j-^3G;5*Kn9VvpLKpf8FGS~h{vNYk@F>3` zi?EIGybpl%EE-~hU|f>Y^Ep>OT8TY^QJWZ1f-Po@32n`%S#o2)J7h8bYC?h#23#`p zd%&Mh=LWUJL2whw;@+?T>>x7L%ve0yj?QYW0JHu3sk?v$f)#FQo|<42pE45H9ewl^ zY$vFWUk8Mjy~?MUlV(wsz_gvBWi=Cx6N&LMIraXiU`;MN%+NlNHaQkYS3f%VT*d=7 zBuEAT+fIjsfI-c(#zX}pSLNWxzyPqJI1EC9?|HUxFI4VCejOdi^dh9e$O z8bVXmUUVHD^3$1_CfBQvb`K4hI*-3TuX5`eaHzINTr96ltGmf`ccXL$r##a#d{O(v z&$kvQpc2fox36H?o0U&W$EOlMV~KxcA+w%3WYH~72gqe4SJ+le8);Au#jsEg{*qmN zY{y36)dJZH4n%TmG%m-t5}s@I&>q^P2?Fp~yDSM4z|+3^LIW`c086odNO)ub2VL1r zs-`I7k&Wmkl*fZ{h+mApg-zQ*RFe$60=eIfOtlh<3GFXN=`R<|&lS#OfgS_Qcxk!- z6-eS=(;@n4Z)EfNAM^6Nob_5W-*2)R~0 z<5Jro+hM*`QOS~6XRg?)YTg9T#TY3y0RxO-v(>#=k!g;}$9)cKS52K& z(I`PsK$67_Cx)0nu~N7@Hs@(0h`+~X)FB*Ax+o-S8IQD$O4qn)hZbCxCIr5>DQ=D)lA+DM=aT+#Q^1+N0;6w+xX18i1!jXwJHzNkA!mc{n zlAg6GJ$fo)OypzRs4!Kg?18p&*)*glNe(V#V#b7FAsE||dp;w&Adf_De;-ASkdVBo zB5bOM!9~!@n;?juo)d@=wl(*p4X>hocWw$lCh8(Md|uEqcE^#h2Z*sFVeGwaVZ(LJ&hkvqTk4DlZ9^R1D2B`Gm%^LcCyz5-a3qv)IBSi#7`~lOe_pto;@L4Ua^ozxCh#t^a@Ly^U>* z{)hSt=>MgD{B1JU)ke*{IEfB(m97d8H-P0dJ=AHnX2{Hz8UnsGBw?NlSa7^=?Z=v; zseUO7)SF#KNDCk%VU*$K4|F7aNh`v}t62s4avC!OTdagMzdc zvJ#R6Ka=JygbP?)6>C67!a4GymQozGAtfxCF>x9)SoTB-6a0eq@cqx)Z~K?_$^NDN z+5e_}&4jMJtHtZu0`i!XE7xi{C5-@E)Ussb8^0YWV>o@UWHbS456N{!ek-J%`-$Nq~bM`T%bkc^>_27%DIzy9l9wEAH_6kKTW3B@^8U z1^`g;0|4OLJpT37gOi!DwK3g4*MEY=g}SUQvM5TA>X|FXC5{1^OBfM03Ky$60m4v7 z#J(HP77k-aLk1?WyaN#{{W=A8 zoiO@n9+Z8EK^>gvQrVe?9AEd_$-r%!?LglxjpBj@D%*Yyib3_P=CGHp`CgU;y5Kx>;CL{H}CXEw7R?0W|u`O5UtqpkhJSjq71H zbSzl3So~2&qf!dE%4^B=lKk7j+IzO|N8He|=}ps;M@QGi4(#Y&s_D(9WAtH0BwKFW zteY!X74q6;@tosmSi_{k3skQvC52Z+fW>HqWCg~p+GIr&#P&fxGytrT+AKzyxPZt? zsDaJC89wj0j}wv+xWwS8B1q;f9q>Nu$@LGyJ;g zdMPF&bp^s35IX35c*ebv`{~2N@hQchz?N289SdqOOq?_BLT9ezn@j>)MTpLT%=j z2Ai9Uy*ceD%{$GLM&r{ZGUgC$%UCs67oeFM>)6KephIf=tB2ou_h-@T3>pR(Fvfdh z*BSKE8KS0Ou4Y2?gq@3lro%z(mogD6q+GU9_HGNz(dp||&NbTBi60OK=XV%0(iu)g zj>2}Y!`UY#>3cH6MXtmi&?b?KtZOCrwY07iyfGaBjyTSH|3V_$6m95Z!D1(sh8E(* zj7-qdA>Jt4-U^DQXHWtzys~o^+V>^25%F)U3YjOe$^Ct-%R^oFu3dED%-;3e!{i=8 zetH0>_?Q)4@a?MM9t?M69R$nZDa=E5>UwPTeLC^J)90tRM0PzrLSwe@MXvSmmD$w- zPkz+nLQwqp9LyHdRJJ}k+T%~hTjEz5YRFyL&9U6xK2V@c9x=N|NM(JxK}eWOWm#xQ zBTCLV@?9j_NRu|D=HY>znhWKIYC3`x4q_EeFSFFt2M3qs(IJcqAjiB(6dH5D5#?ql zT2!d+u9*6A*0Yth@?mDdh?wRLV;loViqN>@>OKQpX$%X5C;@~+ZAr z>zMk+H0msq2&1r2;>q|YPgYUo#KKAy6YN=^6@wY{5u$vRnWY(nZN7E;1SKWa%mUi+ ztxO||iXHP5zO`K!Bl|iI^{A&zoq}$)=eXGK)gr)?@ed|RoO9W+*aVQ<@d1_o_~)nz ztM<=H6C%e6>j28mw_5ug`;}dPA+aWZV>8JCZV5@hA&tZ)-#R#b9vX0ol@m7=>MA~l zKb9(d*qaLpvtcjgX&3zwF~2_26e#eh2t9V~@L*TeF7(8DXq9hF#Yj4@=%aFZdpkIA ztnWujjvG%SYzJYcstr?u*o!nb^VP{TTL}s`!0yZRa9>m`I_$3ws?$<6@1_?F{@d@Q=SrDjo@j;;5BFQs|-5v!mYtTm-sy-DN;Q?JQyK0bQN%v7T1P zEUwx`DswUO0|~wt3l500&LvUw7KNxNHcdqxQ{XSohdTN_n8AbZ8T7~kPJ7<4DM*mi zuAi6$26JWi(Uvn0hXvv>O7WCAVD!3b>A7Pq`?EQ{k0Ld6k}q+HmyH1rzPO}()3({v z)OHr}LyyyBvA!C>IJh7;zWKv4!>+$ziE$}vB=T{BeRQvKq&5v+2(nX9;Ek94tMmqw z!MGBB;paA>jquH3FdCRKu(J0s9IhC0p*D8!juE;wgSk9wT2i?vuw_euDr2kih&m$Z<4wax%9u{fBWIRjg(A z*%3Z{<~~9xb848)6*UNdmp3};E4!%vXnnsJwAmk^i@#(}((N(iBG4o^8#?_tl%6`m zls&@q^Xp+$-BvW|JC`1CLJZ>}bbzE-_Y3sdwc?Zc#5@p0L<))#`bh{phxYT&ey0pG z1K5NUJbsXj+fQgH!{0{qGw%HCb7b|zKuJH!*copsnt@{$1eKp0$0Uu+L@-(2`{-e0 z1HnY50wlr<{ZAY-sLBq9)l!9QSeeNtOCIHV8fu=kes}H(VYKY?A%Zc8q9FEpcURL2w=U0-@ zp&W7UK0OSWN<2SG?`+W@N@)!W5-R^1NTAisv*e^=`2qP+X^S`lfNIJ9G(*=Zhyb}W zqY4CYohcwX`?xeKxuFT1-wH&M^lJp8>^8vtP>TR}>hgcsQc-8D2U24XXE)RDHdyjjZ%-#c0BncKzK0&Vth%Xtec^3PDZBxZ( z{;u16M^!5Vr5u|(E~A?=&acW9*Lrq=bPvKpkb-UWOE8GRHSMF1nx^j0mC+Gg7z2~h z?(OqcZMM3^6B4|oJ`we~MmI=h+i5bmmIS%-%g8}z51m6h>YaVY{1F*)7niK`Y$=O5 z7&j^og=%=6HmJwrj|Qi9-Y{0wAORf8*O zmSWD&b_C8aGnPfu|E024S%$wHWCQI;?6HDOpblA%hq)_0^DGu^KUZmm;7l&juv8|5}p?n98-)XEbEjaW+Wn)B9*P zju0~6FlNShYpUP$ixf*_*1}zhDTcO0lx1Lu9O`()OJqQv+qq>)boSD*J>odA_!?W} z#>L9?{+2llciq&7HKQNj^?*~TBP(V&vEXNWP7fQ^3b$5= zUx*fZf_{m|;lC!D%U+U;9An=rYWcVoQ66nBFG5<~6Uss*DK)%Bb}j{c77LY^DBrzn zX0REW186rWwK%!!qOsR10*zb5thqLZ1#prDz(4PzjKK-ybM*I;eOff~=H?qWX(RT* zVxdkLI+M>SB{k^)@1N0?Np4zx)%yirxt$I6HcVMc@pu9hZ8b7FRycWQ5p4OdxhjLB$Xc5>>+@Mp^35WD&5tkG6^5n(2>^etD}p>-m? z3fcwU7bG^Ociag1LE6zfUrIF_ws6Ni(KE^cvq^%3PuWoRgcZrqk5SMwZ{AmWqG!GI zVlI-BkZ==3DaF-i!uxXQI9 zailKbJ~ua|cJkS999buIU1e_r5{0=8%pV$5J;VCTcd3|!kc6a3-50*Om zJQ!Pfc0(GKBW82_ntwbTW7-~vP6?t;fXsP+=6>$+z8&H9YUmh^d=ERug%G=o)W(|l zkd`k*FObKza+|m#tAk)nA9ubbj=L4BUMAcr_%+c#>%@(@uWL>UoPF%qtT%=;?oC8% zBauiU3t&mpkcRq-oW2=lkg{nrj~tg>FHk8&9N`(q^OI_5w5?|{0lHu&Tv^PzZ3Zem z)j@Qrb`PL>>s146J&g>MFoqG=AC7U1jc_ybR?S>*uUP5yDh<)qUa5M$C~+PvnhV)UP0{pvcM z6QC77FT>o5IkpS^XQ3{paplktlZP~W$ak*R)bpwU~$!OVf3m1`6KW4&~gZ}%sE^~`5wa#ntoD&iS{M2 zW_xTWC3GC z_etg|;xR_875ogRrWhjRal2o!ZLLTf(Qs%-^UuY|cXa2>7#WD9?K>99V&a@RE-b~>{zqnkP1>K*( z2@`NvkRkpG016pYMW+|EO$gi7KtX&MgDcK@D3q92>V&5@WW$tX%eJU=ZiL2 zygKl&2fHh+KC}Rn07pd4SKhKQg6w{@R&<^^H81E-CkwL%=fuVx}i}E%hfq1!Xna zVaWG8ziyrvn3T}bq>W^juEaY@{@P`oD0;MpqsmW9&umM7( zwt6kL@F{=S;&2Q!;kwV1UwxMQeM{E@9LM%OZa(Qd(p+}YlITuIwbnrrWDB*FGYGYT z?|c7KGBb=jvfo>xE8D2ufpo9K5!iUyKQiY7LCgQujNJhL-EjHW*@5)mz9)7hL(?=d`*UE9R%j%NBDPQa!pRvbtJI240J zE0Nd&#WAsA6WdnC*T`&vpd16RjAi=mVgJI))3_tm;{Y!WF)oYoWBEI9dIrzLzjMhA z1W_?cBK0l0FaJN!_h>pUwOn#1B;V9V?$v6)xBT7Xg197-+%;xW3)ZOLd*>f6xfd-Jdy7xB0h6>CT$5|1!5M}<538^{Zts_2J8%l zB0+kvGBWA>1bYADF3^qeg6LWlK^`hM`RIQC?(%99sOiF4Che1gx)e0`K}H z`g@5-fe$BHF&Hglk|#evBL^vwB_18JtggO}@pwPpb$KgH*#(~TlmX`LmkC3}m!G|k zy^|OuVGsxb@Ub?X6l(!_L4&h7%pB)icS};<-%lz&Zp6)9Ir2?RYaZIcTg00*H5#cG zemxrcXE8G`#6R3Lcf<%P(xv?rlztkS8HnJQsUpOoc-g0vFRNwRH|1RKpO%UYm`3N0 z=r+Yz7AU@yBc^V`APt;k}uq-wHSi$t9L+g9!|24PDj1_fZ%}=ha(5S0w2UMRL&|DMV(AwKkNbP?VxZMU znMgXO={7%57MbUx?ItaOjqe{dJ?zDsWpG-aL2K$osz@o!89gs}|B<=KQ-3tHeE$JJ zln(#^{(myp-*n19pe2ITU1G5f7~Cs)qs4NS)&- ze%RVlrF947xxU{$X=8ndwm#28=doJ@N4;rxWb1Y9b9B zS+NdxHHi5?#jJ&(;8iIl1Au;-EEf=u+B9bt$dP2`#z|t1@7XZp#L9Y6krs%_S0uv> zNut^y$D_IVB!y!Tmow{*OY2B<6p3{xt2d4*k>6oQ$rupPK^mP6O2zyLK*BVkRIS)U z#9(5?if$xl|B1P8D}LcA?&jkDtDIVGc&BrHtnLej8@=qNNDXwob@XxMLfeFQP4;D9 zph);?GaJ;M{1CMj1%w#MsLLn&XfBkDa5VC`4W=Akca`PCtBOqpuRT#;M+u}mF8)Cj z>p{eb0{aifprfxv%H6b$zCv}DW!D602Nm4hxr20}C?1;f$I<8U;5sEklO|ZlIdr0XivQUyi|}NH80r2Fi`zl_1joUg)@Mx)LVw>W1&z z0xhi&q3$?266f}K^r?o(UX5kE&!}*t=GQJz;<5zHA}dWV16c{i5PPhSH`I_w3C>QD zf6R=gHvka)p?n{IaI-^6w0ddY-d-$8;p3A|QWJzzut(_^KYpXf`VX^mnsO{Z2le); zw@CIYx;=YeL_QU7Z~HY}kQ)bG8Yvs4`UKnsfnd_tat;Ph3kU<--)G3t)MwnYVi{A& z(b%Woh4AkJ%nA1_gxhhrh!>YEbHDpdP%%RMVq%yKzrNqUNk;;$Zsr&sX{C@%d98S_ z3%Y)X6PndhmTjqhEp*hSP8*F`IX(tYra6*O@zl9Qw7575cjB}rVUlx{q?5$C)n{$~ zQT45AL3nByZg3#qooY?+%^^WJmDG$8hKb+%2?ZW+= zPd{`ZSFdi?S|7Yf#1lD0_yS z<@v6Z=fC54to6GqC5@weZX`g*hOkfgh#&-&G|an~w$l^34jM#gjA;6c=Zc&e0nw zpk-~hc(27N)+Ix^1LX+0%XTGD8ynz%3+DeY!{@;!EF-o%a_!2-4ttZtcii9Te=WcE zEB}t|29AOHT<>fJ_1Aex1G+Zg__p8D|Dl}Pf_afG5bBNou^_CJ0#2YM`tRz0L4@z$ zsPKP~&dS4{OZklfcF>_eo)XwpKG45O0_+phY|ZXUevYq*<1YO1S=1_f9R~PO`p!)kip0Po5yN_7l{8hz{w)u z%q{v~l3(XCzn^G5%;UrUKQYeG5!lE-WL9_D2dF%j2{3pR(sdBcayRr1H~s(OvWt@i zh{bp|z(}0j|C)&Y!Hd5DwQ&c4Ur8vF_HTqL<#l%rgc1FoI94|He~>av8Xm6n@1(P` zop?6e=_YycIL{@3EO>$)R)I0@G?IuZ@mcP8)*)fSsE1#z6Yu~^LSu%}obt2W1}m`P zUK%`ClJJkpIbcc#tF~X?q{tY@>AQI7A?=>MJ6<B(?kAgPA0i?~8ayL6L3q zP4C$N6Y*w#BTmXU;&@b##~|zuOJa~i*%^q%LiFKgWz`1?ywGVvhxH5)>nL4e#_DQg z%hFv$p-u>y-)Lf%tvj|3WS6a2Gar4@P@|`mtE~f4dBTKDWEdJdesPB#GA3&Li*TNE zdj1@5`z~9u3%J;-rcHlPrT6Y^YucZ8sfx#G;0poR=FLj81zX-Is->j|va&`0@Udv? ziS1s4%}H`eC9<%2`hC&inu(IK)rwD8;V}P0IN|?`a9nEg-cbXyG=@nPZpMwv z6#SY1k z8p@+yOQX$P9owZ-2pdwb*Aw*HM;4C=tL?L?+-9&XBhC(8x~>-Qsy$3$r7vD!DC=SL z%x*l{*vP_+`}w z2EC;)#LYCzX+YEWpa7r75S89EEGTc+un4!y%bkxTjxc4~b?~Giv`g5HCt||fV6_$f zKkb}}H`MzZ$43#8rD-D5U@An}MjC~ZmdQHEn6hNww_)sM9b3XETN!J{K9;h(DNLb| zZ4yQ_>8DbW6hioY{jPg4xAXf8?wm7o&YU@~XSU~ip6B^|-k*1a3ODld&Nus9Tv}1j zh&fWk{8}+0Z0>GH7)|q_avH8R{Ibr%d^wNlid~w_gR!i~i|&Vy6`P zJ{s6jrUQ;Ae1Mw+a8OCs9mA!_K zLBCGUQxCtR>L6(9<=QUXsAlsHWYNJ7KVg#eRjoisHdNZ6ZXl(kBt(bBh%1MSI)8hB z+;}pq6tY9{d`K3-~?c&Idswt6!r!rc2) zt(kg-VSfSZ)cwUAR+EF_H+_b9RXE%)220%ihE;M_#w=y7avkctGf_12sYGI8DZh5$ zM)R-8p8~&a(F^j0^pQa78UfOWO`<0^FN~#?i|twhrzc(|rpZAf-W>JjefE_TdCyTC zDi6(z!xWLC#IJ^&+jV7@w?fC^RZrU#S^1+IJ@AJWoQ9@q_hrLRyuNM|e0qLviUMiQ z6zr(hd4IX*^g7Db30?6>?P%uoCrms_IYO|HO{!bHUP@ZIX5A zu%sTGwh(3Nc&>KaV819ThR0N|dv7w_t1qp;a89rjc9|d*(&vP1d&@Ws;c; z#S@Xith$Ju`wObFTjhPFo|dNTKX18rIc|P-R?OG2_w#ipzsmbHZ8Nab7@wFuKZLDe zBjwmaLv=z*c0)!>uED`8n5BmkNze5|S(~X1@v;X>c_kP$?*;Ej*KqU=sUn8S6L$3y zmC#7_T`)!v8>fk<^YG$Pb;d^=7~%3Z$R8uD@xvwafXBONGxXSeJgzY)XdYhZ&U@?5 z%9mHBWk>s6$3>-C`v{>t6Xlh$b~NmYqI4C0@yPj++i2k@;1_ljR3Mapo9EOaWO$+F zXM`Ei;gOMZa{TF;2KNtVP6?HFwAq245^bx%WoimA3(keS?JRDnI-zm9+;Xnz)wmhQ z5RU-yre%Nb44(8CF)UNJ23vkV2=af?pCbTSwhvf<|2xavyj`tq@xZ?0T9&=W4io8e ze1YXJgKtR9?oPN5k?ys->?OI^(9rPH-1b-xe&@i%$?);g zJ-gCRWjezB+GYlMQPs`vktf6`Y8>n-=14@o%%ODD;$&W> zO0^K69I+wi=q{xiL~PfD6j9npKh)J+&ML_;;`1IcD?>!hWg!b?dgYhnMCrrBMq$F>>2?vhDle{nwN+drF&R{j*-owzv9tu@FHzk|$%X1{KKWM{fhldI@lc{Izu9Yinh&X{$W8r&)75f^P@oAwyZJzIG`2V1-vL z{L;6Bghh~}kI(*28>+Tbi7t*_3^%*hA(|SW3LL^dWBzD+47sPs&Wy5?kk=ehWKb^q zc_^+}G*xb&E{jq%yFO)Q#wvAqSDL+g(XXUp2{q%Y40=Aqq_oA2C9YHQtVH}F1PP;= zsQ?WcZb=o36|ax`E;Bi6c-5SOi|p2SfMrA|S15Z-xJO z+EOQ=BZ=*bNLk!`QkL*nt$V9BuY-YK<)5vPp3L2Of8do#;7Z@UxfQa;;r~}k{_TZ; zOagAPmvnGcxm}NR>A{6~Tw)(*TrtEk?F6@D-(BQnir5Z$60cY&wb7h@_8y(*VM|bV z_nha=AvJ8TaLFEH9eolXB-Dz;Rh^krJFfEh;_dGk4`W9*125JnyYWe#X6>%32muQB z71^c>Y8v(FsgiU*96nZPI3!nwbJyOcHT(j|w1tNBOKL|X*P*pH56u}R}wlBgm&gA)o<)ku4x!Af5AkEef>B`P_$ zaeOcMY5naNy$s6L@7DrKX0xvscuc5hx?}HGKQf>w_a<)%4(i-COHVnJK&%_%q*X|t z`mn#P*1e>9Tn59Nqu14pI2z0A`=yFKx~Z)2dyM;FGHAseR{N1{@dViL=%$F~eJD&8de8^m?u(Znt24+;7MBRZ*2$I_5M8&F!RjK-3AXr zuk%}4J!YP{)Nb$;bo4nweW24AkcgLP2c~oGNh-)2249^<2oN`2cU&Z!K^*| EFGbov4FCWD literal 26248 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