diff --git a/core/src/main/java/com/dite/znpt/converts/Converts.java b/core/src/main/java/com/dite/znpt/converts/Converts.java index 8d0f2d0..272e17e 100644 --- a/core/src/main/java/com/dite/znpt/converts/Converts.java +++ b/core/src/main/java/com/dite/znpt/converts/Converts.java @@ -125,6 +125,7 @@ public interface Converts { EquipmentUseRecordEntity toEquipmentUseRecordEntity(EquipmentUseRecordReq req); BiddingInfoEntity toBiddingInfoReq (BiddingInfoReq req); + List toBiddingInfoReq (List req); TenderInfoEntity toTenderInfoEntity (TenderInfoReq req); OutbidInfoEntity toOutbidInfoEntity (OutbidInfoReq req); } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/BiddingInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/BiddingInfoEntity.java index acfd702..349ebbd 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/BiddingInfoEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/BiddingInfoEntity.java @@ -1,5 +1,6 @@ package com.dite.znpt.domain.entity; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/BiddingInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/BiddingInfoReq.java index 25e17fe..54e5aef 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/BiddingInfoReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/BiddingInfoReq.java @@ -1,10 +1,13 @@ package com.dite.znpt.domain.vo; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.io.Serial; import java.io.Serializable; @@ -21,31 +24,46 @@ import java.time.LocalDateTime; public class BiddingInfoReq implements Serializable { @Serial private static final long serialVersionUID = 6967025339487392364L; - + @ColumnWidth(40) + @ExcelProperty(index = 0, value = "招标项目") @ApiModelProperty("招标项目") @Size(max = 50, message = "招标项目不能超过50个字符") private String biddingProject; + @ColumnWidth(40) + @ExcelProperty(index = 1, value = "招标公司") @ApiModelProperty("招标公司") @Size(max = 50, message = "招标公司不能超过50个字符") private String biddingCompany; + @ColumnWidth(20) + @ExcelProperty(index = 2, value = "招标金额\n(单位元,精确到分)") @ApiModelProperty("招标金额") private BigDecimal biddingAmount; + @ColumnWidth(30) + @ExcelProperty(index = 3, value = "招标截止时间\n(yyyy-MM-dd HH:mm:ss)") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("招标截止时间") private LocalDateTime biddingDeadline; + @ColumnWidth(30) + @ExcelProperty(index = 4, value = "信息录入时间\n(yyyy-MM-dd HH:mm:ss)") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("信息录入时间") private LocalDateTime infoEntryTime; + @ColumnWidth(20) + @ExcelProperty(index = 5, value = "信息来源") @ApiModelProperty("信息来源") + @NotBlank(message = "信息来源不能为空") @Size(max = 50, message = "信息来源不能超过50个字符") private String source; + @ColumnWidth(60) + @ExcelProperty(index = 6, value = "信息来源网址") @ApiModelProperty("信息来源网址") + @NotBlank(message = "信息来源网址不能为空") @Size(max = 100, message = "信息来源网址不能超过100个字符") private String sourceWebsite; } diff --git a/core/src/main/java/com/dite/znpt/service/BiddingInfoService.java b/core/src/main/java/com/dite/znpt/service/BiddingInfoService.java index b7dc2e3..b4d67d0 100644 --- a/core/src/main/java/com/dite/znpt/service/BiddingInfoService.java +++ b/core/src/main/java/com/dite/znpt/service/BiddingInfoService.java @@ -1,9 +1,11 @@ package com.dite.znpt.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.Result; import com.dite.znpt.domain.entity.BiddingInfoEntity; import com.dite.znpt.domain.vo.BiddingInfoReq; import com.dite.znpt.domain.vo.BiddingInfoResp; +import org.springframework.validation.BindingResult; import java.util.List; @@ -20,4 +22,5 @@ public interface BiddingInfoService extends IService { void update(String biddingInfoId, BiddingInfoReq req); void uploadBiddingInfoFile(String biddingInfoId, String biddingFileId); void apply(String biddingInfoId); + Result importData(List dataList, BindingResult bindingResult); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/BiddingInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/BiddingInfoServiceImpl.java index 9813981..52e974b 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/BiddingInfoServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/BiddingInfoServiceImpl.java @@ -1,9 +1,11 @@ package com.dite.znpt.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Message; import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.Result; import com.dite.znpt.domain.entity.AttachInfoEntity; import com.dite.znpt.domain.entity.BiddingInfoEntity; import com.dite.znpt.domain.vo.BiddingInfoReq; @@ -13,11 +15,16 @@ import com.dite.znpt.mapper.BiddingInfoMapper; import com.dite.znpt.service.AttachInfoService; import com.dite.znpt.service.BiddingInfoService; import com.dite.znpt.util.PageUtil; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.BindingResult; import javax.annotation.Resource; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author Bear.G @@ -87,4 +94,19 @@ public class BiddingInfoServiceImpl extends ServiceImpl importData(List dataList, BindingResult bindingResult) { + List sourceWebsites = dataList.stream().map(BiddingInfoReq::getSourceWebsite).distinct().toList(); + if(sourceWebsites.size() != dataList.size()){ + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败,存在重复数据"); + } + List existSourceWebsites = this.list().stream().map(BiddingInfoEntity::getSourceWebsite).toList(); + if(CollUtil.containsAny(existSourceWebsites, sourceWebsites)){ + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败,存在重复数据"); + } + this.saveBatch(Converts.INSTANCE.toBiddingInfoReq(dataList)); + return Result.okM("导入"+ dataList.size()+"条数据"); + } } diff --git a/web/src/main/java/com/dite/znpt/web/controller/BiddingInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/BiddingInfoController.java index 0571295..4445c13 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/BiddingInfoController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/BiddingInfoController.java @@ -5,8 +5,11 @@ import com.dite.znpt.domain.Result; import com.dite.znpt.domain.vo.BiddingInfoReq; import com.dite.znpt.domain.vo.BiddingInfoResp; import com.dite.znpt.service.BiddingInfoService; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -64,4 +67,19 @@ public class BiddingInfoController { biddingInfoService.apply(biddingInfoId); return Result.ok(); } + + + @ApiOperation(value = "下载导入模板", httpMethod = "GET") + @GetMapping("/download-template") + @ResponseExcel(name = "招标信息导入模板") + public List downloadTemplate() { + return List.of(new BiddingInfoReq()); + } + + @ApiOperation(value = "导入招标信息", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + return biddingInfoService.importData(dataList, bindingResult); + } + }