diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusBillofquantitiesVersionsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusBillofquantitiesVersionsController.java index 637c6678..24e67bf9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusBillofquantitiesVersionsController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/BusBillofquantitiesVersionsController.java @@ -1,28 +1,30 @@ package org.dromara.design.controller; -import java.io.IOException; -import java.util.List; - -import com.baomidou.mybatisplus.annotation.TableField; -import lombok.RequiredArgsConstructor; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.design.domain.BusBillofquantities; -import org.dromara.design.domain.bo.*; -import org.dromara.design.domain.vo.DetailsMaterialAndEquipmentApprovalRes; -import org.dromara.design.domain.vo.ObtainTheListRes; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.core.domain.R; import org.dromara.common.log.enums.BusinessType; -import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; -import org.dromara.design.service.IBusBillofquantitiesVersionsService; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.design.domain.bo.ImportExcelFileReq; +import org.dromara.design.domain.bo.ObtainAllVersionNumbersReq; +import org.dromara.design.domain.bo.ObtainTheListReq; +import org.dromara.design.domain.bo.SheetListReq; +import org.dromara.design.domain.vo.BusBillofquantitiesMaterialTotalVo; +import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; +import org.dromara.design.domain.vo.DetailsMaterialAndEquipmentApprovalRes; +import org.dromara.design.domain.vo.ObtainTheListRes; +import org.dromara.design.service.IBusBillofquantitiesVersionsService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.List; + /** * 工程量清单版本 * @@ -45,7 +47,7 @@ public class BusBillofquantitiesVersionsController extends BaseController { @RepeatSubmit() @PostMapping("/importExcelFile") public R importExcelFile(ImportExcelFileReq bo, @RequestParam("file") MultipartFile file) throws Exception { - return toAjax(busBillofquantitiesVersionsService.importExcelFile(bo,file)); + return toAjax(busBillofquantitiesVersionsService.importExcelFile(bo, file)); } /** @@ -57,6 +59,16 @@ public class BusBillofquantitiesVersionsController extends BaseController { return busBillofquantitiesVersionsService.obtainAllVersionNumbers(bo, pageQuery); } + /** + * 获取物资设备清单总数据 + */ + @SaCheckPermission("design:billofquantitiesVersions:materialTotal") + @GetMapping("/materialTotal/{projectId}") + public R> queryMaterialTotalListByProject(@NotNull(message = "项目主键不能为空") + @PathVariable Long projectId) { + return R.ok(busBillofquantitiesVersionsService.queryMaterialTotalListByProject(projectId)); + } + /** * 获取指定版本的sheet */ @@ -85,9 +97,6 @@ public class BusBillofquantitiesVersionsController extends BaseController { } - - - // /** // * 导入物资设备清单 // */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/BusBillofquantitiesMaterialTotalVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/BusBillofquantitiesMaterialTotalVo.java new file mode 100644 index 00000000..5f6cc2b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/BusBillofquantitiesMaterialTotalVo.java @@ -0,0 +1,37 @@ +package org.dromara.design.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-08-19 21:26 + */ +@Data +public class BusBillofquantitiesMaterialTotalVo implements Serializable { + @Serial + private static final long serialVersionUID = -617143782154146988L; + + /** + * 名称 + */ + private String name; + + /** + * 规格 + */ + private String specification; + + /** + * 单位 + */ + private String unit; + + /** + * 数量 + */ + private BigDecimal quantity; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IBusBillofquantitiesVersionsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IBusBillofquantitiesVersionsService.java index e83664f0..6bd16b0b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IBusBillofquantitiesVersionsService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IBusBillofquantitiesVersionsService.java @@ -1,15 +1,14 @@ package org.dromara.design.service; -import org.dromara.design.domain.BusBillofquantities; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.design.domain.BusBillofquantitiesVersions; import org.dromara.design.domain.bo.*; +import org.dromara.design.domain.vo.BusBillofquantitiesMaterialTotalVo; +import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; import org.dromara.design.domain.vo.DetailsMaterialAndEquipmentApprovalRes; import org.dromara.design.domain.vo.ObtainTheListRes; -import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; -import org.dromara.design.domain.BusBillofquantitiesVersions; -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 java.util.Collection; @@ -21,7 +20,7 @@ import java.util.List; * @author Lion Li * @date 2025-08-11 */ -public interface IBusBillofquantitiesVersionsService extends IService{ +public interface IBusBillofquantitiesVersionsService extends IService { /** * 查询工程量清单版本 @@ -94,4 +93,11 @@ public interface IBusBillofquantitiesVersionsService extends IService queryMaterialTotalListByProject(Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/BusBillofquantitiesVersionsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/BusBillofquantitiesVersionsServiceImpl.java index 61f6fb34..3e66375f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/BusBillofquantitiesVersionsServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/BusBillofquantitiesVersionsServiceImpl.java @@ -1,10 +1,17 @@ package org.dromara.design.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.cailiaoshebei.domain.BusTotalsupplyplan; import org.dromara.cailiaoshebei.domain.BusTotalsupplyplanAudit; +import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanAuditService; +import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanService; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; @@ -13,30 +20,26 @@ 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.excel.coryUtils.ExcelReader; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; -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.common.mybatis.core.page.TableDataInfo; import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.common.utils.excel.ExcelDynamicReader; -import org.dromara.design.domain.*; +import org.dromara.design.domain.BusBillofquantities; +import org.dromara.design.domain.BusBillofquantitiesVersions; import org.dromara.design.domain.bo.*; import org.dromara.design.domain.dto.MaterialsAndEquipmentExcelDto; +import org.dromara.design.domain.vo.BusBillofquantitiesMaterialTotalVo; +import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; import org.dromara.design.domain.vo.DetailsMaterialAndEquipmentApprovalRes; import org.dromara.design.domain.vo.ObtainTheListRes; +import org.dromara.design.mapper.BusBillofquantitiesVersionsMapper; import org.dromara.design.service.IBusBillofquantitiesService; -import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanAuditService; -import org.dromara.cailiaoshebei.service.IBusTotalsupplyplanService; +import org.dromara.design.service.IBusBillofquantitiesVersionsService; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import org.dromara.design.domain.vo.BusBillofquantitiesVersionsVo; -import org.dromara.design.mapper.BusBillofquantitiesVersionsMapper; -import org.dromara.design.service.IBusBillofquantitiesVersionsService; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -72,7 +75,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } @@ -171,8 +174,8 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl allMaterials = new ArrayList<>(); for (ExcelReader.SheetData sheetData : excelData.getSheetDataList()) { @@ -199,18 +202,18 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl nodeMap = new HashMap<>(); // 递归遍历树形结构,生成sid和pid - traverseTree(rootNode, nodeMap, allMaterials, sheetName,banBen); + traverseTree(rootNode, nodeMap, allMaterials, sheetName, banBen); } // 3. 批量插入数据库 for (BusBillofquantities allMaterial : allMaterials) { allMaterial.setProjectId(bo.getProjectId()); } boolean b = busBillofquantitiesService.saveBatch(allMaterials); - if(!b){ + if (!b) { throw new RuntimeException("导入失败"); } return true; - }else{ + } else { // 跳过1行(表头),读取0到6列(共7列),映射到ExcelData实体类 List dataList = ExcelDynamicReader.readExcel( file, // 上传的文件 @@ -221,11 +224,11 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl busBillofquantities = BeanUtil.copyToList(dataList, BusBillofquantities.class); for (BusBillofquantities busBillofquantity : busBillofquantities) { - busBillofquantity.setProjectId(bo.getProjectId()); - busBillofquantity.setVersions(banBen); + busBillofquantity.setProjectId(bo.getProjectId()); + busBillofquantity.setVersions(banBen); } boolean b = busBillofquantitiesService.saveBatch(busBillofquantities); - if(!b){ + if (!b) { throw new RuntimeException("导入失败"); } return true; @@ -241,7 +244,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl().eq(BusBillofquantitiesVersions::getVersions, versions)); - if(busBillofquantitiesVersions==null){ + if (busBillofquantitiesVersions == null) { throw new ServiceException("版本不存在"); } //根据版本号获取物资设备清单 List busBillofquantities = busBillofquantitiesService.list(new LambdaQueryWrapper().eq(BusBillofquantities::getVersions, versions)); - if(busBillofquantities==null){ + if (busBillofquantities == null) { throw new ServiceException("版本不存在"); } detailsMaterialAndEquipmentApprovalRes.setVersions(busBillofquantitiesVersions.getVersions()); @@ -273,9 +276,50 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl queryMaterialTotalListByProject(Long projectId) { + List billofquantitiesVersionsList = this.lambdaQuery() + .eq(BusBillofquantitiesVersions::getProjectId, projectId) + .eq(BusBillofquantitiesVersions::getWorkOrderType, "3") + .eq(BusBillofquantitiesVersions::getStatus, BusinessStatusEnum.FINISH.getStatus()) + .list(); + if (CollUtil.isEmpty(billofquantitiesVersionsList)) { + return List.of(); + } + Set versions = billofquantitiesVersionsList.stream() + .map(BusBillofquantitiesVersions::getVersions).collect(Collectors.toSet()); + List billofquantitiesList = busBillofquantitiesService.lambdaQuery() + .eq(BusBillofquantities::getProjectId, projectId) + .in(BusBillofquantities::getVersions, versions) + .list(); + if (CollUtil.isEmpty(billofquantitiesList)) { + return List.of(); + } + List list = new ArrayList<>(); + Map> map = billofquantitiesList.stream().collect(Collectors.groupingBy(BusBillofquantities::getName)); + for (Map.Entry> entry : map.entrySet()) { + BusBillofquantitiesMaterialTotalVo vo = new BusBillofquantitiesMaterialTotalVo(); + String key = entry.getKey(); + List value = entry.getValue(); + vo.setName(key); + vo.setSpecification(value.getFirst().getSpecification()); + vo.setUnit(value.getFirst().getUnit()); + BigDecimal sum = value.stream().map(BusBillofquantities::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setQuantity(sum); + list.add(vo); + } + return list; + } + /** * 递归构建树形结构 - * @param parentId 父节点ID(顶级节点为0) + * + * @param parentId 父节点ID(顶级节点为0) * @param parentMap 父子映射表(key=pid,value=子节点列表) * @return 组装好的子树列表 */ @@ -310,7 +354,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl obtainAllVersionNumbers(ObtainAllVersionNumbersReq bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -407,7 +450,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl result = baseMapper.selectVoPage(pageQuery.build(), lqw); result.getRecords().forEach(item -> { - System.out.println("1 "+item.getStatus()); + System.out.println("1 " + item.getStatus()); }); return TableDataInfo.build(result); } @@ -439,7 +482,7 @@ public class BusBillofquantitiesVersionsServiceImpl extends ServiceImpl