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] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AE=BE=E5=A4=87=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E6=A8=A1=E5=9D=97=E7=BC=96=E8=BE=91=EF=BC=8C=E5=88=A0?= =?UTF-8?q?=E9=99=A4=EF=BC=8C=E6=9F=A5=E7=9C=8B=E8=AF=A6=E6=83=85=EF=BC=8C?= =?UTF-8?q?=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