From c4c2d764a4e9529f0c35131ff91f6afce94d8307 Mon Sep 17 00:00:00 2001 From: jiang Date: Thu, 27 Nov 2025 16:28:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../back/domain/BackCsDeviceDetails.java | 2 +- .../controller/MaDevInfoController.java | 1 - .../devchange/domain/CsDeviceChange.java | 126 ++++++++++ .../devchange/domain/MaDevInfoXlsx.java | 216 ++++++++++++++++++ .../devchange/mapper/MaDevInfoMapper.java | 2 + .../devchange/service/DevChangeService.java | 2 + .../service/MaDevInfoServiceImpl.java | 34 ++- .../device/domain/vo/DevInfoPropertyVo.java | 2 + .../material/tool/domain/ToolEntity.java | 2 + .../material/devchange/DevChangeMapper.xml | 4 +- .../material/devchange/MaDevInfoMapper.xml | 14 ++ .../mapper/material/device/DevInfoMapper.xml | 56 ++--- .../mapper/material/tool/ToolMapper.xml | 10 +- 13 files changed, 431 insertions(+), 40 deletions(-) create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/CsDeviceChange.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/MaDevInfoXlsx.java diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/back/domain/BackCsDeviceDetails.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/back/domain/BackCsDeviceDetails.java index 1de992d..f903a42 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/back/domain/BackCsDeviceDetails.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/back/domain/BackCsDeviceDetails.java @@ -60,7 +60,7 @@ public class BackCsDeviceDetails { private BigDecimal num = BigDecimal.ZERO; @ApiModelProperty(value = "使用到期日期") - private Date useTime; + private LocalDate useTime; @ApiModelProperty(value = "使用到期日期开始") private LocalDate useStartTime; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/controller/MaDevInfoController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/controller/MaDevInfoController.java index 13324ff..b7c4cd9 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/controller/MaDevInfoController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/controller/MaDevInfoController.java @@ -326,7 +326,6 @@ public class MaDevInfoController extends BaseController { headerMap.put("featureItem" + i, "特征项" + i); // 如featureItem1→"特征项1" headerMap.put("featureValue" + i, "特征值" + i); // 如featureValue1→"特征值1" } - return headerMap; } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/CsDeviceChange.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/CsDeviceChange.java new file mode 100644 index 0000000..5da728a --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/CsDeviceChange.java @@ -0,0 +1,126 @@ +package com.bonus.material.devchange.domain; + +import com.bonus.common.core.annotation.Excel; +import lombok.Data; + +@Data +public class CsDeviceChange { + /** + * 地市权限id + */ + private String deptId; + + private Integer pageNum; + + private Integer pageSize; + /** + * 退役原因 + */ + private String reasonId; + /** + * 退役原因 + */ + private String reasonVal; + /** + * 主键 + */ + private String id; + /** + * 变更状前状态 + */ + //@Excel(name = "流转前状态", width = 20, sort = 4) + private String changeStatusName; + + private String changeStatus; + /** + * 类型 + * 变更类型 1入库 2出库 3 退役 4 维修 + */ + @Excel(name = "操作类型", width = 25, sort = 2) + private String typeName; + + + private String type; + /** + * 变更状态 0自用 1共享 + */ + private String status; + + private String lease_type; + /** + * 工程编码 + */ + private String proCode; + /** + * 工程名称 + */ + private String proName; + + /** + * 工程类型 + */ + private String proType; + /** + * 设备数量 + */ + @Excel(name = "设备数量", width = 25, sort = 9) + private String devNum; + /** + * 电压等级 + */ + private String voltageLevel; + /** + * 使用单位 + */ + private String useUint; + /** + * 省 + */ + private String proProvince; + /** + * 市 + */ + private String proCity; + /** + * 区 + */ + private String proCounty; + /** + * 详细地址 + */ + private String proLocation; + /** + * 创建时间 + */ + @Excel(name = "操作时间", width = 25, sort = 2) + private String createTime; + /** + * 创建人 + */ + @Excel(name = "操作人", width = 20, sort = 1) + private String createUser; + /** + * 使用人 + */ + private String userName; + /** + * 联系方式 + */ + private String userPhone; + + private String jsonData; + + private String devId; + /** + * 变更前单位 + */ + private String changeUnit; + + private String keyWord; + + private String startTime; + + private String endTime; + + private String useTime; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/MaDevInfoXlsx.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/MaDevInfoXlsx.java new file mode 100644 index 0000000..5404e09 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/domain/MaDevInfoXlsx.java @@ -0,0 +1,216 @@ +package com.bonus.material.devchange.domain; + +import com.bonus.common.core.annotation.Excel; +import com.bonus.material.device.domain.vo.DevInfoPropertyVo; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 装备实体类 + * 存储装备的详细信息,包括基本属性、状态、使用情况、文档资料等 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MaDevInfoXlsx { + /** + * 设备id(不导出,无注解) + */ + private Integer maId; + /** + * 所属省份 + */ + @Excel(name = "所属省份") // 对应headerMap的key=province + private String province; + /** + * 专业 + */ + @Excel(name = "专业") // 对应headerMap的key=major + private String major; + /** + * 工序(用子工序映射,可根据实际调整) + */ + @Excel(name = "工序") // 对应headerMap的key=process + private String subProcess; + /** + * 装备类目(用小类目映射) + */ + @Excel(name = "装备类目") // 对应headerMap的key=devType + private String subCategory; + /** + * 类型分支(用装备分支映射) + */ + @Excel(name = "类型分支") // 对应headerMap的key=name + private String branch; + /** + * 规格型号 + */ + @Excel(name = "规格型号") // 对应headerMap的key=specificationModel + private String specificationModel; + /** + * 装备编码 + */ + @Excel(name = "装备编码") // 对应headerMap的key=code + private String code; + /** + * 装备状态 + */ + @Excel(name = "装备状态") // 对应headerMap的key=status + private String status; + /** + * 上下架状态 + */ + @Excel(name = "上下架状态") // 对应headerMap的key=upDownStatus + private String upDownStatus; + /** + * 使用年限 + */ + @Excel(name = "使用年限") // 对应headerMap的key=serviceLife + private String serviceLife; + + private String usingProjectId; + /** + * 使用项目 + */ + @Excel(name = "使用项目") // 对应headerMap的key=usingProject + private String usingProject; + /** + * 使用到期时间(Hutool会自动格式化日期) + */ + @Excel(name = "使用到期时间") // 对应headerMap的key=expirationTime + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date expirationTime; + /** + * 使用次数 + */ + @Excel(name = "使用次数") // 对应headerMap的key=usageCount + private Integer usageCount; + /** + * 维修次数 + */ + @Excel(name = "维修次数") // 对应headerMap的key=repairCount + private Integer repairCount; + /** + * 装备原始编码 + */ + @Excel(name = "装备原始编码") // 对应headerMap的key=originalCode + private String originalCode; + /** + * 计量单位 + */ + @Excel(name = "计量单位") // 对应headerMap的key=unit + private String unit; + + private Integer manufacturerId; + /** + * 生产厂家 + */ + @Excel(name = "生产厂家") // 对应headerMap的key=manufacturer + private String manufacturer; + /** + * 出厂日期 + */ + @Excel(name = "出厂日期") // 对应headerMap的key=productionDate + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date productionDate; + + /** + * 采购日期 + */ + @Excel(name = "采购日期") // 对应headerMap的key=purchaseDate + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date purchaseDate; + /** + * 资产原值(元) + */ + @Excel(name = "资产原值(元)") // 对应headerMap的key=originalValue + private BigDecimal originalValue; + /** + * 最大使用年限(年) + */ + @Excel(name = "最大使用年限(年)") // 对应headerMap的key=maxServiceLifeYears + private Integer maxServiceLifeYears; + /** + * 下次维保日期 + */ + @Excel(name = "下次维保日期") // 对应headerMap的key=nextMaintenanceDate + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date nextMaintenanceDate; + /** + * 产权单位 + */ + @Excel(name = "产权单位") // 对应headerMap的key=propertyUnit + private String propertyUnit; + + @Excel(name = "特征项1") + private String propertyName1; + /** + * 属性值 + */ + @Excel(name = "特征值1") + private String propertyValue1; + + @Excel(name = "特征项2") + private String propertyName2; + /** + * 属性值 + */ + @Excel(name = "特征值2") + private String propertyValue2; + @Excel(name = "特征项3") + private String propertyName3; + /** + * 属性值 + */ + @Excel(name = "特征值3") + private String propertyValue3; + @Excel(name = "特征项4") + private String propertyName4; + /** + * 属性值 + */ + @Excel(name = "特征值4") + private String propertyValue4; + @Excel(name = "特征项5") + private String propertyName5; + /** + * 属性值 + */ + @Excel(name = "特征值5") + private String propertyValue5; + @Excel(name = "特征项6") + private String propertyName6; + /** + * 属性值 + */ + @Excel(name = "特征值6") + private String propertyValue6; + @Excel(name = "特征项7") + private String propertyName7; + /** + * 属性值 + */ + @Excel(name = "特征值7") + private String propertyValue7; + @Excel(name = "特征项8") + private String propertyName8; + /** + * 属性值 + */ + @Excel(name = "特征值8") + private String propertyValue8; + @Excel(name = "特征项9") + private String propertyName9; + /** + * 属性值 + */ + @Excel(name = "特征值9") + private String propertyValue9; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/mapper/MaDevInfoMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/mapper/MaDevInfoMapper.java index f24179d..d6ea88b 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/mapper/MaDevInfoMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/mapper/MaDevInfoMapper.java @@ -48,5 +48,7 @@ public interface MaDevInfoMapper { //查询装备总数 Integer selectTotalDeviceCount(); + + List batchGetProperties( @Param("mainIds") List mainIds); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/DevChangeService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/DevChangeService.java index 3d4836b..922818a 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/DevChangeService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/DevChangeService.java @@ -152,4 +152,6 @@ public interface DevChangeService { AjaxResult outCancelAll(CsDeviceDetails entity); AjaxResult outAll(CsDeviceDetails entity); + + List getDevChangeRList(CsDeviceChange csDeviceChange); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/MaDevInfoServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/MaDevInfoServiceImpl.java index b8fd224..16f2afe 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/MaDevInfoServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/devchange/service/MaDevInfoServiceImpl.java @@ -128,16 +128,36 @@ public class MaDevInfoServiceImpl implements MaDevInfoService { public List export(MaDevInfo o) { /* Long thisLoginUserDeptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); o.setPropertyUnitId(Math.toIntExact(thisLoginUserDeptId));*/ - List list = mapper.list(o); - list.forEach(item -> { - List propertiiesList = mapper.getProperties(item); - if (propertiiesList != null && !propertiiesList.isEmpty()) { - item.setPropertyVoList(propertiiesList); - } + // 1. 一次性查询所有主表数据(1次查询) + List mainList = mapper.list(o); + if (mainList.isEmpty()) { + return Collections.emptyList(); // 空数据直接返回,避免后续无效操作 + } + + // 2. 收集所有主表ID(用于批量查关联属性) + List mainIds = mainList.stream() + .map(MaDevInfo::getMaId) // 假设主表主键是id(Long类型,根据实际字段调整) + .filter(Objects::nonNull) // 过滤空ID,防止查询异常 + .collect(Collectors.toList()); + + // 3. 一次性批量查询所有关联属性(1次查询,替代原N次循环查询) + List allProperties = mapper.batchGetProperties(mainIds); + + // 4. 用Map分组关联属性:key=主表ID,value=该主表对应的所有属性(内存关联核心) + Map> propertyMap = allProperties.stream() + .collect(Collectors.groupingBy(DevInfoPropertyVo::getMaId)); // 按关联字段(dev_id)分组 + + // 5. 批量给主表对象设置属性列表(无循环查库,纯内存操作) + mainList.forEach(main -> { + // 若主表ID无对应属性,返回空集合(避免null) + List properties = propertyMap.getOrDefault(main.getMaId(), Collections.emptyList()); + main.setPropertyVoList(properties); }); - return list; + + return mainList; } + /** * 将扁平列表构建成树,并添加一个总的根节点,根节点名称包含设备总数 */ diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java index a1e5300..30ec7c6 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/vo/DevInfoPropertyVo.java @@ -7,6 +7,8 @@ import lombok.Data; @Data public class DevInfoPropertyVo { private Integer id; + + private Integer maId; /** * 属性名称 */ diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/tool/domain/ToolEntity.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/tool/domain/ToolEntity.java index b2c0ae7..f2428e3 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/tool/domain/ToolEntity.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/tool/domain/ToolEntity.java @@ -91,6 +91,8 @@ public class ToolEntity implements Serializable { */ private LocalDateTime updateTime; + private String fileList; + // 子节点列表(非数据库字段,用于构建树形结构) private List children = new ArrayList<>(); diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/DevChangeMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/DevChangeMapper.xml index 1a09ac9..cec485c 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/DevChangeMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/DevChangeMapper.xml @@ -130,7 +130,7 @@ cds.pro_province AS proProvince, cds.pro_city AS proCity, cds.pro_county AS proCounty, - cds.pro_location AS proLocation, + CONCAT_WS('·', cds.pro_province, cds.pro_city, cds.pro_county) AS proLocation, cds.create_time AS createTime, cds.create_user AS createUser, cds.del_flag, @@ -149,7 +149,7 @@ ELSE '未知' END AS changeStatusName, CASE - WHEN cds.type = 1 THEN '入库' + WHEN cds.type = 1 THEN '退库' WHEN cds.type = 2 THEN '出库' WHEN cds.type = 3 THEN '退役' WHEN cds.type = 4 THEN '维修' diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml index bffac98..44eb0b7 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/devchange/MaDevInfoMapper.xml @@ -481,5 +481,19 @@ SELECT COUNT(1) FROM ma_dev_info WHERE is_active = '1' and entry_status = '1' + diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml index 42dadcf..7afd64b 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml @@ -146,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" UNION ALL ( SELECT - tl.fileList AS picUrl, -- 1. 对应第一部分 picUrl + SUBSTRING_INDEX(tt.fileList, ',', 1) AS picUrl, -- 1. 对应第一部分 picUrl '' AS proType, -- 2. 对应 proType '' AS mainGx, -- 3. 对应 mainGx '' AS childGx, -- 4. 对应 childGx @@ -1593,33 +1593,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from jj_sing_project