From 3ebacd55c15c949ffb45d8ed0a499ee053ca4208 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Fri, 1 Aug 2025 15:14:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=A8=A1=E5=9D=97=E7=BC=96=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=EF=BC=8C=E6=9F=A5=E7=9C=8B=E8=AF=A6=E6=83=85?= =?UTF-8?q?=EF=BC=8C=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomLocalDateTimeDeserializer.java | 20 +- .../znpt/domain/entity/EquipmentEntity.java | 57 ++++++ .../dite/znpt/domain/vo/EquipmentListReq.java | 12 ++ .../com/dite/znpt/domain/vo/EquipmentReq.java | 72 ++++++++ .../dite/znpt/domain/vo/EquipmentResp.java | 57 ++++++ .../service/impl/EquipmentServiceImpl.java | 171 +++++++++++++++++- 6 files changed, 382 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java index 9e3e1e6..5d748f0 100644 --- a/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java +++ b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java @@ -10,11 +10,27 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class CustomLocalDateTimeDeserializer extends JsonDeserializer { - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter FORMATTER1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter FORMATTER2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String date = p.getText(); - return LocalDateTimeUtil.parse(date, FORMATTER); + if (date == null || date.trim().isEmpty()) { + return null; + } + + try { + // 尝试第一种格式 yyyy-MM-dd HH:mm:ss + return LocalDateTimeUtil.parse(date, FORMATTER1); + } catch (Exception e1) { + try { + // 尝试第二种格式 yyyy/MM/dd HH:mm + return LocalDateTimeUtil.parse(date, FORMATTER2); + } catch (Exception e2) { + // 如果都失败,尝试自动解析 + return LocalDateTimeUtil.parse(date); + } + } } } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java index 9138370..6609199 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -125,6 +125,63 @@ public class EquipmentEntity extends AuditableEntity implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("领用时间") + private LocalDateTime borrowingTime; + + @ApiModelProperty("归还时间") + private LocalDateTime returnTime; + + @ApiModelProperty("出库时间") + private LocalDateTime outStockTime; + + @ApiModelProperty("总使用时间") + private String totalUsageTime; + + @ApiModelProperty("折旧率") + private BigDecimal depreciationRate; + + @ApiModelProperty("折旧方法说明") + private String depreciationMethodDesc; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("发票状态") + private String invoiceStatus; + + @ApiModelProperty("附件") + private String attachments; + + @ApiModelProperty("照片") + private String photos; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + + @ApiModelProperty("盘库时间/状态1") + private String inventoryTimeStatus1; + + @ApiModelProperty("盘库时间/状态2") + private String inventoryTimeStatus2; + + @ApiModelProperty("盘库时间/状态3") + private String inventoryTimeStatus3; + + @ApiModelProperty("盘点时间/状态1") + private String inventoryCheckTimeStatus1; + + @ApiModelProperty("盘点时间/状态2") + private String inventoryCheckTimeStatus2; + + @ApiModelProperty("盘点时间/状态3") + private String inventoryCheckTimeStatus3; + @ApiModelProperty("当前使用记录id") @TableField(updateStrategy = FieldStrategy.ALWAYS) private String useRecordId; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java index cfeb779..1747ea6 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java @@ -76,6 +76,18 @@ public class EquipmentListReq implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + @ApiModelProperty("采购时间开始") private LocalDateTime purchaseTimeStart; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java index 947c006..430d19f 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java @@ -134,4 +134,76 @@ public class EquipmentReq implements Serializable { @ApiModelProperty("资产备注") @Size(max = 1000, message = "资产备注长度不能超过1000个字") private String assetRemark; + + @ApiModelProperty("使用部门/人") + @Size(max = 200, message = "使用部门/人长度不能超过200个字") + private String usingDepartment; + + @ApiModelProperty("领用时间") + private LocalDateTime borrowingTime; + + @ApiModelProperty("归还时间") + private LocalDateTime returnTime; + + @ApiModelProperty("出库时间") + private LocalDateTime outStockTime; + + @ApiModelProperty("总使用时间") + @Size(max = 100, message = "总使用时间长度不能超过100个字") + private String totalUsageTime; + + @ApiModelProperty("折旧率") + private BigDecimal depreciationRate; + + @ApiModelProperty("折旧方法说明") + @Size(max = 500, message = "折旧方法说明长度不能超过500个字") + private String depreciationMethodDesc; + + @ApiModelProperty("发票") + @Size(max = 100, message = "发票长度不能超过100个字") + private String invoice; + + @ApiModelProperty("发票状态") + @Size(max = 50, message = "发票状态长度不能超过50个字") + private String invoiceStatus; + + @ApiModelProperty("附件") + @Size(max = 500, message = "附件长度不能超过500个字") + private String attachments; + + @ApiModelProperty("照片") + @Size(max = 500, message = "照片长度不能超过500个字") + private String photos; + + @ApiModelProperty("条码") + @Size(max = 100, message = "条码长度不能超过100个字") + private String barcode; + + @ApiModelProperty("导入人") + @Size(max = 100, message = "导入人长度不能超过100个字") + private String importer; + + @ApiModelProperty("盘库时间/状态1") + @Size(max = 100, message = "盘库时间/状态1长度不能超过100个字") + private String inventoryTimeStatus1; + + @ApiModelProperty("盘库时间/状态2") + @Size(max = 100, message = "盘库时间/状态2长度不能超过100个字") + private String inventoryTimeStatus2; + + @ApiModelProperty("盘库时间/状态3") + @Size(max = 100, message = "盘库时间/状态3长度不能超过100个字") + private String inventoryTimeStatus3; + + @ApiModelProperty("盘点时间/状态1") + @Size(max = 100, message = "盘点时间/状态1长度不能超过100个字") + private String inventoryCheckTimeStatus1; + + @ApiModelProperty("盘点时间/状态2") + @Size(max = 100, message = "盘点时间/状态2长度不能超过100个字") + private String inventoryCheckTimeStatus2; + + @ApiModelProperty("盘点时间/状态3") + @Size(max = 100, message = "盘点时间/状态3长度不能超过100个字") + private String inventoryCheckTimeStatus3; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java index 1200c27..9125499 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java @@ -131,6 +131,63 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("领用时间") + private LocalDateTime borrowingTime; + + @ApiModelProperty("归还时间") + private LocalDateTime returnTime; + + @ApiModelProperty("出库时间") + private LocalDateTime outStockTime; + + @ApiModelProperty("总使用时间") + private String totalUsageTime; + + @ApiModelProperty("折旧率") + private BigDecimal depreciationRate; + + @ApiModelProperty("折旧方法说明") + private String depreciationMethodDesc; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("发票状态") + private String invoiceStatus; + + @ApiModelProperty("附件") + private String attachments; + + @ApiModelProperty("照片") + private String photos; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + + @ApiModelProperty("盘库时间/状态1") + private String inventoryTimeStatus1; + + @ApiModelProperty("盘库时间/状态2") + private String inventoryTimeStatus2; + + @ApiModelProperty("盘库时间/状态3") + private String inventoryTimeStatus3; + + @ApiModelProperty("盘点时间/状态1") + private String inventoryCheckTimeStatus1; + + @ApiModelProperty("盘点时间/状态2") + private String inventoryCheckTimeStatus2; + + @ApiModelProperty("盘点时间/状态3") + private String inventoryCheckTimeStatus3; + @ApiModelProperty("项目id") private String projectId; diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java index cdb1f64..0e385a2 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java @@ -1,11 +1,12 @@ package com.dite.znpt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Message; -import com.dite.znpt.converts.EquipmentConverts; +// 移除EquipmentConverts导入,使用手动转换 import com.dite.znpt.domain.entity.EquipmentEntity; import com.dite.znpt.domain.vo.EquipmentListReq; import com.dite.znpt.domain.vo.EquipmentReq; @@ -22,8 +23,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; +import com.dite.znpt.constant.Constants; /** * @author Bear.G @@ -43,7 +46,7 @@ public class EquipmentServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(EquipmentEntity::getDelFlag, "0"); + // 不需要手动添加 del_flag 条件,@TableLogic 注解会自动处理 // 添加搜索条件并记录日志 int conditionCount = 0; @@ -136,6 +139,28 @@ public class EquipmentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId) + .set(EquipmentEntity::getEquipmentStatus, "scrap") + .set(EquipmentEntity::getLocationStatus, "scrapped") + .set(EquipmentEntity::getActualScrapTime, LocalDateTime.now()) + .set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); + + boolean updateResult = this.update(updateWrapper); + if (!updateResult) { + log.error("设备状态更新失败,设备ID: {}", equipmentId); + throw new ServiceException("设备状态更新失败,请稍后重试"); + } + + // 执行软删除 - 使用 MyBatis-Plus 的逻辑删除方法 + boolean deleteResult = this.removeById(equipmentId); + + if (deleteResult) { + log.info("设备删除成功,设备ID: {}, 设备名称: {}", equipmentId, equipment.getEquipmentName()); + } else { + log.error("设备删除失败,设备ID: {}", equipmentId); + throw new ServiceException("设备删除失败,请稍后重试"); + } + } + + /** + * 将EquipmentReq转换为EquipmentEntity + */ + private EquipmentEntity convertToEntity(EquipmentReq req) { + EquipmentEntity entity = new EquipmentEntity(); + entity.setAssetCode(req.getAssetCode()); + entity.setEquipmentName(req.getEquipmentName()); + entity.setEquipmentModel(req.getEquipmentModel()); + entity.setEquipmentType(req.getEquipmentType()); + entity.setEquipmentStatus(req.getEquipmentStatus()); + entity.setUseStatus(req.getUseStatus()); + entity.setEquipmentSn(req.getEquipmentSn()); + entity.setBrand(req.getBrand()); + entity.setSpecification(req.getSpecification()); + entity.setLocationStatus(req.getLocationStatus()); + entity.setPhysicalLocation(req.getPhysicalLocation()); + entity.setResponsiblePerson(req.getResponsiblePerson()); + entity.setHealthStatus(req.getHealthStatus()); + entity.setPurchaseTime(req.getPurchaseTime()); + entity.setInStockTime(req.getInStockTime()); + entity.setActivationTime(req.getActivationTime()); + entity.setExpectedScrapTime(req.getExpectedScrapTime()); + entity.setActualScrapTime(req.getActualScrapTime()); + entity.setStatusChangeTime(req.getStatusChangeTime()); + entity.setPurchaseOrder(req.getPurchaseOrder()); + entity.setSupplierName(req.getSupplierName()); + entity.setPurchasePrice(req.getPurchasePrice()); + entity.setCurrentNetValue(req.getCurrentNetValue()); + entity.setDepreciationMethod(req.getDepreciationMethod()); + entity.setDepreciationYears(req.getDepreciationYears()); + entity.setSalvageValue(req.getSalvageValue()); + entity.setWarrantyExpireDate(req.getWarrantyExpireDate()); + entity.setLastMaintenanceDate(req.getLastMaintenanceDate()); + entity.setNextMaintenanceDate(req.getNextMaintenanceDate()); + entity.setMaintenancePerson(req.getMaintenancePerson()); + entity.setInventoryBarcode(req.getInventoryBarcode()); + entity.setAssetRemark(req.getAssetRemark()); + + // 新增字段转换 + entity.setUsingDepartment(req.getUsingDepartment()); + entity.setBorrowingTime(req.getBorrowingTime()); + entity.setReturnTime(req.getReturnTime()); + entity.setOutStockTime(req.getOutStockTime()); + entity.setTotalUsageTime(req.getTotalUsageTime()); + entity.setDepreciationRate(req.getDepreciationRate()); + entity.setDepreciationMethodDesc(req.getDepreciationMethodDesc()); + entity.setInvoice(req.getInvoice()); + entity.setInvoiceStatus(req.getInvoiceStatus()); + entity.setAttachments(req.getAttachments()); + entity.setPhotos(req.getPhotos()); + entity.setBarcode(req.getBarcode()); + entity.setImporter(req.getImporter()); + entity.setInventoryTimeStatus1(req.getInventoryTimeStatus1()); + entity.setInventoryTimeStatus2(req.getInventoryTimeStatus2()); + entity.setInventoryTimeStatus3(req.getInventoryTimeStatus3()); + entity.setInventoryCheckTimeStatus1(req.getInventoryCheckTimeStatus1()); + entity.setInventoryCheckTimeStatus2(req.getInventoryCheckTimeStatus2()); + entity.setInventoryCheckTimeStatus3(req.getInventoryCheckTimeStatus3()); + + return entity; } /** @@ -413,6 +552,28 @@ public class EquipmentServiceImpl extends ServiceImpl Date: Mon, 4 Aug 2025 22:47:56 +0800 Subject: [PATCH 2/4] =?UTF-8?q?Revert=20"=E5=AE=9E=E7=8E=B0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=B8=AD=E5=BF=83=E6=A8=A1=E5=9D=97=E7=BC=96=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=EF=BC=8C=E6=9F=A5=E7=9C=8B=E8=AF=A6?= =?UTF-8?q?=E6=83=85=EF=BC=8C=E6=9F=A5=E7=9C=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 3ebacd55c15c949ffb45d8ed0a499ee053ca4208. --- .../CustomLocalDateTimeDeserializer.java | 20 +- .../znpt/domain/entity/EquipmentEntity.java | 57 ------ .../dite/znpt/domain/vo/EquipmentListReq.java | 12 -- .../com/dite/znpt/domain/vo/EquipmentReq.java | 72 -------- .../dite/znpt/domain/vo/EquipmentResp.java | 57 ------ .../service/impl/EquipmentServiceImpl.java | 171 +----------------- 6 files changed, 7 insertions(+), 382 deletions(-) diff --git a/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java index 5d748f0..9e3e1e6 100644 --- a/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java +++ b/core/src/main/java/com/dite/znpt/config/CustomLocalDateTimeDeserializer.java @@ -10,27 +10,11 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class CustomLocalDateTimeDeserializer extends JsonDeserializer { - private static final DateTimeFormatter FORMATTER1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private static final DateTimeFormatter FORMATTER2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String date = p.getText(); - if (date == null || date.trim().isEmpty()) { - return null; - } - - try { - // 尝试第一种格式 yyyy-MM-dd HH:mm:ss - return LocalDateTimeUtil.parse(date, FORMATTER1); - } catch (Exception e1) { - try { - // 尝试第二种格式 yyyy/MM/dd HH:mm - return LocalDateTimeUtil.parse(date, FORMATTER2); - } catch (Exception e2) { - // 如果都失败,尝试自动解析 - return LocalDateTimeUtil.parse(date); - } - } + return LocalDateTimeUtil.parse(date, FORMATTER); } } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java index 6609199..9138370 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -125,63 +125,6 @@ public class EquipmentEntity extends AuditableEntity implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; - @ApiModelProperty("使用部门/人") - private String usingDepartment; - - @ApiModelProperty("领用时间") - private LocalDateTime borrowingTime; - - @ApiModelProperty("归还时间") - private LocalDateTime returnTime; - - @ApiModelProperty("出库时间") - private LocalDateTime outStockTime; - - @ApiModelProperty("总使用时间") - private String totalUsageTime; - - @ApiModelProperty("折旧率") - private BigDecimal depreciationRate; - - @ApiModelProperty("折旧方法说明") - private String depreciationMethodDesc; - - @ApiModelProperty("发票") - private String invoice; - - @ApiModelProperty("发票状态") - private String invoiceStatus; - - @ApiModelProperty("附件") - private String attachments; - - @ApiModelProperty("照片") - private String photos; - - @ApiModelProperty("条码") - private String barcode; - - @ApiModelProperty("导入人") - private String importer; - - @ApiModelProperty("盘库时间/状态1") - private String inventoryTimeStatus1; - - @ApiModelProperty("盘库时间/状态2") - private String inventoryTimeStatus2; - - @ApiModelProperty("盘库时间/状态3") - private String inventoryTimeStatus3; - - @ApiModelProperty("盘点时间/状态1") - private String inventoryCheckTimeStatus1; - - @ApiModelProperty("盘点时间/状态2") - private String inventoryCheckTimeStatus2; - - @ApiModelProperty("盘点时间/状态3") - private String inventoryCheckTimeStatus3; - @ApiModelProperty("当前使用记录id") @TableField(updateStrategy = FieldStrategy.ALWAYS) private String useRecordId; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java index 1747ea6..cfeb779 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java @@ -76,18 +76,6 @@ public class EquipmentListReq implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; - @ApiModelProperty("使用部门/人") - private String usingDepartment; - - @ApiModelProperty("发票") - private String invoice; - - @ApiModelProperty("条码") - private String barcode; - - @ApiModelProperty("导入人") - private String importer; - @ApiModelProperty("采购时间开始") private LocalDateTime purchaseTimeStart; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java index 430d19f..947c006 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java @@ -134,76 +134,4 @@ public class EquipmentReq implements Serializable { @ApiModelProperty("资产备注") @Size(max = 1000, message = "资产备注长度不能超过1000个字") private String assetRemark; - - @ApiModelProperty("使用部门/人") - @Size(max = 200, message = "使用部门/人长度不能超过200个字") - private String usingDepartment; - - @ApiModelProperty("领用时间") - private LocalDateTime borrowingTime; - - @ApiModelProperty("归还时间") - private LocalDateTime returnTime; - - @ApiModelProperty("出库时间") - private LocalDateTime outStockTime; - - @ApiModelProperty("总使用时间") - @Size(max = 100, message = "总使用时间长度不能超过100个字") - private String totalUsageTime; - - @ApiModelProperty("折旧率") - private BigDecimal depreciationRate; - - @ApiModelProperty("折旧方法说明") - @Size(max = 500, message = "折旧方法说明长度不能超过500个字") - private String depreciationMethodDesc; - - @ApiModelProperty("发票") - @Size(max = 100, message = "发票长度不能超过100个字") - private String invoice; - - @ApiModelProperty("发票状态") - @Size(max = 50, message = "发票状态长度不能超过50个字") - private String invoiceStatus; - - @ApiModelProperty("附件") - @Size(max = 500, message = "附件长度不能超过500个字") - private String attachments; - - @ApiModelProperty("照片") - @Size(max = 500, message = "照片长度不能超过500个字") - private String photos; - - @ApiModelProperty("条码") - @Size(max = 100, message = "条码长度不能超过100个字") - private String barcode; - - @ApiModelProperty("导入人") - @Size(max = 100, message = "导入人长度不能超过100个字") - private String importer; - - @ApiModelProperty("盘库时间/状态1") - @Size(max = 100, message = "盘库时间/状态1长度不能超过100个字") - private String inventoryTimeStatus1; - - @ApiModelProperty("盘库时间/状态2") - @Size(max = 100, message = "盘库时间/状态2长度不能超过100个字") - private String inventoryTimeStatus2; - - @ApiModelProperty("盘库时间/状态3") - @Size(max = 100, message = "盘库时间/状态3长度不能超过100个字") - private String inventoryTimeStatus3; - - @ApiModelProperty("盘点时间/状态1") - @Size(max = 100, message = "盘点时间/状态1长度不能超过100个字") - private String inventoryCheckTimeStatus1; - - @ApiModelProperty("盘点时间/状态2") - @Size(max = 100, message = "盘点时间/状态2长度不能超过100个字") - private String inventoryCheckTimeStatus2; - - @ApiModelProperty("盘点时间/状态3") - @Size(max = 100, message = "盘点时间/状态3长度不能超过100个字") - private String inventoryCheckTimeStatus3; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java index 9125499..1200c27 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java @@ -131,63 +131,6 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; - @ApiModelProperty("使用部门/人") - private String usingDepartment; - - @ApiModelProperty("领用时间") - private LocalDateTime borrowingTime; - - @ApiModelProperty("归还时间") - private LocalDateTime returnTime; - - @ApiModelProperty("出库时间") - private LocalDateTime outStockTime; - - @ApiModelProperty("总使用时间") - private String totalUsageTime; - - @ApiModelProperty("折旧率") - private BigDecimal depreciationRate; - - @ApiModelProperty("折旧方法说明") - private String depreciationMethodDesc; - - @ApiModelProperty("发票") - private String invoice; - - @ApiModelProperty("发票状态") - private String invoiceStatus; - - @ApiModelProperty("附件") - private String attachments; - - @ApiModelProperty("照片") - private String photos; - - @ApiModelProperty("条码") - private String barcode; - - @ApiModelProperty("导入人") - private String importer; - - @ApiModelProperty("盘库时间/状态1") - private String inventoryTimeStatus1; - - @ApiModelProperty("盘库时间/状态2") - private String inventoryTimeStatus2; - - @ApiModelProperty("盘库时间/状态3") - private String inventoryTimeStatus3; - - @ApiModelProperty("盘点时间/状态1") - private String inventoryCheckTimeStatus1; - - @ApiModelProperty("盘点时间/状态2") - private String inventoryCheckTimeStatus2; - - @ApiModelProperty("盘点时间/状态3") - private String inventoryCheckTimeStatus3; - @ApiModelProperty("项目id") private String projectId; diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java index 0e385a2..cdb1f64 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java @@ -1,12 +1,11 @@ package com.dite.znpt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Message; -// 移除EquipmentConverts导入,使用手动转换 +import com.dite.znpt.converts.EquipmentConverts; import com.dite.znpt.domain.entity.EquipmentEntity; import com.dite.znpt.domain.vo.EquipmentListReq; import com.dite.znpt.domain.vo.EquipmentReq; @@ -23,10 +22,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; -import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; -import com.dite.znpt.constant.Constants; /** * @author Bear.G @@ -46,7 +43,7 @@ public class EquipmentServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - // 不需要手动添加 del_flag 条件,@TableLogic 注解会自动处理 + queryWrapper.eq(EquipmentEntity::getDelFlag, "0"); // 添加搜索条件并记录日志 int conditionCount = 0; @@ -139,28 +136,6 @@ public class EquipmentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId) - .set(EquipmentEntity::getEquipmentStatus, "scrap") - .set(EquipmentEntity::getLocationStatus, "scrapped") - .set(EquipmentEntity::getActualScrapTime, LocalDateTime.now()) - .set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); - - boolean updateResult = this.update(updateWrapper); - if (!updateResult) { - log.error("设备状态更新失败,设备ID: {}", equipmentId); - throw new ServiceException("设备状态更新失败,请稍后重试"); - } - - // 执行软删除 - 使用 MyBatis-Plus 的逻辑删除方法 - boolean deleteResult = this.removeById(equipmentId); - - if (deleteResult) { - log.info("设备删除成功,设备ID: {}, 设备名称: {}", equipmentId, equipment.getEquipmentName()); - } else { - log.error("设备删除失败,设备ID: {}", equipmentId); - throw new ServiceException("设备删除失败,请稍后重试"); - } - } - - /** - * 将EquipmentReq转换为EquipmentEntity - */ - private EquipmentEntity convertToEntity(EquipmentReq req) { - EquipmentEntity entity = new EquipmentEntity(); - entity.setAssetCode(req.getAssetCode()); - entity.setEquipmentName(req.getEquipmentName()); - entity.setEquipmentModel(req.getEquipmentModel()); - entity.setEquipmentType(req.getEquipmentType()); - entity.setEquipmentStatus(req.getEquipmentStatus()); - entity.setUseStatus(req.getUseStatus()); - entity.setEquipmentSn(req.getEquipmentSn()); - entity.setBrand(req.getBrand()); - entity.setSpecification(req.getSpecification()); - entity.setLocationStatus(req.getLocationStatus()); - entity.setPhysicalLocation(req.getPhysicalLocation()); - entity.setResponsiblePerson(req.getResponsiblePerson()); - entity.setHealthStatus(req.getHealthStatus()); - entity.setPurchaseTime(req.getPurchaseTime()); - entity.setInStockTime(req.getInStockTime()); - entity.setActivationTime(req.getActivationTime()); - entity.setExpectedScrapTime(req.getExpectedScrapTime()); - entity.setActualScrapTime(req.getActualScrapTime()); - entity.setStatusChangeTime(req.getStatusChangeTime()); - entity.setPurchaseOrder(req.getPurchaseOrder()); - entity.setSupplierName(req.getSupplierName()); - entity.setPurchasePrice(req.getPurchasePrice()); - entity.setCurrentNetValue(req.getCurrentNetValue()); - entity.setDepreciationMethod(req.getDepreciationMethod()); - entity.setDepreciationYears(req.getDepreciationYears()); - entity.setSalvageValue(req.getSalvageValue()); - entity.setWarrantyExpireDate(req.getWarrantyExpireDate()); - entity.setLastMaintenanceDate(req.getLastMaintenanceDate()); - entity.setNextMaintenanceDate(req.getNextMaintenanceDate()); - entity.setMaintenancePerson(req.getMaintenancePerson()); - entity.setInventoryBarcode(req.getInventoryBarcode()); - entity.setAssetRemark(req.getAssetRemark()); - - // 新增字段转换 - entity.setUsingDepartment(req.getUsingDepartment()); - entity.setBorrowingTime(req.getBorrowingTime()); - entity.setReturnTime(req.getReturnTime()); - entity.setOutStockTime(req.getOutStockTime()); - entity.setTotalUsageTime(req.getTotalUsageTime()); - entity.setDepreciationRate(req.getDepreciationRate()); - entity.setDepreciationMethodDesc(req.getDepreciationMethodDesc()); - entity.setInvoice(req.getInvoice()); - entity.setInvoiceStatus(req.getInvoiceStatus()); - entity.setAttachments(req.getAttachments()); - entity.setPhotos(req.getPhotos()); - entity.setBarcode(req.getBarcode()); - entity.setImporter(req.getImporter()); - entity.setInventoryTimeStatus1(req.getInventoryTimeStatus1()); - entity.setInventoryTimeStatus2(req.getInventoryTimeStatus2()); - entity.setInventoryTimeStatus3(req.getInventoryTimeStatus3()); - entity.setInventoryCheckTimeStatus1(req.getInventoryCheckTimeStatus1()); - entity.setInventoryCheckTimeStatus2(req.getInventoryCheckTimeStatus2()); - entity.setInventoryCheckTimeStatus3(req.getInventoryCheckTimeStatus3()); - - return entity; + this.removeById(equipmentId); } /** @@ -552,28 +413,6 @@ public class EquipmentServiceImpl extends ServiceImpl Date: Tue, 5 Aug 2025 16:24:31 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=9C=80=E8=A6=81=E7=9A=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=B7=9F=E6=96=B0=E5=92=8C=E5=AE=8C=E6=88=90=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../znpt/domain/entity/EquipmentEntity.java | 411 ++++++++++-------- .../dite/znpt/domain/vo/EquipmentListReq.java | 30 +- .../com/dite/znpt/domain/vo/EquipmentReq.java | 31 +- .../dite/znpt/domain/vo/EquipmentResp.java | 37 +- .../dite/znpt/service/EquipmentService.java | 54 +++ .../service/impl/EquipmentServiceImpl.java | 354 ++++++++++++--- pom.xml | 2 + .../web/controller/EquipmentController.java | 48 ++ 8 files changed, 708 insertions(+), 259 deletions(-) diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java index 6609199..a9f2cfb 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -1,192 +1,219 @@ -package com.dite.znpt.domain.entity; - -import com.baomidou.mybatisplus.annotation.*; -import com.dite.znpt.domain.AuditableEntity; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDateTime; - -/** - * @author Bear.G - * @date 2025/7/23/周三 17:26 - * @description - */ -@Data -@EqualsAndHashCode(callSuper = false) -@TableName("equipment") -@ApiModel(value="EquipmentEntity对象", description="设备信息表") -public class EquipmentEntity extends AuditableEntity implements Serializable { - @Serial - private static final long serialVersionUID = -6665040704562461286L; - - @ApiModelProperty("设备id") - @TableId(type = IdType.ASSIGN_ID) - private String equipmentId; - - @ApiModelProperty("资产编号") - private String assetCode; - - @ApiModelProperty("设备名称") - private String equipmentName; - - @ApiModelProperty("设备型号") - private String equipmentModel; - - @ApiModelProperty("设备类型") - private String equipmentType; - - @ApiModelProperty("设备状态,枚举:EquipmentStatusEnum") - private String equipmentStatus; - - @ApiModelProperty("使用状态,0-空闲中,1-使用中") - private String useStatus; - - @ApiModelProperty("设备序列号") - private String equipmentSn; - - @ApiModelProperty("品牌") - private String brand; - - @ApiModelProperty("配置规格/参数") - private String specification; - - @ApiModelProperty("位置状态") - private String locationStatus; - - @ApiModelProperty("设备当前物理位置") - private String physicalLocation; - - @ApiModelProperty("负责人") - private String responsiblePerson; - - @ApiModelProperty("健康状态") - private String healthStatus; - - @ApiModelProperty("采购时间") - private LocalDateTime purchaseTime; - - @ApiModelProperty("入库时间") - private LocalDateTime inStockTime; - - @ApiModelProperty("启用时间") - private LocalDateTime activationTime; - - @ApiModelProperty("预计报废时间") - private LocalDateTime expectedScrapTime; - - @ApiModelProperty("实际报废时间") - private LocalDateTime actualScrapTime; - - @ApiModelProperty("状态变更时间") - private LocalDateTime statusChangeTime; - - @ApiModelProperty("采购订单") - private String purchaseOrder; - - @ApiModelProperty("供应商名称") - private String supplierName; - - @ApiModelProperty("采购价格") - private BigDecimal purchasePrice; - - @ApiModelProperty("当前净值") - private BigDecimal currentNetValue; - - @ApiModelProperty("折旧方法") - private String depreciationMethod; - - @ApiModelProperty("折旧年限") - private Integer depreciationYears; - - @ApiModelProperty("残值") - private BigDecimal salvageValue; - - @ApiModelProperty("保修截止日期") - private LocalDateTime warrantyExpireDate; - - @ApiModelProperty("上次维护日期") - private LocalDateTime lastMaintenanceDate; - - @ApiModelProperty("下次维护日期") - private LocalDateTime nextMaintenanceDate; - - @ApiModelProperty("维护人员") - private String maintenancePerson; - - @ApiModelProperty("库存条码") - private String inventoryBarcode; - - @ApiModelProperty("资产备注") - private String assetRemark; - - @ApiModelProperty("使用部门/人") - private String usingDepartment; - - @ApiModelProperty("领用时间") - private LocalDateTime borrowingTime; - - @ApiModelProperty("归还时间") - private LocalDateTime returnTime; - - @ApiModelProperty("出库时间") - private LocalDateTime outStockTime; - - @ApiModelProperty("总使用时间") - private String totalUsageTime; - - @ApiModelProperty("折旧率") - private BigDecimal depreciationRate; - - @ApiModelProperty("折旧方法说明") - private String depreciationMethodDesc; - - @ApiModelProperty("发票") - private String invoice; - - @ApiModelProperty("发票状态") - private String invoiceStatus; - - @ApiModelProperty("附件") - private String attachments; - - @ApiModelProperty("照片") - private String photos; - - @ApiModelProperty("条码") - private String barcode; - - @ApiModelProperty("导入人") - private String importer; - - @ApiModelProperty("盘库时间/状态1") - private String inventoryTimeStatus1; - - @ApiModelProperty("盘库时间/状态2") - private String inventoryTimeStatus2; - - @ApiModelProperty("盘库时间/状态3") - private String inventoryTimeStatus3; - - @ApiModelProperty("盘点时间/状态1") - private String inventoryCheckTimeStatus1; - - @ApiModelProperty("盘点时间/状态2") - private String inventoryCheckTimeStatus2; - - @ApiModelProperty("盘点时间/状态3") - private String inventoryCheckTimeStatus3; - - @ApiModelProperty("当前使用记录id") - @TableField(updateStrategy = FieldStrategy.ALWAYS) - private String useRecordId; - - @ApiModelProperty("删除标志(0代表存在 1代表删除)") - @TableLogic(value = "0", delval = "1") - private String delFlag; -} +package com.dite.znpt.domain.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author Bear.G + * @date 2025/7/23/周三 17:26 + * @description + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("equipment") +@ApiModel(value="EquipmentEntity对象", description="设备信息表") +public class EquipmentEntity extends AuditableEntity implements Serializable { + @Serial + private static final long serialVersionUID = -6665040704562461286L; + + @ApiModelProperty("设备id") + @TableId(type = IdType.ASSIGN_ID) + private String equipmentId; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("设备名称") + private String equipmentName; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("设备类型") + private String equipmentType; + + @ApiModelProperty("设备状态,枚举:EquipmentStatusEnum") + private String equipmentStatus; + + @ApiModelProperty("使用状态,0-空闲中,1-使用中") + private String useStatus; + + @ApiModelProperty("设备序列号") + private String equipmentSn; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("配置规格/参数") + private String specification; + + @ApiModelProperty("位置状态") + private String locationStatus; + + @ApiModelProperty("设备当前物理位置") + private String physicalLocation; + + @ApiModelProperty("负责人") + private String responsiblePerson; + + @ApiModelProperty("健康状态") + private String healthStatus; + + @ApiModelProperty("采购时间") + private LocalDateTime purchaseTime; + + @ApiModelProperty("入库时间") + private LocalDateTime inStockTime; + + @ApiModelProperty("启用时间") + private LocalDateTime activationTime; + + @ApiModelProperty("预计报废时间") + private LocalDateTime expectedScrapTime; + + @ApiModelProperty("实际报废时间") + private LocalDateTime actualScrapTime; + + @ApiModelProperty("状态变更时间") + private LocalDateTime statusChangeTime; + + @ApiModelProperty("采购订单") + private String purchaseOrder; + + @ApiModelProperty("供应商名称") + private String supplierName; + + // 移除采购价格字段,使用单价和总价替代 + // @ApiModelProperty("采购价格") + // private BigDecimal purchasePrice; + + @ApiModelProperty("当前净值") + private BigDecimal currentNetValue; + + @ApiModelProperty("折旧方法") + private String depreciationMethod; + + @ApiModelProperty("折旧年限") + private Integer depreciationYears; + + @ApiModelProperty("残值") + private BigDecimal salvageValue; + + @ApiModelProperty("保修截止日期") + private LocalDateTime warrantyExpireDate; + + @ApiModelProperty("上次维护日期") + private LocalDateTime lastMaintenanceDate; + + @ApiModelProperty("下次维护日期") + private LocalDateTime nextMaintenanceDate; + + @ApiModelProperty("维护人员") + private String maintenancePerson; + + @ApiModelProperty("库存条码") + private String inventoryBarcode; + + @ApiModelProperty("资产备注") + private String assetRemark; + + @ApiModelProperty("次户号") + private String accountNumber; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("单价") + private BigDecimal unitPrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + // 移除备用状态字段,使用现有的 location_status 字段 + // @ApiModelProperty("备用状态") + // private String spareStatus; + + @ApiModelProperty("盘点依据") + private String inventoryBasis; + + @ApiModelProperty("动态记录") + private String dynamicRecord; + + // 移除认证状态字段,使用现有的 health_status 字段 + // @ApiModelProperty("认证状态") + // private String certificationStatus; + + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("领用时间") + private LocalDateTime borrowingTime; + + @ApiModelProperty("归还时间") + private LocalDateTime returnTime; + + @ApiModelProperty("出库时间") + private LocalDateTime outStockTime; + + @ApiModelProperty("总使用时间") + private String totalUsageTime; + + @ApiModelProperty("折旧率") + private BigDecimal depreciationRate; + + @ApiModelProperty("折旧方法说明") + private String depreciationMethodDesc; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("发票状态") + private String invoiceStatus; + + @ApiModelProperty("附件") + private String attachments; + + @ApiModelProperty("照片") + private String photos; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + + @ApiModelProperty("盘库时间/状态1") + private String inventoryTimeStatus1; + + @ApiModelProperty("盘库时间/状态2") + private String inventoryTimeStatus2; + + @ApiModelProperty("盘库时间/状态3") + private String inventoryTimeStatus3; + + @ApiModelProperty("盘点时间/状态1") + private String inventoryCheckTimeStatus1; + + @ApiModelProperty("盘点时间/状态2") + private String inventoryCheckTimeStatus2; + + @ApiModelProperty("盘点时间/状态3") + private String inventoryCheckTimeStatus3; + + @ApiModelProperty("当前使用记录id") + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String useRecordId; + + @ApiModelProperty("删除标志(0代表存在 1代表删除)") + @TableLogic(value = "0", delval = "1") + private String delFlag; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java index 1747ea6..d746d98 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java @@ -67,9 +67,30 @@ public class EquipmentListReq implements Serializable { @ApiModelProperty("供应商名称") private String supplierName; + @ApiModelProperty("采购订单号") + private String purchaseOrder; + @ApiModelProperty("维护人员") private String maintenancePerson; + @ApiModelProperty("次户号") + private String accountNumber; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("单价") + private java.math.BigDecimal unitPrice; + + @ApiModelProperty("总价") + private java.math.BigDecimal totalPrice; + + @ApiModelProperty("盘点依据") + private String inventoryBasis; + + @ApiModelProperty("动态记录") + private String dynamicRecord; + @ApiModelProperty("库存条码") private String inventoryBarcode; @@ -143,14 +164,17 @@ public class EquipmentListReq implements Serializable { private LocalDateTime updateTimeEnd; @ApiModelProperty("当前页码") - private Integer page = 1; + private Integer pageNum; @ApiModelProperty("每页大小") - private Integer pageSize = 10; + private Integer pageSize; @ApiModelProperty("排序字段") private String orderBy; @ApiModelProperty("排序方向") - private String orderDirection = "desc"; + private String orderDirection; + + @ApiModelProperty("页码") + private Integer page; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java index 430d19f..202d213 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentReq.java @@ -99,8 +99,9 @@ public class EquipmentReq implements Serializable { @Size(max = 200, message = "供应商名称长度不能超过200个字") private String supplierName; - @ApiModelProperty("采购价格") - private BigDecimal purchasePrice; + // 移除采购价格字段,使用单价和总价替代 + // @ApiModelProperty("采购价格") + // private BigDecimal purchasePrice; @ApiModelProperty("当前净值") private BigDecimal currentNetValue; @@ -135,6 +136,32 @@ public class EquipmentReq implements Serializable { @Size(max = 1000, message = "资产备注长度不能超过1000个字") private String assetRemark; + @ApiModelProperty("次户号") + private String accountNumber; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("单价") + private BigDecimal unitPrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + // 移除备用状态字段,使用现有的 location_status 字段 + // @ApiModelProperty("备用状态") + // private String spareStatus; + + @ApiModelProperty("盘点依据") + private String inventoryBasis; + + @ApiModelProperty("动态记录") + private String dynamicRecord; + + // 移除认证状态字段,使用现有的 health_status 字段 + // @ApiModelProperty("认证状态") + // private String certificationStatus; + @ApiModelProperty("使用部门/人") @Size(max = 200, message = "使用部门/人长度不能超过200个字") private String usingDepartment; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java index 9125499..4aac551 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentResp.java @@ -98,8 +98,9 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("供应商名称") private String supplierName; - @ApiModelProperty("采购价格") - private BigDecimal purchasePrice; + // 移除采购价格字段,使用单价和总价替代 + // @ApiModelProperty("采购价格") + // private BigDecimal purchasePrice; @ApiModelProperty("当前净值") private BigDecimal currentNetValue; @@ -131,6 +132,38 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; + @ApiModelProperty("次户号") + private String accountNumber; + + @ApiModelProperty("数量") + private Integer quantity; + + @ApiModelProperty("单价") + private BigDecimal unitPrice; + + @ApiModelProperty("总价") + private BigDecimal totalPrice; + + // 移除备用状态字段,使用现有的 location_status 字段 + // @ApiModelProperty("备用状态") + // private String spareStatus; + + // @ApiModelProperty("备用状态描述") + // private String spareStatusLabel; + + @ApiModelProperty("盘点依据") + private String inventoryBasis; + + @ApiModelProperty("动态记录") + private String dynamicRecord; + + // 移除认证状态字段,使用现有的 health_status 字段 + // @ApiModelProperty("认证状态") + // private String certificationStatus; + + // @ApiModelProperty("认证状态描述") + // private String certificationStatusLabel; + @ApiModelProperty("使用部门/人") private String usingDepartment; diff --git a/core/src/main/java/com/dite/znpt/service/EquipmentService.java b/core/src/main/java/com/dite/znpt/service/EquipmentService.java index 37e3d0c..0f7a604 100644 --- a/core/src/main/java/com/dite/znpt/service/EquipmentService.java +++ b/core/src/main/java/com/dite/znpt/service/EquipmentService.java @@ -7,15 +7,69 @@ import com.dite.znpt.domain.vo.EquipmentListReq; import com.dite.znpt.domain.vo.EquipmentReq; import com.dite.znpt.domain.vo.EquipmentResp; +import java.util.List; +import java.util.Map; + /** + * 设备服务接口 * @author Bear.G * @date 2025/7/23/周三 17:39 * @description */ public interface EquipmentService extends IService { + + /** + * 分页查询设备信息 + */ IPage page(EquipmentListReq req); + + /** + * 查询设备详情 + */ EquipmentResp detail(String equipmentId); + + /** + * 新增设备 + */ void save(EquipmentReq req); + + /** + * 修改设备 + */ void update(String equipmentId, EquipmentReq req); + + /** + * 删除设备 + */ void deleteById(String equipmentId); + + /** + * 批量删除设备 + */ + void batchDelete(List equipmentIds); + + /** + * 获取采购统计信息 + */ + Object getProcurementStats(); + + /** + * 导出采购记录 + */ + byte[] exportProcurement(EquipmentListReq req); + + /** + * 分页查询设备采购记录 + */ + IPage procurementPage(EquipmentListReq req); + + /** + * 新增设备采购记录 + */ + void saveProcurement(EquipmentReq req); + + /** + * 修改设备采购记录 + */ + void updateProcurement(String equipmentId, EquipmentReq req); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java index 0e385a2..cb81ad6 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/EquipmentServiceImpl.java @@ -1,7 +1,6 @@ package com.dite.znpt.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -26,7 +25,8 @@ import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; -import com.dite.znpt.constant.Constants; +import java.util.Map; +import java.util.HashMap; /** * @author Bear.G @@ -41,8 +41,10 @@ public class EquipmentServiceImpl extends ServiceImpl page(EquipmentListReq req) { log.info("开始执行设备分页查询,请求参数: {}", req); - // 创建分页对象 - Page page = new Page<>(req.getPage(), req.getPageSize()); + // 创建分页对象,处理null值 + Integer pageNum = req.getPage() != null ? req.getPage() : (req.getPageNum() != null ? req.getPageNum() : 1); + Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10; + Page page = new Page<>(pageNum, pageSize); // 构建查询条件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -161,6 +163,38 @@ public class EquipmentServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(EquipmentEntity::getEquipmentId, equipmentId) - .set(EquipmentEntity::getEquipmentStatus, "scrap") - .set(EquipmentEntity::getLocationStatus, "scrapped") - .set(EquipmentEntity::getActualScrapTime, LocalDateTime.now()) - .set(EquipmentEntity::getStatusChangeTime, LocalDateTime.now()); - - boolean updateResult = this.update(updateWrapper); - if (!updateResult) { - log.error("设备状态更新失败,设备ID: {}", equipmentId); - throw new ServiceException("设备状态更新失败,请稍后重试"); - } - - // 执行软删除 - 使用 MyBatis-Plus 的逻辑删除方法 - boolean deleteResult = this.removeById(equipmentId); - - if (deleteResult) { - log.info("设备删除成功,设备ID: {}, 设备名称: {}", equipmentId, equipment.getEquipmentName()); - } else { - log.error("设备删除失败,设备ID: {}", equipmentId); - throw new ServiceException("设备删除失败,请稍后重试"); + this.removeById(equipmentId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void batchDelete(List equipmentIds) { + if (equipmentIds == null || equipmentIds.isEmpty()) { + throw new ServiceException("设备ID列表不能为空"); } + this.removeByIds(equipmentIds); + } + + @Override + public byte[] exportProcurement(EquipmentListReq req) { + // 这里可以实现导出功能,返回Excel文件的字节数组 + // 暂时返回空数组,实际项目中需要实现具体的导出逻辑 + return new byte[0]; } /** @@ -474,7 +472,6 @@ public class EquipmentServiceImpl extends ServiceImpl procurementPage(EquipmentListReq req) { + log.info("开始执行设备采购记录分页查询,请求参数: {}", req); + + // 创建分页对象,处理null值 + Integer pageNum = req.getPage() != null ? req.getPage() : (req.getPageNum() != null ? req.getPageNum() : 1); + Integer pageSize = req.getPageSize() != null ? req.getPageSize() : 10; + Page page = new Page<>(pageNum, pageSize); + + // 构建查询条件,参考设备分页查询的逻辑 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + // 不需要手动添加 del_flag 条件,@TableLogic 注解会自动处理 + + // 添加搜索条件并记录日志 + int conditionCount = 0; + + if (StringUtils.hasText(req.getEquipmentName())) { + queryWrapper.like(EquipmentEntity::getEquipmentName, req.getEquipmentName()); + log.info("添加设备名称查询条件: {}", req.getEquipmentName()); + conditionCount++; + } + if (StringUtils.hasText(req.getEquipmentType())) { + queryWrapper.eq(EquipmentEntity::getEquipmentType, req.getEquipmentType()); + log.info("添加设备类型查询条件: {}", req.getEquipmentType()); + conditionCount++; + } + if (StringUtils.hasText(req.getEquipmentStatus())) { + queryWrapper.eq(EquipmentEntity::getEquipmentStatus, req.getEquipmentStatus()); + log.info("添加设备状态查询条件: {}", req.getEquipmentStatus()); + conditionCount++; + } + if (StringUtils.hasText(req.getEquipmentSn())) { + queryWrapper.like(EquipmentEntity::getEquipmentSn, req.getEquipmentSn()); + log.info("添加设备序列号查询条件: {}", req.getEquipmentSn()); + conditionCount++; + } + if (StringUtils.hasText(req.getAssetCode())) { + queryWrapper.like(EquipmentEntity::getAssetCode, req.getAssetCode()); + log.info("添加资产编号查询条件: {}", req.getAssetCode()); + conditionCount++; + } + if (StringUtils.hasText(req.getBrand())) { + queryWrapper.like(EquipmentEntity::getBrand, req.getBrand()); + log.info("添加品牌查询条件: {}", req.getBrand()); + conditionCount++; + } + if (StringUtils.hasText(req.getLocationStatus())) { + queryWrapper.eq(EquipmentEntity::getLocationStatus, req.getLocationStatus()); + log.info("添加位置状态查询条件: {}", req.getLocationStatus()); + conditionCount++; + } + if (StringUtils.hasText(req.getHealthStatus())) { + queryWrapper.eq(EquipmentEntity::getHealthStatus, req.getHealthStatus()); + log.info("添加健康状态查询条件: {}", req.getHealthStatus()); + conditionCount++; + } + if (StringUtils.hasText(req.getResponsiblePerson())) { + queryWrapper.like(EquipmentEntity::getResponsiblePerson, req.getResponsiblePerson()); + log.info("添加负责人查询条件: {}", req.getResponsiblePerson()); + conditionCount++; + } + if (StringUtils.hasText(req.getPhysicalLocation())) { + queryWrapper.like(EquipmentEntity::getPhysicalLocation, req.getPhysicalLocation()); + log.info("添加物理位置查询条件: {}", req.getPhysicalLocation()); + conditionCount++; + } + + // 添加采购相关的搜索条件 + if (StringUtils.hasText(req.getPurchaseOrder())) { + queryWrapper.like(EquipmentEntity::getPurchaseOrder, req.getPurchaseOrder()); + log.info("添加采购订单查询条件: {}", req.getPurchaseOrder()); + conditionCount++; + } + if (StringUtils.hasText(req.getSupplierName())) { + queryWrapper.like(EquipmentEntity::getSupplierName, req.getSupplierName()); + log.info("添加供应商查询条件: {}", req.getSupplierName()); + conditionCount++; + } + if (StringUtils.hasText(req.getAccountNumber())) { + queryWrapper.like(EquipmentEntity::getAccountNumber, req.getAccountNumber()); + log.info("添加次户号查询条件: {}", req.getAccountNumber()); + conditionCount++; + } + if (req.getQuantity() != null) { + queryWrapper.eq(EquipmentEntity::getQuantity, req.getQuantity()); + log.info("添加数量查询条件: {}", req.getQuantity()); + conditionCount++; + } + if (req.getUnitPrice() != null) { + queryWrapper.eq(EquipmentEntity::getUnitPrice, req.getUnitPrice()); + log.info("添加单价查询条件: {}", req.getUnitPrice()); + conditionCount++; + } + if (req.getTotalPrice() != null) { + queryWrapper.eq(EquipmentEntity::getTotalPrice, req.getTotalPrice()); + log.info("添加总价查询条件: {}", req.getTotalPrice()); + conditionCount++; + } + if (StringUtils.hasText(req.getInventoryBasis())) { + queryWrapper.like(EquipmentEntity::getInventoryBasis, req.getInventoryBasis()); + log.info("添加盘点依据查询条件: {}", req.getInventoryBasis()); + conditionCount++; + } + if (StringUtils.hasText(req.getDynamicRecord())) { + queryWrapper.like(EquipmentEntity::getDynamicRecord, req.getDynamicRecord()); + log.info("添加动态记录查询条件: {}", req.getDynamicRecord()); + conditionCount++; + } + + log.info("总共添加了 {} 个查询条件", conditionCount); + + // 按采购时间倒序排列 + queryWrapper.orderByDesc(EquipmentEntity::getPurchaseTime); + + // 执行查询 + IPage result = this.page(page, queryWrapper); + + // 转换为响应对象 + List records = result.getRecords().stream() + .map(this::convertToResp) + .collect(Collectors.toList()); + + // 创建新的分页结果 + Page respPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal()); + respPage.setRecords(records); + + log.info("设备采购记录分页查询完成,总记录数: {}", result.getTotal()); + return respPage; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveProcurement(EquipmentReq req) { + log.info("开始新增设备采购记录,请求参数: {}", req); + + // 验证采购订单号唯一性 + if (StringUtils.hasText(req.getPurchaseOrder())) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EquipmentEntity::getPurchaseOrder, req.getPurchaseOrder()); + long count = this.count(queryWrapper); + if (count > 0) { + throw new ServiceException("采购订单号已存在"); + } + } + + // 设置采购相关的时间字段 + if (req.getPurchaseTime() == null) { + req.setPurchaseTime(LocalDateTime.now()); + } + + // 转换为实体并保存 + EquipmentEntity entity = convertToEntity(req); + this.save(entity); + + log.info("设备采购记录新增成功,设备ID: {}", entity.getEquipmentId()); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateProcurement(String equipmentId, EquipmentReq req) { + log.info("开始修改设备采购记录,设备ID: {}, 请求参数: {}", equipmentId, req); + + // 检查设备是否存在 + EquipmentEntity existingEntity = this.getById(equipmentId); + if (existingEntity == null) { + throw new ServiceException("设备不存在"); + } + + // 验证采购订单号唯一性(排除当前设备) + if (StringUtils.hasText(req.getPurchaseOrder())) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EquipmentEntity::getPurchaseOrder, req.getPurchaseOrder()) + .ne(EquipmentEntity::getEquipmentId, equipmentId); + long count = this.count(queryWrapper); + if (count > 0) { + throw new ServiceException("采购订单号已存在"); + } + } + + // 转换为实体并更新 + EquipmentEntity entity = convertToEntity(req); + entity.setEquipmentId(equipmentId); + this.updateById(entity); + + log.info("设备采购记录修改成功,设备ID: {}", equipmentId); + } + + @Override + public Object getProcurementStats() { + log.info("开始获取采购统计信息"); + + // 统计采购总金额 + LambdaQueryWrapper priceWrapper = new LambdaQueryWrapper<>(); + priceWrapper.isNotNull(EquipmentEntity::getTotalPrice); + List priceEntities = this.list(priceWrapper); + double totalAmount = priceEntities.stream() + .mapToDouble(entity -> entity.getTotalPrice() != null ? entity.getTotalPrice().doubleValue() : 0) + .sum(); + + // 统计供应商数量 + LambdaQueryWrapper supplierWrapper = new LambdaQueryWrapper<>(); + supplierWrapper.isNotNull(EquipmentEntity::getSupplierName) + .groupBy(EquipmentEntity::getSupplierName); + long supplierCount = this.count(supplierWrapper); + + // 统计采购设备数量 + LambdaQueryWrapper equipmentWrapper = new LambdaQueryWrapper<>(); + equipmentWrapper.isNotNull(EquipmentEntity::getPurchaseOrder); + long equipmentCount = this.count(equipmentWrapper); + + // 构建统计结果 + java.util.Map stats = new java.util.HashMap<>(); + stats.put("totalAmount", totalAmount); + stats.put("supplierCount", supplierCount); + stats.put("equipmentCount", equipmentCount); + stats.put("averageAmount", equipmentCount > 0 ? totalAmount / equipmentCount : 0); + + log.info("采购统计信息获取完成,总金额: {}, 供应商数: {}, 设备数: {}", totalAmount, supplierCount, equipmentCount); + return stats; + } } diff --git a/pom.xml b/pom.xml index 72077c0..4ad4c04 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ 17 + core web @@ -50,4 +51,5 @@ + diff --git a/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java b/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java index ac76d30..c11bdd8 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/EquipmentController.java @@ -13,6 +13,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Bear.G @@ -24,6 +26,8 @@ import javax.annotation.Resource; @RequestMapping("/equipment") public class EquipmentController { + private static final Logger log = LoggerFactory.getLogger(EquipmentController.class); + @Resource private EquipmentService equipmentService; @@ -60,4 +64,48 @@ public class EquipmentController { equipmentService.deleteById(equipmentId); return Result.ok(); } + + @ApiOperation(value = "查询设备采购记录", httpMethod = "GET") + @GetMapping("/procurement/page") + public PageResult procurementPage(EquipmentListReq req) { + log.info("=== 设备采购记录查询接口被调用 ==="); + log.info("接收到的请求参数: {}", req); + log.info("设备名称: {}", req.getEquipmentName()); + log.info("设备类型: {}", req.getEquipmentType()); + log.info("供应商名称: {}", req.getSupplierName()); + log.info("采购订单号: {}", req.getPurchaseOrder()); + log.info("次户号: {}", req.getAccountNumber()); + log.info("数量: {}", req.getQuantity()); + log.info("单价: {}", req.getUnitPrice()); + log.info("总价: {}", req.getTotalPrice()); + log.info("盘点依据: {}", req.getInventoryBasis()); + log.info("动态记录: {}", req.getDynamicRecord()); + log.info("页码: {}", req.getPage()); + log.info("每页大小: {}", req.getPageSize()); + log.info("排序字段: {}", req.getOrderBy()); + log.info("排序方向: {}", req.getOrderDirection()); + + IPage page = equipmentService.procurementPage(req); + return PageResult.ok(page.getRecords(), page.getTotal()); + } + + @ApiOperation(value = "新增设备采购记录", httpMethod = "POST") + @PostMapping("/procurement") + public Result addProcurement(@Validated @RequestBody EquipmentReq req){ + equipmentService.saveProcurement(req); + return Result.ok(); + } + + @ApiOperation(value = "修改设备采购记录", httpMethod = "PUT") + @PutMapping("/procurement/{equipmentId}") + public Result editProcurement(@PathVariable String equipmentId, @Validated @RequestBody EquipmentReq req){ + equipmentService.updateProcurement(equipmentId, req); + return Result.ok(); + } + + @ApiOperation(value = "获取采购统计信息", httpMethod = "GET") + @GetMapping("/procurement/stats") + public Result getProcurementStats(){ + return Result.ok(equipmentService.getProcurementStats()); + } } From 8a1c5b04c50fd30e504d370d6bc17b2c04abac45 Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Tue, 5 Aug 2025 16:55:03 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E7=B1=BB=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dite/znpt/domain/entity/EquipmentEntity.java | 1 - .../com/dite/znpt/domain/vo/EquipmentListReq.java | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java index a9f2cfb..84a6ea2 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/EquipmentEntity.java @@ -22,7 +22,6 @@ import java.time.LocalDateTime; @TableName("equipment") @ApiModel(value="EquipmentEntity对象", description="设备信息表") public class EquipmentEntity extends AuditableEntity implements Serializable { - @Serial private static final long serialVersionUID = -6665040704562461286L; @ApiModelProperty("设备id") diff --git a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java index 4f1bfc8..d746d98 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/EquipmentListReq.java @@ -97,6 +97,18 @@ public class EquipmentListReq implements Serializable { @ApiModelProperty("资产备注") private String assetRemark; + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + @ApiModelProperty("采购时间开始") private LocalDateTime purchaseTimeStart;