diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialIssueController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialIssueController.java index 2e2838d6..2e19caa0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialIssueController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialIssueController.java @@ -18,7 +18,6 @@ import org.dromara.materials.domain.dto.materialissue.MatMaterialIssueUpdateReq; import org.dromara.materials.domain.vo.materialissue.MatMaterialIssueVo; import org.dromara.materials.domain.vo.materialsinventory.MatMaterialsInventoryListVo; import org.dromara.materials.service.IMatMaterialIssueService; -import org.dromara.materials.service.IMatMaterialsInventoryService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -37,8 +36,6 @@ public class MatMaterialIssueController extends BaseController { @Resource private IMatMaterialIssueService matMaterialIssueService; - @Resource - private IMatMaterialsInventoryService materialsInventoryService; /** * 查询物料领料单列表 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialsController.java index 09f117da..aba5c99f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialsController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatMaterialsController.java @@ -19,6 +19,7 @@ import org.dromara.materials.domain.dto.materials.MatMaterialsCreateReq; import org.dromara.materials.domain.dto.materials.MatMaterialsGisReq; import org.dromara.materials.domain.dto.materials.MatMaterialsQueryReq; import org.dromara.materials.domain.dto.materials.MatMaterialsUpdateReq; +import org.dromara.materials.domain.vo.materials.MatMaterialsByFormCodeVo; import org.dromara.materials.domain.vo.materials.MatMaterialsGisVo; import org.dromara.materials.domain.vo.materials.MatMaterialsNumberVo; import org.dromara.materials.domain.vo.materials.MatMaterialsVo; @@ -81,6 +82,18 @@ public class MatMaterialsController extends BaseController { return R.ok(materialsService.queryInventoryList(projectId)); } + /** + * 获取材料列表 + * + * @param projectId 项目id + */ + @SaCheckPermission("materials:materials:listByFormCode") + @GetMapping("/listByFormCode/{projectId}") + public R> listMaterialsByFormCode(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(materialsService.queryMaterialsByFormCode(projectId)); + } + /** * 获取材料详细信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java index 2428ebbf..ba9347db 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java @@ -43,6 +43,11 @@ public class MatMaterials extends BaseEntity { */ private Long projectId; + /** + * 表单编号 + */ + private String formCode; + /** * 规格型号名称 */ @@ -53,11 +58,6 @@ public class MatMaterials extends BaseEntity { */ private String fileOssId; - /** - * 使用部位 - */ - private String usePart; - /** * 计量单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceive/MatMaterialReceiveCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceive/MatMaterialReceiveCreateReq.java index e5e81c62..a6a3fbbc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceive/MatMaterialReceiveCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceive/MatMaterialReceiveCreateReq.java @@ -1,5 +1,7 @@ package org.dromara.materials.domain.dto.materialreceive; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import org.dromara.materials.domain.dto.materialreceiveitem.MatMaterialReceiveItemDto; @@ -20,26 +22,31 @@ public class MatMaterialReceiveCreateReq implements Serializable { /** * 项目id */ + @NotNull(message = "项目id不能为空") private Long projectId; /** * 材料来源(1甲供 2乙供) */ + @NotBlank(message = "材料来源不能为空") private String materialSource; /** * 表单编号 */ + @NotBlank(message = "表单编号不能为空") private String formCode; /** * 工程名称 */ + @NotBlank(message = "工程名称不能为空") private String projectName; /** * 设备材料名称 */ + @NotBlank(message = "设备材料名称不能为空") private String materialName; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java index 6570f8ef..21872845 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java @@ -31,6 +31,11 @@ public class MatMaterialsCreateReq implements Serializable { */ private Long projectId; + /** + * 表单编号 + */ + private String formCode; + /** * 规格型号名称 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java index 55f538ed..72a63d48 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java @@ -4,7 +4,6 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.util.Map; /** * @author lilemy @@ -36,31 +35,21 @@ public class MatMaterialsQueryReq implements Serializable { */ private Long projectId; + /** + * 表单编号 + */ + private String formCode; + /** * 规格型号名称 */ private String typeSpecificationName; - /** - * 文件对象存储id列表 - */ - private Map fileOssIdMap; - - /** - * 使用部位 - */ - private String usePart; - /** * 计量单位 */ private String weightId; - /** - * 备注 - */ - private String remark; - /** * 预计材料数量 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsByFormCodeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsByFormCodeVo.java new file mode 100644 index 00000000..c9224adc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsByFormCodeVo.java @@ -0,0 +1,48 @@ +package org.dromara.materials.domain.vo.materials; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author lilemy + * @date 2025-09-01 16:24 + */ +@Data +public class MatMaterialsByFormCodeVo implements Serializable { + + @Serial + private static final long serialVersionUID = -2113420582630471078L; + + /** + * 表单编号 + */ + private String formCode; + + /** + * 工程名称 + */ + private String projectName; + + /** + * 设备材料名称 + */ + private String materialName; + + /** + * 订货单位 + */ + private String orderingUnit; + + /** + * 供货单位 + */ + private String supplierUnit; + + /** + * 设备材料列表 + */ + private List materials; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java index 4fbe5b55..0cecda3e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java @@ -59,6 +59,12 @@ public class MatMaterialsVo implements Serializable { @ExcelProperty(value = "项目id") private Long projectId; + /** + * 表单编号 + */ + @ExcelProperty(value = "表单编号") + private String formCode; + /** * 规格型号名称 */ @@ -70,12 +76,6 @@ public class MatMaterialsVo implements Serializable { */ private Map fileOssMap; - /** - * 使用部位 - */ - @ExcelProperty(value = "使用部位") - private String usePart; - /** * 计量单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java index d497375d..48cd3797 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java @@ -11,6 +11,7 @@ import org.dromara.materials.domain.dto.materials.MatMaterialsCreateReq; import org.dromara.materials.domain.dto.materials.MatMaterialsGisReq; import org.dromara.materials.domain.dto.materials.MatMaterialsQueryReq; import org.dromara.materials.domain.dto.materials.MatMaterialsUpdateReq; +import org.dromara.materials.domain.vo.materials.MatMaterialsByFormCodeVo; import org.dromara.materials.domain.vo.materials.MatMaterialsGisVo; import org.dromara.materials.domain.vo.materials.MatMaterialsNumberVo; import org.dromara.materials.domain.vo.materials.MatMaterialsVo; @@ -111,7 +112,7 @@ public interface IMatMaterialsService extends IService { /** * 生成材料并入库 */ - void create(Long projectId, List itemList,String nickname); + void create(Long projectId, List itemList, String formCode, String nickname); /** * 获取材料库存数据列表 @@ -121,4 +122,11 @@ public interface IMatMaterialsService extends IService { */ List queryInventoryList(Long projectId); + /** + * 获取材料库存数据列表 + * + * @param projectId 项目id + * @return 材料库存数据列表 + */ + List queryMaterialsByFormCode(Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java index 7407bb42..ecf2b052 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java @@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.exception.OssException; import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.utils.DocumentUtil; import org.dromara.materials.constants.MatMaterialsConstant; import org.dromara.materials.domain.MatMaterialIssue; @@ -35,6 +36,7 @@ import org.dromara.materials.domain.dto.materialissue.MatMaterialIssueUpdateReq; import org.dromara.materials.domain.dto.materialissue.MatMaterialIssueWordDto; import org.dromara.materials.domain.dto.materialissueitem.MatMaterialIssueItemDto; import org.dromara.materials.domain.dto.materialissueitem.MatMaterialIssueItemWordDto; +import org.dromara.materials.domain.enums.MatMaterialsInventoryOutPutEnum; import org.dromara.materials.domain.vo.materialissue.MatMaterialIssueVo; import org.dromara.materials.domain.vo.materialsinventory.MatMaterialsInventoryListVo; import org.dromara.materials.mapper.MatMaterialIssueMapper; @@ -238,6 +240,7 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl inventoryList = itemList.stream().map(item -> { + List inventoryList = itemList.stream().map(item -> { MatMaterialsInventory inventory = new MatMaterialsInventory(); inventory.setNumber(item.getIssuedQuantity().longValue()); inventory.setOutPutTime(new Date()); inventory.setResidue(item.getRemainingQuantity().longValue()); - inventory.setOperator(LoginHelper.getLoginUser().getNickname()); + inventory.setOperator(nickname); inventory.setRecipient(materialIssue.getIssueUnit()); - inventory.setShipper(LoginHelper.getLoginUser().getNickname()); + inventory.setShipper(nickname); inventory.setMaterialsId(item.getMaterialsId()); inventory.setProjectId(materialIssue.getProjectId()); inventory.setOutPut(MatMaterialsInventoryOutPutEnum.OUT.getValue()); @@ -281,7 +284,7 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl itemList, String nickname) { + public void create(Long projectId, List itemList, String formCode, String nickname) { for (MatMaterialReceiveItemDto item : itemList) { - - Long materialsId; - - MatMaterials one = this.getOne(Wrappers.lambdaQuery() - .eq(MatMaterials::getMaterialsName, item.getName()) - .eq(MatMaterials::getTypeSpecificationName, item.getSpecification())); - if (one != null) { - materialsId = one.getId(); - BigDecimal bigDecimal = new BigDecimal(one.getQuantityCount()); - BigDecimal add = item.getQuantity().add(bigDecimal); - one.setQuantityCount(add.toString()); - } else { - MatMaterials matMaterials = new MatMaterials(); - matMaterials.setMaterialsName(item.getName()); - matMaterials.setProjectId(projectId); - matMaterials.setTypeSpecificationName(item.getSpecification()); - matMaterials.setWeightId(item.getUnit()); - matMaterials.setQuantityCount(item.getQuantity().toString()); - - save(matMaterials); - materialsId = matMaterials.getId(); - } - + MatMaterials matMaterials = new MatMaterials(); + matMaterials.setMaterialsName(item.getName()); + matMaterials.setProjectId(projectId); + matMaterials.setTypeSpecificationName(item.getSpecification()); + matMaterials.setWeightId(item.getUnit()); + matMaterials.setQuantityCount(item.getQuantity().toString()); + matMaterials.setFormCode(formCode); + save(matMaterials); + Long materialsId = matMaterials.getId(); MatMaterialsInventoryCreateReq req = new MatMaterialsInventoryCreateReq(); - req.setMaterialsId(materialsId); req.setProjectId(projectId); req.setOutPut(MatMaterialsInventoryOutPutEnum.PUT.getValue()); @@ -418,4 +405,75 @@ public class MatMaterialsServiceImpl extends ServiceImpl queryMaterialsByFormCode(Long projectId) { + List materials = this.lambdaQuery() + .eq(MatMaterials::getProjectId, projectId) + .eq(MatMaterials::getStatus, "0") + .list(); + if (CollUtil.isEmpty(materials)) { + return null; + } + List materialIds = materials.stream() + .filter(material -> StringUtils.isNotBlank(material.getFormCode())) + .map(MatMaterials::getId) + .toList(); + List materialsInventories = materialsInventoryService.selectLatestByMaterialIds(materialIds); + Map inventoryMap = materialsInventories.stream().collect(Collectors.toMap( + MatMaterialsInventory::getMaterialsId, + Function.identity(), + (a, b) -> a)); + Map> formCodeMap = materials.stream() + .collect(Collectors.groupingBy(MatMaterials::getFormCode)); + Set formCodeList = materials.stream().map(MatMaterials::getFormCode).collect(Collectors.toSet()); + List receiveList = materialReceiveService.lambdaQuery() + .in(MatMaterialReceive::getFormCode, formCodeList) + .list(); + Map receiveMap = receiveList.stream().collect(Collectors.toMap( + MatMaterialReceive::getFormCode, + Function.identity(), + (a, b) -> a)); + List resultList = new ArrayList<>(); + for (Map.Entry> entry : formCodeMap.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + List list = value.stream().filter(material -> { + Long materialId = material.getId(); + if (inventoryMap.containsKey(materialId)) { + MatMaterialsInventory inventory = inventoryMap.get(materialId); + Long residue = inventory.getResidue(); + return residue > 0; + } + return false; + }).toList(); + if (CollUtil.isEmpty(list)) { + continue; + } + MatMaterialsByFormCodeVo vo = new MatMaterialsByFormCodeVo(); + vo.setFormCode(key); + if (receiveMap.containsKey(key)) { + MatMaterialReceive receive = receiveMap.get(key); + BeanUtils.copyProperties(receive, vo); + } + List numberVos = value.stream().map(material -> { + MatMaterialsNumberVo numberVo = new MatMaterialsNumberVo(); + BeanUtils.copyProperties(material, numberVo); + Long materialId = material.getId(); + if (inventoryMap.containsKey(materialId)) { + numberVo.setInventoryNumber(BigDecimal.valueOf(inventoryMap.get(materialId).getNumber())); + } + return numberVo; + }).toList(); + vo.setMaterials(numberVos); + resultList.add(vo); + } + return resultList; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java index c1a10bc0..60bb5137 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java @@ -156,4 +156,9 @@ public class BusProject extends BaseEntity { @TableLogic private Long isDelete; + /** + * go项目id + */ + private Long goId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java index 4025e3b9..d01005b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusUserProjectRelevancyServiceImpl.java @@ -308,7 +308,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl(); } Map> projectMap = projectService.lambdaQuery() - .select(BusProject::getId, BusProject::getPId, BusProject::getProjectName, BusProject::getShortName) + .select(BusProject::getId, BusProject::getPId, BusProject::getProjectName, BusProject::getShortName, BusProject::getGoId) .in(BusProject::getId, projectIdList) .eq(BusProject::getPId, BusProjectConstant.PARENT_ID) .list() @@ -328,6 +328,7 @@ public class BusUserProjectRelevancyServiceImpl extends ServiceImpl