diff --git a/core/pom.xml b/core/pom.xml
index 08bc1a5..5c9a597 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -15,7 +15,12 @@
org.springframework.boot
spring-boot-starter-web
-
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+ 1.43.0
+
org.springframework.boot
spring-boot-devtools
diff --git a/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java
index ce50e9b..f93ae4d 100644
--- a/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java
+++ b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java
@@ -1,25 +1,33 @@
package com.dite.znpt.config;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
+
+ @Value(value = "${upload.temp-path.image}")
+ private String uploadTempPath;
+
+ @Value(value = "${upload.perm-path.image}")
+ private String uploadPermPath;
+
/**
* MVC 加载Swagger静态资源
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/**")
- .addResourceLocations("classpath:/static/");
- registry.addResourceHandler("doc.html")
- .addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("/webjars/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/");
- registry.addResourceHandler("/swagger-ui/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
+
+ registry.addResourceHandler("/image/temp/**").addResourceLocations("file:" + uploadTempPath);
+ registry.addResourceHandler("/image/**").addResourceLocations("file:" + uploadPermPath);
+
+ registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
+ registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+ registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+ registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
super.addResourceHandlers(registry);
}
}
\ No newline at end of file
diff --git a/core/src/main/java/com/dite/znpt/domain/Constants.java b/core/src/main/java/com/dite/znpt/constant/Constants.java
similarity index 68%
rename from core/src/main/java/com/dite/znpt/domain/Constants.java
rename to core/src/main/java/com/dite/znpt/constant/Constants.java
index 9e505ae..0cbe777 100644
--- a/core/src/main/java/com/dite/znpt/domain/Constants.java
+++ b/core/src/main/java/com/dite/znpt/constant/Constants.java
@@ -1,4 +1,4 @@
-package com.dite.znpt.domain;
+package com.dite.znpt.constant;
/**
* @description: 常量
@@ -21,4 +21,14 @@ public class Constants {
* 参数异常
*/
public static final String PARAMETER_EXCEPTION = "000003";
+
+ /**
+ * 0:代表存在
+ */
+ public static final String DEL_FLAG_0 = "0";
+
+ /**
+ * 1:代表删除
+ */
+ public static final String DEL_FLAG_1 = "1";
}
diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java
index a14d111..c627199 100644
--- a/core/src/main/java/com/dite/znpt/constant/Message.java
+++ b/core/src/main/java/com/dite/znpt/constant/Message.java
@@ -20,5 +20,5 @@ public class Message implements Serializable {
public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在";
public static final String PART_ID_IS_NOT_EXIST = "部件id不存在";
public static final String IMAGE_SOURCE_ID_NOT_EXIST_OR_ILLEGAL = "部件id不存在";
- public static final String USER_ID_NOT_EXIST = "部件id不存在";
+ public static final String USER_ID_NOT_EXIST = "用户id不存在";
}
diff --git a/core/src/main/java/com/dite/znpt/domain/Result.java b/core/src/main/java/com/dite/znpt/domain/Result.java
index 84e188a..f893e22 100644
--- a/core/src/main/java/com/dite/znpt/domain/Result.java
+++ b/core/src/main/java/com/dite/znpt/domain/Result.java
@@ -1,5 +1,6 @@
package com.dite.znpt.domain;
+import com.dite.znpt.constant.Constants;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
index 95c6f86..4681578 100644
--- a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
+++ b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
@@ -45,6 +45,11 @@ public class UserEntity extends AuditableEntity implements Serializable {
@TableField("password")
private String password;
+ @ExcelProperty("是否默认密码")
+ @ApiModelProperty("是否默认密码")
+ @TableField("is_default_password")
+ private Boolean isDefaultPassword;
+
@ExcelProperty("加密盐")
@ApiModelProperty("加密盐")
@TableField("salt")
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java
index 7357675..e916e96 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/PartReq.java
@@ -1,9 +1,12 @@
package com.dite.znpt.domain.vo;
+import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
import java.io.Serial;
import java.io.Serializable;
@@ -19,24 +22,31 @@ public class PartReq implements Serializable {
@Serial
private static final long serialVersionUID = -585044340118904985L;
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "机组id不能为空")
@ApiModelProperty("机组id")
private String turbineId;
- @ApiModelProperty("名称")
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "部件名称不能为空")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "部件名称长度不能超过50字符")
+ @ApiModelProperty("部件名称")
private String partName;
- @ApiModelProperty("编号")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件编号长度不能超过20字符")
+ @ApiModelProperty("部件编号")
private String partCode;
- @ApiModelProperty("类型,枚举PartTypeEnum")
+ @ApiModelProperty("部件类型,枚举PartTypeEnum")
private String partType;
- @ApiModelProperty("描述")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "部件描述长度不能超过200字符")
+ @ApiModelProperty("部件描述")
private String partDesc;
- @ApiModelProperty("厂商")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件厂商长度不能超过20字符")
+ @ApiModelProperty("部件厂商")
private String PartManufacturer;
- @ApiModelProperty("型号")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "部件型号长度不能超过20字符")
+ @ApiModelProperty("部件型号")
private String PartModel;
}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java
index c7545d4..d311d2d 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java
@@ -34,7 +34,7 @@ public class ProjectListResp implements Serializable {
private String farmName;
@ApiModelProperty("项目状态,枚举:ProjectStatusEnum")
- private String status;
+ private int status;
@ApiModelProperty("项目状态,枚举:ProjectStatusEnum")
private String statusLabel;
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java
index 08f9b63..401ab2b 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java
@@ -1,10 +1,12 @@
package com.dite.znpt.domain.vo;
-import com.alibaba.excel.annotation.ExcelProperty;
+import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
import java.io.Serial;
import java.io.Serializable;
@@ -20,48 +22,57 @@ public class ProjectReq implements Serializable {
@Serial
private static final long serialVersionUID = 740685592879189406L;
- @ExcelProperty("项目名称")
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符")
@ApiModelProperty("项目名称")
private String projectName;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目封面述长度不能超过100字符")
@ApiModelProperty("项目封面")
private String coverUrl;
- @ExcelProperty("风场名称")
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "风场名称不能为空")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "风场名称长度不能超过50字符")
@ApiModelProperty("风场名称")
private String farmName;
- @ExcelProperty("风场地址")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "风场名称长度不能超过100字符")
@ApiModelProperty("风场地址")
private String farmAddress;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "委托单位长度不能超过50字符")
@ApiModelProperty("委托单位")
private String client;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系人长度不能超过20字符")
@ApiModelProperty("委托单位联系人")
private String clientContact;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "委托单位联系电话长度不能超过20字符")
@ApiModelProperty("委托单位联系电话")
private String clientPhone;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符")
@ApiModelProperty("检查单位")
private String inspectionUnit;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系人长度不能超过20字符")
@ApiModelProperty("检查单位联系人")
private String inspectionContact;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "检查单位联系电话长度不能超过20字符")
@ApiModelProperty("检查单位联系电话")
private String inspectionPhone;
- @ExcelProperty("项目规模")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "项目规模长度不能超过20字符")
@ApiModelProperty("项目规模")
private String scale;
- @ExcelProperty("风机型号")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "风机型号不能超过20字符")
@ApiModelProperty("风机型号")
private String turbineModel;
- @ApiModelProperty("施工人员id")
+ @ApiModelProperty(value = "施工人员id", notes = "多个用英文逗号隔开")
private String constructorIds;
@ApiModelProperty("安全员id")
@@ -70,19 +81,20 @@ public class ProjectReq implements Serializable {
@ApiModelProperty("质量员id")
private String qualityOfficerId;
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目经理id不能为空")
@ApiModelProperty("项目经理id")
private String projectManagerId;
@ApiModelProperty("施工组长id")
private String constructionTeamLeaderId;
- @ApiModelProperty("技术方案图片,多个用逗号隔开")
+ @ApiModelProperty(value = "技术方案图片", notes = "多项英文逗号隔开")
private String technicalImage;
@ApiModelProperty("技术方案内容")
private String technicalContent;
- @ApiModelProperty("安全措施图片,多个用逗号隔开")
+ @ApiModelProperty(value = "安全措施图片", notes = "多项英文逗号隔开")
private String safetyImage;
@ApiModelProperty("安全措施内容")
@@ -92,14 +104,14 @@ public class ProjectReq implements Serializable {
private String discloseContent;
@ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收")
- private String status;
+ private int status;
- @ApiModelProperty("项目工作类型 可能有多项,逗号分隔")
+ @ApiModelProperty(value = "项目工作类型", notes = "多项英文逗号隔开")
private String workType;
- @ApiModelProperty("项目工作岗位 可能有多项,json对象保存")
+ @ApiModelProperty(value = "项目工作岗位", notes = "多项英文逗号隔开,json对象保存")
private String job;
- @ApiModelProperty(value = "项目安全风险点", example = "1", notes = "项目安全风险点 可能有多项,逗号分隔")
+ @ApiModelProperty(value = "项目安全风险点", notes = "多项英文逗号隔开")
private String safetyRiskPoint;
}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java b/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java
index 6d3e107..9f3bd7b 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/TurbineReq.java
@@ -2,10 +2,13 @@ package com.dite.znpt.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
+import com.dite.znpt.util.ValidationGroup;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
import java.io.Serial;
import java.io.Serializable;
@@ -21,25 +24,33 @@ public class TurbineReq implements Serializable {
@Serial
private static final long serialVersionUID = 115092978850852080L;
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空")
@ApiModelProperty("项目id")
private String projectId;
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "机组名称不能为空")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "机组名称长度不能超过50字符")
@ApiModelProperty("机组名称")
private String turbineName;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组编码长度不能超过20字符")
@ApiModelProperty("机组编码")
private String turbineCode;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "机组描述长度不能超过200字符")
@ApiModelProperty("机组描述")
private String turbineDesc;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组厂商长度不能超过20字符")
@ApiModelProperty("机组厂商")
private String turbineManufacturer;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "机组型号长度不能超过20字符")
@ApiModelProperty("机组型号")
private String turbineModel;
- @ApiModelProperty("封面图")
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "机组封面图长度不能超过100字符")
+ @ApiModelProperty("机组封面图")
private String turbineCoverUrl;
}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
index 676b341..a8ac046 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
@@ -1,10 +1,12 @@
package com.dite.znpt.domain.vo;
+import com.dite.znpt.util.ValidationGroup;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
@@ -21,31 +23,43 @@ public class UserReq implements Serializable {
@Serial
private static final long serialVersionUID = -5491849652107338027L;
+ @Pattern(groups = {ValidationGroup.Insert.class},regexp = "^[a-zA-Z0-9_]{4,20}$", message = "只能包含字母、数字或下划线,长度4-20")
+ @ApiModelProperty("账号")
+ private String account;
+
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "头像地址长度不能超过100字符")
@ApiModelProperty("头像地址")
private String avatar;
@ApiModelProperty("1正常0禁用")
private Integer status;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "姓名长度不能超过20字符")
@ApiModelProperty("姓名")
private String name;
+ @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp = "^$|\\d(?:\\d{15}|\\d{17})$", message = "身份证号码格式不正确")
@ApiModelProperty("身份证")
private String identityCard;
@ApiModelProperty("性别")
private String gender;
+ @Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp ="^$|1\\d{10}$", message = "手机号码格式不正确")
@ApiModelProperty("手机号码")
private String mobile;
+ @Email(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class})
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "邮箱长度不能超过50字符")
@ApiModelProperty("邮箱")
private String email;
+ @Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "入职日期必须是过去的日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("入职日期")
private LocalDate hiredate;
+ @Past(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "出生日期必须是过去的日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("出生日期")
private LocalDate birthdate;
@@ -53,9 +67,11 @@ public class UserReq implements Serializable {
@ApiModelProperty("学历")
private String education;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "专业长度不能超过20字符")
@ApiModelProperty("专业")
private String majorField;
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 20, message = "工作方向长度不能超过20字符")
@ApiModelProperty("工作方向")
private String workField;
}
diff --git a/core/src/main/java/com/dite/znpt/enums/EducationEnum.java b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
index 16d2684..7e4880a 100644
--- a/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
+++ b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
@@ -13,6 +13,7 @@ import java.util.List;
*/
@Getter
public enum EducationEnum {
+ UNKNOWN("unknown","小学"),
PRIMARY_SCHOOL("primary_school","小学"),
MIDDLE_SCHOOL("middle_school","初中"),
HIGH_SCHOOL(" high_school","高中"),
diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java
index af7fc89..7836468 100644
--- a/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java
+++ b/core/src/main/java/com/dite/znpt/enums/ProjectStatusEnum.java
@@ -15,25 +15,25 @@ import java.util.List;
@Getter
@AllArgsConstructor
public enum ProjectStatusEnum {
- PENDING("PENDING","待施工", 0),
- IN_PROGRESS("IN_PROGRESS","施工中", 1),
- COMPLETED("COMPLETED","已完工", 2),
- AUDITED("AUDITED","已审核", 3),
- ACCEPTED("ACCEPTED","已验收", 4);
- private final String code;
- private final String desc;
- private final int intValue;
+ PENDING(0, "待施工"),
+ IN_PROGRESS(1, "施工中"),
+ COMPLETED(2, "已完工"),
+ AUDITED(3, "已审核"),
+ ACCEPTED(4, "已验收");
- public static ProjectStatusEnum getByCode(String code){
+ private final int code;
+ private final String desc;
+
+ public static ProjectStatusEnum getByCode(int code){
for (ProjectStatusEnum e : ProjectStatusEnum.values() ) {
- if(e.code.equals(code)){
+ if(e.code == code){
return e;
}
}
return null;
}
- public static String getDescByCode(String code){
+ public static String getDescByCode(int code){
ProjectStatusEnum e = getByCode(code);
return null == e ? null : e.desc;
}
@@ -42,7 +42,7 @@ public enum ProjectStatusEnum {
List list = new ArrayList<>(ProjectStatusEnum.values().length);
for (ProjectStatusEnum e : ProjectStatusEnum.values() ) {
JSONObject jsonObject = new JSONObject();
- jsonObject.set(e.code, e.desc);
+ jsonObject.set(String.valueOf(e.code), e.desc);
list.add(jsonObject);
}
return list;
diff --git a/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java b/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java
index c67a97c..80d5dfa 100644
--- a/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java
+++ b/core/src/main/java/com/dite/znpt/exception/RestResponseEntityExceptionHandler.java
@@ -1,6 +1,6 @@
package com.dite.znpt.exception;
-import com.dite.znpt.domain.Constants;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/core/src/main/java/com/dite/znpt/service/UserService.java b/core/src/main/java/com/dite/znpt/service/UserService.java
index eb0861b..85f83dc 100644
--- a/core/src/main/java/com/dite/znpt/service/UserService.java
+++ b/core/src/main/java/com/dite/znpt/service/UserService.java
@@ -51,7 +51,7 @@ public interface UserService extends IService {
* @author huise23
* @date 2025/04/11 23:17
**/
- void save(UserReq req);
+ String save(UserReq req);
/**
* 功能描述:更新用户信息
diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
index 9f8f85c..1c0fe42 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
@@ -31,7 +31,7 @@ import java.util.List;
@Service
public class ImageCollectServiceImpl extends ServiceImpl implements ImageCollectService {
- @Value("${upload.perm-path}")
+ @Value("${upload.perm-path.image}")
private String permPath;
@Resource
@@ -52,7 +52,7 @@ public class ImageCollectServiceImpl extends ServiceImpl imageList = Converts.INSTANCE.toImageEntity(req.getImageList());
- String path_prefix = permPath.concat(StrUtil.BACKSLASH).concat(ImageSourceEnum.COLLECT.getCode()).concat(StrUtil.BACKSLASH).concat(partId).concat(StrUtil.BACKSLASH);
+ String path_prefix = permPath.concat(FileUtil.FILE_SEPARATOR).concat(ImageSourceEnum.COLLECT.getCode()).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR);
imageList.stream().forEach(image -> {
image.setPartId(partId);
image.setCollectId(imageCollect.getCollectId());
diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
index c3ad777..bf6ca6f 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
@@ -10,7 +10,10 @@ import com.dite.znpt.constant.Message;
import com.dite.znpt.domain.entity.ImageEntity;
import com.dite.znpt.domain.entity.PartEntity;
import com.dite.znpt.domain.vo.*;
-import com.dite.znpt.enums.*;
+import com.dite.znpt.enums.ImageSourceEnum;
+import com.dite.znpt.enums.ImageTypeEnum;
+import com.dite.znpt.enums.ShootingMethodEnum;
+import com.dite.znpt.enums.WeatherEnum;
import com.dite.znpt.exception.ServiceException;
import com.dite.znpt.mapper.ImageMapper;
import com.dite.znpt.service.ImageCollectService;
@@ -54,10 +57,10 @@ public class ImageServiceImpl extends ServiceImpl impl
@Resource
private PartService partService;
- @Value("${upload.temp-path}")
+ @Value("${upload.temp-path.image}")
private String tempPath;
- @Value("${upload.perm-path}")
+ @Value("${upload.perm-path.image}")
private String permPath;
@Override
public List list(ImageListReq req) {
@@ -83,8 +86,8 @@ public class ImageServiceImpl extends ServiceImpl impl
Map partIdMap= partService.listByIds(partIds).stream().collect(Collectors.toMap(PartEntity::getPartId, Function.identity()));
list.stream().forEach(req -> {
if(partIdMap.containsKey(req.getPartId())){
- String path_prefix = permPath.concat(FileUtil.FILE_SEPARATOR).concat(req.getImageSource()).concat(FileUtil.FILE_SEPARATOR).concat(req.getPartId()).concat(FileUtil.FILE_SEPARATOR);
- String temp_path_prefix = tempPath.concat(FileUtil.FILE_SEPARATOR).concat(req.getImageSource()).concat(FileUtil.FILE_SEPARATOR).concat(req.getPartId()).concat(FileUtil.FILE_SEPARATOR);
+ String path_prefix = permPath.concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH);
+ String temp_path_prefix = tempPath.concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH);
File file = new File(req.getImagePath());
if(file.exists() && req.getImagePath().contains(temp_path_prefix)){
ImageEntity entity = new ImageEntity();
@@ -123,7 +126,12 @@ public class ImageServiceImpl extends ServiceImpl impl
throw new ServiceException(Message.IMAGE_IS_EMPTY);
}
List list = new ArrayList<>(files.length);
- String path_prefix = tempPath.concat(FileUtil.FILE_SEPARATOR).concat(imageSource).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR);
+ File temCategory = new File(tempPath);
+ if (!temCategory.exists()) {
+ // 创建完整的目录
+ temCategory.mkdirs();
+ }
+ String path_prefix = tempPath.concat(StrUtil.BACKSLASH).concat(imageSource).concat(StrUtil.BACKSLASH).concat(partId).concat(StrUtil.BACKSLASH);
for (MultipartFile file : files) {
if (!file.isEmpty()) {
try {
@@ -189,7 +197,7 @@ public class ImageServiceImpl extends ServiceImpl impl
req.setCameraManufacturer(obj.getStr("Make"));
req.setCameraModel(obj.getStr("Model"));
req.setImageName(obj.getStr("File Name"));
- req.setImagePath(path);
+ req.setImagePath(StrUtil.removePrefix(path, tempPath));
BigDecimal imageSize = new BigDecimal(extractDigit(obj.getStr("File Size"))).divide(new BigDecimal(1024*1024), 4, RoundingMode.HALF_UP);
req.setImageSize(imageSize.toString().concat("M"));
req.setImageWidth(extractDigit(obj.getStr("Image Width")));
@@ -200,15 +208,19 @@ public class ImageServiceImpl extends ServiceImpl impl
req.setYResolution(extractDigit(obj.getStr("Y Resolution")));
req.setResolutionUnits(obj.getStr("Resolution Units"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");
- req.setShootingTime(LocalDateTime.parse( obj.getStr("Date/Time Original"),formatter));
+ if(StrUtil.isNotBlank(obj.getStr("Date/Time Original"))){
+ req.setShootingTime(LocalDateTime.parse(obj.getStr("Date/Time Original"), formatter));
+ }
req.setFocalDistance(extractDigit(obj.getStr("Focal Length")));
req.setLatitude(obj.getStr("GPS Latitude"));
req.setLongitude(obj.getStr("GPS Longitude"));
req.setAltitude(extractDigit(obj.getStr("GPS Altitude")));
- String gps = req.getLatitude().concat("°").concat(directionTranslator(obj.getStr("GPS Latitude Ref"))).concat(StrUtil.COMMA)
- .concat(req.getLongitude()).concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref"))).concat(StrUtil.COMMA)
- .concat("海拔").concat(req.getAltitude()).concat("m");
- req.setGPS(gps);
+ if(StrUtil.isNotBlank(req.getLatitude()) && StrUtil.isNotBlank(req.getLongitude()) && StrUtil.isNotBlank(req.getAltitude())){
+ String gps = req.getLatitude().concat("°").concat(directionTranslator(obj.getStr("GPS Latitude Ref"))).concat(StrUtil.COMMA)
+ .concat(req.getLongitude()).concat("°").concat(directionTranslator(obj.getStr("GPS Longitude Ref"))).concat(StrUtil.COMMA)
+ .concat("海拔").concat(req.getAltitude()).concat("m");
+ req.setGPS(gps);
+ }
return req;
}
@@ -227,6 +239,9 @@ public class ImageServiceImpl extends ServiceImpl impl
}
private static String extractDigit(String str) {
+ if(StrUtil.isEmpty(str)){
+ return null;
+ }
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
diff --git a/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java
index 1703b13..d5647af 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/TurbineServiceImpl.java
@@ -201,7 +201,7 @@ public class TurbineServiceImpl extends ServiceImpl turbineStatusList = jobService.calCrewStatus(ListUtil.of(turbineId));
@@ -223,19 +223,19 @@ public class TurbineServiceImpl extends ServiceImpl statusList = this.lambdaQuery().eq(TurbineEntity::getProjectId, projectId).list()
.stream().map(TurbineEntity::getStatus).toList();
// 有施工中,则是施工中
- if (statusList.contains(ProjectStatusEnum.IN_PROGRESS.getIntValue())) {
- status = ProjectStatusEnum.IN_PROGRESS.getIntValue();
+ if (statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) {
+ status = ProjectStatusEnum.IN_PROGRESS.getCode();
}
// 如果机组列表没有状态为 待施工、施工中 的则项目 完工
- if (!statusList.contains(ProjectStatusEnum.PENDING.getIntValue()) &&
- !statusList.contains(ProjectStatusEnum.IN_PROGRESS.getIntValue())) {
- status = ProjectStatusEnum.COMPLETED.getIntValue();
+ if (!statusList.contains(ProjectStatusEnum.PENDING.getCode()) &&
+ !statusList.contains(ProjectStatusEnum.IN_PROGRESS.getCode())) {
+ status = ProjectStatusEnum.COMPLETED.getCode();
// 如果机组列表没有状态为 待施工、施工中、已完工 的则项目 已审核
- if (!statusList.contains(ProjectStatusEnum.COMPLETED.getIntValue())) {
- status = ProjectStatusEnum.AUDITED.getIntValue();
+ if (!statusList.contains(ProjectStatusEnum.COMPLETED.getCode())) {
+ status = ProjectStatusEnum.AUDITED.getCode();
// 如果机组列表没有状态为 待施工、施工中、已完工、已审核 的则项目 已验收
- if (!statusList.contains(ProjectStatusEnum.AUDITED.getIntValue())) {
- status = ProjectStatusEnum.ACCEPTED.getIntValue();
+ if (!statusList.contains(ProjectStatusEnum.AUDITED.getCode())) {
+ status = ProjectStatusEnum.ACCEPTED.getCode();
}
}
}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
index b86fa7f..09f39e5 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
@@ -1,6 +1,11 @@
package com.dite.znpt.service.impl;
+import cn.dev33.satoken.secure.SaBase64Util;
+import cn.dev33.satoken.secure.SaSecureUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.constant.Message;
import com.dite.znpt.converts.Converts;
import com.dite.znpt.domain.entity.UserEntity;
@@ -11,6 +16,8 @@ import com.dite.znpt.enums.EducationEnum;
import com.dite.znpt.exception.ServiceException;
import com.dite.znpt.service.UserService;
import com.dite.znpt.mapper.UserMapper;
+import com.dite.znpt.util.PasswordUtil;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import com.dite.znpt.util.PageUtil;
@@ -27,6 +34,12 @@ import java.util.List;
@RequiredArgsConstructor
public class UserServiceImpl extends ServiceImpl implements UserService {
+ @Value("${password.default-value:Ai3m@123}")
+ private String defaultPassword;
+
+ @Value("${password.enable-default:true}")
+ private Boolean enableDefaultPassword;
+
/**
* 功能描述:分页查询用户信息列表
*
@@ -82,9 +95,14 @@ public class UserServiceImpl extends ServiceImpl impleme
**/
@Transactional(rollbackFor = Exception.class)
@Override
- public void save(UserReq req) {
+ public String save(UserReq req) {
UserEntity entity = Converts.INSTANCE.toUserEntity(req);
+ String salt = RandomUtil.randomString(req.getAccount(), 4);
+ entity.setSalt(salt);
+ String password = enableDefaultPassword ? defaultPassword : PasswordUtil.generatePassword();
+ entity.setPassword(SaSecureUtil.md5(req.getAccount().concat(password).concat(salt)));
this.save(entity);
+ return SaBase64Util.encode(password);
}
/**
@@ -103,6 +121,7 @@ public class UserServiceImpl extends ServiceImpl impleme
}
UserEntity entity = Converts.INSTANCE.toUserEntity(req);
entity.setUserId(userId);
+ entity.setAccount(null);
this.updateById(entity);
}
@@ -116,10 +135,12 @@ public class UserServiceImpl extends ServiceImpl impleme
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(String userId) {
- if(null == this.getById(userId)){
+ UserEntity entity = this.getById(userId);
+ if(null == entity){
throw new ServiceException(Message.USER_ID_NOT_EXIST);
}
- this.removeById(userId);
+ entity.setDelFlag(Constants.DEL_FLAG_1);
+ this.updateById(entity);
}
diff --git a/core/src/main/java/com/dite/znpt/util/PasswordUtil.java b/core/src/main/java/com/dite/znpt/util/PasswordUtil.java
index 85d9dfe..349ab84 100644
--- a/core/src/main/java/com/dite/znpt/util/PasswordUtil.java
+++ b/core/src/main/java/com/dite/znpt/util/PasswordUtil.java
@@ -3,6 +3,12 @@ package com.dite.znpt.util;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
+import java.security.SecureRandom;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+
public class PasswordUtil {
private static final PasswordEncoder encoder = new BCryptPasswordEncoder();
@@ -13,4 +19,48 @@ public class PasswordUtil {
public static boolean matches(String rawPassword, String encodedPassword) {
return encoder.matches(rawPassword, encodedPassword);
}
+
+ // 字符集定义
+ private static final String UPPER_CASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ private static final String LOWER_CASE = "abcdefghijklmnopqrstuvwxyz";
+ private static final String SPECIAL_CHARACTERS = "!@#$%^&*()-_=+[]{}|;:'\",.<>/?";
+ private static final String DIGITS = "0123456789";
+
+ // 安全随机数生成器
+ private static final Random RANDOM = new SecureRandom();
+
+ /**
+ * 生成随机密码
+ * @return 符合要求的随机密码
+ */
+ public static String generatePassword() {
+ // 确保密码包含至少一个大写字母、一个小写字母和一个特殊字符
+ List passwordChars = new ArrayList<>();
+
+ // 1. 添加至少一个大写字母
+ passwordChars.add(UPPER_CASE.charAt(RANDOM.nextInt(UPPER_CASE.length())));
+
+ // 2. 添加至少一个小写字母
+ passwordChars.add(LOWER_CASE.charAt(RANDOM.nextInt(LOWER_CASE.length())));
+
+ // 3. 添加至少一个特殊字符
+ passwordChars.add(SPECIAL_CHARACTERS.charAt(RANDOM.nextInt(SPECIAL_CHARACTERS.length())));
+
+ // 4. 生成剩余字符(8位密码已添加3位,还需5位)
+ String allChars = UPPER_CASE + LOWER_CASE + SPECIAL_CHARACTERS + DIGITS;
+ for (int i = 0; i < 5; i++) {
+ passwordChars.add(allChars.charAt(RANDOM.nextInt(allChars.length())));
+ }
+
+ // 5. 打乱字符顺序
+ Collections.shuffle(passwordChars, RANDOM);
+
+ // 6. 转换为字符串
+ StringBuilder password = new StringBuilder();
+ for (Character c : passwordChars) {
+ password.append(c);
+ }
+
+ return password.toString();
+ }
}
diff --git a/core/src/main/java/com/dite/znpt/util/ValidationGroup.java b/core/src/main/java/com/dite/znpt/util/ValidationGroup.java
new file mode 100644
index 0000000..a099028
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/util/ValidationGroup.java
@@ -0,0 +1,14 @@
+package com.dite.znpt.util;
+
+import lombok.Data;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/19/周一 15:09
+ * @description
+ */
+
+public interface ValidationGroup {
+ interface Insert {} // 增
+ interface Update {} // 改
+}
diff --git a/web/src/main/java/com/dite/znpt/web/controller/CombinedDictController.java b/web/src/main/java/com/dite/znpt/web/controller/CombinedDictController.java
index ce423da..cccf827 100644
--- a/web/src/main/java/com/dite/znpt/web/controller/CombinedDictController.java
+++ b/web/src/main/java/com/dite/znpt/web/controller/CombinedDictController.java
@@ -1,7 +1,7 @@
package com.dite.znpt.web.controller;
-import com.dite.znpt.domain.Constants;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.CombinedDictListReq;
import com.dite.znpt.domain.vo.CombinedDictResp;
import com.dite.znpt.domain.entity.CombinedDictEntity;
diff --git a/web/src/main/java/com/dite/znpt/web/controller/DefectController.java b/web/src/main/java/com/dite/znpt/web/controller/DefectController.java
index 67e5c19..8dfc7de 100644
--- a/web/src/main/java/com/dite/znpt/web/controller/DefectController.java
+++ b/web/src/main/java/com/dite/znpt/web/controller/DefectController.java
@@ -1,7 +1,7 @@
package com.dite.znpt.web.controller;
-import com.dite.znpt.domain.Constants;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.DefectListReq;
import com.dite.znpt.domain.vo.DefectReq;
import com.dite.znpt.domain.vo.DefectResp;
diff --git a/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java
index fa40594..68666a5 100644
--- a/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java
+++ b/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java
@@ -1,7 +1,7 @@
package com.dite.znpt.web.controller;
-import com.dite.znpt.domain.Constants;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.FileInfoListReq;
import com.dite.znpt.domain.vo.FileInfoResp;
import com.dite.znpt.domain.entity.FileInfoEntity;
diff --git a/web/src/main/java/com/dite/znpt/web/controller/ImageController.java b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java
index baf14af..e6eda67 100644
--- a/web/src/main/java/com/dite/znpt/web/controller/ImageController.java
+++ b/web/src/main/java/com/dite/znpt/web/controller/ImageController.java
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
+import java.util.Arrays;
import java.util.List;
/**
diff --git a/web/src/main/java/com/dite/znpt/web/controller/LoginController.java b/web/src/main/java/com/dite/znpt/web/controller/LoginController.java
new file mode 100644
index 0000000..b0c9d7e
--- /dev/null
+++ b/web/src/main/java/com/dite/znpt/web/controller/LoginController.java
@@ -0,0 +1,15 @@
+package com.dite.znpt.web.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/19/周一 14:32
+ * @description
+ */
+@Api(tags = "登录")
+@RestController
+public class LoginController {
+}
diff --git a/web/src/main/java/com/dite/znpt/web/controller/PartController.java b/web/src/main/java/com/dite/znpt/web/controller/PartController.java
index f9586f6..d1ff22a 100644
--- a/web/src/main/java/com/dite/znpt/web/controller/PartController.java
+++ b/web/src/main/java/com/dite/znpt/web/controller/PartController.java
@@ -1,7 +1,7 @@
package com.dite.znpt.web.controller;
-import com.dite.znpt.domain.Constants;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.PartListReq;
import com.dite.znpt.domain.vo.PartListResp;
import com.dite.znpt.domain.vo.PartReq;
@@ -10,12 +10,14 @@ import com.dite.znpt.domain.entity.PartEntity;
import com.dite.znpt.service.PartService;
import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.PageResult;
+import com.dite.znpt.util.ValidationGroup;
import com.pig4cloud.plugin.excel.annotation.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -32,39 +34,39 @@ public class PartController {
@Resource
private PartService partService;
- @ApiOperation(value = "分页获取部件列表", httpMethod = "GET")
+ @ApiOperation(value = "分页查询部件信息列表", httpMethod = "GET")
@GetMapping("/page")
public PageResult page(PartListReq partReq) {
return PageResult.ok(partService.page(partReq));
}
- @ApiOperation(value = "获取部件列表", httpMethod = "GET")
+ @ApiOperation(value = "查询部件信息列表", httpMethod = "GET")
@GetMapping("/list")
public Result> list(PartListReq partReq) {
return Result.ok(partService.list(partReq));
}
- @ApiOperation(value = "根据Id获取详细信息", httpMethod = "GET")
+ @ApiOperation(value = "查询部件信息详情", httpMethod = "GET")
@GetMapping("/detail/{partId}")
public Result detail(@PathVariable String partId) {
return Result.ok(partService.detail(partId));
}
- @ApiOperation(value = "新增", httpMethod = "POST")
+ @ApiOperation(value = "新增部件信息", httpMethod = "POST")
@PostMapping
- public Result