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/config/Schedule.java b/core/src/main/java/com/dite/znpt/config/Schedule.java index 6e38623..a9b73f1 100644 --- a/core/src/main/java/com/dite/znpt/config/Schedule.java +++ b/core/src/main/java/com/dite/znpt/config/Schedule.java @@ -41,7 +41,7 @@ public class Schedule { List list = imageService.lambdaQuery().eq(ImageEntity::getPreTreatment, "0") .isNotNull(ImageEntity::getPartId) .isNotNull(ImageEntity::getProjectId).list(); - List partIds = list.stream().map(ImageEntity::getPartId).toList(); + List partIds = list.stream().map(ImageEntity::getPartId).collect(Collectors.toList()); Map partRespMap = partService.listInfos(partIds).stream().collect(Collectors.toMap(PartResp::getPartId, Function.identity())); // 预处理 List successList = new ArrayList<>(); diff --git a/core/src/main/java/com/dite/znpt/converts/EquipmentConverts.java b/core/src/main/java/com/dite/znpt/converts/EquipmentConverts.java new file mode 100644 index 0000000..f2f09d3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/converts/EquipmentConverts.java @@ -0,0 +1,24 @@ +package com.dite.znpt.converts; + +import com.dite.znpt.domain.entity.EquipmentEntity; +import com.dite.znpt.domain.vo.EquipmentReq; +import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.factory.Mappers; + +/** + * 设备信息转换器 + * @author Bear.G + * @date 2025/1/1 + */ +@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) +public interface EquipmentConverts { + EquipmentConverts INSTANCE = Mappers.getMapper(EquipmentConverts.class); + + /** + * 将EquipmentReq转换为EquipmentEntity + * @param req 设备请求对象 + * @return 设备实体对象 + */ + EquipmentEntity toEquipmentEntity(EquipmentReq req); +} \ No newline at end of file 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 098ae58..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 @@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; /** * @author Bear.G @@ -27,6 +29,9 @@ public class EquipmentEntity extends AuditableEntity implements Serializable { @TableId(type = IdType.ASSIGN_ID) private String equipmentId; + @ApiModelProperty("资产编号") + private String assetCode; + @ApiModelProperty("设备名称") private String equipmentName; @@ -45,6 +50,138 @@ public class EquipmentEntity extends AuditableEntity implements Serializable { @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; diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TrainingCertificateEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TrainingCertificateEntity.java new file mode 100644 index 0000000..b597ffd --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TrainingCertificateEntity.java @@ -0,0 +1,71 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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.time.LocalDate; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训证书表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("training_certificate") +@ApiModel(value="TrainingCertificateEntity对象", description="培训证书表") +public class TrainingCertificateEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("证书ID") + @ApiModelProperty("证书ID") + @TableId(value = "certificate_id", type = IdType.ASSIGN_UUID) + private String certificateId; + + @ExcelProperty("培训记录ID") + @ApiModelProperty("培训记录ID") + @TableField("record_id") + private String recordId; + + @ExcelProperty("证书编号") + @ApiModelProperty("证书编号") + @TableField("certificate_code") + private String certificateCode; + + @ExcelProperty("证书名称") + @ApiModelProperty("证书名称") + @TableField("certificate_name") + private String certificateName; + + @ExcelProperty("发证日期") + @ApiModelProperty("发证日期") + @TableField("issue_date") + private LocalDate issueDate; + + @ExcelProperty("有效期至") + @ApiModelProperty("有效期至") + @TableField("valid_until") + private LocalDate validUntil; + + @ExcelProperty("证书文件路径") + @ApiModelProperty("证书文件路径") + @TableField("certificate_path") + private String certificatePath; + + @ExcelProperty("状态") + @ApiModelProperty("状态:VALID-有效,EXPIRED-已过期,REVOKED-已撤销") + @TableField("status") + private String status; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TrainingInteractionEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TrainingInteractionEntity.java new file mode 100644 index 0000000..f8a0d0a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TrainingInteractionEntity.java @@ -0,0 +1,65 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训互动记录表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("training_interaction") +@ApiModel(value="TrainingInteractionEntity对象", description="培训互动记录表") +public class TrainingInteractionEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("互动记录ID") + @ApiModelProperty("互动记录ID") + @TableId(value = "interaction_id", type = IdType.ASSIGN_UUID) + private String interactionId; + + @ExcelProperty("培训计划ID") + @ApiModelProperty("培训计划ID") + @TableField("plan_id") + private String planId; + + @ExcelProperty("用户ID") + @ApiModelProperty("用户ID") + @TableField("user_id") + private String userId; + + @ExcelProperty("用户姓名") + @ApiModelProperty("用户姓名") + @TableField("user_name") + private String userName; + + @ExcelProperty("互动类型") + @ApiModelProperty("互动类型:QUESTION-提问,ANSWER-回答,COMMENT-评论,LIKE-点赞") + @TableField("interaction_type") + private String interactionType; + + @ExcelProperty("互动内容") + @ApiModelProperty("互动内容") + @TableField("content") + private String content; + + @ExcelProperty("父级互动ID") + @ApiModelProperty("父级互动ID(用于回复)") + @TableField("parent_id") + private String parentId; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TrainingMaterialEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TrainingMaterialEntity.java new file mode 100644 index 0000000..5ccb74e --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TrainingMaterialEntity.java @@ -0,0 +1,70 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训材料表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("training_material") +@ApiModel(value="TrainingMaterialEntity对象", description="培训材料表") +public class TrainingMaterialEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("培训材料ID") + @ApiModelProperty("培训材料ID") + @TableId(value = "material_id", type = IdType.ASSIGN_UUID) + private String materialId; + + @ExcelProperty("培训计划ID") + @ApiModelProperty("培训计划ID") + @TableField("plan_id") + private String planId; + + @ExcelProperty("材料名称") + @ApiModelProperty("材料名称") + @TableField("material_name") + private String materialName; + + @ExcelProperty("材料类型") + @ApiModelProperty("材料类型:DOCUMENT-文档,VIDEO-视频,AUDIO-音频,IMAGE-图片") + @TableField("material_type") + private String materialType; + + @ExcelProperty("材料路径") + @ApiModelProperty("材料路径") + @TableField("material_path") + private String materialPath; + + @ExcelProperty("材料大小") + @ApiModelProperty("材料大小(字节)") + @TableField("material_size") + private Long materialSize; + + @ExcelProperty("材料描述") + @ApiModelProperty("材料描述") + @TableField("description") + private String description; + + @ExcelProperty("排序") + @ApiModelProperty("排序") + @TableField("sort_order") + private Integer sortOrder; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TrainingPlanEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TrainingPlanEntity.java new file mode 100644 index 0000000..5c705fe --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TrainingPlanEntity.java @@ -0,0 +1,96 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("training_plan") +@ApiModel(value="TrainingPlanEntity对象", description="培训计划表") +public class TrainingPlanEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("培训计划ID") + @ApiModelProperty("培训计划ID") + @TableId(value = "plan_id", type = IdType.ASSIGN_UUID) + private String planId; + + @ExcelProperty("培训计划名称") + @ApiModelProperty("培训计划名称") + @TableField("plan_name") + private String planName; + + @ExcelProperty("培训类型") + @ApiModelProperty("培训类型:SAFETY-安全教育,SKILL-技能培训,CULTURE-企业文化") + @TableField("training_type") + private String trainingType; + + @ExcelProperty("培训级别") + @ApiModelProperty("培训级别:SITE-现场级,DEPARTMENT-部门级,COMPANY-公司级") + @TableField("training_level") + private String trainingLevel; + + @ExcelProperty("培训内容") + @ApiModelProperty("培训内容") + @TableField("training_content") + private String trainingContent; + + @ExcelProperty("培训讲师") + @ApiModelProperty("培训讲师") + @TableField("trainer") + private String trainer; + + @ExcelProperty("培训地点") + @ApiModelProperty("培训地点") + @TableField("training_location") + private String trainingLocation; + + @ExcelProperty("培训开始时间") + @ApiModelProperty("培训开始时间") + @TableField("start_time") + private LocalDateTime startTime; + + @ExcelProperty("培训结束时间") + @ApiModelProperty("培训结束时间") + @TableField("end_time") + private LocalDateTime endTime; + + @ExcelProperty("培训状态") + @ApiModelProperty("培训状态:DRAFT-草稿,PUBLISHED-已发布,IN_PROGRESS-进行中,COMPLETED-已完成,CANCELLED-已取消") + @TableField("status") + private String status; + + @ExcelProperty("最大参训人数") + @ApiModelProperty("最大参训人数") + @TableField("max_participants") + private Integer maxParticipants; + + @ExcelProperty("培训要求") + @ApiModelProperty("培训要求") + @TableField("requirements") + private String requirements; + + @ExcelProperty("备注") + @ApiModelProperty("备注") + @TableField("remark") + private String remark; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/entity/TrainingRecordEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/TrainingRecordEntity.java new file mode 100644 index 0000000..81d6f86 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/TrainingRecordEntity.java @@ -0,0 +1,92 @@ +package com.dite.znpt.domain.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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 huise23 + * @date 2025/01/01 00:00 + * @Description: 培训记录表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("training_record") +@ApiModel(value="TrainingRecordEntity对象", description="培训记录表") +public class TrainingRecordEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @ExcelProperty("培训记录ID") + @ApiModelProperty("培训记录ID") + @TableId(value = "record_id", type = IdType.ASSIGN_UUID) + private String recordId; + + @ExcelProperty("培训计划ID") + @ApiModelProperty("培训计划ID") + @TableField("plan_id") + private String planId; + + @ExcelProperty("参训人员ID") + @ApiModelProperty("参训人员ID") + @TableField("user_id") + private String userId; + + @ExcelProperty("参训人员姓名") + @ApiModelProperty("参训人员姓名") + @TableField("user_name") + private String userName; + + @ExcelProperty("部门ID") + @ApiModelProperty("部门ID") + @TableField("dept_id") + private String deptId; + + @ExcelProperty("部门名称") + @ApiModelProperty("部门名称") + @TableField("dept_name") + private String deptName; + + @ExcelProperty("出勤状态") + @ApiModelProperty("出勤状态:PENDING-待确认,PRESENT-出席,ABSENT-缺席,LATE-迟到") + @TableField("attendance_status") + private String attendanceStatus; + + @ExcelProperty("签到时间") + @ApiModelProperty("签到时间") + @TableField("sign_in_time") + private LocalDateTime signInTime; + + @ExcelProperty("签退时间") + @ApiModelProperty("签退时间") + @TableField("sign_out_time") + private LocalDateTime signOutTime; + + @ExcelProperty("培训成绩") + @ApiModelProperty("培训成绩") + @TableField("score") + private BigDecimal score; + + @ExcelProperty("培训反馈") + @ApiModelProperty("培训反馈") + @TableField("feedback") + private String feedback; + + @ExcelProperty("证书ID") + @ApiModelProperty("证书ID") + @TableField("certificate_id") + private String certificateId; +} \ No newline at end of file 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 36d9cfc..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 @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDateTime; /** * @author Bear.G @@ -26,4 +27,130 @@ public class EquipmentListReq implements Serializable { @ApiModelProperty("设备状态,0-空闲中,1-使用,3-保养中,4-维修中,5-已报废") private String equipmentStatus; + + @ApiModelProperty("设备序列号") + private String equipmentSn; + + @ApiModelProperty("资产编号") + private String assetCode; + + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("位置状态") + private String locationStatus; + + @ApiModelProperty("健康状态") + private String healthStatus; + + @ApiModelProperty("负责人") + private String responsiblePerson; + + @ApiModelProperty("使用状态,0-空闲中,1-使用中") + private String useStatus; + + @ApiModelProperty("项目ID") + private String projectId; + + @ApiModelProperty("用户ID") + private String userId; + + @ApiModelProperty("设备型号") + private String equipmentModel; + + @ApiModelProperty("配置规格/参数") + private String specification; + + @ApiModelProperty("设备当前物理位置") + private String physicalLocation; + + @ApiModelProperty("供应商名称") + private String supplierName; + + @ApiModelProperty("维护人员") + private String maintenancePerson; + + @ApiModelProperty("库存条码") + private String inventoryBarcode; + + @ApiModelProperty("资产备注") + private String assetRemark; + + @ApiModelProperty("使用部门/人") + private String usingDepartment; + + @ApiModelProperty("发票") + private String invoice; + + @ApiModelProperty("条码") + private String barcode; + + @ApiModelProperty("导入人") + private String importer; + + @ApiModelProperty("采购时间开始") + private LocalDateTime purchaseTimeStart; + + @ApiModelProperty("采购时间结束") + private LocalDateTime purchaseTimeEnd; + + @ApiModelProperty("入库时间开始") + private LocalDateTime inStockTimeStart; + + @ApiModelProperty("入库时间结束") + private LocalDateTime inStockTimeEnd; + + @ApiModelProperty("启用时间开始") + private LocalDateTime activationTimeStart; + + @ApiModelProperty("启用时间结束") + private LocalDateTime activationTimeEnd; + + @ApiModelProperty("预计报废时间开始") + private LocalDateTime expectedScrapTimeStart; + + @ApiModelProperty("预计报废时间结束") + private LocalDateTime expectedScrapTimeEnd; + + @ApiModelProperty("保修截止日期开始") + private LocalDateTime warrantyExpireDateStart; + + @ApiModelProperty("保修截止日期结束") + private LocalDateTime warrantyExpireDateEnd; + + @ApiModelProperty("上次维护日期开始") + private LocalDateTime lastMaintenanceDateStart; + + @ApiModelProperty("上次维护日期结束") + private LocalDateTime lastMaintenanceDateEnd; + + @ApiModelProperty("下次维护日期开始") + private LocalDateTime nextMaintenanceDateStart; + + @ApiModelProperty("下次维护日期结束") + private LocalDateTime nextMaintenanceDateEnd; + + @ApiModelProperty("创建时间开始") + private LocalDateTime createTimeStart; + + @ApiModelProperty("创建时间结束") + private LocalDateTime createTimeEnd; + + @ApiModelProperty("更新时间开始") + private LocalDateTime updateTimeStart; + + @ApiModelProperty("更新时间结束") + private LocalDateTime updateTimeEnd; + + @ApiModelProperty("当前页码") + private Integer page = 1; + + @ApiModelProperty("每页大小") + private Integer pageSize = 10; + + @ApiModelProperty("排序字段") + private String orderBy; + + @ApiModelProperty("排序方向") + private String orderDirection = "desc"; } 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 db16ba9..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 @@ -8,6 +8,8 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; /** * @author Bear.G @@ -22,7 +24,7 @@ public class EquipmentReq implements Serializable { @ApiModelProperty("设备名称") @NotBlank(message = "设备名称不能为空") - @Size(max = 100, message = "设备名称长度不能超过100个字") + @Size(max = 200, message = "设备名称长度不能超过200个字") private String equipmentName; @ApiModelProperty("设备类型, 枚举:EquipmentTypeEnum") @@ -31,11 +33,177 @@ public class EquipmentReq implements Serializable { @ApiModelProperty("设备型号") @NotBlank(message = "设备型号不能为空") - @Size(max = 50, message = "设备型号长度不能超过50个字") + @Size(max = 200, message = "设备型号长度不能超过200个字") private String equipmentModel; @ApiModelProperty("设备SN") @NotBlank(message = "设备SN不能为空") - @Size(max = 50, message = "设备SN长度不能超过50个字") + @Size(max = 100, message = "设备SN长度不能超过100个字") private String equipmentSn; + + @ApiModelProperty("资产编号") + @Size(max = 50, message = "资产编号长度不能超过50个字") + private String assetCode; + + @ApiModelProperty("品牌") + @Size(max = 100, message = "品牌长度不能超过100个字") + private String brand; + + @ApiModelProperty("配置规格/参数") + @Size(max = 500, message = "配置规格长度不能超过500个字") + private String specification; + + @ApiModelProperty("设备状态,枚举:EquipmentStatusEnum") + private String equipmentStatus; + + @ApiModelProperty("使用状态,0-空闲中,1-使用中") + private String useStatus; + + @ApiModelProperty("位置状态") + private String locationStatus; + + @ApiModelProperty("设备当前物理位置") + @Size(max = 200, message = "物理位置长度不能超过200个字") + private String physicalLocation; + + @ApiModelProperty("负责人") + @Size(max = 100, message = "负责人长度不能超过100个字") + 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("采购订单") + @Size(max = 100, message = "采购订单长度不能超过100个字") + private String purchaseOrder; + + @ApiModelProperty("供应商名称") + @Size(max = 200, message = "供应商名称长度不能超过200个字") + 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("维护人员") + @Size(max = 100, message = "维护人员长度不能超过100个字") + private String maintenancePerson; + + @ApiModelProperty("库存条码") + @Size(max = 100, message = "库存条码长度不能超过100个字") + private String inventoryBarcode; + + @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 335a532..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 @@ -6,6 +6,8 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; /** * @author Bear.G @@ -21,6 +23,9 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("设备ID") private String equipmentId; + @ApiModelProperty("资产编号") + private String assetCode; + @ApiModelProperty("设备名称") private String equipmentName; @@ -36,6 +41,12 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("设备SN") private String equipmentSn; + @ApiModelProperty("品牌") + private String brand; + + @ApiModelProperty("配置规格/参数") + private String specification; + @ApiModelProperty("设备状态, 枚举:EquipmentStatusEnum") private String equipmentStatus; @@ -45,6 +56,138 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("设备使用状态,0-空闲中,1-使用中") private String useStatus; + @ApiModelProperty("位置状态") + private String locationStatus; + + @ApiModelProperty("位置状态描述") + private String locationStatusLabel; + + @ApiModelProperty("设备当前物理位置") + private String physicalLocation; + + @ApiModelProperty("负责人") + private String responsiblePerson; + + @ApiModelProperty("健康状态") + private String healthStatus; + + @ApiModelProperty("健康状态描述") + private String healthStatusLabel; + + @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") private String projectId; @@ -56,4 +199,10 @@ public class EquipmentResp implements Serializable { @ApiModelProperty("使用人") private String name; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingMaterialResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingMaterialResp.java new file mode 100644 index 0000000..226da82 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingMaterialResp.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训材料响应VO + */ +@Data +@ApiModel(value="TrainingMaterialResp对象", description="培训材料响应") +public class TrainingMaterialResp { + + @ApiModelProperty("培训材料ID") + private String materialId; + + @ApiModelProperty("材料名称") + private String materialName; + + @ApiModelProperty("材料类型") + private String materialType; + + @ApiModelProperty("材料路径") + private String materialPath; + + @ApiModelProperty("材料大小") + private Long materialSize; + + @ApiModelProperty("材料描述") + private String description; + + @ApiModelProperty("排序") + private Integer sortOrder; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListReq.java new file mode 100644 index 0000000..73c91a4 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划列表请求VO + */ +@Data +@ApiModel(value="TrainingPlanListReq对象", description="培训计划列表请求") +public class TrainingPlanListReq { + + @ApiModelProperty("培训计划名称") + private String planName; + + @ApiModelProperty("培训类型") + private String trainingType; + + @ApiModelProperty("培训级别") + private String trainingLevel; + + @ApiModelProperty("培训状态") + private String status; + + @ApiModelProperty("培训讲师") + private String trainer; + + @ApiModelProperty("开始时间") + private String startTime; + + @ApiModelProperty("结束时间") + private String endTime; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListResp.java new file mode 100644 index 0000000..255c784 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanListResp.java @@ -0,0 +1,69 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划列表响应VO + */ +@Data +@ApiModel(value="TrainingPlanListResp对象", description="培训计划列表响应") +public class TrainingPlanListResp { + + @ApiModelProperty("培训计划ID") + private String planId; + + @ApiModelProperty("培训计划名称") + private String planName; + + @ApiModelProperty("培训类型") + private String trainingType; + + @ApiModelProperty("培训级别") + private String trainingLevel; + + @ApiModelProperty("培训内容") + private String trainingContent; + + @ApiModelProperty("培训讲师") + private String trainer; + + @ApiModelProperty("培训地点") + private String trainingLocation; + + @ApiModelProperty("培训开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + + @ApiModelProperty("培训结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty("培训状态") + private String status; + + @ApiModelProperty("最大参训人数") + private Integer maxParticipants; + + @ApiModelProperty("当前参训人数") + private Integer currentParticipants; + + @ApiModelProperty("培训要求") + private String requirements; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @ApiModelProperty("创建人") + private String createBy; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanReq.java new file mode 100644 index 0000000..c120521 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanReq.java @@ -0,0 +1,63 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划请求VO + */ +@Data +@ApiModel(value="TrainingPlanReq对象", description="培训计划请求") +public class TrainingPlanReq { + + @ApiModelProperty("培训计划名称") + @NotBlank(message = "培训计划名称不能为空") + private String planName; + + @ApiModelProperty("培训类型") + @NotBlank(message = "培训类型不能为空") + private String trainingType; + + @ApiModelProperty("培训级别") + @NotBlank(message = "培训级别不能为空") + private String trainingLevel; + + @ApiModelProperty("培训内容") + private String trainingContent; + + @ApiModelProperty("培训讲师") + private String trainer; + + @ApiModelProperty("培训地点") + private String trainingLocation; + + @ApiModelProperty("培训开始时间") + @NotNull(message = "培训开始时间不能为空") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + + @ApiModelProperty("培训结束时间") + @NotNull(message = "培训结束时间不能为空") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty("培训状态") + private String status; + + @ApiModelProperty("最大参训人数") + private Integer maxParticipants; + + @ApiModelProperty("培训要求") + private String requirements; + + @ApiModelProperty("备注") + private String remark; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanResp.java new file mode 100644 index 0000000..297f959 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingPlanResp.java @@ -0,0 +1,76 @@ +package com.dite.znpt.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划响应VO + */ +@Data +@ApiModel(value="TrainingPlanResp对象", description="培训计划响应") +public class TrainingPlanResp { + + @ApiModelProperty("培训计划ID") + private String planId; + + @ApiModelProperty("培训计划名称") + private String planName; + + @ApiModelProperty("培训类型") + private String trainingType; + + @ApiModelProperty("培训级别") + private String trainingLevel; + + @ApiModelProperty("培训内容") + private String trainingContent; + + @ApiModelProperty("培训讲师") + private String trainer; + + @ApiModelProperty("培训地点") + private String trainingLocation; + + @ApiModelProperty("培训开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + + @ApiModelProperty("培训结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime endTime; + + @ApiModelProperty("培训状态") + private String status; + + @ApiModelProperty("最大参训人数") + private Integer maxParticipants; + + @ApiModelProperty("当前参训人数") + private Integer currentParticipants; + + @ApiModelProperty("培训要求") + private String requirements; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @ApiModelProperty("创建人") + private String createBy; + + @ApiModelProperty("培训材料列表") + private List materials; + + @ApiModelProperty("培训记录列表") + private List records; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TrainingRecordResp.java b/core/src/main/java/com/dite/znpt/domain/vo/TrainingRecordResp.java new file mode 100644 index 0000000..2cccd41 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/TrainingRecordResp.java @@ -0,0 +1,51 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训记录响应VO + */ +@Data +@ApiModel(value="TrainingRecordResp对象", description="培训记录响应") +public class TrainingRecordResp { + + @ApiModelProperty("培训记录ID") + private String recordId; + + @ApiModelProperty("参训人员ID") + private String userId; + + @ApiModelProperty("参训人员姓名") + private String userName; + + @ApiModelProperty("部门ID") + private String deptId; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("出勤状态") + private String attendanceStatus; + + @ApiModelProperty("签到时间") + private LocalDateTime signInTime; + + @ApiModelProperty("签退时间") + private LocalDateTime signOutTime; + + @ApiModelProperty("培训成绩") + private BigDecimal score; + + @ApiModelProperty("培训反馈") + private String feedback; + + @ApiModelProperty("证书ID") + private String certificateId; +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/enums/HealthStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/HealthStatusEnum.java new file mode 100644 index 0000000..53521ab --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/HealthStatusEnum.java @@ -0,0 +1,53 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/31/周四 15:30 + * @description 设备健康状态枚举 + */ +@Getter +public enum HealthStatusEnum { + EXCELLENT("excellent", "优秀"), + GOOD("good", "良好"), + NORMAL("normal", "一般"), + POOR("poor", "较差"), + BAD("bad", "差"); + + private final String code; + private final String desc; + + HealthStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public static HealthStatusEnum getByCode(String code) { + for (HealthStatusEnum e : HealthStatusEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } + + public static String getDescByCode(String code) { + HealthStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll() { + List list = new ArrayList<>(HealthStatusEnum.values().length); + for (HealthStatusEnum e : HealthStatusEnum.values()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/enums/LocationStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/LocationStatusEnum.java new file mode 100644 index 0000000..8f95140 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/LocationStatusEnum.java @@ -0,0 +1,55 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/7/31/周四 15:30 + * @description 设备位置状态枚举 + */ +@Getter +public enum LocationStatusEnum { + IN_STOCK("in_stock", "库存中"), + ALLOCATED("allocated", "已分配"), + REPAIR("repair", "维修中"), + SCRAP("scrap", "待报废"), + SCRAPPED("scrapped", "已报废"), + BORROWED("borrowed", "外借中"), + LOST("lost", "丢失"); + + private final String code; + private final String desc; + + LocationStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + public static LocationStatusEnum getByCode(String code) { + for (LocationStatusEnum e : LocationStatusEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } + + public static String getDescByCode(String code) { + LocationStatusEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll() { + List list = new ArrayList<>(LocationStatusEnum.values().length); + for (LocationStatusEnum e : LocationStatusEnum.values()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(e.code, e.desc); + list.add(jsonObject); + } + return list; + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java b/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java index a0d170f..7d3fe18 100644 --- a/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/EquipmentMapper.java @@ -2,20 +2,14 @@ package com.dite.znpt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dite.znpt.domain.entity.EquipmentEntity; -import com.dite.znpt.domain.vo.EquipmentListReq; -import com.dite.znpt.domain.vo.EquipmentResp; -import org.apache.ibatis.annotations.Param; - -import java.util.List; +import org.apache.ibatis.annotations.Mapper; /** * @author Bear.G * @date 2025/7/23/周三 17:38 * @description */ +@Mapper public interface EquipmentMapper extends BaseMapper { - List selectEquipmentResp(@Param("req") EquipmentListReq req); - - EquipmentResp getEquipmentRespByEquipmentId(@Param("equipmentId") String equipmentId); } diff --git a/core/src/main/java/com/dite/znpt/mapper/TrainingCertificateMapper.java b/core/src/main/java/com/dite/znpt/mapper/TrainingCertificateMapper.java new file mode 100644 index 0000000..57d2fc1 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TrainingCertificateMapper.java @@ -0,0 +1,15 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TrainingCertificateEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训证书表Mapper接口 + */ +@Mapper +public interface TrainingCertificateMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/TrainingInteractionMapper.java b/core/src/main/java/com/dite/znpt/mapper/TrainingInteractionMapper.java new file mode 100644 index 0000000..df2391a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TrainingInteractionMapper.java @@ -0,0 +1,15 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TrainingInteractionEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训互动记录表Mapper接口 + */ +@Mapper +public interface TrainingInteractionMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/TrainingMaterialMapper.java b/core/src/main/java/com/dite/znpt/mapper/TrainingMaterialMapper.java new file mode 100644 index 0000000..70a3c72 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TrainingMaterialMapper.java @@ -0,0 +1,15 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TrainingMaterialEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训材料表Mapper接口 + */ +@Mapper +public interface TrainingMaterialMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/TrainingPlanMapper.java b/core/src/main/java/com/dite/znpt/mapper/TrainingPlanMapper.java new file mode 100644 index 0000000..e1b2063 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TrainingPlanMapper.java @@ -0,0 +1,27 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TrainingPlanEntity; +import com.dite.znpt.domain.vo.TrainingPlanListReq; +import com.dite.znpt.domain.vo.TrainingPlanListResp; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划表Mapper接口 + */ +@Mapper +public interface TrainingPlanMapper extends BaseMapper { + + /** + * 查询培训计划列表 + * + * @param req 查询条件 + * @return 培训计划列表 + */ + List listTrainingPlanListResp(@Param("req") TrainingPlanListReq req); +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/TrainingRecordMapper.java b/core/src/main/java/com/dite/znpt/mapper/TrainingRecordMapper.java new file mode 100644 index 0000000..a7f3371 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/TrainingRecordMapper.java @@ -0,0 +1,15 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.TrainingRecordEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训记录表Mapper接口 + */ +@Mapper +public interface TrainingRecordMapper extends BaseMapper { + +} \ No newline at end of file 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 5c21c21..37e3d0c 100644 --- a/core/src/main/java/com/dite/znpt/service/EquipmentService.java +++ b/core/src/main/java/com/dite/znpt/service/EquipmentService.java @@ -1,13 +1,11 @@ package com.dite.znpt.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.dite.znpt.domain.entity.EquipmentEntity; import com.dite.znpt.domain.vo.EquipmentListReq; import com.dite.znpt.domain.vo.EquipmentReq; import com.dite.znpt.domain.vo.EquipmentResp; -import com.dite.znpt.domain.vo.EquipmentUseRecordReq; - -import java.util.List; /** * @author Bear.G @@ -15,8 +13,7 @@ import java.util.List; * @description */ public interface EquipmentService extends IService { - List page(EquipmentListReq req); - List list(EquipmentListReq req); + IPage page(EquipmentListReq req); EquipmentResp detail(String equipmentId); void save(EquipmentReq req); void update(String equipmentId, EquipmentReq req); diff --git a/core/src/main/java/com/dite/znpt/service/TrainingPlanService.java b/core/src/main/java/com/dite/znpt/service/TrainingPlanService.java new file mode 100644 index 0000000..b181b2a --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/TrainingPlanService.java @@ -0,0 +1,78 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.TrainingPlanEntity; +import com.dite.znpt.domain.vo.TrainingPlanListReq; +import com.dite.znpt.domain.vo.TrainingPlanListResp; +import com.dite.znpt.domain.vo.TrainingPlanReq; +import com.dite.znpt.domain.vo.TrainingPlanResp; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划表服务接口 + */ +public interface TrainingPlanService extends IService { + + /** + * 分页查询培训计划列表 + * + * @param req 查询条件 + * @return 培训计划列表 + */ + List page(TrainingPlanListReq req); + + /** + * 查询培训计划列表 + * + * @param req 查询条件 + * @return 培训计划列表 + */ + List list(TrainingPlanListReq req); + + /** + * 查询培训计划详情 + * + * @param planId 培训计划ID + * @return 培训计划详情 + */ + TrainingPlanResp detail(String planId); + + /** + * 新增培训计划 + * + * @param req 培训计划信息 + */ + void save(TrainingPlanReq req); + + /** + * 更新培训计划 + * + * @param planId 培训计划ID + * @param req 培训计划信息 + */ + void update(String planId, TrainingPlanReq req); + + /** + * 删除培训计划 + * + * @param planId 培训计划ID + */ + void deleteById(String planId); + + /** + * 发布培训计划 + * + * @param planId 培训计划ID + */ + void publish(String planId); + + /** + * 取消培训计划 + * + * @param planId 培训计划ID + */ + void cancel(String planId); +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/service/TrainingRecordService.java b/core/src/main/java/com/dite/znpt/service/TrainingRecordService.java new file mode 100644 index 0000000..1df11b3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/TrainingRecordService.java @@ -0,0 +1,13 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.TrainingRecordEntity; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训记录表服务接口 + */ +public interface TrainingRecordService extends IService { + +} \ No newline at end of file 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 8b6b013..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,97 +1,387 @@ package com.dite.znpt.service.impl; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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.Converts; +// 移除EquipmentConverts导入,使用手动转换 import com.dite.znpt.domain.entity.EquipmentEntity; -import com.dite.znpt.domain.entity.EquipmentUseRecordEntity; import com.dite.znpt.domain.vo.EquipmentListReq; import com.dite.znpt.domain.vo.EquipmentReq; import com.dite.znpt.domain.vo.EquipmentResp; -import com.dite.znpt.domain.vo.EquipmentUseRecordReq; import com.dite.znpt.enums.EquipmentStatusEnum; import com.dite.znpt.enums.EquipmentTypeEnum; +import com.dite.znpt.enums.HealthStatusEnum; +import com.dite.znpt.enums.LocationStatusEnum; import com.dite.znpt.exception.ServiceException; import com.dite.znpt.mapper.EquipmentMapper; import com.dite.znpt.service.EquipmentService; -import com.dite.znpt.service.EquipmentUseRecordService; -import com.dite.znpt.service.ProjectService; -import com.dite.znpt.service.UserService; -import com.dite.znpt.util.PageUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; -import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; +import java.util.stream.Collectors; +import com.dite.znpt.constant.Constants; /** * @author Bear.G * @date 2025/7/23/周三 17:39 * @description */ +@Slf4j @Service public class EquipmentServiceImpl extends ServiceImpl implements EquipmentService { - @Resource - private EquipmentUseRecordService equipmentUseRecordService; - - @Resource - private UserService userService; - - @Resource - private ProjectService projectService; - @Override - public List page(EquipmentListReq req) { - PageUtil.startPage(); - return this.list(req); - } - - @Override - public List list(EquipmentListReq req) { - List list = this.baseMapper.selectEquipmentResp(req); - list.forEach(resp -> { - resp.setEquipmentTypeLabel(EquipmentTypeEnum.getDescByCode(resp.getEquipmentType())); - resp.setEquipmentStatusLabel(EquipmentStatusEnum.getDescByCode(resp.getEquipmentStatus())); - }); - return list; + public IPage page(EquipmentListReq req) { + log.info("开始执行设备分页查询,请求参数: {}", req); + + // 创建分页对象 + Page page = new Page<>(req.getPage(), req.getPageSize()); + + // 构建查询条件 + 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.getUseStatus())) { + queryWrapper.eq(EquipmentEntity::getUseStatus, req.getUseStatus()); + log.info("添加使用状态查询条件: {}", req.getUseStatus()); + conditionCount++; + } + + // 新增查询条件 + if (StringUtils.hasText(req.getEquipmentModel())) { + queryWrapper.like(EquipmentEntity::getEquipmentModel, req.getEquipmentModel()); + log.info("添加设备型号查询条件: {}", req.getEquipmentModel()); + conditionCount++; + } + if (StringUtils.hasText(req.getSpecification())) { + queryWrapper.like(EquipmentEntity::getSpecification, req.getSpecification()); + log.info("添加配置规格查询条件: {}", req.getSpecification()); + conditionCount++; + } + if (StringUtils.hasText(req.getPhysicalLocation())) { + queryWrapper.like(EquipmentEntity::getPhysicalLocation, req.getPhysicalLocation()); + log.info("添加物理位置查询条件: {}", req.getPhysicalLocation()); + conditionCount++; + } + if (StringUtils.hasText(req.getSupplierName())) { + queryWrapper.like(EquipmentEntity::getSupplierName, req.getSupplierName()); + log.info("添加供应商名称查询条件: {}", req.getSupplierName()); + conditionCount++; + } + if (StringUtils.hasText(req.getMaintenancePerson())) { + queryWrapper.like(EquipmentEntity::getMaintenancePerson, req.getMaintenancePerson()); + log.info("添加维护人员查询条件: {}", req.getMaintenancePerson()); + conditionCount++; + } + if (StringUtils.hasText(req.getInventoryBarcode())) { + queryWrapper.like(EquipmentEntity::getInventoryBarcode, req.getInventoryBarcode()); + log.info("添加库存条码查询条件: {}", req.getInventoryBarcode()); + conditionCount++; + } + if (StringUtils.hasText(req.getAssetRemark())) { + queryWrapper.like(EquipmentEntity::getAssetRemark, req.getAssetRemark()); + log.info("添加资产备注查询条件: {}", req.getAssetRemark()); + conditionCount++; + } + + // 新增字段查询条件 + if (StringUtils.hasText(req.getUsingDepartment())) { + queryWrapper.like(EquipmentEntity::getUsingDepartment, req.getUsingDepartment()); + log.info("添加使用部门/人查询条件: {}", req.getUsingDepartment()); + conditionCount++; + } + if (StringUtils.hasText(req.getInvoice())) { + queryWrapper.like(EquipmentEntity::getInvoice, req.getInvoice()); + log.info("添加发票查询条件: {}", req.getInvoice()); + conditionCount++; + } + if (StringUtils.hasText(req.getBarcode())) { + queryWrapper.like(EquipmentEntity::getBarcode, req.getBarcode()); + log.info("添加条码查询条件: {}", req.getBarcode()); + conditionCount++; + } + if (StringUtils.hasText(req.getImporter())) { + queryWrapper.like(EquipmentEntity::getImporter, req.getImporter()); + log.info("添加导入人查询条件: {}", req.getImporter()); + conditionCount++; + } + + // 时间范围查询 + if (req.getPurchaseTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getPurchaseTime, req.getPurchaseTimeStart()); + log.info("添加采购时间开始查询条件: {}", req.getPurchaseTimeStart()); + conditionCount++; + } + if (req.getPurchaseTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getPurchaseTime, req.getPurchaseTimeEnd()); + log.info("添加采购时间结束查询条件: {}", req.getPurchaseTimeEnd()); + conditionCount++; + } + if (req.getInStockTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getInStockTime, req.getInStockTimeStart()); + conditionCount++; + } + if (req.getInStockTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getInStockTime, req.getInStockTimeEnd()); + conditionCount++; + } + if (req.getActivationTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getActivationTime, req.getActivationTimeStart()); + conditionCount++; + } + if (req.getActivationTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getActivationTime, req.getActivationTimeEnd()); + conditionCount++; + } + if (req.getExpectedScrapTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getExpectedScrapTime, req.getExpectedScrapTimeStart()); + conditionCount++; + } + if (req.getExpectedScrapTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getExpectedScrapTime, req.getExpectedScrapTimeEnd()); + conditionCount++; + } + if (req.getWarrantyExpireDateStart() != null) { + queryWrapper.ge(EquipmentEntity::getWarrantyExpireDate, req.getWarrantyExpireDateStart()); + conditionCount++; + } + if (req.getWarrantyExpireDateEnd() != null) { + queryWrapper.le(EquipmentEntity::getWarrantyExpireDate, req.getWarrantyExpireDateEnd()); + conditionCount++; + } + if (req.getLastMaintenanceDateStart() != null) { + queryWrapper.ge(EquipmentEntity::getLastMaintenanceDate, req.getLastMaintenanceDateStart()); + conditionCount++; + } + if (req.getLastMaintenanceDateEnd() != null) { + queryWrapper.le(EquipmentEntity::getLastMaintenanceDate, req.getLastMaintenanceDateEnd()); + conditionCount++; + } + if (req.getNextMaintenanceDateStart() != null) { + queryWrapper.ge(EquipmentEntity::getNextMaintenanceDate, req.getNextMaintenanceDateStart()); + conditionCount++; + } + if (req.getNextMaintenanceDateEnd() != null) { + queryWrapper.le(EquipmentEntity::getNextMaintenanceDate, req.getNextMaintenanceDateEnd()); + conditionCount++; + } + if (req.getCreateTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getCreateTime, req.getCreateTimeStart()); + conditionCount++; + } + if (req.getCreateTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getCreateTime, req.getCreateTimeEnd()); + conditionCount++; + } + if (req.getUpdateTimeStart() != null) { + queryWrapper.ge(EquipmentEntity::getUpdateTime, req.getUpdateTimeStart()); + conditionCount++; + } + if (req.getUpdateTimeEnd() != null) { + queryWrapper.le(EquipmentEntity::getUpdateTime, req.getUpdateTimeEnd()); + conditionCount++; + } + + log.info("总共添加了 {} 个查询条件", conditionCount); + + // 排序处理 + if (StringUtils.hasText(req.getOrderBy())) { + String orderBy = req.getOrderBy(); + String orderDirection = "desc".equalsIgnoreCase(req.getOrderDirection()) ? "desc" : "asc"; + + switch (orderBy.toLowerCase()) { + case "equipment_name": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getEquipmentName); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getEquipmentName); + } + break; + case "equipment_sn": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getEquipmentSn); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getEquipmentSn); + } + break; + case "asset_code": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getAssetCode); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getAssetCode); + } + break; + case "equipment_type": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getEquipmentType); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getEquipmentType); + } + break; + case "equipment_status": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getEquipmentStatus); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getEquipmentStatus); + } + break; + case "brand": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getBrand); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getBrand); + } + break; + case "responsible_person": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getResponsiblePerson); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getResponsiblePerson); + } + break; + case "purchase_time": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getPurchaseTime); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getPurchaseTime); + } + break; + case "purchase_price": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getPurchasePrice); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getPurchasePrice); + } + break; + case "update_time": + if ("desc".equals(orderDirection)) { + queryWrapper.orderByDesc(EquipmentEntity::getUpdateTime); + } else { + queryWrapper.orderByAsc(EquipmentEntity::getUpdateTime); + } + break; + default: + // 默认按创建时间倒序 + queryWrapper.orderByDesc(EquipmentEntity::getCreateTime); + break; + } + log.info("添加排序条件: {} {}", orderBy, orderDirection); + } else { + // 默认按创建时间倒序 + queryWrapper.orderByDesc(EquipmentEntity::getCreateTime); + log.info("使用默认排序: 按创建时间倒序"); + } + + log.info("执行分页查询,SQL条件: {}", queryWrapper.getTargetSql()); + + // 执行分页查询 + IPage equipmentPage = this.page(page, queryWrapper); + + log.info("查询完成,总记录数: {}, 当前页记录数: {}", equipmentPage.getTotal(), equipmentPage.getRecords().size()); + + // 转换为响应对象 + List equipmentRespList = equipmentPage.getRecords().stream() + .map(this::convertToResp) + .collect(Collectors.toList()); + + // 创建响应分页对象 + Page respPage = new Page<>(equipmentPage.getCurrent(), equipmentPage.getSize(), equipmentPage.getTotal()); + respPage.setRecords(equipmentRespList); + + return respPage; } @Override public EquipmentResp detail(String equipmentId) { - EquipmentResp resp = this.baseMapper.getEquipmentRespByEquipmentId(equipmentId); - resp.setEquipmentTypeLabel(EquipmentTypeEnum.getDescByCode(resp.getEquipmentType())); - resp.setEquipmentStatusLabel(EquipmentStatusEnum.getDescByCode(resp.getEquipmentStatus())); - return resp; + EquipmentEntity equipment = this.getById(equipmentId); + if (equipment == null) { + throw new ServiceException(Message.EQUIPMENT_ID_NOT_EXIST); + } + return convertToResp(equipment); } @Transactional(rollbackFor = Exception.class) @Override public void save(EquipmentReq req) { - EquipmentEntity entity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); - if(null != getByEquipmentSn(entity.getEquipmentSn())){ + EquipmentEntity entity = convertToEntity(req); + if (getByEquipmentSn(entity.getEquipmentSn()) != null) { throw new ServiceException(Message.EQUIPMENT_SN_EXIST); } this.save(entity); } - private EquipmentEntity getByEquipmentSn(String equipmentSn){ - return this.getOne(Wrappers.lambdaQuery(EquipmentEntity.class).eq(EquipmentEntity::getEquipmentSn, equipmentSn)); + private EquipmentEntity getByEquipmentSn(String equipmentSn) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(EquipmentEntity::getEquipmentSn, equipmentSn); + return this.getOne(queryWrapper); } @Transactional(rollbackFor = Exception.class) @Override public void update(String equipmentId, EquipmentReq req) { EquipmentEntity equipment = this.getById(equipmentId); - if(null == equipment){ + if (equipment == null) { throw new ServiceException(Message.EQUIPMENT_ID_NOT_EXIST); } - if(!equipment.getEquipmentSn().equals(req.getEquipmentSn()) && null != getByEquipmentSn(req.getEquipmentSn())){ + if (!equipment.getEquipmentSn().equals(req.getEquipmentSn()) && getByEquipmentSn(req.getEquipmentSn()) != null) { throw new ServiceException(Message.EQUIPMENT_SN_EXIST); } - EquipmentEntity entity = Converts.INSTANCE.toEquipmentUseRecordEntity(req); + EquipmentEntity entity = convertToEntity(req); entity.setEquipmentId(equipmentId); this.updateById(entity); } @@ -99,10 +389,194 @@ 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; + } + + /** + * 转换为响应对象 + */ + private EquipmentResp convertToResp(EquipmentEntity entity) { + EquipmentResp resp = new EquipmentResp(); + resp.setEquipmentId(entity.getEquipmentId()); + resp.setAssetCode(entity.getAssetCode()); + resp.setEquipmentName(entity.getEquipmentName()); + resp.setEquipmentType(entity.getEquipmentType()); + resp.setEquipmentTypeLabel(EquipmentTypeEnum.getDescByCode(entity.getEquipmentType())); + resp.setEquipmentModel(entity.getEquipmentModel()); + resp.setEquipmentSn(entity.getEquipmentSn()); + resp.setBrand(entity.getBrand()); + resp.setSpecification(entity.getSpecification()); + resp.setEquipmentStatus(entity.getEquipmentStatus()); + resp.setEquipmentStatusLabel(EquipmentStatusEnum.getDescByCode(entity.getEquipmentStatus())); + resp.setUseStatus(entity.getUseStatus()); + resp.setLocationStatus(entity.getLocationStatus()); + resp.setLocationStatusLabel(LocationStatusEnum.getDescByCode(entity.getLocationStatus())); + resp.setPhysicalLocation(entity.getPhysicalLocation()); + resp.setResponsiblePerson(entity.getResponsiblePerson()); + resp.setHealthStatus(entity.getHealthStatus()); + resp.setHealthStatusLabel(HealthStatusEnum.getDescByCode(entity.getHealthStatus())); + resp.setPurchaseTime(entity.getPurchaseTime()); + resp.setInStockTime(entity.getInStockTime()); + resp.setActivationTime(entity.getActivationTime()); + resp.setExpectedScrapTime(entity.getExpectedScrapTime()); + resp.setActualScrapTime(entity.getActualScrapTime()); + resp.setStatusChangeTime(entity.getStatusChangeTime()); + resp.setPurchaseOrder(entity.getPurchaseOrder()); + resp.setSupplierName(entity.getSupplierName()); + resp.setPurchasePrice(entity.getPurchasePrice()); + resp.setCurrentNetValue(entity.getCurrentNetValue()); + resp.setDepreciationMethod(entity.getDepreciationMethod()); + resp.setDepreciationYears(entity.getDepreciationYears()); + resp.setSalvageValue(entity.getSalvageValue()); + resp.setWarrantyExpireDate(entity.getWarrantyExpireDate()); + resp.setLastMaintenanceDate(entity.getLastMaintenanceDate()); + resp.setNextMaintenanceDate(entity.getNextMaintenanceDate()); + resp.setMaintenancePerson(entity.getMaintenancePerson()); + resp.setInventoryBarcode(entity.getInventoryBarcode()); + resp.setAssetRemark(entity.getAssetRemark()); + + // 新增字段转换 + resp.setUsingDepartment(entity.getUsingDepartment()); + resp.setBorrowingTime(entity.getBorrowingTime()); + resp.setReturnTime(entity.getReturnTime()); + resp.setOutStockTime(entity.getOutStockTime()); + resp.setTotalUsageTime(entity.getTotalUsageTime()); + resp.setDepreciationRate(entity.getDepreciationRate()); + resp.setDepreciationMethodDesc(entity.getDepreciationMethodDesc()); + resp.setInvoice(entity.getInvoice()); + resp.setInvoiceStatus(entity.getInvoiceStatus()); + resp.setAttachments(entity.getAttachments()); + resp.setPhotos(entity.getPhotos()); + resp.setBarcode(entity.getBarcode()); + resp.setImporter(entity.getImporter()); + resp.setInventoryTimeStatus1(entity.getInventoryTimeStatus1()); + resp.setInventoryTimeStatus2(entity.getInventoryTimeStatus2()); + resp.setInventoryTimeStatus3(entity.getInventoryTimeStatus3()); + resp.setInventoryCheckTimeStatus1(entity.getInventoryCheckTimeStatus1()); + resp.setInventoryCheckTimeStatus2(entity.getInventoryCheckTimeStatus2()); + resp.setInventoryCheckTimeStatus3(entity.getInventoryCheckTimeStatus3()); + + resp.setCreateTime(entity.getCreateTime()); + resp.setUpdateTime(entity.getUpdateTime()); + + return resp; } } diff --git a/core/src/main/java/com/dite/znpt/service/impl/TrainingPlanServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/TrainingPlanServiceImpl.java new file mode 100644 index 0000000..cee73ee --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/TrainingPlanServiceImpl.java @@ -0,0 +1,123 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import com.dite.znpt.domain.entity.TrainingPlanEntity; +import com.dite.znpt.domain.vo.TrainingPlanListReq; +import com.dite.znpt.domain.vo.TrainingPlanListResp; +import com.dite.znpt.domain.vo.TrainingPlanReq; +import com.dite.znpt.domain.vo.TrainingPlanResp; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.TrainingPlanMapper; +import com.dite.znpt.service.TrainingPlanService; +import com.dite.znpt.util.PageUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class TrainingPlanServiceImpl extends ServiceImpl implements TrainingPlanService { + + @Override + public List page(TrainingPlanListReq req) { + PageUtil.startPage(); + return this.list(req); + } + + @Override + public List list(TrainingPlanListReq req) { + return this.baseMapper.listTrainingPlanListResp(req); + } + + @Override + public TrainingPlanResp detail(String planId) { + TrainingPlanEntity entity = this.baseMapper.selectById(planId); + if (entity == null) { + throw new ServiceException("培训计划不存在"); + } + return BeanUtil.copyProperties(entity, TrainingPlanResp.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(TrainingPlanReq req) { + TrainingPlanEntity entity = BeanUtil.copyProperties(req, TrainingPlanEntity.class); + entity.setStatus("DRAFT"); + entity.setCreateBy(StpUtil.getLoginIdAsString()); + this.baseMapper.insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(String planId, TrainingPlanReq req) { + TrainingPlanEntity entity = this.baseMapper.selectById(planId); + if (entity == null) { + throw new ServiceException("培训计划不存在"); + } + + BeanUtil.copyProperties(req, entity); + entity.setUpdateBy(StpUtil.getLoginIdAsString()); + this.baseMapper.updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteById(String planId) { + TrainingPlanEntity entity = this.baseMapper.selectById(planId); + if (entity == null) { + throw new ServiceException("培训计划不存在"); + } + + // 检查是否可以删除 + if ("PUBLISHED".equals(entity.getStatus()) || "IN_PROGRESS".equals(entity.getStatus())) { + throw new ServiceException("已发布或进行中的培训计划不能删除"); + } + + this.baseMapper.deleteById(planId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void publish(String planId) { + TrainingPlanEntity entity = this.baseMapper.selectById(planId); + if (entity == null) { + throw new ServiceException("培训计划不存在"); + } + + if (!"DRAFT".equals(entity.getStatus())) { + throw new ServiceException("只有草稿状态的培训计划才能发布"); + } + + entity.setStatus("PUBLISHED"); + entity.setUpdateBy(StpUtil.getLoginIdAsString()); + this.baseMapper.updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(String planId) { + TrainingPlanEntity entity = this.baseMapper.selectById(planId); + if (entity == null) { + throw new ServiceException("培训计划不存在"); + } + + if ("COMPLETED".equals(entity.getStatus()) || "CANCELLED".equals(entity.getStatus())) { + throw new ServiceException("已完成或已取消的培训计划不能取消"); + } + + entity.setStatus("CANCELLED"); + entity.setUpdateBy(StpUtil.getLoginIdAsString()); + this.baseMapper.updateById(entity); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/service/impl/TrainingRecordServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/TrainingRecordServiceImpl.java new file mode 100644 index 0000000..5da01f7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/TrainingRecordServiceImpl.java @@ -0,0 +1,17 @@ +package com.dite.znpt.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.TrainingRecordEntity; +import com.dite.znpt.mapper.TrainingRecordMapper; +import com.dite.znpt.service.TrainingRecordService; +import org.springframework.stereotype.Service; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训记录表服务实现类 + */ +@Service +public class TrainingRecordServiceImpl extends ServiceImpl implements TrainingRecordService { + +} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/util/PageUtil.java b/core/src/main/java/com/dite/znpt/util/PageUtil.java index 5654106..a2716cb 100644 --- a/core/src/main/java/com/dite/znpt/util/PageUtil.java +++ b/core/src/main/java/com/dite/znpt/util/PageUtil.java @@ -18,6 +18,10 @@ public class PageUtil extends PageHelper { PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); } + public static void startPage(Integer pageNum, Integer pageSize) { + PageHelper.startPage(pageNum, pageSize); + } + public static void clearPage() { PageHelper.clearPage(); } diff --git a/core/src/main/resources/mapper/EquipmentMapper.xml b/core/src/main/resources/mapper/EquipmentMapper.xml deleted file mode 100644 index cf8beda..0000000 --- a/core/src/main/resources/mapper/EquipmentMapper.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/core/src/main/resources/mapper/TrainingPlanMapper.xml b/core/src/main/resources/mapper/TrainingPlanMapper.xml new file mode 100644 index 0000000..fdfcddf --- /dev/null +++ b/core/src/main/resources/mapper/TrainingPlanMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + \ No newline at end of file diff --git a/doc/aesDemo.html b/doc/aesDemo.html deleted file mode 100644 index 6f84f51..0000000 --- a/doc/aesDemo.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - AES加密解密工具 - - - - - - - -
- -
-

- AES加密解密工具 -

-

- 使用先进的AES加密算法保护您的数据安全,支持多种加密模式和密钥长度 -

-
- - -
- -
-

- 加密 -

-
-
- - -
- -
- -
- - -
-
- -
- -
-
- - -
-
- - -
-
-
- - - - -
-
- - -
-

- 解密 -

-
-
- - -
- -
- - -
- -
- -
-
- - -
-
- - -
-
-
- - - - -
-
-
- - -
-

- 结果 -

-
-
- -
- - -
-
-
- -
- - -
-
-
-
- - -
- - 操作成功 -
-
- - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index fcdc462..72077c0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,54 +1,53 @@ - - - 4.0.0 - - com.dite.znpt - parent - 1.0.0-SNAPSHOT - - - 17 - - - core - sip - web - flowable - - pom - - - - - - org.springframework.boot - spring-boot-starter-parent - 2.7.18 - pom - import - - - - cn.hutool - hutool-all - 5.8.24 - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 17 - 17 - - - - - - + + + 4.0.0 + + com.dite.znpt + parent + 1.0.0-SNAPSHOT + + + 17 + + + core + web + flowable + + pom + + + + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + pom + import + + + + cn.hutool + hutool-all + 5.8.24 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 17 + 17 + + + + + + diff --git a/web/pom.xml b/web/pom.xml index c6d6423..0eadebf 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -20,11 +20,6 @@ - - com.dite.znpt - sip - 1.0.0-SNAPSHOT - com.dite.znpt core @@ -55,6 +50,7 @@ + diff --git a/web/src/main/java/com/dite/znpt/web/controller/CommonController.java b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java index 5371ed3..ee57378 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/CommonController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/CommonController.java @@ -1,11 +1,11 @@ package com.dite.znpt.web.controller; import com.dite.znpt.constant.Message; -import com.dite.znpt.domain.Result; import com.dite.znpt.domain.vo.ImageWorkReq; import com.dite.znpt.enums.*; import com.dite.znpt.exception.ServiceException; import com.dite.znpt.service.ImageService; +import com.dite.znpt.domain.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -15,9 +15,9 @@ import javax.annotation.Resource; import java.io.IOException; /** - * @Author: gaoxiong - * @Date: 2025/4/29 23:06 - * @Description: + * @author Bear.G + * @date 2025/7/24/周四 14:35 + * @description */ @Api(tags = "公共信息") @RestController @@ -175,5 +175,22 @@ public class CommonController { return Result.ok(EquipmentTypeEnum.listAll()); } + @ApiOperation(value = "查询设备状态", httpMethod = "GET") + @GetMapping("/list/equipment-status") + public Result listEquipmentStatus(){ + return Result.ok(EquipmentStatusEnum.listAll()); + } + + @ApiOperation(value = "查询设备位置状态", httpMethod = "GET") + @GetMapping("/list/location-status") + public Result listLocationStatus(){ + return Result.ok(LocationStatusEnum.listAll()); + } + + @ApiOperation(value = "查询设备健康状态", httpMethod = "GET") + @GetMapping("/list/health-status") + public Result listHealthStatus(){ + return Result.ok(HealthStatusEnum.listAll()); + } } 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 b3318b5..ac76d30 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 @@ -1,5 +1,6 @@ package com.dite.znpt.web.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.Result; import com.dite.znpt.domain.vo.EquipmentListReq; @@ -12,14 +13,13 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.List; /** * @author Bear.G * @date 2025/7/23/周三 17:41 * @description */ -@Api(tags = "设备信息") +@Api(tags = "设备信息----------------------------") @RestController @RequestMapping("/equipment") public class EquipmentController { @@ -30,13 +30,8 @@ public class EquipmentController { @ApiOperation(value = "分页查询设备信息列表", httpMethod = "GET") @GetMapping("/page") public PageResult page(EquipmentListReq req) { - return PageResult.ok(equipmentService.page(req)); - } - - @ApiOperation(value = "查询设备信息列表", httpMethod = "GET") - @GetMapping("/list") - public Result> list(EquipmentListReq req) { - return Result.ok(equipmentService.list(req)); + IPage page = equipmentService.page(req); + return PageResult.ok(page.getRecords(), page.getTotal()); } @ApiOperation(value = "查询设备信息详情", httpMethod = "GET") diff --git a/web/src/main/java/com/dite/znpt/web/controller/TrainingPlanController.java b/web/src/main/java/com/dite/znpt/web/controller/TrainingPlanController.java new file mode 100644 index 0000000..67892d5 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/TrainingPlanController.java @@ -0,0 +1,79 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.TrainingPlanListReq; +import com.dite.znpt.domain.vo.TrainingPlanReq; +import com.dite.znpt.service.TrainingPlanService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +/** + * @author huise23 + * @date 2025/01/01 00:00 + * @Description: 培训计划控制器 + */ +@Api(tags = "培训..........................................计划管理") +@RestController +@RequestMapping("/training/plan") +public class TrainingPlanController { + + @Resource + private TrainingPlanService trainingPlanService; + + @ApiOperation(value = "分页查询培训计划列表", httpMethod = "GET") + @GetMapping("/page") + public Result page(TrainingPlanListReq req) { + return Result.ok(trainingPlanService.page(req)); + } + + @ApiOperation(value = "查询培训计划列表", httpMethod = "GET") + @GetMapping("/list") + public Result list(TrainingPlanListReq req) { + return Result.ok(trainingPlanService.list(req)); + } + + @ApiOperation(value = "查询培训计划详情", httpMethod = "GET") + @GetMapping("/detail/{planId}") + public Result detail(@PathVariable String planId) { + return Result.ok(trainingPlanService.detail(planId)); + } + + @ApiOperation(value = "新增培训计划", httpMethod = "POST") + @PostMapping + public Result save(@Valid @RequestBody TrainingPlanReq req) { + trainingPlanService.save(req); + return Result.ok(); + } + + @ApiOperation(value = "更新培训计划", httpMethod = "PUT") + @PutMapping("/{planId}") + public Result update(@PathVariable String planId, @Valid @RequestBody TrainingPlanReq req) { + trainingPlanService.update(planId, req); + return Result.ok(); + } + + @ApiOperation(value = "删除培训计划", httpMethod = "DELETE") + @DeleteMapping("/{planId}") + public Result delete(@PathVariable String planId) { + trainingPlanService.deleteById(planId); + return Result.ok(); + } + + @ApiOperation(value = "发布培训计划", httpMethod = "PUT") + @PutMapping("/{planId}/publish") + public Result publish(@PathVariable String planId) { + trainingPlanService.publish(planId); + return Result.ok(); + } + + @ApiOperation(value = "取消培训计划", httpMethod = "PUT") + @PutMapping("/{planId}/cancel") + public Result cancel(@PathVariable String planId) { + trainingPlanService.cancel(planId); + return Result.ok(); + } +} \ No newline at end of file diff --git a/web/src/main/java/com/dite/znpt/web/controller/VideoController.java b/web/src/main/java/com/dite/znpt/web/controller/VideoController.java new file mode 100644 index 0000000..e69de29