招采管理模块修改

This commit is contained in:
2025-08-21 21:41:20 +08:00
parent dad8a12e11
commit 86945b9122
22 changed files with 148 additions and 32 deletions

View File

@ -16,6 +16,7 @@ import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -63,6 +64,15 @@ public class BusBiddingLimitListController extends BaseController {
return R.ok(busBiddingLimitListService.obtainAllVersionNumbers(bo));
}
/**
* 获取所有版本详细信息
*/
@SaCheckPermission("bidding:biddingLimitList:getVersionDetail")
@GetMapping("/getVersionDetail/{id}")
public R<BusBiddingLimitVersionsVo> getVersionDetail(@NotNull(message = "id不能为空") @PathVariable Long id) {
return R.ok(busBiddingLimitListService.getVersionDetail(id));
}
/**
* 获取指定版本的sheet
*/

View File

@ -41,8 +41,8 @@ public class BusListOfWinningBidsController extends BaseController {
*/
@SaCheckPermission("bidding:listOfWinningBids:list")
@GetMapping("/list")
public TableDataInfo<BusListOfWinningBidsVo> list(BusListOfWinningBidsBo bo, PageQuery pageQuery) {
return busListOfWinningBidsService.queryPageList(bo, pageQuery);
public R<BusListOfWinningBidsVo> list(BusListOfWinningBidsBo bo) {
return R.ok(busListOfWinningBidsService.queryOne(bo));
}
/**
@ -75,7 +75,7 @@ public class BusListOfWinningBidsController extends BaseController {
@Log(title = "中标项目一览", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusListOfWinningBidsBo bo) {
public R<Void> add(@RequestBody BusListOfWinningBidsBo bo) {
return toAjax(busListOfWinningBidsService.insertByBo(bo));
}

View File

@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
@ -84,4 +85,6 @@ public interface IBusBiddingLimitListService extends IService<BusBiddingLimitLis
List<BusBiddingLimitVersionsVo> obtainAllVersionNumbers(BiddingAllVersionNumbersReq bo);
List<String> sheetList(BusBiddingLimitListBo bo);
BusBiddingLimitVersionsVo getVersionDetail(Long id);
}

View File

@ -3,6 +3,7 @@ package org.dromara.bidding.service;
import org.dromara.bidding.domain.vo.BusListOfWinningBidsVo;
import org.dromara.bidding.domain.bo.BusListOfWinningBidsBo;
import org.dromara.bidding.domain.BusListOfWinningBids;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -67,4 +68,6 @@ public interface IBusListOfWinningBidsService extends IService<BusListOfWinningB
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
BusListOfWinningBidsVo queryOne(BusListOfWinningBidsBo bo);
}

View File

@ -23,6 +23,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.utils.excel.ExcelDynamicReader;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -238,6 +239,12 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL
.collect(Collectors.toList());
}
@Override
public BusBiddingLimitVersionsVo getVersionDetail(Long id) {
return busBiddingLimitVersionsService.queryById(id);
}
/**
* 递归构建树形结构
*

View File

@ -1,6 +1,8 @@
package org.dromara.bidding.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -102,7 +104,12 @@ public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinnin
*/
@Override
public Boolean insertByBo(BusListOfWinningBidsBo bo) {
if (bo.getId() == null) {
BusListOfWinningBids add = MapstructUtils.convert(bo, BusListOfWinningBids.class);
Long count = baseMapper.selectCount(new LambdaQueryWrapper<BusListOfWinningBids>().eq(BusListOfWinningBids::getProjectId, bo.getProjectId()));
if (count > 0) {
throw new ServiceException("项目已存在不允许新增");
}
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
@ -110,6 +117,8 @@ public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinnin
}
return flag;
}
return updateByBo(bo);
}
/**
* 修改中标项目一览
@ -145,4 +154,10 @@ public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinnin
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public BusListOfWinningBidsVo queryOne(BusListOfWinningBidsBo bo) {
return baseMapper.selectVoOne(new LambdaQueryWrapper<BusListOfWinningBids>()
.eq(BusListOfWinningBids::getProjectId, bo.getProjectId()));
}
}

View File

@ -63,7 +63,6 @@ public class BusBillofquantitiesLimitListController extends BaseController {
@SaCheckPermission("tender:billofquantitiesLimitList:obtainAllVersionNumbers")
@GetMapping("/obtainAllVersionNumbers")
public R<List<BusBLimitListVersionsVo>> obtainAllVersionNumbers(TenderAllVersionNumbersReq bo) {
bo.setWorkOrderType(LimitListTypeEnum.COMPANY.getCode());
return R.ok(busBillofquantitiesLimitListService.obtainAllVersionNumbers(bo));
}
@ -73,7 +72,7 @@ public class BusBillofquantitiesLimitListController extends BaseController {
@SaCheckPermission("tender:billofquantitiesLimitList:sheetList")
@GetMapping("/sheetList")
public R<List<String>> sheetList(BusBillofquantitiesLimitListBo bo) {
bo.setType(LimitListTypeEnum.COMPANY.getCode());
// bo.setType(LimitListTypeEnum.COMPANY.getCode());
return R.ok(busBillofquantitiesLimitListService.sheetList(bo));
}
@ -96,8 +95,8 @@ public class BusBillofquantitiesLimitListController extends BaseController {
@Log(title = "导入excel", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/importExcelFile")
public R<Void> importExcelFile(Long projectId, @RequestParam("file") MultipartFile file) throws Exception {
return toAjax(busBillofquantitiesLimitListService.importExcelFile(projectId, file));
public R<Void> importExcelFile(BusBillofquantitiesLimitListBo bo, @RequestParam("file") MultipartFile file) throws Exception {
return toAjax(busBillofquantitiesLimitListService.importExcelFile(bo, file));
}
/**

View File

@ -64,6 +64,15 @@ public class BusTenderPlanLimitListController extends BaseController {
return R.ok(busBillofquantitiesLimitListService.obtainAllVersionNumbers(bo));
}
/**
* 获取所有版本详细信息
*/
@SaCheckPermission("tender:tenderPlanLimitList:getVersionDetail")
@GetMapping("/getVersionDetail/{id}")
public R<BusBLimitListVersionsVo> getVersionDetail(Long id) {
return R.ok(busBillofquantitiesLimitListService.getVersionDetail(id));
}
/**
* 获取指定版本的sheet
*/
@ -91,8 +100,8 @@ public class BusTenderPlanLimitListController extends BaseController {
@Log(title = "导入excel", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/importExcelFile")
public R<Void> importExcelFile(Long projectId, @RequestParam("file") MultipartFile file) throws Exception {
return toAjax(busBillofquantitiesLimitListService.importExcelFile(projectId, file));
public R<Void> importExcelFile(BusBillofquantitiesLimitListBo bo, @RequestParam("file") MultipartFile file) throws Exception {
return toAjax(busBillofquantitiesLimitListService.importExcelFile(bo, file));
}
/**

View File

@ -54,6 +54,15 @@ public class TenderSupplierInputController extends BaseController {
return tenderSupplierInputService.queryPageList(bo, pageQuery);
}
/**
* 查询供应商入库列表
*/
@SaCheckPermission("supplierInput:supplierInput:getList")
@GetMapping("/getList")
public R<List<TenderSupplierInputVo>> list(TenderSupplierInputBo bo) {
return R.ok(tenderSupplierInputService.getList(bo));
}
/**
* 导出供应商入库列表
*/

View File

@ -102,5 +102,10 @@ public class BusBiddingPlan extends BaseEntity {
*/
private String winningBidder;
/**
* 中标单位id
*/
private Long winningBidderId;
}

View File

@ -56,7 +56,7 @@ public class BusSegmentedIndicatorPlanning extends BaseEntity {
/**
* 总价
*/
private Long price;
private BigDecimal price;
/**
* 分包内容

View File

@ -104,6 +104,11 @@ public class BusBiddingPlanBo extends BaseEntity {
*/
private Integer status;
/**
* 中标单位id
*/
private Long winningBidderId;
/**
* 限价一览表ids
*/

View File

@ -120,5 +120,10 @@ public class BusBiddingPlanVo implements Serializable {
*/
private String winningBidder;
/**
* 中标单位id
*/
private Long winningBidderId;
}

View File

@ -73,16 +73,18 @@ public class BusBillofquantitiesLimitListVo implements Serializable {
@ExcelProperty(value = "编号")
private String num;
/**
* 类型
*/
@ExcelProperty(value = "类型")
private String type;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String name;
/**
* 类型
*/
private String type;
/**
* 规格

View File

@ -16,5 +16,6 @@ import java.util.List;
public interface BusBillofquantitiesLimitListMapper extends BaseMapperPlus<BusBillofquantitiesLimitList, BusBillofquantitiesLimitListVo> {
//,@Param("type") String type
List<BusBillofquantitiesLimitListVo> selectListBySids(@Param("sids") List<String> sids);
}

View File

@ -94,7 +94,14 @@ public interface IBusBillofquantitiesLimitListService extends IService<BusBillof
* @param file
* @return
*/
Boolean importExcelFile(Long id, MultipartFile file) throws Exception;
Boolean importExcelFile(BusBillofquantitiesLimitListBo id, MultipartFile file) throws Exception;
List<BusBillofquantitiesLimitListVo> getListByIds(List<Long> ids);
/**
* 获取版本详细信息
* @param id
* @return
*/
BusBLimitListVersionsVo getVersionDetail(Long id);
}

View File

@ -70,4 +70,6 @@ ITenderSupplierInputService extends IService<TenderSupplierInput>{
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<TenderSupplierInputVo> getList(TenderSupplierInputBo bo);
}

View File

@ -174,7 +174,6 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl<BusBiddingPlanMapper,
planAnnex.setBiddingPlanId(bo.getId());
List<BusBiddingPlanAnnexVo> planAnnexVoList = busBiddingPlanAnnexService.queryList(planAnnex);
if (planAnnexVoList != null && !planAnnexVoList.isEmpty() ) {
if (!bidFile.isEmpty()){
SysOssUploadVo wordEntity = ossService.uploadWithNoSave(bidFile, ossService.minioFileName(FormalitiesAnnex,bidFile));
update.setBidFile(wordEntity.getUrl());
@ -234,6 +233,9 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl<BusBiddingPlanMapper,
ids.add(planningLimitList.getLimitListId());
}
List<BusBillofquantitiesLimitListVo> billofquantitiesLimitListList = busBillofquantitiesLimitListService.getListByIds(ids);
if (billofquantitiesLimitListList.isEmpty()){
return billofquantitiesLimitListList;
}
List<BusBillofquantitiesLimitListVo> list = billofquantitiesLimitListList.stream().distinct().collect(Collectors.toList());
for (BusBillofquantitiesLimitListVo limitList : list) {
for (BusTenderPlanningLimitList limitList1 : planningLimitListList) {

View File

@ -13,6 +13,7 @@ import org.dromara.common.utils.excel.ExcelDynamicReader;
import org.dromara.tender.domain.bo.BusBLimitListVersionsBo;
import org.dromara.tender.domain.bo.TenderAllVersionNumbersReq;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.dromara.tender.enums.LimitListTypeEnum;
import org.dromara.tender.service.IBusBLimitListVersionsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -161,6 +162,9 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
.forEach(item -> {
item.setPrice(item.getUnitPrice().multiply(item.getQuantity()).setScale(2, RoundingMode.HALF_UP));
});
if (bo.getType().equals(LimitListTypeEnum.SPECIAL.getCode())){
return listVoList;
}
//构建父子映射
Map<String, List<BusBillofquantitiesLimitListVo>> parentMap = listVoList.stream()
@ -195,7 +199,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
}
@Override
public Boolean importExcelFile(Long id, MultipartFile file) throws Exception{
public Boolean importExcelFile(BusBillofquantitiesLimitListBo bo, MultipartFile file) throws Exception{
// 跳过1行表头读取0到6列共7列映射到ExcelData实体类
@ -203,7 +207,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
file, // 上传的文件
1, // 跳过1行表头
0, // 从第0列开始
12, // 到第5列结束
13, // 到第5列结束
BusBillofquantitiesLimitListBo.class // 目标实体类
);
List<BusBillofquantitiesLimitList> busBillofquantities = new ArrayList<BusBillofquantitiesLimitList>();
@ -214,7 +218,8 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
.forEach(item -> {
BusBillofquantitiesLimitList limitList = new BusBillofquantitiesLimitList();
limitList.setId(item.getId());
limitList.setProjectId(id);
limitList.setProjectId(bo.getProjectId());
limitList.setType(bo.getType());
limitList.setUnitPrice(item.getUnitPrice());
busBillofquantities.add(limitList);
});
@ -229,11 +234,19 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
limitListList.forEach(item -> {
sids.add(item.getSid());
});
if (sids.isEmpty()) {
return new ArrayList<>();
}
List<BusBillofquantitiesLimitListVo> listVoList = baseMapper.selectListBySids(sids);
return listVoList;
}
@Override
public BusBLimitListVersionsVo getVersionDetail(Long id) {
return busBLimitListVersionsService.queryById(id);
}
/**
* 递归构建树形结构
* @param parentId 父节点ID顶级节点为0

View File

@ -117,7 +117,7 @@ public class BusSegmentedIndicatorPlanningServiceImpl extends ServiceImpl<BusSeg
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(BusSegmentedIndicatorPlanningBo bo) {
BusSegmentedIndicatorPlanning add = MapstructUtils.convert(bo, BusSegmentedIndicatorPlanning.class);
validEntityBeforeSave(add);
// validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
@ -155,7 +155,7 @@ public class BusSegmentedIndicatorPlanningServiceImpl extends ServiceImpl<BusSeg
@Override
public Boolean updateByBo(BusSegmentedIndicatorPlanningBo bo) {
BusSegmentedIndicatorPlanning update = MapstructUtils.convert(bo, BusSegmentedIndicatorPlanning.class);
validEntityBeforeSave(update);
// validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
@ -165,7 +165,7 @@ public class BusSegmentedIndicatorPlanningServiceImpl extends ServiceImpl<BusSeg
private void validEntityBeforeSave(BusSegmentedIndicatorPlanning entity) {
//TODO 做一些数据校验,如唯一约束
String dictName = entity.getDictName();
BigDecimal contractPrice = entity.getLimitPrice().multiply(new BigDecimal("10000"));
BigDecimal contractPrice = entity.getPrice().multiply(new BigDecimal("10000"));
switch (dictName) {
case "1" -> {
if (contractPrice.compareTo(BigDecimal.valueOf(100000000)) > 0) {
@ -238,6 +238,9 @@ public class BusSegmentedIndicatorPlanningServiceImpl extends ServiceImpl<BusSeg
ids.add(planningLimitList.getLimitListId());
}
List<BusBillofquantitiesLimitListVo> billofquantitiesLimitListList = busBillofquantitiesLimitListService.getListByIds(ids);
if (billofquantitiesLimitListList.isEmpty()) {
return billofquantitiesLimitListList;
}
List<BusBillofquantitiesLimitListVo> list = billofquantitiesLimitListList.stream().distinct().collect(Collectors.toList());
for (BusBillofquantitiesLimitListVo limitList : list) {
for (BusIndicatorPlanningLimitList limitList1 : planningLimitListList) {

View File

@ -91,6 +91,7 @@ public class TenderSupplierInputServiceImpl extends ServiceImpl<TenderSupplierIn
lqw.orderByDesc(TenderSupplierInput::getId);
lqw.eq(StringUtils.isNotBlank(bo.getSupplierType()), TenderSupplierInput::getSupplierType, bo.getSupplierType());
lqw.eq(StringUtils.isNotBlank(bo.getInputFile()), TenderSupplierInput::getInputFile, bo.getInputFile());
lqw.like(StringUtils.isNotBlank(bo.getSupplierName()), TenderSupplierInput::getSupplierName, bo.getSupplierName());
return lqw;
}
@ -165,6 +166,20 @@ public class TenderSupplierInputServiceImpl extends ServiceImpl<TenderSupplierIn
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public List<TenderSupplierInputVo> getList(TenderSupplierInputBo bo) {
LambdaQueryWrapper<TenderSupplierInput> lqw = buildQueryWrapper(bo);
List<TenderSupplierInputVo> tenderSupplierInputVos = baseMapper.selectVoList(lqw);
List<TenderSupplierInputVo> list = new ArrayList<>();
tenderSupplierInputVos.forEach(tenderSupplierInputVo -> {
TenderSupplierInputVo vo = new TenderSupplierInputVo();
vo.setSupplierName(tenderSupplierInputVo.getSupplierName());
vo.setId(tenderSupplierInputVo.getId());
list.add(vo);
});
return list;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)

View File

@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<!-- b.type = #{type} and-->
<select id="selectListBySids" resultType="org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo">
with recursive parent as (
select b.id as id,