招标信息模板下载和招标信息导入

This commit is contained in:
高雄 2025-08-01 18:27:05 +08:00 committed by 何德超
parent 4cd953ff08
commit 345b931de9
6 changed files with 64 additions and 1 deletions

View File

@ -125,6 +125,7 @@ public interface Converts {
EquipmentUseRecordEntity toEquipmentUseRecordEntity(EquipmentUseRecordReq req);
BiddingInfoEntity toBiddingInfoReq (BiddingInfoReq req);
List<BiddingInfoEntity> toBiddingInfoReq (List<BiddingInfoReq> req);
TenderInfoEntity toTenderInfoEntity (TenderInfoReq req);
OutbidInfoEntity toOutbidInfoEntity (OutbidInfoReq req);
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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<BiddingInfoEntity> {
void update(String biddingInfoId, BiddingInfoReq req);
void uploadBiddingInfoFile(String biddingInfoId, String biddingFileId);
void apply(String biddingInfoId);
Result<?> importData(List<BiddingInfoReq> dataList, BindingResult bindingResult);
}

View File

@ -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<BiddingInfoMapper, Biddi
entity.setStatus("1");
this.updateById(entity);
}
@Transactional(rollbackFor = Exception.class)
@Override
public Result<?> importData(List<BiddingInfoReq> dataList, BindingResult bindingResult) {
List<String> sourceWebsites = dataList.stream().map(BiddingInfoReq::getSourceWebsite).distinct().toList();
if(sourceWebsites.size() != dataList.size()){
return Result.error(Constants.SERVICE_EXCEPTION, "导入失败,存在重复数据");
}
List<String> 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()+"条数据");
}
}

View File

@ -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<BiddingInfoReq> dataList, BindingResult bindingResult) {
return biddingInfoService.importData(dataList, bindingResult);
}
}