bug修改

This commit is contained in:
2025-08-25 19:55:25 +08:00
parent 8e07ecc69b
commit 126fdeb6ba
18 changed files with 182 additions and 60 deletions

View File

@ -88,7 +88,7 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL
private LambdaQueryWrapper<BusBiddingLimitList> buildQueryWrapper(BusBiddingLimitListBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusBiddingLimitList> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusBiddingLimitList::getId);
lqw.orderByAsc(BusBiddingLimitList::getSid);
lqw.eq(bo.getProjectId() != null, BusBiddingLimitList::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getVersions()), BusBiddingLimitList::getVersions, bo.getVersions());
lqw.eq(StringUtils.isNotBlank(bo.getSheet()), BusBiddingLimitList::getSheet, bo.getSheet());
@ -172,9 +172,43 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL
//递归组装树形结构
List<BusBiddingLimitListVo> treeList = buildTree("0", parentMap);
for (BusBiddingLimitListVo item : treeList) {
calculateTreePrice(item);
}
return treeList;
}
/**
* 递归计算树形结构中每个节点的 price 字段:
* - 叶子节点price = quantity * unitPrice
* - 非叶子节点price = 所有子节点 price 的总和
*/
public void calculateTreePrice(BusBiddingLimitListVo node) {
if (node == null) return;
// 先处理所有子节点
for (BusBiddingLimitListVo child : node.getChildren()) {
calculateTreePrice(child);
}
// 如果是叶子节点,计算 price = quantity * unitPrice
if (node.getChildren().isEmpty()) {
if (node.getQuantity() != null && node.getUnitPrice() != null) {
node.setPrice(node.getQuantity().multiply(node.getUnitPrice()));
} else {
node.setPrice(BigDecimal.ZERO); // 默认值
}
} else {
// 非叶子节点:累加子节点的 price
BigDecimal totalPrice = node.getChildren().stream()
.map(BusBiddingLimitListVo::getPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.HALF_UP);
node.setPrice(totalPrice);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean importExcelFile(Long projectId, MultipartFile file) {

View File

@ -151,9 +151,8 @@ public class BusBiddingLimitVersionsServiceImpl extends ServiceImpl<BusBiddingLi
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("物资设备清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
String split = id.split("_")[0];
LambdaQueryWrapper<BusBiddingLimitVersions> eq = new LambdaQueryWrapper<BusBiddingLimitVersions>()
.eq(BusBiddingLimitVersions::getVersions, split);
.eq(BusBiddingLimitVersions::getId, id);
BusBiddingLimitVersions busBiddingLimitVersions = new BusBiddingLimitVersions();
busBiddingLimitVersions.setStatus(processEvent.getStatus());
boolean update = this.update(busBiddingLimitVersions, eq);

View File

@ -42,9 +42,6 @@ public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinnin
@Autowired
private ISysOssService ossService;
// @Autowired
// private ICtrIncomeContractService ctrIncomeContractService;
/**
* 查询中标项目一览
*
@ -99,17 +96,6 @@ public class BusListOfWinningBidsServiceImpl extends ServiceImpl<BusListOfWinnin
*/
@Override
public Boolean insertByBo(BusListOfWinningBidsBo bo) {
// if ("0".equals(bo.getWhetherBid()) && bo.getBidFileId() != null ) {
// SysOssVo ossVo = ossService.getById(bo.getBidFileId());
// bo.setBidFileName(ossVo.getOriginalName());
// bo.setBidFile(ossVo.getUrl());
//// CtrIncomeContract ctrIncomeContract = new CtrIncomeContract();
//// ctrIncomeContract.setContractName(bo.getProjectName());
//// ctrIncomeContract.setContractOwner(bo.getTenderer());
//// ctrIncomeContract.setProjectId(bo.getProjectId());
//// ctrIncomeContractService.save(ctrIncomeContract);
// }
if (bo.getId() == null) {
BusListOfWinningBids add = MapstructUtils.convert(bo, BusListOfWinningBids.class);
validEntityBeforeSave(add);

View File

@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.formalities.domain.bo.BusListOfFormalitiesBo;
import org.dromara.formalities.domain.vo.BusListOfFormalitiesVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -52,6 +54,16 @@ public class BusFormalitiesAreConsolidatedController extends BaseController {
return R.ok(list);
}
/**
* 查询手续办理清单模板列表
*/
@SaCheckPermission("formalities:formalitiesAreConsolidated:getTree")
@GetMapping("/getTree")
public R<List<BusListOfFormalitiesVo>> getTree(BusFormalitiesAreConsolidatedBo bo) {
List<BusListOfFormalitiesVo> vo = busFormalitiesAreConsolidatedService.getFormalitieTree(bo);
return R.ok(vo);
}
@SaCheckPermission("formalities:formalitiesAreConsolidated:list")
@GetMapping("/getWhetherItExists")
public R<Boolean> getWhetherItExists(BusFormalitiesAreConsolidatedBo bo) {

View File

@ -3,7 +3,6 @@ package org.dromara.formalities.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
@ -15,7 +14,6 @@ import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.formalities.domain.vo.BusListOfFormalitiesVo;
import org.dromara.formalities.domain.bo.BusListOfFormalitiesBo;
import org.dromara.formalities.service.IBusListOfFormalitiesService;
@ -48,7 +46,7 @@ public class BusListOfFormalitiesController extends BaseController {
@SaCheckPermission("formalities:listOfFormalities:list")
@GetMapping("/list")
public R<List<BusListOfFormalitiesVo>> list(BusListOfFormalitiesBo bo) {
List<BusListOfFormalitiesVo> vo = busListOfFormalitiesService.getTree(bo);
List<BusListOfFormalitiesVo> vo = busListOfFormalitiesService.getTreeList(bo);
return R.ok(vo);
}

View File

@ -95,5 +95,10 @@ public class BusFormalitiesAreConsolidated extends BaseEntity {
*/
private String remark;
/**
* 手续办理清单模板创建时间
*/
private Date createPTime;
}

View File

@ -10,6 +10,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.formalities.domain.BusFormalitiesAreConsolidated;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
@ -92,6 +93,11 @@ public class BusFormalitiesAreConsolidatedBo extends BaseEntity {
*/
private String remark;
/**
* 手续办理清单模板创建时间
*/
private Date createPTime;
/**
* 选择的模板id
*/

View File

@ -109,6 +109,11 @@ public class BusFormalitiesAreConsolidatedVo implements Serializable {
@ExcelProperty(value = "备注")
private String remark;
/**
* 手续办理清单模板创建时间
*/
private Date createPTime;
private List<BusFormalitiesAreConsolidatedVo> children = new ArrayList<>();

View File

@ -46,4 +46,6 @@ public class BusListOfFormalitiesVo implements Serializable {
private List<BusListOfFormalitiesVo> children = new ArrayList<>();
private Integer status;
}

View File

@ -7,7 +7,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.springframework.web.multipart.MultipartFile;
import org.dromara.formalities.domain.vo.BusListOfFormalitiesVo;
import java.util.Collection;
import java.util.List;
@ -80,4 +80,11 @@ public interface IBusFormalitiesAreConsolidatedService extends IService<BusForma
Boolean getWhetherItExists(BusFormalitiesAreConsolidatedBo bo);
List<BusFormalitiesAreConsolidatedVo> getTree(BusFormalitiesAreConsolidatedBo bo);
/**
* 获取模板列表数据并赋状态
* @param bo
* @return
*/
List<BusListOfFormalitiesVo> getFormalitieTree(BusFormalitiesAreConsolidatedBo bo);
}

View File

@ -1,5 +1,6 @@
package org.dromara.formalities.service;
import org.dromara.formalities.domain.BusFormalitiesAreConsolidated;
import org.dromara.formalities.domain.vo.BusListOfFormalitiesVo;
import org.dromara.formalities.domain.bo.BusListOfFormalitiesBo;
import org.dromara.formalities.domain.BusListOfFormalities;
@ -7,7 +8,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 java.util.Collection;
import java.util.List;
/**
@ -70,8 +71,17 @@ public interface IBusListOfFormalitiesService extends IService<BusListOfFormalit
/**
* 获取树形结构数据
*
* @param bo
* @param busFormalitiesAreConsolidateds
* @return
*/
List<BusListOfFormalitiesVo> getTree(BusListOfFormalitiesBo bo, List<BusFormalitiesAreConsolidated> busFormalitiesAreConsolidateds);
/**
* 列表获取树形结构数据
* @param bo
* @return
*/
List<BusListOfFormalitiesVo> getTree(BusListOfFormalitiesBo bo);
List<BusListOfFormalitiesVo> getTreeList(BusListOfFormalitiesBo bo);
}

View File

@ -15,7 +15,9 @@ import org.dromara.formalities.domain.BusFormalitiesAreConsolidated;
import org.dromara.formalities.domain.BusListOfFormalities;
import org.dromara.formalities.domain.bo.AddBusFormalitiesAreConsolidatedBo;
import org.dromara.formalities.domain.bo.BusFormalitiesAreConsolidatedBo;
import org.dromara.formalities.domain.bo.BusListOfFormalitiesBo;
import org.dromara.formalities.domain.vo.BusFormalitiesAreConsolidatedVo;
import org.dromara.formalities.domain.vo.BusListOfFormalitiesVo;
import org.dromara.formalities.enums.FormalitiesStatusEnum;
import org.dromara.formalities.mapper.BusFormalitiesAreConsolidatedMapper;
import org.dromara.formalities.service.IBusFormalitiesAnnexService;
@ -25,9 +27,6 @@ import org.dromara.formalities.utils.TreeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
/**
@ -93,11 +92,23 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
return TreeUtil.buildTree1(voList);
}
@Override
public List<BusListOfFormalitiesVo> getFormalitieTree(BusFormalitiesAreConsolidatedBo bo) {
//获取已存在的模板id
List<BusFormalitiesAreConsolidated> busFormalitiesAreConsolidateds = baseMapper.selectList(new LambdaQueryWrapper<BusFormalitiesAreConsolidated>()
.select(BusFormalitiesAreConsolidated::getFormalitiesId)
.eq(BusFormalitiesAreConsolidated::getProjectId, bo.getProjectId()));
//获取模板列表并过滤
List<BusListOfFormalitiesVo> tree = busListOfFormalitiesService.getTree(new BusListOfFormalitiesBo(),busFormalitiesAreConsolidateds);
return tree;
}
private LambdaQueryWrapper<BusFormalitiesAreConsolidated> buildQueryWrapper(BusFormalitiesAreConsolidatedBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusFormalitiesAreConsolidated> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(BusFormalitiesAreConsolidated::getCreateTime);
lqw.orderByAsc(BusFormalitiesAreConsolidated::getCreatePTime);
lqw.orderByAsc(BusFormalitiesAreConsolidated::getCreateTime);
lqw.eq(bo.getProjectId() != null, BusFormalitiesAreConsolidated::getProjectId, bo.getProjectId());
lqw.eq(bo.getFormalitiesPid() != null, BusFormalitiesAreConsolidated::getFormalitiesPid, bo.getFormalitiesPid());
lqw.eq(bo.getFormalitiesId() != null, BusFormalitiesAreConsolidated::getFormalitiesId, bo.getFormalitiesId());
@ -120,13 +131,16 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
List<AddBusFormalitiesAreConsolidatedBo> addBusFormalitiesAreConsolidatedBos = bo.getAddBusFormalitiesAreConsolidatedBos();
List<BusFormalitiesAreConsolidated> list = new ArrayList<>();
Set<Long> ids = new HashSet<>();
//遍历所选择的模板id对象
addBusFormalitiesAreConsolidatedBos.forEach(addBusFormalitiesAreConsolidatedBo -> {
BusFormalitiesAreConsolidated busFormalitiesAreConsolidated = new BusFormalitiesAreConsolidated();
busFormalitiesAreConsolidated.setFormalitiesId(addBusFormalitiesAreConsolidatedBo.getFormalitiesId());
BusListOfFormalities ofFormalities = busListOfFormalitiesService.getById(addBusFormalitiesAreConsolidatedBo.getFormalitiesId());
if (ofFormalities != null) {
busFormalitiesAreConsolidated.setFormalitiesName(ofFormalities.getName());
busFormalitiesAreConsolidated.setCreatePTime(ofFormalities.getCreateTime());
}
//父模板id不为空时获取父模板名称并将id放入集合
if (addBusFormalitiesAreConsolidatedBo.getFormalitiesPid() != null) {
busFormalitiesAreConsolidated.setFormalitiesPid(addBusFormalitiesAreConsolidatedBo.getFormalitiesPid());
ids.add(addBusFormalitiesAreConsolidatedBo.getFormalitiesPid());
@ -139,6 +153,7 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
busFormalitiesAreConsolidated.setProcessingStatus(FormalitiesStatusEnum.TOSTART.getText());
list.add(busFormalitiesAreConsolidated);
});
//生成父模板id的合规性手续合账数据
for (Long id : ids) {
BusListOfFormalities formalities = busListOfFormalitiesService.getById(id);
if (formalities != null) {
@ -147,16 +162,11 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
busFormalitiesAreConsolidated.setFormalitiesName(formalities.getName());
busFormalitiesAreConsolidated.setProjectId(bo.getProjectId());
busFormalitiesAreConsolidated.setStatus(1);
busFormalitiesAreConsolidated.setCreatePTime(formalities.getCreateTime());
list.add(busFormalitiesAreConsolidated);
}
}
// BusFormalitiesAreConsolidated add = MapstructUtils.convert(bo, BusFormalitiesAreConsolidated.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
return baseMapper.insertBatch(list);
}
@ -171,7 +181,6 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
bo.setProcessingStatus(FormalitiesStatusEnum.PROCESSING.getText());
BusFormalitiesAreConsolidated update = MapstructUtils.convert(bo, BusFormalitiesAreConsolidated.class);
// validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
@ -180,9 +189,6 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
*/
private void validEntityBeforeSave(BusFormalitiesAreConsolidated entity) {
//TODO 做一些数据校验,如唯一约束
// if (entity.getStatus() == 1){
// throw new ServiceException("已完成不允许修改!!!");
// }
if (!FormalitiesStatusEnum.TOSTART.getText().equals(entity.getProcessingStatus())
&& !FormalitiesStatusEnum.PROCESSING.getText().equals(entity.getProcessingStatus())
&& !FormalitiesStatusEnum.DELETE.getText().equals(entity.getProcessingStatus())) {
@ -214,12 +220,6 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
if (busFormalitiesAreConsolidated == null) {
throw new ServiceException("数据不存在");
}
// if (busFormalitiesAreConsolidated.getProcessingStatus() == null) {
// throw new ServiceException("办理状态为空不能提交");
// }
// if (FormalitiesStatusEnum.DELETE.getText().equals(busFormalitiesAreConsolidated.getProcessingStatus())){
// throw new ServiceException("办理状态为已完成才能提交");
// }
busFormalitiesAreConsolidated.setProcessingStatus(bo.getProcessingStatus());
if (FormalitiesStatusEnum.DELETE.getText().equals(busFormalitiesAreConsolidated.getProcessingStatus())) {
@ -241,8 +241,6 @@ public class BusFormalitiesAreConsolidatedServiceImpl extends ServiceImpl<BusFor
busFormalitiesAreConsolidated.setActualCompletionTime(null);
}
validEntityBeforeSave(busFormalitiesAreConsolidated);
// busFormalitiesAreConsolidated.setStatus(1);
// BusFormalitiesAreConsolidated update = MapstructUtils.convert(bo, BusFormalitiesAreConsolidated.class);
return baseMapper.updateById(busFormalitiesAreConsolidated) > 0;
}

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.formalities.domain.BusFormalitiesAreConsolidated;
import org.dromara.formalities.utils.TreeUtil;
import org.springframework.stereotype.Service;
import org.dromara.formalities.domain.bo.BusListOfFormalitiesBo;
@ -20,7 +21,9 @@ import org.dromara.formalities.service.IBusListOfFormalitiesService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 手续办理清单模板Service业务层处理
@ -61,11 +64,33 @@ public class BusListOfFormalitiesServiceImpl extends ServiceImpl<BusListOfFormal
/**
* 获取树形结构数据
*
* @param bo
* @param busFormalitiesAreConsolidateds
* @return
*/
@Override
public List<BusListOfFormalitiesVo> getTree(BusListOfFormalitiesBo bo) {
public List<BusListOfFormalitiesVo> getTree(BusListOfFormalitiesBo bo, List<BusFormalitiesAreConsolidated> busFormalitiesAreConsolidateds) {
List<BusListOfFormalitiesVo> voList = queryList(bo);
// 预处理数据
Set<Long> consolidatedIds = busFormalitiesAreConsolidateds.stream()
.map(BusFormalitiesAreConsolidated::getFormalitiesId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 单层循环判断
for (BusListOfFormalitiesVo vo : voList) {
if (consolidatedIds.contains(vo.getId())) {
vo.setStatus(1);
} else {
vo.setStatus(0);
}
}
return TreeUtil.buildTree(voList);
}
@Override
public List<BusListOfFormalitiesVo> getTreeList(BusListOfFormalitiesBo bo) {
List<BusListOfFormalitiesVo> voList = queryList(bo);
return TreeUtil.buildTree(voList);
}
@ -125,6 +150,9 @@ public class BusListOfFormalitiesServiceImpl extends ServiceImpl<BusListOfFormal
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusListOfFormalities entity){
if (entity.getName() == null || entity.getName().isEmpty()) {
throw new ServiceException("名称不能为空!!");
}
//TODO 做一些数据校验,如唯一约束
Long count = baseMapper.selectCount(new LambdaQueryWrapper<BusListOfFormalities>().eq(BusListOfFormalities::getName, entity.getName()));
if(count > 0){

View File

@ -68,9 +68,9 @@ public class BusTenderPlanLimitListController extends BaseController {
* 获取所有版本详细信息
*/
@SaCheckPermission("tender:tenderPlanLimitList:getVersionDetail")
@GetMapping("/getVersionDetail")
public R<BusBLimitListVersionsVo> getVersionDetail(BusBillofquantitiesLimitListBo bo) {
return R.ok(busBillofquantitiesLimitListService.getVersionDetail(bo.getVersions()));
@GetMapping("/getVersionDetail/{id}")
public R<BusBLimitListVersionsVo> getVersionDetail(@NotNull(message = "id不能为空") @PathVariable Long id) {
return R.ok(busBillofquantitiesLimitListService.getVersionDetail(id));
}
/**

View File

@ -1,5 +1,6 @@
package org.dromara.tender.service;
import jakarta.validation.constraints.NotNull;
import org.dromara.tender.domain.bo.TenderAllVersionNumbersReq;
import org.dromara.tender.domain.vo.BusBLimitListVersionsVo;
import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo;
@ -104,5 +105,5 @@ public interface IBusBillofquantitiesLimitListService extends IService<BusBillof
* @param versions
* @return
*/
BusBLimitListVersionsVo getVersionDetail(String versions);
BusBLimitListVersionsVo getVersionDetail(Long versions);
}

View File

@ -159,9 +159,8 @@ public class BusBLimitListVersionsServiceImpl extends ServiceImpl<BusBLimitListV
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("物资设备清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
String bus = id.split("_")[0];
LambdaQueryWrapper<BusBLimitListVersions> eq = new LambdaQueryWrapper<BusBLimitListVersions>()
.eq(BusBLimitListVersions::getVersions, bus);
.eq(BusBLimitListVersions::getId, id);
BusBLimitListVersions busBLimitListVersions = new BusBLimitListVersions();
busBLimitListVersions.setStatus(processEvent.getStatus());
baseMapper.update(busBLimitListVersions, eq);
@ -205,9 +204,8 @@ public class BusBLimitListVersionsServiceImpl extends ServiceImpl<BusBLimitListV
public void processPlansHandlErequipmentList1(ProcessEvent processEvent) {
log.info("物资设备清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
String bus = id.split("_")[0];
LambdaQueryWrapper<BusBLimitListVersions> eq = new LambdaQueryWrapper<BusBLimitListVersions>()
.eq(BusBLimitListVersions::getVersions, bus);
.eq(BusBLimitListVersions::getId, id);
BusBLimitListVersions busBLimitListVersions = new BusBLimitListVersions();
busBLimitListVersions.setStatus(processEvent.getStatus());
baseMapper.update(busBLimitListVersions, eq);
@ -251,9 +249,8 @@ public class BusBLimitListVersionsServiceImpl extends ServiceImpl<BusBLimitListV
public void processPlansHandlErequipmentList2(ProcessEvent processEvent) {
log.info("物资设备清单审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
String bus = id.split("_")[0];
LambdaQueryWrapper<BusBLimitListVersions> eq = new LambdaQueryWrapper<BusBLimitListVersions>()
.eq(BusBLimitListVersions::getVersions, bus);
.eq(BusBLimitListVersions::getId, id);
BusBLimitListVersions busBLimitListVersions = new BusBLimitListVersions();
busBLimitListVersions.setStatus(processEvent.getStatus());
baseMapper.update(busBLimitListVersions, eq);

View File

@ -153,6 +153,7 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl<BusBiddingPlanMapper,
BusTenderPlanningLimitList busTenderPlanningLimitList = new BusTenderPlanningLimitList();
busTenderPlanningLimitList.setLimitListId(limitListBo.getLimitListId());
busTenderPlanningLimitList.setBiddingPlanId(bo.getId());
//获取招标计划-限价一览的数量
BigDecimal count = busTenderPlanningLimitListMapper.getLimitCoount(limitListBo.getLimitListId());
BusBillofquantitiesLimitListVo busBillofquantitiesLimitListVo = busBillofquantitiesLimitListService.queryById(limitListBo.getLimitListId());
if (busBillofquantitiesLimitListVo == null) {

View File

@ -1,6 +1,7 @@
package org.dromara.tender.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@ -173,7 +174,9 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
.collect(Collectors.groupingBy(BusBillofquantitiesLimitListVo::getPid));
//递归组装树形结构
List<BusBillofquantitiesLimitListVo> treeList = buildTree("0", parentMap);
for (BusBillofquantitiesLimitListVo item : treeList) {
calculateTreePrice(item);
}
return treeList;
}
@ -245,8 +248,8 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
}
@Override
public BusBLimitListVersionsVo getVersionDetail(String versions) {
return busBLimitListVersionsService.queryByVersion(versions);
public BusBLimitListVersionsVo getVersionDetail(Long id) {
return busBLimitListVersionsService.queryById(id);
}
/**
@ -272,4 +275,34 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
return children;
}
/**
* 递归计算树形结构中每个节点的 price 字段:
* - 叶子节点price = quantity * unitPrice
* - 非叶子节点price = 所有子节点 price 的总和
*/
public void calculateTreePrice(BusBillofquantitiesLimitListVo node) {
if (node == null) return;
// 先处理所有子节点
for (BusBillofquantitiesLimitListVo child : node.getChildren()) {
calculateTreePrice(child);
}
// 如果是叶子节点,计算 price = quantity * unitPrice
if (node.getChildren().isEmpty()) {
if (node.getQuantity() != null && node.getUnitPrice() != null) {
node.setPrice(node.getQuantity().multiply(node.getUnitPrice()));
} else {
node.setPrice(BigDecimal.ZERO); // 默认值
}
} else {
// 非叶子节点:累加子节点的 price
BigDecimal totalPrice = node.getChildren().stream()
.map(BusBillofquantitiesLimitListVo::getPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.HALF_UP);
node.setPrice(totalPrice);
}
}
}